[grisbi-cvs] [SCM] grisbi branch, master, updated. 4387b1ef81cfc6555b3358d3c180151b0bbff8f0
Rémi Cardona
nobody at users.sourceforge.net
Mon Jun 21 08:37:46 CEST 2010
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "grisbi".
The branch, master has been updated
via 4387b1ef81cfc6555b3358d3c180151b0bbff8f0 (commit)
via 676ce8bd25ade5633a1d03983ae8d647af2ccc2f (commit)
via 8c1eff27f7ed8d354398b7a697064e1611d4849b (commit)
via 81d029f0776bb92a45db414ea7d0d54cfd97f7b5 (commit)
via e212bdc5a3697c45b553b9b01d76cce1d1c95d4c (commit)
via 2fada23886469c990ad6da8ed5b7abce47430644 (commit)
via 2d64a7d239efb8920f44431088954f2b8c50d964 (commit)
via 44da3e45bd148253834482c06d3c63317d6f41c9 (commit)
via e254c35be119501b479796d1ee8a995015596919 (commit)
via fd8afc90e7c148befde199116e6c0e4397a04589 (commit)
via dddda1f154dcb5e71a31ec1e0c0202a1ffa9558b (commit)
via 51e3ab4b5a3b70e5eca789782ae11e1089a29051 (commit)
via 374ac597acc674804d4ad627249ad8bb9379b05e (commit)
via 04bcdeca83818a23d300708c5cd22787e40689c0 (commit)
via 94f947436fc11384868f46d94fafa46d30ff0d5d (commit)
via b71ad9f26f0cc8359694fff93af513cc18c43304 (commit)
via f6b1f128d3d20d30e270aac06dbd0a536f82532e (commit)
via 042c864eb343ed187209c3fcb10714b2e818d1c4 (commit)
via 58a7e35fbb2307ee75ab1c1567dde32451ccf2dc (commit)
via aa269515df9f124a648e5e87a7854eff6fca5615 (commit)
via dd72a915c7bc4422c28ee18fc6f95416398fc79a (commit)
via 8e1165a50fdf2b4ef997ffe6bb1fe1d08e3b3513 (commit)
via a7a04359281e05758b10fa1a704c38c88695a7c6 (commit)
via 941018f10e82ac750c1de96e62066f8c7a8d5b82 (commit)
via dfee098de8c52a0ff4937c560631117abf84ba57 (commit)
via d7d4ba9a497f0d4c674573f020fb6ae33d54668d (commit)
via 3fe2743bb26ca079a75065bd9a001bb766ecad14 (commit)
via f99073181edb6916a9eaaeb22d41a5c071e66993 (commit)
via 88a179fb860475a76baa621280e60ec66b93c833 (commit)
via cfaa738445b1c5cd3dba56d02202f2f6cb0e7ce9 (commit)
from 8cd5fc72dcc95e831ec10b285f01b7b2e1871d35 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 4387b1ef81cfc6555b3358d3c180151b0bbff8f0
Author: Rémi Cardona <remi at gentoo.org>
Date: Mon Jun 21 00:09:52 2010 +0200
po: spelling mistake in French translation
commit 676ce8bd25ade5633a1d03983ae8d647af2ccc2f
Author: Rémi Cardona <remi at gentoo.org>
Date: Tue Jun 1 08:52:37 2010 +0200
Use g_strerror instead of strerror/latin2utf8
commit 8c1eff27f7ed8d354398b7a697064e1611d4849b
Author: Rémi Cardona <remi at gentoo.org>
Date: Fri Jun 18 00:45:17 2010 +0200
build: define $(plugindir) in configure.in
commit 81d029f0776bb92a45db414ea7d0d54cfd97f7b5
Author: Rémi Cardona <remi at gentoo.org>
Date: Sun May 30 23:42:59 2010 +0200
build: add a configure switch for the openssl plugin
Clean up the plugin's Makefile.am in the process.
commit e212bdc5a3697c45b553b9b01d76cce1d1c95d4c
Author: Rémi Cardona <remi at gentoo.org>
Date: Sat May 29 11:07:47 2010 +0200
build: add a configure switch for the gnucash/libxml2 plugin
Clean up the plugin's Makefile.am in the process.
commit 2fada23886469c990ad6da8ed5b7abce47430644
Author: Rémi Cardona <remi at gentoo.org>
Date: Sun May 30 23:55:32 2010 +0200
build: stop mucking around with CFLAGS and LDFLAGS in configure.in
Use AC_DEFINE to enable/disable code paths and use proper AC_SUBST'ed
variables to pass flags on to Makefiles.
commit 2d64a7d239efb8920f44431088954f2b8c50d964
Author: Rémi Cardona <remi at gentoo.org>
Date: Fri May 28 00:10:49 2010 +0200
build: use up-to-date autoconf macros, reorganize them
commit 44da3e45bd148253834482c06d3c63317d6f41c9
Author: Rémi Cardona <remi at gentoo.org>
Date: Thu May 27 23:14:38 2010 +0200
build: use libtool to build libgrisbi, drop -Wl,-E hacks
commit e254c35be119501b479796d1ee8a995015596919
Author: Rémi Cardona <remi at gentoo.org>
Date: Thu May 27 23:03:26 2010 +0200
build: disable "maintainer mode"
This option is considered useless and potentially dangerous. With this,
a Makefile won't get automatically regenerated if the corresponding
Makefile.am is modified.
The Automake Manual recommends dropping this macro :
http://www.gnu.org/software/automake/manual/automake.html#maintainer_002dmode
commit fd8afc90e7c148befde199116e6c0e4397a04589
Author: Rémi Cardona <remi at gentoo.org>
Date: Thu May 27 01:25:40 2010 +0200
build: use pkg-config to find libofx
commit dddda1f154dcb5e71a31ec1e0c0202a1ffa9558b
Author: Rémi Cardona <remi at gentoo.org>
Date: Sat May 29 12:12:26 2010 +0200
build: clean up gmodule support
commit 51e3ab4b5a3b70e5eca789782ae11e1089a29051
Author: Rémi Cardona <remi at gentoo.org>
Date: Thu May 27 00:30:40 2010 +0200
build: drop build-time efence support
One can use LD_PRELOAD environment variable or the "ef" command. Either way,
it's useless to add explicit support for it in configure.in.
commit 374ac597acc674804d4ad627249ad8bb9379b05e
Author: Rémi Cardona <remi at gentoo.org>
Date: Thu May 27 00:01:53 2010 +0200
build: use autoconf's $(docdir) instead of $(datadir)/doc/grisbi
commit 04bcdeca83818a23d300708c5cd22787e40689c0
Author: Rémi Cardona <remi at gentoo.org>
Date: Wed May 26 23:37:26 2010 +0200
build: various small clean-ups
- "localedir" is set by autoconf, no need to redeclare it
- "includedir" is where headers will be installed to, not read from
- "-Wall" shouldn't be set in a Makefile
commit 94f947436fc11384868f46d94fafa46d30ff0d5d
Author: Rémi Cardona <remi at gentoo.org>
Date: Wed May 26 23:20:20 2010 +0200
build: simple clean ups, zero change in behavior
- delete unused variables "config_dir", "include_config" and "source_config"
- delete mis-used *_INCLUDES variables
- merge everything back into libgrisbi_a_SOURCES and grisbi_SOURCES
As for configure.in, PKG_CHECK_MODULES already calls AC_SUBST, no need to
do it again.
commit b71ad9f26f0cc8359694fff93af513cc18c43304
Author: Rémi Cardona <remi at gentoo.org>
Date: Wed May 26 08:24:41 2010 +0200
build: remove useless .desktop files.
The one located in share/grisbi.desktop is more than enough.
commit f6b1f128d3d20d30e270aac06dbd0a536f82532e
Author: Rémi Cardona <remi at gentoo.org>
Date: Mon May 17 01:46:03 2010 +0200
tips: delete old tips file and translations
commit 042c864eb343ed187209c3fcb10714b2e818d1c4
Author: Rémi Cardona <remi at gentoo.org>
Date: Sun Jun 20 23:16:45 2010 +0200
po: update Spanish translation (tips and .desktop)
commit 58a7e35fbb2307ee75ab1c1567dde32451ccf2dc
Author: Rémi Cardona <remi at gentoo.org>
Date: Sun Jun 20 23:08:41 2010 +0200
po: update German translation (tips and .desktop)
commit aa269515df9f124a648e5e87a7854eff6fca5615
Author: Rémi Cardona <remi at gentoo.org>
Date: Sun Jun 20 22:55:49 2010 +0200
po: update French translation (tips and .desktop)
commit dd72a915c7bc4422c28ee18fc6f95416398fc79a
Author: Rémi Cardona <remi at gentoo.org>
Date: Mon May 17 01:36:15 2010 +0200
tips: display tips from the C code instead of loading the external tips file
This patch achieves 2 goals:
- drop ugly and potentially dangerous code (string handling is hard)
- merge back tips' translations with the rest of Grisbi's translations
NB: last_tip which is saved in the config file is now a zero-based index.
commit 8e1165a50fdf2b4ef997ffe6bb1fe1d08e3b3513
Author: Rémi Cardona <remi at gentoo.org>
Date: Mon May 17 00:37:44 2010 +0200
tips: copy tips content to a static C array
commit a7a04359281e05758b10fa1a704c38c88695a7c6
Author: Rémi Cardona <remi at gentoo.org>
Date: Mon May 17 00:00:10 2010 +0200
tips: Save the widgets being added to the dialog to avoid useless list look ups
This makes change_button_sensitiveness() completely useless, so let's drop
it in the process as well.
commit 941018f10e82ac750c1de96e62066f8c7a8d5b82
Author: Rémi Cardona <remi at gentoo.org>
Date: Tue May 4 09:15:14 2010 +0200
Use the <glib/gi18n.h> header instead of writing our gettext macros
commit dfee098de8c52a0ff4937c560631117abf84ba57
Author: Rémi Cardona <remi at gentoo.org>
Date: Tue May 25 23:03:04 2010 +0200
Improve grisbi.desktop and use intltool to translate it
commit d7d4ba9a497f0d4c674573f020fb6ae33d54668d
Author: Rémi Cardona <remi at gentoo.org>
Date: Tue May 25 23:52:41 2010 +0200
build: delete unused macros/
All the macros are automatically concatenated into aclocal.m4 when
"aclocal" is called.
commit 3fe2743bb26ca079a75065bd9a001bb766ecad14
Author: Rémi Cardona <remi at gentoo.org>
Date: Wed May 5 23:41:04 2010 +0200
build: delete config.rpath from version control
This file was generated by gettextize and used by gettext's autoconf
macros. Now that we're using intltool's macros, this file is useless.
commit f99073181edb6916a9eaaeb22d41a5c071e66993
Author: Rémi Cardona <remi at gentoo.org>
Date: Fri May 14 08:49:33 2010 +0200
build: delete unused copy of libintl
commit 88a179fb860475a76baa621280e60ec66b93c833
Author: Rémi Cardona <remi at gentoo.org>
Date: Tue May 4 09:13:58 2010 +0200
build: use intltool instead of gettext, don't ship/build the now useless copy of libintl
commit cfaa738445b1c5cd3dba56d02202f2f6cb0e7ce9
Author: Rémi Cardona <remi at gentoo.org>
Date: Tue Feb 23 23:43:13 2010 +0100
build: use autoreconf instead of individual auto* tools
autoreconf runs all the tools in the right order and picks up options from
configure.in and Makefile.am automatically. It just does the Right Thing.
-----------------------------------------------------------------------
Changes:
diff --git a/Makefile.am b/Makefile.am
index 3551c1b..ba9485c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to produce Makefile.in
-SUBDIRS = macros src po intl pixmaps help share
+SUBDIRS = src po pixmaps help share
man_MANS = grisbi.1
EXTRA_DIST = \
@@ -10,4 +10,4 @@ EXTRA_DIST = \
$(man_MANS)
-ACLOCAL_AMFLAGS = -I macros
+ACLOCAL_AMFLAGS = -I m4
diff --git a/autogen.sh b/autogen.sh
index d3ff3af..3cd5195 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -71,14 +71,11 @@ _EOF_
;;
esac
-LTARGS=" --copy --force"
-$LIBTOOLIZE $LTARGS
+$LIBTOOLIZE --force --copy
+intltoolize --force --copy --automake
-aclocal -I macros
-autoheader
-automake --verbose --foreign --add-missing
-autoconf
+autoreconf --verbose --force --install
#
# Check if the configure script is created
diff --git a/config.rpath b/config.rpath
deleted file mode 100755
index c492a93..0000000
--- a/config.rpath
+++ /dev/null
@@ -1,614 +0,0 @@
-#! /bin/sh
-# Output a system dependent set of variables, describing how to set the
-# run time search path of shared libraries in an executable.
-#
-# Copyright 1996-2006 Free Software Foundation, Inc.
-# Taken from GNU libtool, 2001
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# The first argument passed to this file is the canonical host specification,
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
-# should be set by the caller.
-#
-# The set of defined variables is at the end of this script.
-
-# Known limitations:
-# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
-# than 256 bytes, otherwise the compiler driver will dump core. The only
-# known workaround is to choose shorter directory names for the build
-# directory and/or the installation directory.
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-shrext=.so
-
-host="$1"
-host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-# Code taken from libtool.m4's _LT_CC_BASENAME.
-
-for cc_temp in $CC""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
-
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
-
-wl=
-if test "$GCC" = yes; then
- wl='-Wl,'
-else
- case "$host_os" in
- aix*)
- wl='-Wl,'
- ;;
- darwin*)
- case $cc_basename in
- xlc*)
- wl='-Wl,'
- ;;
- esac
- ;;
- mingw* | pw32* | os2*)
- ;;
- hpux9* | hpux10* | hpux11*)
- wl='-Wl,'
- ;;
- irix5* | irix6* | nonstopux*)
- wl='-Wl,'
- ;;
- newsos6)
- ;;
- linux*)
- case $cc_basename in
- icc* | ecc*)
- wl='-Wl,'
- ;;
- pgcc | pgf77 | pgf90)
- wl='-Wl,'
- ;;
- ccc*)
- wl='-Wl,'
- ;;
- como)
- wl='-lopt='
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- wl='-Wl,'
- ;;
- esac
- ;;
- esac
- ;;
- osf3* | osf4* | osf5*)
- wl='-Wl,'
- ;;
- sco3.2v5*)
- ;;
- solaris*)
- wl='-Wl,'
- ;;
- sunos4*)
- wl='-Qoption ld '
- ;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- wl='-Wl,'
- ;;
- sysv4*MP*)
- ;;
- unicos*)
- wl='-Wl,'
- ;;
- uts4*)
- ;;
- esac
-fi
-
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
-
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-
-case "$host_os" in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- # Unlike libtool, we use -rpath here, not --rpath, since the documented
- # option of GNU ld is called -rpath, not --rpath.
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- case "$host_os" in
- aix3* | aix4* | aix5*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs=no
- fi
- ;;
- amigaos*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we cannot use
- # them.
- ld_shlibs=no
- ;;
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- cygwin* | mingw* | pw32*)
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- interix3*)
- hardcode_direct=no
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- netbsd*)
- ;;
- solaris*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs=no
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- else
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
- sunos4*)
- hardcode_direct=yes
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
- esac
- if test "$ld_shlibs" = no; then
- hardcode_libdir_flag_spec=
- fi
-else
- case "$host_os" in
- aix3*)
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$GCC" = yes; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
- aix4* | aix5*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- else
- aix_use_runtimelinking=no
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix5*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
- fi
- hardcode_direct=yes
- hardcode_libdir_separator=':'
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct=yes
- else
- # We have old collect2
- hardcode_direct=unsupported
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- ;;
- esac
- fi
- # Begin _LT_AC_SYS_LIBPATH_AIX.
- echo 'int main () { return 0; }' > conftest.c
- ${CC} ${LDFLAGS} conftest.c -o conftest
- aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
- if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
- fi
- if test -z "$aix_libpath"; then
- aix_libpath="/usr/lib:/lib"
- fi
- rm -f conftest.c conftest
- # End _LT_AC_SYS_LIBPATH_AIX.
- if test "$aix_use_runtimelinking" = yes; then
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- else
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- fi
- fi
- ;;
- amigaos*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs=no
- ;;
- bsdi[45]*)
- ;;
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- libext=lib
- ;;
- darwin* | rhapsody*)
- hardcode_direct=no
- if test "$GCC" = yes ; then
- :
- else
- case $cc_basename in
- xlc*)
- ;;
- *)
- ld_shlibs=no
- ;;
- esac
- fi
- ;;
- dgux*)
- hardcode_libdir_flag_spec='-L$libdir'
- ;;
- freebsd1*)
- ld_shlibs=no
- ;;
- freebsd2.2*)
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- ;;
- freebsd2*)
- hardcode_direct=yes
- hardcode_minus_L=yes
- ;;
- freebsd* | kfreebsd*-gnu | dragonfly*)
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- ;;
- hpux9*)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- hpux10*)
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- fi
- ;;
- hpux11*)
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_direct=no
- ;;
- *)
- hardcode_direct=yes
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- esac
- fi
- ;;
- irix5* | irix6* | nonstopux*)
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
- netbsd*)
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- ;;
- newsos6)
- hardcode_direct=yes
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
- openbsd*)
- hardcode_direct=yes
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- else
- case "$host_os" in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- ;;
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- osf3*)
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
- osf4* | osf5*)
- if test "$GCC" = yes; then
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- # Both cc and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- hardcode_libdir_separator=:
- ;;
- solaris*)
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- sunos4*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- ;;
- sysv4)
- case $host_vendor in
- sni)
- hardcode_direct=yes # is this really true???
- ;;
- siemens)
- hardcode_direct=no
- ;;
- motorola)
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- ;;
- sysv4.3*)
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- ld_shlibs=yes
- fi
- ;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
- ;;
- sysv5* | sco3.2v5* | sco5v6*)
- hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator=':'
- ;;
- uts4*)
- hardcode_libdir_flag_spec='-L$libdir'
- ;;
- *)
- ld_shlibs=no
- ;;
- esac
-fi
-
-# Check dynamic linker characteristics
-# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
-libname_spec='lib$name'
-case "$host_os" in
- aix3*)
- ;;
- aix4* | aix5*)
- ;;
- amigaos*)
- ;;
- beos*)
- ;;
- bsdi[45]*)
- ;;
- cygwin* | mingw* | pw32*)
- shrext=.dll
- ;;
- darwin* | rhapsody*)
- shrext=.dylib
- ;;
- dgux*)
- ;;
- freebsd1*)
- ;;
- kfreebsd*-gnu)
- ;;
- freebsd* | dragonfly*)
- ;;
- gnu*)
- ;;
- hpux9* | hpux10* | hpux11*)
- case $host_cpu in
- ia64*)
- shrext=.so
- ;;
- hppa*64*)
- shrext=.sl
- ;;
- *)
- shrext=.sl
- ;;
- esac
- ;;
- interix3*)
- ;;
- irix5* | irix6* | nonstopux*)
- case "$host_os" in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
- *) libsuff= shlibsuff= ;;
- esac
- ;;
- esac
- ;;
- linux*oldld* | linux*aout* | linux*coff*)
- ;;
- linux*)
- ;;
- knetbsd*-gnu)
- ;;
- netbsd*)
- ;;
- newsos6)
- ;;
- nto-qnx*)
- ;;
- openbsd*)
- ;;
- os2*)
- libname_spec='$name'
- shrext=.dll
- ;;
- osf3* | osf4* | osf5*)
- ;;
- solaris*)
- ;;
- sunos4*)
- ;;
- sysv4 | sysv4.3*)
- ;;
- sysv4*MP*)
- ;;
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- ;;
- uts4*)
- ;;
-esac
-
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
-shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
-escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-
-LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
-
-# How to pass a linker flag through the compiler.
-wl="$escaped_wl"
-
-# Static library suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally "so").
-shlibext="$shlibext"
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator="$hardcode_libdir_separator"
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct="$hardcode_direct"
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L="$hardcode_minus_L"
-
-EOF
diff --git a/configure.in b/configure.in
index 45dbb21..1dfc8e1 100644
--- a/configure.in
+++ b/configure.in
@@ -1,72 +1,33 @@
-AC_INIT(grisbi,0.6.1-test_pre_rel)
+AC_INIT([grisbi],[0.6.1-test_pre_rel])
AC_CONFIG_SRCDIR(src/main.c)
-AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE([-Wall foreign])
-AM_MAINTAINER_MODE
-
-AC_GNU_SOURCE
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
dnl Standard checks
-AC_ISC_POSIX
AC_PROG_CC
-AC_STDC_HEADERS
-AM_PROG_LIBTOOL
-AC_LIBTOOL_DLOPEN_SELF
-AC_SUBST(LIBTOOL_DEPS)
-AC_SUBST(lt_prog_compiler_wl)
+AC_USE_SYSTEM_EXTENSIONS
+AC_HEADER_STDC
dnl Check if we have backtrace support
AC_CHECK_FUNCS(backtrace)
-AC_CONFIG_MACRO_DIR([macros])
-dnl Check for NLS support.
-ALL_LINGUAS="cs da de el eo es fa fr he it nl pl pt_BR ro ru zh_CN"
-AM_GNU_GETTEXT
-AC_CHECK_LIB(intl,main)
+AM_INIT_AUTOMAKE([-Wall foreign])
+AM_CONFIG_HEADER(config.h)
+LT_INIT
-dnl
-dnl Standard GTK checks
-dnl
-PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.2.0 glib-2.0 >= 2.2 gmodule-2.0 >= 2.2])
-LDFLAGS="${LDFLAGS}"
-CFLAGS="${CFLAGS} ${GTK_CFLAGS}"
+dnl Check for NLS support.
+AM_GLIB_GNU_GETTEXT
+IT_PROG_INTLTOOL([0.40.0])
+GETTEXT_PACKAGE=AC_PACKAGE_NAME
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package.])
dnl
-dnl Check whether GLib modules are supported, to determine whether we
-dnl can support plugins.
+dnl Main Grisbi libraries
dnl
-AC_MSG_CHECKING(whether GLib supports loadable modules)
-ac_save_CFLAGS="$CFLAGS"
-ac_save_LIBS="$LIBS"
-CFLAGS="$CFLAGS $GTK_CFLAGS"
-LIBS="$GTK_LIBS $LIBS"
-AC_TRY_RUN([
-#include <glib.h>
-#include <gmodule.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int
-main ()
-{
- if (g_module_supported())
- return 0; /* success */
- else
- return 1; /* failure */
-}
-], ac_cv_glib_supports_modules=yes, ac_cv_glib_supports_modules=no,
- [echo $ac_n "cross compiling; assumed OK... $ac_c"
- ac_cv_glib_supports_modules=yes])
-CFLAGS="$ac_save_CFLAGS"
-LIBS="$ac_save_LIBS"
-if test "$ac_cv_glib_supports_modules" = yes ; then
- AC_MSG_RESULT(yes)
- have_plugins=yes
-else
- AC_MSG_RESULT(no)
- have_plugins=no
-fi
+PKG_CHECK_MODULES(GRISBI, [gtk+-2.0 >= 2.2.0 glib-2.0 >= 2.2 gmodule-2.0 >= 2.2 zlib])
+
dnl
dnl balance estimate
@@ -78,65 +39,83 @@ AC_ARG_WITH(balance_estimate,
AC_DEFINE(ENABLE_BALANCE_ESTIMATE, 1, [Define if balance estimate is enabled])
])
+
dnl
-dnl check whether plugins should be enabled and, if they should be,
+dnl Plugin support using glib's GModule
dnl
AC_ARG_WITH(plugins,
- AC_HELP_STRING([--with-plugins],
- [support plugins.]),
-[
- case "$withval" in
- "" | y | ye | yes )
- if test x$have_plugins = xno
- then
- AC_MSG_ERROR([GLib on this platform doesn't support loadable modules, so you can't enable plugins.])
- fi
- ;;
- n | no)
- have_plugins=no
- ;;
- *)
- if test x$have_plugins = xno
- then
- AC_MSG_ERROR([GLib on this platform doesn't support loadable modules, so you can't enable plugins.])
- fi
- ;;
- esac
-])
+ AS_HELP_STRING([--with-plugins],[support plugins (default=auto)]),
+ [build_plugins=$withval],
+ [build_plugins=auto])
+AC_MSG_CHECKING(whether GLib supports loadable modules)
+gmodule_supported=`$PKG_CONFIG gmodule-2.0 --variable gmodule_supported`
+if test "$gmodule_supported" = true ; then
+ have_plugins=yes
+else
+ have_plugins=no
+fi
+AC_MSG_RESULT($have_plugins)
-dnl
-dnl Where plugins are located
-dnl
-AM_CONDITIONAL(HAVE_PLUGINS, test x$have_plugins = xyes)
-if test x$have_plugins = xyes
-then
- AC_DEFINE(HAVE_PLUGINS, 1, [Define if plugins are enabled])
+if test "$have_plugins" = no -a "$build_plugins" = yes; then
+ AC_MSG_ERROR([GLib on this platform doesn't support loadable modules, so you can't enable plugins.])
+fi
+if test "$build_plugins" != no; then
+ build_plugins=$have_plugins
+else
+ build_plugins=no
+fi
+if test "$build_plugins" = yes; then
+ AC_DEFINE(HAVE_PLUGINS, 1, [Define if plugins are enabled])
fi
+AM_CONDITIONAL(HAVE_PLUGINS, [test "$build_plugins" = yes])
+AC_SUBST(plugindir,[$\(libdir\)/$\(PACKAGE\)])
dnl
dnl XML2
dnl
-PKG_CHECK_MODULES(XML2, libxml-2.0 >= 2.0, , noxml2=true)
-if test x$noxml2 == xtrue
-then
- AC_MSG_RESULT([libxml2 support not available, this Grisbi build will not be able to load Gnucash files.])
- CFLAGS="${CFLAGS} -DNOXML2"
+AC_ARG_WITH(libxml2,
+ AS_HELP_STRING([--with-libxml2],[libxml2 support for the GnuCash plugin (default=auto)]),
+ [build_libxml2=$withval],
+ [build_libxml2=auto])
+
+PKG_CHECK_MODULES(XML2, [libxml-2.0 >= 2.0], have_libxml2=yes, have_libxml2=no)
+if test "$build_libxml2" = yes -a "$have_libxml2" = no; then
+ AC_MSG_ERROR([Libxml2/GnuCash support was requested but libxml2 could not be found.])
fi
-AM_CONDITIONAL(HAVE_XML2, test x$noxml2 != xtrue)
+if test "$build_libxml2" != no; then
+ build_libxml2=$have_libxml2
+else
+ build_libxml2=no
+fi
+if test "$build_libxml2" = yes; then
+ AC_DEFINE(NOXML2, 1, [Define if libxml2 support is disabled])
+fi
+AM_CONDITIONAL(HAVE_XML2, [test "$build_libxml2" = yes])
dnl
dnl OpenSSL Check
dnl
-PKG_CHECK_MODULES(OpenSSL, libssl, , nossl=true)
-if test x$nossl == xtrue
-then
- AC_MSG_RESULT([OpenSSL support not available, this Grisbi build will not be able to crypt/decrypt files.])
- CFLAGS="${CFLAGS} -DNOSSL"
+AC_ARG_WITH(openssl,
+ AS_HELP_STRING([--with-openssl],[OpenSSL support for file encryption support (default=auto)]),
+ [build_openssl=$withval],
+ [build_openssl=auto])
+
+PKG_CHECK_MODULES(OPENSSL, [libssl], have_openssl=yes, have_openssl=no)
+if test "$build_openssl" = yes -a "$have_openssl" = no; then
+ AC_MSG_ERROR([OpenSSL support was requested but libssl could not be found.])
+fi
+if test "$build_openssl" != no; then
+ build_openssl=$have_openssl
+else
+ build_openssl=no
+fi
+if test "$build_openssl" = yes; then
+ AC_DEFINE(NOSSL, 1, [Define if OpenSSL support is disabled])
fi
-AM_CONDITIONAL(HAVE_SSL, test x$nossl != xtrue)
+AM_CONDITIONAL(HAVE_SSL, [test "$build_openssl" = yes])
dnl
@@ -156,58 +135,39 @@ else
if test x$nocunit != xtrue
then
nocunit=false
- CFLAGS="${CFLAGS} -DHAVE_CUNIT"
- LDFLAGS="${LDFLAGS}"
+ CUNIT_CFLAGS="-DHAVE_CUNIT"
+ CUNIT_LIBS="-lcunit"
else
AC_MSG_RESULT([libcunit header missing. Check your libcunit installation])
fi
fi
+AC_SUBST(CUNIT_CFLAGS)
+AC_SUBST(CUNIT_LIBS)
AM_CONDITIONAL(HAVE_CUNIT, test x$nocunit != xtrue)
dnl
dnl Check for libofx
dnl
-AC_CHECK_HEADER(libofx/libofx.h,,noofx=true)
AC_ARG_WITH(ofx,
- AC_HELP_STRING([--without-ofx],
- [build grisbi without ofx support [default=with]]),
- [build_ofx=$withval],
- [build_ofx=yes]
-)
-if test x$build_ofx != xno
-then
- if test x$noofx != xtrue
- then
- AC_CHECK_LIB(ofx, ofx_set_status_cb, HAVE_OFX_SET_STATUS_CB="true")
- else
- noofx=true
- AC_MSG_RESULT([Libofx header missing. Check your libofx installation])
- fi
+ AS_HELP_STRING([--with-ofx],[build grisbi without ofx support (default=auto)]),
+ [build_ofx=$withval]
+ [build_ofx=auto])
+
+PKG_CHECK_MODULES(LIBOFX, [libofx], have_ofx=yes, have_ofx=no)
+if test "$build_ofx" = yes -a "$with_ofx" = no; then
+ AC_MSG_ERROR([Ofx support was requested bug libofx could not be found.])
+fi
+if test "$build_ofx" != no; then
+ build_ofx=$have_ofx
else
- noofx=true
+ build_ofx=no
fi
-AM_CONDITIONAL(HAVE_OFX, test x$noofx != xtrue)
-AM_CONDITIONAL(HAVE_OFX_SET_STATUS_CB, test x$OFX_SET_STATUS_CB != xtrue)
-
-
-dnl
-dnl ElectricFence support
-dnl
-dnl --enable-electricfence flag
-AC_ARG_ENABLE(electricfence,
- [AC_HELP_STRING([--enable-electricfence],
- [Enable compilation with ElectricFence (default=no)])],,
- enable_electricfence=no)
-AC_CHECK_LIB(efence,malloc,electricfence=yes,electricfence=no)
-if test "x$enable_electricfence" = xyes ; then
- if test "x$electricfence" = xyes ; then
- AC_MSG_WARN([ElectricFence is enabled])
- LDFLAGS="${LDFLAGS} -lefence"
- else
- AC_MSG_ERROR([Can't find the ElectriceFence library !])
- fi
+if test "$build_ofx" = yes; then
+ PKG_CHECK_EXISTS([libofx >= 0.7], [AC_DEFINE([OFX_0_7], 1, [Build with libofx 0.7 or newer])])
fi
+AM_CONDITIONAL(HAVE_OFX, [test "$build_ofx" = yes])
+
dnl
dnl WError support
@@ -258,36 +218,17 @@ AC_DEFINE_UNQUOTED([GSB_NOOPTIM], [${GSB_NOOPTIM}],
[define to 1 if g_no_optim support is enabled])
AC_SUBST(GSB_NOOPTIM)
-# Avoid implicit dynamic linking
-LDFLAGS="${LDFLAGS} -lm -lz"
-
-AC_SUBST(GTK_LIBS)
-AC_SUBST(GTK_CFLAGS)
-
-AC_SUBST(XML2_LIBS)
-AC_SUBST(XML2_CFLAGS)
-
-AC_SUBST(prefix)
-AC_SUBST(CFLAGS)
-AC_SUBST(LDFLAGS)
-AC_SUBST(export_dynamic_flag_spec_CXX)
-AC_SUBST(export_dynamic_flag_spec)
-AC_SUBST(lt_prog_compiler_wl)
-
dnl ******************************
dnl Makefiles
dnl ******************************
-AC_OUTPUT([
+AC_CONFIG_FILES([
Makefile
help/Makefile
help/C/Makefile
help/de/Makefile
help/en/Makefile
help/fr/Makefile
-help/tips/Makefile
-intl/Makefile
-macros/Makefile
pixmaps/Makefile
pixmaps/flags/Makefile
po/Makefile.in
@@ -305,3 +246,13 @@ src/plugins/gnucash/Makefile
src/plugins/ofx/Makefile
src/plugins/openssl/Makefile
])
+AC_OUTPUT
+
+echo "
+
+ Build plugin support: $build_plugins
+ Build with libxml2: $build_libxml2
+ Build with OpenSSL: $build_openssl
+ Build with OFX plugin: $build_ofx
+
+"
diff --git a/debian/grisbi.desktop b/debian/grisbi.desktop
deleted file mode 100644
index ea72ae8..0000000
--- a/debian/grisbi.desktop
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Comment=
-Exec=grisbi
-Icon=/usr/share/pixmaps/grisbi/grisbi.png
-MimeType=application/x-grisbi
-MiniIcon=/usr/share/pixmaps/grisbi/grisbi.png
-Name=Grisbi
-ServiceTypes=
-Terminal=0
-Type=Application
diff --git a/debian/rules b/debian/rules
index 18dc18b..ebe725f 100644
--- a/debian/rules
+++ b/debian/rules
@@ -43,13 +43,6 @@ install: build
# Add here commands to install the package into debian/grisbi.
$(MAKE) install prefix=$(CURDIR)/debian/grisbi/usr sysconfdir=$(CURDIR)/debian/grisbi/etc
- mkdir -p $(CURDIR)/debian/grisbi/usr/share/mimelnk/application
- cp debian/x-grisbi.desktop $(CURDIR)/debian/grisbi/usr/share/mimelnk/application/
- mkdir -p $(CURDIR)/debian/grisbi/usr/share/applnk/Applications
- cp debian/grisbi.desktop $(CURDIR)/debian/grisbi/usr/share/applnk/Applications
- mkdir -p $(CURDIR)/debian/grisbi/usr/share/mime-info
- cp debian/grisbi.mime debian/grisbi.keys $(CURDIR)/debian/grisbi/usr/share/mime-info
-
# Build architecture-independent files here.
binary-indep: build install
diff --git a/debian/x-grisbi.desktop b/debian/x-grisbi.desktop
deleted file mode 100644
index 26eee71..0000000
--- a/debian/x-grisbi.desktop
+++ /dev/null
@@ -1,9 +0,0 @@
-[Desktop Entry]
-Encoding=UTF-8
-Icon=/usr/share/pixmaps/grisbi/grisbi.png
-Type=MimeType
-MimeType=application/x-grisbi
-Patterns=*.grisbi;*.gsb;
-Comment=Grisbi Finance manager
-Comment[fr]=Logiciel de comptabilité Grisbi
-
diff --git a/help/C/Makefile.am b/help/C/Makefile.am
index 1739560..8e79726 100644
--- a/help/C/Makefile.am
+++ b/help/C/Makefile.am
@@ -5,7 +5,7 @@ HTML_FILES = \
quickstart.html \
translation.html
-grisbi_helpdir = $(datadir)/doc/grisbi/C
+grisbi_helpdir = $(docdir)/C
grisbi_help_DATA = \
topic.dat \
diff --git a/help/Makefile.am b/help/Makefile.am
index 7c272cf..c7cc1b2 100644
--- a/help/Makefile.am
+++ b/help/Makefile.am
@@ -1,3 +1,3 @@
## Process this file with automake to produce Makefile.in.
-SUBDIRS = C de en fr tips
+SUBDIRS = C de en fr
diff --git a/help/de/Makefile.am b/help/de/Makefile.am
index 371cb50..84b5424 100755
--- a/help/de/Makefile.am
+++ b/help/de/Makefile.am
@@ -5,7 +5,7 @@ HTML_FILES = \
quickstart.html \
translation.html
-grisbi_helpdir = $(datadir)/doc/grisbi/de
+grisbi_helpdir = $(docdir)/de
grisbi_help_DATA = \
topic.dat \
diff --git a/help/en/Makefile.am b/help/en/Makefile.am
index d5d787c..4d20c1b 100644
--- a/help/en/Makefile.am
+++ b/help/en/Makefile.am
@@ -5,7 +5,7 @@ HTML_FILES = \
quickstart.html \
translation.html
-grisbi_helpdir = $(datadir)/doc/grisbi/en
+grisbi_helpdir = $(docdir)/en
grisbi_help_DATA = \
topic.dat \
diff --git a/help/fr/Makefile.am b/help/fr/Makefile.am
index 53d98d5..e288bd5 100644
--- a/help/fr/Makefile.am
+++ b/help/fr/Makefile.am
@@ -5,7 +5,7 @@ HTML_FILES = \
quickstart.html \
translation.html
-grisbi_helpdir = $(datadir)/doc/grisbi/fr
+grisbi_helpdir = $(docdir)/fr
grisbi_help_DATA = \
topic.dat \
diff --git a/help/tips/Makefile.am b/help/tips/Makefile.am
deleted file mode 100644
index 352ec14..0000000
--- a/help/tips/Makefile.am
+++ /dev/null
@@ -1,86 +0,0 @@
-## Process this file with automake to produce Makefile.in.
-
-EXTRA_DIST = tips.txt fr.po de.po es.po
-grisbi_helpdir = $(datadir)/$(PACKAGE)
-grisbi_help_DATA = tips.txt
-
-#grisbi_potdir = $(datadir)/locale/grisbi-tips
-#grisbi_pot_DATA = fr.gmo
-
-CC = gcc
-GMOFILES=fr.gmo de.gmo es.gmo
-localedir = ${datadir}/locale
-
-all: $(GMOFILES)
-
-tips.pot: tips.txt
- $(XGETTEXT) --language=perl --keyword=_ -o tips.pot -s tips.txt
-
-%.pox: %.po
- $(MAKE) grisbi-tips.pot
- $(MSGMERGE) $< $(srcdir)/grisbi-tips.pot -o $*.pox
-
-%.mo: %.po
- $(MSGFMT) -o $@ $<
-
-%.gmo: %.po
- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
- && rm -f $$file && $(GMSGFMT) --statistics -o $$file $<
-
-update-po: Makefile
- $(MAKE) tips.pot
- if test "tips" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
- cd $(srcdir); \
- catalogs='$(GMOFILES)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
- echo "$$lang:"; \
- if $(MSGMERGE) $$lang.po tips.pot -o $$lang.new.po; then \
- mv -f $$lang.new.po $$lang.po; \
- else \
- echo "msgmerge for $$cat failed!"; \
- rm -f $$lang.new.po; \
- fi; \
- done
- $(MAKE) update-gmo
-
-update-gmo: Makefile $(GMOFILES)
- @:
-
-install: install-exec-am install-data-am
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(GMOFILES)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- if test -r $$cat; then \
- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/grisbi-tips.mo; \
- echo "installing $$cat as $(DESTDIR)$$dir/grisbi-tips.mo"; \
- else \
- $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/grisbi-tips.mo; \
- echo "installing $(srcdir)/$$cat as" \
- "$(DESTDIR)$$dir/grisbi-tips.mo"; \
- fi; \
- done
-
-uninstall:
- @catalogs='$(GMOFILES)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- rm -f $(DESTDIR)$$dir/grisbi-tips.mo; \
- echo "uninstalling $(DESTDIR)$$dir/grisbi-tips.mo"; \
- done
-
-mostlyclean:
- rm -f core core.* *.pox $(PACKAGE).po *.new.po
- rm -fr *.gmo
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile *.mo
diff --git a/help/tips/de.po b/help/tips/de.po
deleted file mode 100644
index 834b516..0000000
--- a/help/tips/de.po
+++ /dev/null
@@ -1,262 +0,0 @@
-# translation of de.po to deutsch
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Martin Stromberger <fabiolla at aon.at>, 2007.
-# Martin Stromberger <mstromberger at aon.at>, 2008, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: de\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-30 21:05+0100\n"
-"PO-Revision-Date: 2010-01-03 21:07+0100\n"
-"Last-Translator: Martin Stromberger <mstromberger at aon.at>\n"
-"Language-Team: deutsch <de at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: tips.txt:41
-msgid ""
-"By double cliking on a date field, you can pop up a calendar to select a "
-"date."
-msgstr ""
-"... bei einem Doppelklick in einem Datumsfeld ein Kalender angezeigt wird?\n"
-"\n"
-"Durch eine Auswahl im Kalender wird das Datum in das Datumsfeld übernommen."
-
-#: tips.txt:3
-msgid ""
-"Grisbi automatically saves a copy of your work if it crashes.\n"
-"\n"
-"Thus it is unlikely that you loose any data in case Grisbi encounters a "
-"programming error."
-msgstr ""
-"... bei einem Programmabsturz automatisch eine Sicherungsdatei erstellt "
-"wird?\n"
-"\n"
-"Durch diese MaÃnahme wird ein Datenverlust verhindert."
-
-#: tips.txt:7
-msgid ""
-"Grisbi can import Gnucash files natively, then you don't loose your work "
-"when you switch from Gnucash to Grisbi."
-msgstr ""
-"... Gnucash Dateien ohne Datenkonvertierung importiert werden können?\n"
-"\n"
-"Bei einem Wechsel von Gnucash zu Grisbi können die vorhandenen Dateien aus "
-"Gnucash weiterverwendet werden."
-
-#: tips.txt:49
-msgid ""
-"If unused payees have accumulated in the course of time due to bank imports, "
-"you can remove all of them in one click! Just go to the <i>Payees</i> page "
-"and click on the 'Remove unused payees' button."
-msgstr ""
-"... nicht mehr verwendete Empfänger entfernt werden können?\n"
-"\n"
-"Rufen Sie dazu in der <i>Empfängerübersicht</i> den Menüpunkt 'Verwaiste "
-"Empfänger löschen' auf."
-
-#: tips.txt:57
-msgid ""
-"No more tip available ! Please send any tips you know to grisbi-devel at lists."
-"sourceforge.net so that we can include them in next version for all users."
-msgstr ""
-"Es sind keine weiteren Tipps verfügbar!\n"
-"\n"
-"Falls Sie auch Tipps kennen, senden Sie diese bitte an die Grisbi "
-"Entwicklerliste (grisbi-devel at lists.sourceforge.net). Ihre Tipps werden "
-"mitaufgenommen und stehen in den Folgeversionen allen Anwendern von Grisbi "
-"zur Verfügung."
-
-#: tips.txt:43
-msgid ""
-"There are shortcuts in date fields, to avoid typing date or selecting it "
-"with mouse.\n"
-"\n"
-"<b>+</b> and <b>-</b> increment and decrement date of one day, <i>Page Up</"
-"i> and <i>Page Down</i> increment and decrement date of one month ... and "
-"there are more, check out the manual."
-msgstr ""
-"... es in den Datumsfeldern Tastenkombinationen für eine schnellere "
-"Datumseingabe gibt?\n"
-"\n"
-"Mit den Tasten <b>+</b> und <b>-</b> erhöhen bzw. reduzieren das Datum um "
-"einen Tag. <i>Bild auf</i> und <i>Bild ab</i> erhöhen bzw. reduzieren das "
-"Datum um ein Monat. Weitere Tastenkombinationen sind im Benutzerhandbuch "
-"beschrieben."
-
-#: tips.txt:47
-msgid ""
-"You can archive previous financial years to speed up Grisbi and possibily "
-"put old transactions into separate files for archival. Use 'File/Archive "
-"transaction' menu to achieve this."
-msgstr ""
-"... eine Archivierung von Buchungen nach Geschäftsjahren möglich ist?\n"
-"\n"
-"Seit Version 0.6 können Buchungen archiviert werden. Ein Auswahlkriterium "
-"für die Archivierung sind Geschäftsjahre."
-
-#: tips.txt:33
-msgid ""
-"You can configure fields displayed in the transaction form.\n"
-"\n"
-"Go to the <i>Preferences</i> dialog and select the <i>Form content</i> "
-"option. Then you can click on fields to be displayed and drag them through "
-"the form to adjust their position."
-msgstr ""
-"... die Felder im Buchungsformular konfiguriert werden können?\n"
-"\n"
-"Rufen Sie dazu den Menüpunkt <i> Bearbeiten - Einstellungen</i> auf. In der "
-"Sektion <i> Buchungsformular</i> können Sie Felder auswählen und die "
-"Position der Felder festlegen."
-
-#: tips.txt:29
-msgid ""
-"You can configure the contents of the transaction list.\n"
-"\n"
-"Right-click on a cell of the transaction list and select the <i>Change cell "
-"content</i> option. Then select any content you want and configure "
-"transaction list to your needs."
-msgstr ""
-"... die Darstellung der Buchungsliste konfiguriert werden kann?\n"
-"\n"
-"Rufen Sie dazu das Kontextmenü in der Buchungsliste auf. Mit <i>Den "
-"Zelleninhalt ändern</i> kann die Darstellung der Buchungsliste Ihren "
-"persönlichen Bedürfnissen angepasst werden."
-
-#: tips.txt:13
-msgid ""
-"You can create categories or budgetary lines directly by typing them in "
-"transaction form.\n"
-"\n"
-"If you write a category or a budgetary line which name contains a ':', a sub-"
-"category or sub-budgetary line will be created as well."
-msgstr ""
-"... Kategorien oder Budgeteinträge auch im Buchungsformular erstellt werden "
-"können?\n"
-"\n"
-"Mit dem Trennzeichen ':' können auch Unterkategorien und Teil-Budgeteinträge "
-"direkt erstellt werden, z.B.: 'Wohnung:Miete'."
-
-#: tips.txt:21
-msgid ""
-"You can efficiently manage your professional expenses with Grisbi.\n"
-"\n"
-"Create a <i>Professional expenses</i> budgetary line and put all "
-"professional expenses there. When you are paid, split your salary as a "
-"split of transaction, with both a <i>Salary</i> part and a <i>Profesionnal "
-"expenses</i> part. \n"
-"\n"
-"Then, you can create a new report that sums up transactions from the "
-"<i>Profesionnal expenses</i> budgetary line and see the balance."
-msgstr ""
-"... Sie mit Grisbi auch Geschäftsausgaben verwalten können?\n"
-"\n"
-"Erstellen Sie dazu einen Budgeteintrag mit der Bezeichnung "
-"<i>Geschäftsausgaben</i> und buchen Sie alle Geschäftsausgaben auf diesen "
-"Budgeteintrag. Nach der Bezahlung erstellen Sie eine Splittbuchung, "
-"bestehend aus <i>Geschäftsausgaben</i> und <i>Geschäftseinnahmen</i>. \n"
-"\n"
-"Wenn Sie in weiterer Folge einen Report mit den Budgeteinträgen "
-"<i>Geschäftsausgaben</i> und <i>Geschäftseinnahmen</i> erstellen wird Ihnen "
-"die Bilanz angezeigt."
-
-#: tips.txt:17
-msgid ""
-"You can encrypt your Grisbi files to improve your privacy. Just select the "
-"'Encrypt Grisbi file' in preferences window and enter a password next time "
-"you save your file.\n"
-"\n"
-"Encryption is irreversible, if you loose your password, there is NO WAY to "
-"restore your Grisbi accounts. Use with caution !"
-msgstr ""
-"... die Grisbi-Datei verschlüsselt werden kann?\n"
-"\n"
-"Die Verschlüsselung kann im Dialog 'Einstellungen' mit 'Datei verschlüsseln' "
-"aktiviert werden. Das Passwort wird beim ersten Speichern nach dem "
-"Aktivieren der Verschlüsselung festgelegt.\n"
-"\n"
-"Beachten Sie bitte dass die Verschlüsselung nicht rückgängig gemacht werden "
-"werden kann - wenn Sie das Passwort vergessen ist kein Zugriff auf die Daten "
-"in der Grisbi-Datei möglich."
-
-#: tips.txt:55
-msgid "You can have future scheduled transactions 'executed' before their date, "
-msgstr ""
-"... geplante Buchungen auch manuell ausgeführt werden können?\n"
-"\n"
-"In der Ãbersicht von den geplanten Buchungen kann mit dem Menüpunkt 'Die "
-"selektierte Buchung ausführen' eine geplante Buchung - unabhängig vom "
-"geplanten Datum - manuell ausgeführt werden."
-
-#: tips.txt:37
-msgid ""
-"You can hide annoying dialogs like this one, by clicking the <i>'Do not show "
-"this message again'</i> checkbox in this dialog. \n"
-"\n"
-"You can then activate them again by going to the <i>Preferences</i> window "
-"and then to the <i>Dialog and messages</i> option."
-msgstr ""
-"... die Anzeige von Hinweisfenstern und Meldungen deaktiviert werden kann?\n"
-"\n"
-"Die Anzeige/Nichtanzeige von Hinweisfenstern und Meldungen kann im Dialog "
-"'Einstellungen' konfiguriert werden."
-
-#: tips.txt:9
-msgid ""
-"You can organize transactions into budgetary lines, which are budgetary "
-"items (why money is spent) that can help you classify your spendings.\n"
-"\n"
-"Combined with categories (how money is spend), budgetary lines are a "
-"powerful way to analyse budget and to make reports."
-msgstr ""
-"... mit Budgeteinträgen und Kategorien Buchungen gruppiert werden können?\n"
-"\n"
-"Mit den Budgeteinträgen kann das 'Warum' und mit Kategorien das 'Wie' von "
-"Buchungen in einem Bericht ausgewertet werden."
-
-#: tips.txt:1
-msgid ""
-"You can reconcile transactions to match your real financial state as seen on "
-"your bank receipts. If you just spend 15mn each month reconciling Grisbi "
-"transactions with your bank receipts, you are guaranteed that your accounts "
-"are in perfect shape."
-msgstr ""
-"... Buchungen abgestimmt werden können?\n"
-"\n"
-"Mit einer Abstimmung werden Buchungen aus der Grisbi-Datei mit Buchungen von "
-"einem (realen) Konto konsolidiert.Eine Abstimmung dauert pro Monat maximal "
-"15 Minuten, wenn Sie diese Zeit investieren sind die Buchungen in der Grisbi-"
-"Datei immer in einem konsistenten Zustand."
-
-#: tips.txt:53
-msgid "You can reorder accounts in the navigation list using drag & drop."
-msgstr ""
-"... das im Navigationsbereich Konten und Berichte mit 'Drag & Drop' "
-"angeordnet werden können?"
-
-#: tips.txt:51
-msgid ""
-"You can sort the transaction list according to any criteria. Click on the "
-"column titles to sort transactions differently. For example, you can sort "
-"transactions by payee or category name."
-msgstr ""
-"... die Buchungsübersicht eine konfigurierbare Sortierung hat?\n"
-"\n"
-"Mit Klick auf einen Spaltentitel erfolgt eine auf/absteigende Sortierung. "
-"Die Spaltentitel haben desweiteren ein Kontextmenü mit welchen die "
-"Sortierkriterien konfiguriert werden können."
-
-#: tips.txt:27
-msgid ""
-"You can use the import facility to automatically reconcile transactions "
-"against a QIF or OFX file from your online bank."
-msgstr ""
-"... es mit dem Import möglich ist Buchungen abzustimmen?\n"
-"\n"
-"Sie können mit dem Import von QIF oder OFX Dateien von Ihrem Bankkonto die "
-"erfassten Buchungen in der Grisbi-Datei abstimmen."
-
diff --git a/help/tips/es.po b/help/tips/es.po
deleted file mode 100644
index 74b72de..0000000
--- a/help/tips/es.po
+++ /dev/null
@@ -1,253 +0,0 @@
-# translation of Grisbi.
-# Copyright (C) 2008 THE Grisbi'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the Grisbi package.
-# <>, 2008.
-# , fuzzy
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Grisbi 0.6\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-30 21:05+0100\n"
-"PO-Revision-Date: 2008-10-13 15:30+0200\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-15\n"
-"Content-Transfer-Encoding: \n"
-
-#: tips.txt:41
-msgid ""
-"By double cliking on a date field, you can pop up a calendar to select a "
-"date."
-msgstr ""
-"Pinchando dos veces en un campo de fecha, aparecerá un calendario para "
-"seleccionar el día."
-
-#: tips.txt:3
-msgid ""
-"Grisbi automatically saves a copy of your work if it crashes.\n"
-"\n"
-"Thus it is unlikely that you loose any data in case Grisbi encounters a "
-"programming error."
-msgstr ""
-"Grisbi guarda automáticamene una copia de su trabajo por si se cierra "
-"inesperadamente.\n"
-"\n"
-"Así es poco probable que pierda sus datos en caso de que haya un error de "
-"programación en Grisbi."
-
-#: tips.txt:7
-msgid ""
-"Grisbi can import Gnucash files natively, then you don't loose your work "
-"when you switch from Gnucash to Grisbi."
-msgstr ""
-"Grisbi puede importar ficheros de Gnucash de forma nativa por lo que si "
-"decide usar Grisbi en lugar de Gnucash no tendrá que perder sus datos."
-
-#: tips.txt:49
-msgid ""
-"If unused payees have accumulated in the course of time due to bank imports, "
-"you can remove all of them in one click! Just go to the <i>Payees</i> page "
-"and click on the 'Remove unused payees' button."
-msgstr ""
-
-#: tips.txt:57
-msgid ""
-"No more tip available ! Please send any tips you know to grisbi-devel at lists."
-"sourceforge.net so that we can include them in next version for all users."
-msgstr ""
-"¡ No hay más consejos disponibles ! Por favor envíe los consejos que se le "
-"ocurran a grisbi-devel at lists.sourceforge.net para que podamos incluirlos en "
-"la siguiente versión para todos los usuarios."
-
-#: tips.txt:43
-#, fuzzy
-msgid ""
-"There are shortcuts in date fields, to avoid typing date or selecting it "
-"with mouse.\n"
-"\n"
-"<b>+</b> and <b>-</b> increment and decrement date of one day, <i>Page Up</"
-"i> and <i>Page Down</i> increment and decrement date of one month ... and "
-"there are more, check out the manual."
-msgstr ""
-"Hay atajos de teclado en los campos de fecha, para que no tenga que escribir "
-"la fecha completa o seleccionarla con el ratón.\n"
-"\n"
-"<i>+</i> y <i>-</i> mueven la fecha día arriba y día abajo, <i>Avpág</i> y "
-"<i>Repág</i> mueven la fecha un mes arriba y abajo ... y hay más atajos, "
-"consulte el manual."
-
-#: tips.txt:47
-#, fuzzy
-msgid ""
-"You can archive previous financial years to speed up Grisbi and possibily "
-"put old transactions into separate files for archival. Use 'File/Archive "
-"transaction' menu to achieve this."
-msgstr ""
-"Puede archivar años financieros previos para hacer que Grisbi funcione más "
-"rápido y también puede archivar viejas transacciones en ficheros separados."
-
-#: tips.txt:33
-msgid ""
-"You can configure fields displayed in the transaction form.\n"
-"\n"
-"Go to the <i>Preferences</i> dialog and select the <i>Form content</i> "
-"option. Then you can click on fields to be displayed and drag them through "
-"the form to adjust their position."
-msgstr ""
-"Puede configurar los campos que se muestran en el formulario de "
-"transacciones.\n"
-"\n"
-"Vaya al diálogo de <i>Preferencias</i> y elija la opción de <i>Contenido del "
-"formulario</i>. Después podrá seleccionar los campos para mostrar y cambiar "
-"su posición en el formulario."
-
-#: tips.txt:29
-msgid ""
-"You can configure the contents of the transaction list.\n"
-"\n"
-"Right-click on a cell of the transaction list and select the <i>Change cell "
-"content</i> option. Then select any content you want and configure "
-"transaction list to your needs."
-msgstr ""
-"Puede configurar los contenidos de la lista de transacciones.\n"
-"\n"
-"Haga click con el botón derecho del ratón en una celda de la lista de "
-"transacciones y seleccione la opción <i>Cambiar contenido de la celda</i>. "
-"Después elija el contenido que desee y configure la lista de transacciones a "
-"sus necesidades."
-
-#: tips.txt:13
-msgid ""
-"You can create categories or budgetary lines directly by typing them in "
-"transaction form.\n"
-"\n"
-"If you write a category or a budgetary line which name contains a ':', a sub-"
-"category or sub-budgetary line will be created as well."
-msgstr ""
-"Puede crear categorías o líneas presupuestarias directamente escribiéndolas "
-"en el formulario de transacciones.\n"
-"\n"
-"Si escribe una categoría o una línea presupuestaria con un nombre que "
-"contenga ':', una subcategoría o sublínea presupuestaria se creará también."
-
-#: tips.txt:21
-msgid ""
-"You can efficiently manage your professional expenses with Grisbi.\n"
-"\n"
-"Create a <i>Professional expenses</i> budgetary line and put all "
-"professional expenses there. When you are paid, split your salary as a "
-"split of transaction, with both a <i>Salary</i> part and a <i>Profesionnal "
-"expenses</i> part. \n"
-"\n"
-"Then, you can create a new report that sums up transactions from the "
-"<i>Profesionnal expenses</i> budgetary line and see the balance."
-msgstr ""
-"Puede manejar eficientemente sus gastos profesionales con Grisbi.\n"
-"\n"
-"Cree una línea presupuestaria de <i>Gastos profesionales</i> y ponga todos "
-"sus gastos profesionales ahí. Cuando le paguen, divida su salario como una "
-"nota de transacción con ambas partes: <i>Salario</i> y <i>Gastos "
-"profesionales</i>. \n"
-"\n"
-"Después, puede crear un nuevo informe que agrupe las transacciones de la "
-"línea presupuestaria de <i>Gastos profesionales</i> y vea el balance."
-
-#: tips.txt:17
-msgid ""
-"You can encrypt your Grisbi files to improve your privacy. Just select the "
-"'Encrypt Grisbi file' in preferences window and enter a password next time "
-"you save your file.\n"
-"\n"
-"Encryption is irreversible, if you loose your password, there is NO WAY to "
-"restore your Grisbi accounts. Use with caution !"
-msgstr ""
-"Puede encriptar sus ficheros de Grisbi para aumentar su privacidad. Tan "
-"sólo seleccione 'Encriptar fichero Grisbi' en la ventana de preferencias e "
-"introduzca una contraseña la próxima vez que guarde su fichero.\n"
-"\n"
-"El encriptado es irreversible, si pierde su contraseña, no hay NINGUNA FORMA "
-"de recuperar sus cuentas de Grisbi ¡ Úselo con precaución !"
-
-#: tips.txt:55
-msgid ""
-"You can have future scheduled transactions 'executed' before their date, "
-msgstr ""
-
-#: tips.txt:37
-msgid ""
-"You can hide annoying dialogs like this one, by clicking the <i>'Do not show "
-"this message again'</i> checkbox in this dialog. \n"
-"\n"
-"You can then activate them again by going to the <i>Preferences</i> window "
-"and then to the <i>Dialog and messages</i> option."
-msgstr ""
-"Puede ocultar los diálogos molestos como este, activando la opción <i>'No "
-"mostrar estos mensajes de nuevo'</i> en este diálogo. \n"
-"\n"
-"Puede activarlos de nuevo yendo a la ventana de <i>Preferencias</i> y "
-"después a la opción de <i>Diálogo y mensajes</i>."
-
-#: tips.txt:9
-msgid ""
-"You can organize transactions into budgetary lines, which are budgetary "
-"items (why money is spent) that can help you classify your spendings.\n"
-"\n"
-"Combined with categories (how money is spend), budgetary lines are a "
-"powerful way to analyse budget and to make reports."
-msgstr ""
-"Puede organizar sus transacciones en líneas presupuestarias que son "
-"elementos presupuestarios (por qué se gasta el dinero) que pueden ayudarle a "
-"clasificar sus gastos.\n"
-"\n"
-"Combinados con las categorías (Cómo se gasta el dinero), las líneas "
-"presupuestarias son una forma muy potente de analizar los presupuestos y "
-"hacer informes."
-
-#: tips.txt:1
-msgid ""
-"You can reconcile transactions to match your real financial state as seen on "
-"your bank receipts. If you just spend 15mn each month reconciling Grisbi "
-"transactions with your bank receipts, you are guaranteed that your accounts "
-"are in perfect shape."
-msgstr ""
-"Puede reconciliar transacciones para cuadrar su estado financiero real tal y "
-"como aparece en sus extractos del banco. Si emplea 15 minutos cada més "
-"conciliando sus transacciones en Grisbi con los extractos de su banco, se "
-"asegurará que sus cuentas están siempre bien ajustadas."
-
-#: tips.txt:53
-msgid "You can reorder accounts in the navigation list using drag & drop."
-msgstr ""
-
-#: tips.txt:51
-msgid ""
-"You can sort the transaction list according to any criteria. Click on the "
-"column titles to sort transactions differently. For example, you can sort "
-"transactions by payee or category name."
-msgstr ""
-
-#: tips.txt:27
-msgid ""
-"You can use the import facility to automatically reconcile transactions "
-"against a QIF or OFX file from your online bank."
-msgstr ""
-"Puede usar la opción de importaciones para automáticamente conciliar las "
-"transacciones contra un fichero QIF u OFX de su banca online."
-
-#~ msgid ""
-#~ "You can customize the transaction form layout via the 'Preferences' "
-#~ "window and define whatever layout suits your needs."
-#~ msgstr ""
-#~ "Puede modificar la presentación del formulario de transacción a través de "
-#~ "la ventana de 'Preferencias' y definir el formato que mejor se ajuste a "
-#~ "sus necesidades."
-
-#~ msgid ""
-#~ "You can double-click on any date entry to pop up a calendar in order to "
-#~ "enter a date more easily."
-#~ msgstr ""
-#~ "Puede hacer doble click en una entrada de fecha para que aparezca un "
-#~ "calendario que le permita introducir el día más cómodamente."
diff --git a/help/tips/fr.po b/help/tips/fr.po
deleted file mode 100644
index 8bff43e..0000000
--- a/help/tips/fr.po
+++ /dev/null
@@ -1,277 +0,0 @@
-# translation of fr.po to Francais
-# This file is distributed under the same license as the PACKAGE package.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
-# Benjamin Drieu <bdrieu at april.org>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: fr\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-30 21:05+0100\n"
-"PO-Revision-Date: 2009-11-25 22:42+0100\n"
-"Last-Translator: Sacha Muszlak <sacha at muszlak.com>\n"
-"Language-Team: Francais <traduction at grisbi.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.0.2\n"
-
-#: tips.txt:41
-msgid ""
-"By double cliking on a date field, you can pop up a calendar to select a "
-"date."
-msgstr ""
-"... en double cliquant sur un champs de date, vous faites apparaître un "
-"calendrier. "
-
-#: tips.txt:3
-msgid ""
-"Grisbi automatically saves a copy of your work if it crashes.\n"
-"\n"
-"Thus it is unlikely that you loose any data in case Grisbi encounters a "
-"programming error."
-msgstr ""
-"... Grisbi sauvegarde automatiquement une copie de votre travail si Grisbi "
-"plante.\n"
-"\n"
-"Ainsi, il y a peu de chances que vous perdiez votre travail si Grisbi "
-"rencontre une erreur de segmentation."
-
-#: tips.txt:7
-msgid ""
-"Grisbi can import Gnucash files natively, then you don't loose your work "
-"when you switch from Gnucash to Grisbi."
-msgstr ""
-"... Grisbi peut importer des fichiers Gnucash nativement.\n"
-"\n"
-"Ainsi, vous ne perdez pas de travail quand vous passez de Gnucash à Grisbi."
-
-#: tips.txt:49
-msgid ""
-"If unused payees have accumulated in the course of time due to bank imports, "
-"you can remove all of them in one click! Just go to the <i>Payees</i> page "
-"and click on the 'Remove unused payees' button."
-msgstr ""
-"... si les tiers inutilisés se sont accumulés au cours du temps à cause de "
-"multiples importations, vous pouvez tous les enlever en un clic !\n"
-"\n"
-"Il suffit d'aller dans l'onglet <i> Tiers </i> et de cliquez sur le bouton "
-"\"Supprimer les tiers non utilisés\"."
-
-#: tips.txt:57
-msgid ""
-"No more tip available ! Please send any tips you know to grisbi-devel at lists."
-"sourceforge.net so that we can include them in next version for all users."
-msgstr ""
-"Plus d'astuce disponible !\n"
-"\n"
-"Si vous en avez, envoyez les astuces que vous connaissez à grisbi-"
-"devel at lists.sourceforge.net pour que nous puissions les inclure dans la "
-"prochaine version et en faire profiter tous les utilisateurs de Grisbi."
-
-#: tips.txt:43
-msgid ""
-"There are shortcuts in date fields, to avoid typing date or selecting it "
-"with mouse.\n"
-"\n"
-"<b>+</b> and <b>-</b> increment and decrement date of one day, <i>Page Up</"
-"i> and <i>Page Down</i> increment and decrement date of one month ... and "
-"there are more, check out the manual."
-msgstr ""
-"... il existe des raccourcis dans les champs de date, pour éviter leur "
-"saisie au clavier ou leur sélection à la souris.\n"
-"\n"
-" Les touches <b>+</b> et <b>-</b> incrémentent et décrémentent la date d'un "
-"jour, <i>Page précédente</i> et <i>Page suivante</i> incrémente et "
-"décrémente la date d'un mois... et bien d'autres, allez voir le manuel."
-
-#: tips.txt:47
-msgid ""
-"You can archive previous financial years to speed up Grisbi and possibily "
-"put old transactions into separate files for archival. Use 'File/Archive "
-"transaction' menu to achieve this."
-msgstr ""
-"... vous pouvez archiver les données des années antérieures pour accélérer "
-"Grisbi et éventuellement archiver les données antérieures dans des fichiers "
-"séparés pour archivage.\n"
-"\n"
-"Utilisez les menus Fichier -> Créer une archive et Fichier -> Exporter une "
-"archive vers un fichier GSB/QIF/CSV...pour y parvenir."
-
-#: tips.txt:33
-msgid ""
-"You can configure fields displayed in the transaction form.\n"
-"\n"
-"Go to the <i>Preferences</i> dialog and select the <i>Form content</i> "
-"option. Then you can click on fields to be displayed and drag them through "
-"the form to adjust their position."
-msgstr ""
-"... vous pouvez configurer les champs visibles du formulaire des "
-"opérations.\n"
-" \n"
-" Allez dans les <i>Préférences</i> puis dans l'onglet <i>Formulaire des "
-"opérations</i> > <i>Contenu</i>. Vous pouvez ensuite cliquer sur les champs "
-"à afficher et les déplacer pour changer leur position. "
-
-#: tips.txt:29
-msgid ""
-"You can configure the contents of the transaction list.\n"
-"\n"
-"Right-click on a cell of the transaction list and select the <i>Change cell "
-"content</i> option. Then select any content you want and configure "
-"transaction list to your needs."
-msgstr ""
-"... vous pouvez configurer le contenu de la liste des opérations.\n"
-" \n"
-"Faites un clique-droit sur la liste d'opération et sélectionnez <i>Modifier "
-"le contenu de la cellule</i>. Sélectionnez ensuite le contenu désiré et "
-"configurez ainsi la liste des opérations selon vos besoins."
-
-#: tips.txt:13
-msgid ""
-"You can create categories or budgetary lines directly by typing them in "
-"transaction form.\n"
-"\n"
-"If you write a category or a budgetary line which name contains a ':', a sub-"
-"category or sub-budgetary line will be created as well."
-msgstr ""
-"... vous pouvez créer des catégories ou des imputations budgétaires en les "
-"tapant directement dans le formulaire de saisie d'opérations.\n"
-"\n"
-"Si vous écrivez une catégorie ou une imputation budgétaire dont le nom "
-"contient un « : », une sous catégorie ou une sous imputation budgétaire sera "
-"créée également. "
-
-#: tips.txt:21
-msgid ""
-"You can efficiently manage your professional expenses with Grisbi.\n"
-"\n"
-"Create a <i>Professional expenses</i> budgetary line and put all "
-"professional expenses there. When you are paid, split your salary as a "
-"split of transaction, with both a <i>Salary</i> part and a <i>Profesionnal "
-"expenses</i> part. \n"
-"\n"
-"Then, you can create a new report that sums up transactions from the "
-"<i>Profesionnal expenses</i> budgetary line and see the balance."
-msgstr ""
-"... vous pouvez de manière efficace gérer vos dépenses professionnelles avec "
-"Grisbi.\n"
-"\n"
-"Créez une ligne d'imputation budgétaire <i>Frais professionnels</i> et "
-"placez y toutes vos dépenses professionnelles. Quand vous serez payé, "
-"divisez votre salaire en opération ventilée, avec le <i>Salaire</i> d'une "
-"part et vos <i>Frais professionnels</i> d'autre part.\n"
-"\n"
-"Ensuite , vous pouvez créer un nouvel état qui fait la somme des opérations "
-"de la ligne d'imputation budgétaire <i>Frais professionnels</i> et en voir "
-"le total général. "
-
-#: tips.txt:17
-msgid ""
-"You can encrypt your Grisbi files to improve your privacy. Just select the "
-"'Encrypt Grisbi file' in preferences window and enter a password next time "
-"you save your file.\n"
-"\n"
-"Encryption is irreversible, if you loose your password, there is NO WAY to "
-"restore your Grisbi accounts. Use with caution !"
-msgstr ""
-"Vous pouvez crypter vos fichiers Grisbi pour améliorer votre vie privée.\n"
-"\n"
-"Sélectionnez l'option \"Crypter le fichier Grisbi\" dans l'onglet "
-"<i>Fichiers des Préférences</i> et entrez un mot de passe la prochaine fois "
-"que vous enregistrez votre fichier.\n"
-"\n"
-"Le chiffrement est irréversible, si vous perdez votre mot de passe, il n'y a "
-"aucun moyen de restaurer vos comptes Grisbi. A utiliser avec précaution!"
-
-#: tips.txt:55
-msgid ""
-"You can have future scheduled transactions 'executed' before their date, "
-msgstr ""
-"... vous pouvez prévoir d'exécuter des transactions futures avant leur date,"
-
-#: tips.txt:37
-msgid ""
-"You can hide annoying dialogs like this one, by clicking the <i>'Do not show "
-"this message again'</i> checkbox in this dialog. \n"
-"\n"
-"You can then activate them again by going to the <i>Preferences</i> window "
-"and then to the <i>Dialog and messages</i> option."
-msgstr ""
-"... vous pouvez cacher les messages gênants, comme celui-ci, en cochant la "
-"case <i>Ne plus montrer ce message</i> de cette fenêtre.\n"
-"\n"
-"Vous pouvez les afficher à nouveau en allant dans la fenêtre <i>Préférences</"
-"i> puis dans la section <i>Messages et alertes</i>."
-
-#: tips.txt:9
-msgid ""
-"You can organize transactions into budgetary lines, which are budgetary "
-"items (why money is spent) that can help you classify your spendings.\n"
-"\n"
-"Combined with categories (how money is spend), budgetary lines are a "
-"powerful way to analyse budget and to make reports."
-msgstr ""
-"... vous pouvez organiser les opérations en imputations budgétaires, qui "
-"sont des postes budgétaires (<i>pourquoi</i> l'argent est dépensé) vous "
-"permettant de classifier vos dépenses. \n"
-"\n"
-"En combinaison avec les catégories (<i>comment</i> l'argent est dépensé), "
-"les imputations budgétaires sont une manière d'analyser un budget et de "
-"faire des états."
-
-#: tips.txt:1
-msgid ""
-"You can reconcile transactions to match your real financial state as seen on "
-"your bank receipts. If you just spend 15mn each month reconciling Grisbi "
-"transactions with your bank receipts, you are guaranteed that your accounts "
-"are in perfect shape."
-msgstr ""
-"... vous pouvez rapprocher les transactions en fonction de votre état "
-"financier réel comme on le voit sur vos reçus de banque.\n"
-"\n"
-"Si vous dépensez chaque mois juste 15 mn pour mettre en concordance Grisbi "
-"avec vos relevés bancaires, vous êtes assurés que vos comptes sont en "
-"parfait état."
-
-#: tips.txt:53
-msgid "You can reorder accounts in the navigation list using drag & drop."
-msgstr ""
-"... vous pouvez réorganiser la liste des comptes en cliquant sur le nom du "
-"compte et en le déplaçant là ou vous le voulez."
-
-#: tips.txt:51
-msgid ""
-"You can sort the transaction list according to any criteria. Click on the "
-"column titles to sort transactions differently. For example, you can sort "
-"transactions by payee or category name."
-msgstr ""
-"... vous pouvez trier la liste des transactions selon n'importe quelle "
-"donnée.\n"
-"\n"
-"Cliquez avec le bouton droit de la souris sur le <i>titre la colonne</i> qui "
-"contient la donnée puis choisissez là comme critère. Par exemple vous pouvez "
-"trier la liste par tiers ou par catégorie."
-
-#: tips.txt:27
-msgid ""
-"You can use the import facility to automatically reconcile transactions "
-"against a QIF or OFX file from your online bank."
-msgstr ""
-"... vous pouvez utiliser l'assistant d'importation pour réconcilier "
-"automatiquement vos opérations avec un fichier QIF ou OFX de votre banque en "
-"ligne."
-
-#~ msgid ""
-#~ "You can double-click on any date entry to pop up a calendar in order to "
-#~ "enter a date more easily."
-#~ msgstr ""
-#~ "... vous pouvez double-cliquer sur tous les champs de saisie de date pour "
-#~ "faire apparaître un calendrier d'aide à la saisie des dates."
-
-#~ msgid ""
-#~ "You can press <tt>Ctrl-R</tt> to reconcile a transaction in transactions "
-#~ "list."
-#~ msgstr ""
-#~ "... vous pouvez taper <tt>Ctrl-R</tt> pour rapprocher une opération dans "
-#~ "la liste des opérations."
diff --git a/help/tips/tips.pot b/help/tips/tips.pot
deleted file mode 100644
index d0fd2e9..0000000
--- a/help/tips/tips.pot
+++ /dev/null
@@ -1,165 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-30 21:05+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: tips.txt:41
-msgid ""
-"By double cliking on a date field, you can pop up a calendar to select a "
-"date."
-msgstr ""
-
-#: tips.txt:3
-msgid ""
-"Grisbi automatically saves a copy of your work if it crashes.\n"
-"\n"
-"Thus it is unlikely that you loose any data in case Grisbi encounters a "
-"programming error."
-msgstr ""
-
-#: tips.txt:7
-msgid ""
-"Grisbi can import Gnucash files natively, then you don't loose your work "
-"when you switch from Gnucash to Grisbi."
-msgstr ""
-
-#: tips.txt:49
-msgid ""
-"If unused payees have accumulated in the course of time due to bank imports, "
-"you can remove all of them in one click! Just go to the <i>Payees</i> page "
-"and click on the 'Remove unused payees' button."
-msgstr ""
-
-#: tips.txt:57
-msgid ""
-"No more tip available ! Please send any tips you know to grisbi-devel at lists."
-"sourceforge.net so that we can include them in next version for all users."
-msgstr ""
-
-#: tips.txt:43
-msgid ""
-"There are shortcuts in date fields, to avoid typing date or selecting it "
-"with mouse.\n"
-"\n"
-"<b>+</b> and <b>-</b> increment and decrement date of one day, <i>Page Up</"
-"i> and <i>Page Down</i> increment and decrement date of one month ... and "
-"there are more, check out the manual."
-msgstr ""
-
-#: tips.txt:47
-msgid ""
-"You can archive previous financial years to speed up Grisbi and possibily "
-"put old transactions into separate files for archival. Use 'File/Archive "
-"transaction' menu to achieve this."
-msgstr ""
-
-#: tips.txt:33
-msgid ""
-"You can configure fields displayed in the transaction form.\n"
-"\n"
-"Go to the <i>Preferences</i> dialog and select the <i>Form content</i> "
-"option. Then you can click on fields to be displayed and drag them through "
-"the form to adjust their position."
-msgstr ""
-
-#: tips.txt:29
-msgid ""
-"You can configure the contents of the transaction list.\n"
-"\n"
-"Right-click on a cell of the transaction list and select the <i>Change cell "
-"content</i> option. Then select any content you want and configure "
-"transaction list to your needs."
-msgstr ""
-
-#: tips.txt:13
-msgid ""
-"You can create categories or budgetary lines directly by typing them in "
-"transaction form.\n"
-"\n"
-"If you write a category or a budgetary line which name contains a ':', a sub-"
-"category or sub-budgetary line will be created as well."
-msgstr ""
-
-#: tips.txt:21
-msgid ""
-"You can efficiently manage your professional expenses with Grisbi.\n"
-"\n"
-"Create a <i>Professional expenses</i> budgetary line and put all "
-"professional expenses there. When you are paid, split your salary as a "
-"split of transaction, with both a <i>Salary</i> part and a <i>Profesionnal "
-"expenses</i> part. \n"
-"\n"
-"Then, you can create a new report that sums up transactions from the "
-"<i>Profesionnal expenses</i> budgetary line and see the balance."
-msgstr ""
-
-#: tips.txt:17
-msgid ""
-"You can encrypt your Grisbi files to improve your privacy. Just select the "
-"'Encrypt Grisbi file' in preferences window and enter a password next time "
-"you save your file.\n"
-"\n"
-"Encryption is irreversible, if you loose your password, there is NO WAY to "
-"restore your Grisbi accounts. Use with caution !"
-msgstr ""
-
-#: tips.txt:55
-msgid ""
-"You can have future scheduled transactions 'executed' before their date, "
-msgstr ""
-
-#: tips.txt:37
-msgid ""
-"You can hide annoying dialogs like this one, by clicking the <i>'Do not show "
-"this message again'</i> checkbox in this dialog. \n"
-"\n"
-"You can then activate them again by going to the <i>Preferences</i> window "
-"and then to the <i>Dialog and messages</i> option."
-msgstr ""
-
-#: tips.txt:9
-msgid ""
-"You can organize transactions into budgetary lines, which are budgetary "
-"items (why money is spent) that can help you classify your spendings.\n"
-"\n"
-"Combined with categories (how money is spend), budgetary lines are a "
-"powerful way to analyse budget and to make reports."
-msgstr ""
-
-#: tips.txt:1
-msgid ""
-"You can reconcile transactions to match your real financial state as seen on "
-"your bank receipts. If you just spend 15mn each month reconciling Grisbi "
-"transactions with your bank receipts, you are guaranteed that your accounts "
-"are in perfect shape."
-msgstr ""
-
-#: tips.txt:53
-msgid "You can reorder accounts in the navigation list using drag & drop."
-msgstr ""
-
-#: tips.txt:51
-msgid ""
-"You can sort the transaction list according to any criteria. Click on the "
-"column titles to sort transactions differently. For example, you can sort "
-"transactions by payee or category name."
-msgstr ""
-
-#: tips.txt:27
-msgid ""
-"You can use the import facility to automatically reconcile transactions "
-"against a QIF or OFX file from your online bank."
-msgstr ""
diff --git a/help/tips/tips.txt b/help/tips/tips.txt
deleted file mode 100644
index cba69ae..0000000
--- a/help/tips/tips.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-1 _ "You can reconcile transactions to match your real financial state as seen on your bank receipts. If you just spend 15mn each month reconciling Grisbi transactions with your bank receipts, you are guaranteed that your accounts are in perfect shape."
-
-2 _ "Grisbi automatically saves a copy of your work if it crashes.
-
-Thus it is unlikely that you loose any data in case Grisbi encounters a programming error."
-
-3 _ "Grisbi can import Gnucash files natively, then you don't loose your work when you switch from Gnucash to Grisbi."
-
-4 _ "You can organize transactions into budgetary lines, which are budgetary items (why money is spent) that can help you classify your spendings.
-
-Combined with categories (how money is spend), budgetary lines are a powerful way to analyse budget and to make reports."
-
-5 _ "You can create categories or budgetary lines directly by typing them in transaction form.
-
-If you write a category or a budgetary line which name contains a ':', a sub-category or sub-budgetary line will be created as well."
-
-6 _ "You can encrypt your Grisbi files to improve your privacy. Just select the \'Encrypt Grisbi file\' in preferences window and enter a password next time you save your file.
-
-Encryption is irreversible, if you loose your password, there is NO WAY to restore your Grisbi accounts. Use with caution !"
-
-7 _ "You can efficiently manage your professional expenses with Grisbi.
-
-Create a <i>Professional expenses</i> budgetary line and put all professional expenses there. When you are paid, split your salary as a split of transaction, with both a <i>Salary</i> part and a <i>Profesionnal expenses</i> part.
-
-Then, you can create a new report that sums up transactions from the <i>Profesionnal expenses</i> budgetary line and see the balance."
-
-8 _ "You can use the import facility to automatically reconcile transactions against a QIF or OFX file from your online bank."
-
-9 _ "You can configure the contents of the transaction list.
-
-Right-click on a cell of the transaction list and select the <i>Change cell content</i> option. Then select any content you want and configure transaction list to your needs."
-
-10 _ "You can configure fields displayed in the transaction form.
-
-Go to the <i>Preferences</i> dialog and select the <i>Form content</i> option. Then you can click on fields to be displayed and drag them through the form to adjust their position."
-
-11 _ "You can hide annoying dialogs like this one, by clicking the <i>\'Do not show this message again\'</i> checkbox in this dialog.
-
-You can then activate them again by going to the <i>Preferences</i> window and then to the <i>Dialog and messages</i> option."
-
-12 _ "By double cliking on a date field, you can pop up a calendar to select a date."
-
-13 _ "There are shortcuts in date fields, to avoid typing date or selecting it with mouse.
-
-<b>+</b> and <b>-</b> increment and decrement date of one day, <i>Page Up</i> and <i>Page Down</i> increment and decrement date of one month ... and there are more, check out the manual."
-
-14 _ "You can archive previous financial years to speed up Grisbi and possibily put old transactions into separate files for archival. Use 'File/Archive transaction' menu to achieve this."
-
-15 _ "If unused payees have accumulated in the course of time due to bank imports, you can remove all of them in one click! Just go to the <i>Payees</i> page and click on the 'Remove unused payees' button."
-
-16 _ "You can sort the transaction list according to any criteria. Click on the column titles to sort transactions differently. For example, you can sort transactions by payee or category name."
-
-17 _ "You can reorder accounts in the navigation list using drag & drop."
-
-18 _ "You can have future scheduled transactions 'executed' before their date, "
-
-19 _ "No more tip available ! Please send any tips you know to grisbi-devel\@lists.sourceforge.net so that we can include them in next version for all users."
diff --git a/intl/COPYING.LIB-2.0 b/intl/COPYING.LIB-2.0
deleted file mode 100644
index 9c0633c..0000000
--- a/intl/COPYING.LIB-2.0
+++ /dev/null
@@ -1,482 +0,0 @@
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free
- Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/intl/COPYING.LIB-2.1 b/intl/COPYING.LIB-2.1
deleted file mode 100644
index c2c87d6..0000000
--- a/intl/COPYING.LIB-2.1
+++ /dev/null
@@ -1,516 +0,0 @@
-
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations
-below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-^L
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-^L
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control
-compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-^L
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-^L
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-^L
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-^L
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply, and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License
-may add an explicit geographical distribution limitation excluding those
-countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-^L
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-^L
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms
-of the ordinary General Public License).
-
- To apply these terms, attach the following notices to the library.
-It is safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
-
-
- <one line to give the library's name and a brief idea of what it
-does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- MA 02110-1301, USA
-
-Also add information on how to contact you by electronic and paper
-mail.
-
-You should also get your employer (if you work as a programmer) or
-your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James
-Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/intl/ChangeLog b/intl/ChangeLog
deleted file mode 100644
index 3ec9081..0000000
--- a/intl/ChangeLog
+++ /dev/null
@@ -1,4 +0,0 @@
-2007-11-07 GNU <bug-gnu-gettext at gnu.org>
-
- * Version 0.17 released.
-
diff --git a/intl/Makefile.in b/intl/Makefile.in
deleted file mode 100644
index cfed085..0000000
--- a/intl/Makefile.in
+++ /dev/null
@@ -1,587 +0,0 @@
-# Makefile for directory with message catalog handling library of GNU gettext
-# Copyright (C) 1995-1998, 2000-2007 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-top_builddir = ..
-
-# The VPATH variables allows builds with $builddir != $srcdir, assuming a
-# 'make' program that supports VPATH (such as GNU make). This line is removed
-# by autoconf automatically when "$(srcdir)" = ".".
-# In this directory, the VPATH handling is particular:
-# 1. If INTL_LIBTOOL_SUFFIX_PREFIX is 'l' (indicating a build with libtool),
-# the .c -> .lo rules carefully use $(srcdir), so that VPATH can be omitted.
-# 2. If PACKAGE = gettext-tools, VPATH _must_ be omitted, because otherwise
-# 'make' does the wrong thing if GNU gettext was configured with
-# "./configure --srcdir=`pwd`", namely it gets confused by the .lo and .la
-# files it finds in srcdir = ../../gettext-runtime/intl.
-VPATH = $(srcdir)
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-transform = @program_transform_name@
-libdir = @libdir@
-includedir = @includedir@
-datarootdir = @datarootdir@
-datadir = @datadir@
-localedir = $(datadir)/locale
-gettextsrcdir = $(datadir)/gettext/intl
-aliaspath = $(localedir)
-subdir = intl
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-# We use $(mkdir_p).
-# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
-# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
-# @install_sh@ does not start with $(SHELL), so we add it.
-# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
-# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
-# versions, $(mkinstalldirs) and $(install_sh) are unused.
-mkinstalldirs = $(SHELL) @install_sh@ -d
-install_sh = $(SHELL) @install_sh@
-MKDIR_P = @MKDIR_P@
-mkdir_p = @mkdir_p@
-
-l = @INTL_LIBTOOL_SUFFIX_PREFIX@
-
-AR = ar
-CC = @CC@
-LIBTOOL = @LIBTOOL@
-RANLIB = @RANLIB@
-YACC = @INTLBISON@ -y -d
-YFLAGS = --name-prefix=__gettext
-WINDRES = @WINDRES@
-
-# -DBUILDING_LIBINTL: Change expansion of LIBINTL_DLL_EXPORTED macro.
-# -DBUILDING_DLL: Change expansion of RELOCATABLE_DLL_EXPORTED macro.
-DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
--DLIBDIR=\"$(libdir)\" -DBUILDING_LIBINTL -DBUILDING_DLL -DIN_LIBINTL \
--DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
--Dset_relocation_prefix=libintl_set_relocation_prefix \
--Drelocate=libintl_relocate \
--DDEPENDS_ON_LIBICONV=1 @DEFS@
-CPPFLAGS = @CPPFLAGS@
-CFLAGS = @CFLAGS@ @CFLAG_VISIBILITY@
-LDFLAGS = @LDFLAGS@ $(LDFLAGS_ at WOE32DLL@)
-LDFLAGS_yes = -Wl,--export-all-symbols
-LDFLAGS_no =
-LIBS = @LIBS@
-
-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
-
-HEADERS = \
- gmo.h \
- gettextP.h \
- hash-string.h \
- loadinfo.h \
- plural-exp.h \
- eval-plural.h \
- localcharset.h \
- lock.h \
- relocatable.h \
- tsearch.h tsearch.c \
- xsize.h \
- printf-args.h printf-args.c \
- printf-parse.h wprintf-parse.h printf-parse.c \
- vasnprintf.h vasnwprintf.h vasnprintf.c \
- os2compat.h \
- libgnuintl.h.in
-SOURCES = \
- bindtextdom.c \
- dcgettext.c \
- dgettext.c \
- gettext.c \
- finddomain.c \
- hash-string.c \
- loadmsgcat.c \
- localealias.c \
- textdomain.c \
- l10nflist.c \
- explodename.c \
- dcigettext.c \
- dcngettext.c \
- dngettext.c \
- ngettext.c \
- plural.y \
- plural-exp.c \
- localcharset.c \
- lock.c \
- relocatable.c \
- langprefs.c \
- localename.c \
- log.c \
- printf.c \
- version.c \
- osdep.c \
- os2compat.c \
- intl-exports.c \
- intl-compat.c
-OBJECTS = \
- bindtextdom.$lo \
- dcgettext.$lo \
- dgettext.$lo \
- gettext.$lo \
- finddomain.$lo \
- hash-string.$lo \
- loadmsgcat.$lo \
- localealias.$lo \
- textdomain.$lo \
- l10nflist.$lo \
- explodename.$lo \
- dcigettext.$lo \
- dcngettext.$lo \
- dngettext.$lo \
- ngettext.$lo \
- plural.$lo \
- plural-exp.$lo \
- localcharset.$lo \
- lock.$lo \
- relocatable.$lo \
- langprefs.$lo \
- localename.$lo \
- log.$lo \
- printf.$lo \
- version.$lo \
- osdep.$lo \
- intl-compat.$lo
-OBJECTS_RES_yes = libintl.res
-OBJECTS_RES_no =
-DISTFILES.common = Makefile.in \
-config.charset locale.alias ref-add.sin ref-del.sin export.h libintl.rc \
-$(HEADERS) $(SOURCES)
-DISTFILES.generated = plural.c
-DISTFILES.normal = VERSION
-DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc README.woe32
-DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
-COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h \
-libgnuintl.h_vms Makefile.vms libgnuintl.h.msvc-static \
-libgnuintl.h.msvc-shared Makefile.msvc
-
-all: all- at USE_INCLUDED_LIBINTL@
-all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
-all-no: all-no- at BUILD_INCLUDED_LIBINTL@
-all-no-yes: libgnuintl.$la
-all-no-no:
-
-libintl.a libgnuintl.a: $(OBJECTS)
- rm -f $@
- $(AR) cru $@ $(OBJECTS)
- $(RANLIB) $@
-
-libintl.la libgnuintl.la: $(OBJECTS) $(OBJECTS_RES_ at WOE32@)
- $(LIBTOOL) --mode=link \
- $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
- $(OBJECTS) @LTLIBICONV@ @INTL_MACOSX_LIBS@ $(LIBS) @LTLIBTHREAD@ @LTLIBC@ \
- $(OBJECTS_RES_ at WOE32@) \
- -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
- -rpath $(libdir) \
- -no-undefined
-
-# Libtool's library version information for libintl.
-# Before making a gettext release, the gettext maintainer must change this
-# according to the libtool documentation, section "Library interface versions".
-# Maintainers of other packages that include the intl directory must *not*
-# change these values.
-LTV_CURRENT=8
-LTV_REVISION=2
-LTV_AGE=0
-
-.SUFFIXES:
-.SUFFIXES: .c .y .o .lo .sin .sed
-
-.c.o:
- $(COMPILE) $<
-
-.y.c:
- $(YACC) $(YFLAGS) --output $@ $<
- rm -f $*.h
-
-bindtextdom.lo: $(srcdir)/bindtextdom.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c
-dcgettext.lo: $(srcdir)/dcgettext.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c
-dgettext.lo: $(srcdir)/dgettext.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c
-gettext.lo: $(srcdir)/gettext.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c
-finddomain.lo: $(srcdir)/finddomain.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c
-hash-string.lo: $(srcdir)/hash-string.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/hash-string.c
-loadmsgcat.lo: $(srcdir)/loadmsgcat.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c
-localealias.lo: $(srcdir)/localealias.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c
-textdomain.lo: $(srcdir)/textdomain.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c
-l10nflist.lo: $(srcdir)/l10nflist.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c
-explodename.lo: $(srcdir)/explodename.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c
-dcigettext.lo: $(srcdir)/dcigettext.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c
-dcngettext.lo: $(srcdir)/dcngettext.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c
-dngettext.lo: $(srcdir)/dngettext.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c
-ngettext.lo: $(srcdir)/ngettext.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c
-plural.lo: $(srcdir)/plural.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c
-plural-exp.lo: $(srcdir)/plural-exp.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c
-localcharset.lo: $(srcdir)/localcharset.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c
-lock.lo: $(srcdir)/lock.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/lock.c
-relocatable.lo: $(srcdir)/relocatable.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c
-langprefs.lo: $(srcdir)/langprefs.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/langprefs.c
-localename.lo: $(srcdir)/localename.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
-log.lo: $(srcdir)/log.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
-printf.lo: $(srcdir)/printf.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c
-version.lo: $(srcdir)/version.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/version.c
-osdep.lo: $(srcdir)/osdep.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
-intl-compat.lo: $(srcdir)/intl-compat.c
- $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
-
-# This rule is executed only on Woe32 systems.
-# The following sed expressions come from the windres-options script. They are
-# inlined here, so that they can be written in a Makefile without requiring a
-# temporary file. They must contain literal newlines rather than semicolons,
-# so that they work with the sed-3.02 that is shipped with MSYS. We can use
-# GNU bash's $'\n' syntax to obtain such a newline.
-libintl.res: $(srcdir)/libintl.rc
- nl=$$'\n'; \
- sed_extract_major='/^[0-9]/{'$${nl}'s/^\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \
- sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \
- sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \
- $(WINDRES) \
- "-DPACKAGE_VERSION_STRING=\\\"$(VERSION)\\\"" \
- "-DPACKAGE_VERSION_MAJOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_major"` \
- "-DPACKAGE_VERSION_MINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_minor"` \
- "-DPACKAGE_VERSION_SUBMINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_subminor"` \
- -i $(srcdir)/libintl.rc -o libintl.res --output-format=coff
-
-ref-add.sed: $(srcdir)/ref-add.sin
- sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
- mv t-ref-add.sed ref-add.sed
-ref-del.sed: $(srcdir)/ref-del.sin
- sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
- mv t-ref-del.sed ref-del.sed
-
-INCLUDES = -I. -I$(srcdir) -I..
-
-libgnuintl.h: $(srcdir)/libgnuintl.h.in
- sed -e '/IN_LIBGLOCALE/d' \
- -e 's,@''HAVE_POSIX_PRINTF''@, at HAVE_POSIX_PRINTF@,g' \
- -e 's,@''HAVE_ASPRINTF''@, at HAVE_ASPRINTF@,g' \
- -e 's,@''HAVE_SNPRINTF''@, at HAVE_SNPRINTF@,g' \
- -e 's,@''HAVE_WPRINTF''@, at HAVE_WPRINTF@,g' \
- < $(srcdir)/libgnuintl.h.in \
- | if test '@WOE32DLL@' = yes; then \
- sed -e 's/extern \([^()]*\);/extern __declspec (dllimport) \1;/'; \
- else \
- cat; \
- fi \
- | sed -e 's/extern \([^"]\)/extern LIBINTL_DLL_EXPORTED \1/' \
- -e "/#define _LIBINTL_H/r $(srcdir)/export.h" \
- | sed -e 's,@''HAVE_VISIBILITY''@, at HAVE_VISIBILITY@,g' \
- > libgnuintl.h
-
-libintl.h: $(srcdir)/libgnuintl.h.in
- sed -e '/IN_LIBGLOCALE/d' \
- -e 's,@''HAVE_POSIX_PRINTF''@, at HAVE_POSIX_PRINTF@,g' \
- -e 's,@''HAVE_ASPRINTF''@, at HAVE_ASPRINTF@,g' \
- -e 's,@''HAVE_SNPRINTF''@, at HAVE_SNPRINTF@,g' \
- -e 's,@''HAVE_WPRINTF''@, at HAVE_WPRINTF@,g' \
- < $(srcdir)/libgnuintl.h.in > libintl.h
-
-charset.alias: $(srcdir)/config.charset
- $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
- mv t-$@ $@
-
-check: all
-
-# We must not install the libintl.h/libintl.a files if we are on a
-# system which has the GNU gettext() function in its C library or in a
-# separate library.
-# If you want to use the one which comes with this version of the
-# package, you have to use `configure --with-included-gettext'.
-install: install-exec install-data
-install-exec: all
- if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
- && test '@USE_INCLUDED_LIBINTL@' = yes; then \
- $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
- $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
- $(LIBTOOL) --mode=install \
- $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
- if test "@RELOCATABLE@" = yes; then \
- dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
- if test -n "$$dependencies"; then \
- rm -f $(DESTDIR)$(libdir)/libintl.la; \
- fi; \
- fi; \
- else \
- : ; \
- fi
- if test "$(PACKAGE)" = "gettext-tools" \
- && test '@USE_INCLUDED_LIBINTL@' = no \
- && test @GLIBC2@ != no; then \
- $(mkdir_p) $(DESTDIR)$(libdir); \
- $(LIBTOOL) --mode=install \
- $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \
- rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
- $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \
- $(LIBTOOL) --mode=uninstall \
- rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \
- else \
- : ; \
- fi
- if test '@USE_INCLUDED_LIBINTL@' = yes; then \
- test @GLIBC21@ != no || $(mkdir_p) $(DESTDIR)$(libdir); \
- temp=$(DESTDIR)$(libdir)/t-charset.alias; \
- dest=$(DESTDIR)$(libdir)/charset.alias; \
- if test -f $(DESTDIR)$(libdir)/charset.alias; then \
- orig=$(DESTDIR)$(libdir)/charset.alias; \
- sed -f ref-add.sed $$orig > $$temp; \
- $(INSTALL_DATA) $$temp $$dest; \
- rm -f $$temp; \
- else \
- if test @GLIBC21@ = no; then \
- orig=charset.alias; \
- sed -f ref-add.sed $$orig > $$temp; \
- $(INSTALL_DATA) $$temp $$dest; \
- rm -f $$temp; \
- fi; \
- fi; \
- $(mkdir_p) $(DESTDIR)$(localedir); \
- test -f $(DESTDIR)$(localedir)/locale.alias \
- && orig=$(DESTDIR)$(localedir)/locale.alias \
- || orig=$(srcdir)/locale.alias; \
- temp=$(DESTDIR)$(localedir)/t-locale.alias; \
- dest=$(DESTDIR)$(localedir)/locale.alias; \
- sed -f ref-add.sed $$orig > $$temp; \
- $(INSTALL_DATA) $$temp $$dest; \
- rm -f $$temp; \
- else \
- : ; \
- fi
-install-data: all
- if test "$(PACKAGE)" = "gettext-tools"; then \
- $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
- $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
- $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
- dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \
- for file in $$dists; do \
- $(INSTALL_DATA) $(srcdir)/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
- dists="$(DISTFILES.generated)"; \
- for file in $$dists; do \
- if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
- $(INSTALL_DATA) $$dir/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- dists="$(DISTFILES.obsolete)"; \
- for file in $$dists; do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-
-install-strip: install
-
-install-dvi install-html install-info install-ps install-pdf:
-
-installdirs:
- if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
- && test '@USE_INCLUDED_LIBINTL@' = yes; then \
- $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
- else \
- : ; \
- fi
- if test "$(PACKAGE)" = "gettext-tools" \
- && test '@USE_INCLUDED_LIBINTL@' = no \
- && test @GLIBC2@ != no; then \
- $(mkdir_p) $(DESTDIR)$(libdir); \
- else \
- : ; \
- fi
- if test '@USE_INCLUDED_LIBINTL@' = yes; then \
- test @GLIBC21@ != no || $(mkdir_p) $(DESTDIR)$(libdir); \
- $(mkdir_p) $(DESTDIR)$(localedir); \
- else \
- : ; \
- fi
- if test "$(PACKAGE)" = "gettext-tools"; then \
- $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
- else \
- : ; \
- fi
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall:
- if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
- && test '@USE_INCLUDED_LIBINTL@' = yes; then \
- rm -f $(DESTDIR)$(includedir)/libintl.h; \
- $(LIBTOOL) --mode=uninstall \
- rm -f $(DESTDIR)$(libdir)/libintl.$la; \
- else \
- : ; \
- fi
- if test "$(PACKAGE)" = "gettext-tools" \
- && test '@USE_INCLUDED_LIBINTL@' = no \
- && test @GLIBC2@ != no; then \
- rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
- else \
- : ; \
- fi
- if test '@USE_INCLUDED_LIBINTL@' = yes; then \
- if test -f $(DESTDIR)$(libdir)/charset.alias; then \
- temp=$(DESTDIR)$(libdir)/t-charset.alias; \
- dest=$(DESTDIR)$(libdir)/charset.alias; \
- sed -f ref-del.sed $$dest > $$temp; \
- if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
- rm -f $$dest; \
- else \
- $(INSTALL_DATA) $$temp $$dest; \
- fi; \
- rm -f $$temp; \
- fi; \
- if test -f $(DESTDIR)$(localedir)/locale.alias; then \
- temp=$(DESTDIR)$(localedir)/t-locale.alias; \
- dest=$(DESTDIR)$(localedir)/locale.alias; \
- sed -f ref-del.sed $$dest > $$temp; \
- if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
- rm -f $$dest; \
- else \
- $(INSTALL_DATA) $$temp $$dest; \
- fi; \
- rm -f $$temp; \
- fi; \
- else \
- : ; \
- fi
- if test "$(PACKAGE)" = "gettext-tools"; then \
- for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-
-info dvi ps pdf html:
-
-$(OBJECTS): ../config.h libgnuintl.h
-bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h
-hash-string.$lo dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h
-explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h
-dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
-dcigettext.$lo: $(srcdir)/eval-plural.h
-localcharset.$lo: $(srcdir)/localcharset.h
-bindtextdom.$lo dcigettext.$lo finddomain.$lo loadmsgcat.$lo localealias.$lo lock.$lo log.$lo: $(srcdir)/lock.h
-localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
-printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c
-
-# A bison-2.1 generated plural.c includes <libintl.h> if ENABLE_NLS.
-PLURAL_DEPS_yes = libintl.h
-PLURAL_DEPS_no =
-plural.$lo: $(PLURAL_DEPS_ at USE_INCLUDED_LIBINTL@)
-
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES)
- here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
-
-ctags: CTAGS
-
-CTAGS: $(HEADERS) $(SOURCES)
- here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
-
-id: ID
-
-ID: $(HEADERS) $(SOURCES)
- here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
-
-
-mostlyclean:
- rm -f *.a *.la *.o *.obj *.lo libintl.res core core.*
- rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed
- rm -f -r .libs _libs
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile ID TAGS
- if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
- rm -f ChangeLog.inst $(DISTFILES.normal); \
- else \
- : ; \
- fi
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-
-# GNU gettext needs not contain the file `VERSION' but contains some
-# other files which should not be distributed in other packages.
-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir: Makefile
- if test "$(PACKAGE)" = "gettext-tools"; then \
- : ; \
- else \
- if test "$(PACKAGE)" = "gettext-runtime"; then \
- additional="$(DISTFILES.gettext)"; \
- else \
- additional="$(DISTFILES.normal)"; \
- fi; \
- $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
- for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
- if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
- cp -p $$dir/$$file $(distdir) || test $$file = Makefile.in || exit 1; \
- done; \
- fi
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) && $(SHELL) ./config.status
-# This would be more efficient, but doesn't work any more with autoconf-2.57,
-# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used.
-# cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/intl/VERSION b/intl/VERSION
deleted file mode 100644
index 889d4e9..0000000
--- a/intl/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-GNU gettext library from gettext-0.17
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
deleted file mode 100644
index dab5d4f..0000000
--- a/intl/bindtextdom.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/* Implementation of the bindtextdomain(3) function
- Copyright (C) 1995-1998, 2000-2003, 2005-2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* Handle multi-threaded applications. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-# define gl_rwlock_define __libc_rwlock_define
-# define gl_rwlock_wrlock __libc_rwlock_wrlock
-# define gl_rwlock_unlock __libc_rwlock_unlock
-#else
-# include "lock.h"
-#endif
-
-/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
-#ifndef offsetof
-# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Lock variable to protect the global data in the gettext implementation. */
-gl_rwlock_define (extern, _nl_state_lock attribute_hidden)
-
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define BINDTEXTDOMAIN __bindtextdomain
-# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
-# ifndef strdup
-# define strdup(str) __strdup (str)
-# endif
-#else
-# define BINDTEXTDOMAIN libintl_bindtextdomain
-# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
-#endif
-
-/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
- to be used for the DOMAINNAME message catalog.
- If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
- modified, only the current value is returned.
- If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
- modified nor returned. */
-static void
-set_binding_values (const char *domainname,
- const char **dirnamep, const char **codesetp)
-{
- struct binding *binding;
- int modified;
-
- /* Some sanity checks. */
- if (domainname == NULL || domainname[0] == '\0')
- {
- if (dirnamep)
- *dirnamep = NULL;
- if (codesetp)
- *codesetp = NULL;
- return;
- }
-
- gl_rwlock_wrlock (_nl_state_lock);
-
- modified = 0;
-
- for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
- {
- int compare = strcmp (domainname, binding->domainname);
- if (compare == 0)
- /* We found it! */
- break;
- if (compare < 0)
- {
- /* It is not in the list. */
- binding = NULL;
- break;
- }
- }
-
- if (binding != NULL)
- {
- if (dirnamep)
- {
- const char *dirname = *dirnamep;
-
- if (dirname == NULL)
- /* The current binding has be to returned. */
- *dirnamep = binding->dirname;
- else
- {
- /* The domain is already bound. If the new value and the old
- one are equal we simply do nothing. Otherwise replace the
- old binding. */
- char *result = binding->dirname;
- if (strcmp (dirname, result) != 0)
- {
- if (strcmp (dirname, _nl_default_dirname) == 0)
- result = (char *) _nl_default_dirname;
- else
- {
-#if defined _LIBC || defined HAVE_STRDUP
- result = strdup (dirname);
-#else
- size_t len = strlen (dirname) + 1;
- result = (char *) malloc (len);
- if (__builtin_expect (result != NULL, 1))
- memcpy (result, dirname, len);
-#endif
- }
-
- if (__builtin_expect (result != NULL, 1))
- {
- if (binding->dirname != _nl_default_dirname)
- free (binding->dirname);
-
- binding->dirname = result;
- modified = 1;
- }
- }
- *dirnamep = result;
- }
- }
-
- if (codesetp)
- {
- const char *codeset = *codesetp;
-
- if (codeset == NULL)
- /* The current binding has be to returned. */
- *codesetp = binding->codeset;
- else
- {
- /* The domain is already bound. If the new value and the old
- one are equal we simply do nothing. Otherwise replace the
- old binding. */
- char *result = binding->codeset;
- if (result == NULL || strcmp (codeset, result) != 0)
- {
-#if defined _LIBC || defined HAVE_STRDUP
- result = strdup (codeset);
-#else
- size_t len = strlen (codeset) + 1;
- result = (char *) malloc (len);
- if (__builtin_expect (result != NULL, 1))
- memcpy (result, codeset, len);
-#endif
-
- if (__builtin_expect (result != NULL, 1))
- {
- if (binding->codeset != NULL)
- free (binding->codeset);
-
- binding->codeset = result;
- modified = 1;
- }
- }
- *codesetp = result;
- }
- }
- }
- else if ((dirnamep == NULL || *dirnamep == NULL)
- && (codesetp == NULL || *codesetp == NULL))
- {
- /* Simply return the default values. */
- if (dirnamep)
- *dirnamep = _nl_default_dirname;
- if (codesetp)
- *codesetp = NULL;
- }
- else
- {
- /* We have to create a new binding. */
- size_t len = strlen (domainname) + 1;
- struct binding *new_binding =
- (struct binding *) malloc (offsetof (struct binding, domainname) + len);
-
- if (__builtin_expect (new_binding == NULL, 0))
- goto failed;
-
- memcpy (new_binding->domainname, domainname, len);
-
- if (dirnamep)
- {
- const char *dirname = *dirnamep;
-
- if (dirname == NULL)
- /* The default value. */
- dirname = _nl_default_dirname;
- else
- {
- if (strcmp (dirname, _nl_default_dirname) == 0)
- dirname = _nl_default_dirname;
- else
- {
- char *result;
-#if defined _LIBC || defined HAVE_STRDUP
- result = strdup (dirname);
- if (__builtin_expect (result == NULL, 0))
- goto failed_dirname;
-#else
- size_t len = strlen (dirname) + 1;
- result = (char *) malloc (len);
- if (__builtin_expect (result == NULL, 0))
- goto failed_dirname;
- memcpy (result, dirname, len);
-#endif
- dirname = result;
- }
- }
- *dirnamep = dirname;
- new_binding->dirname = (char *) dirname;
- }
- else
- /* The default value. */
- new_binding->dirname = (char *) _nl_default_dirname;
-
- if (codesetp)
- {
- const char *codeset = *codesetp;
-
- if (codeset != NULL)
- {
- char *result;
-
-#if defined _LIBC || defined HAVE_STRDUP
- result = strdup (codeset);
- if (__builtin_expect (result == NULL, 0))
- goto failed_codeset;
-#else
- size_t len = strlen (codeset) + 1;
- result = (char *) malloc (len);
- if (__builtin_expect (result == NULL, 0))
- goto failed_codeset;
- memcpy (result, codeset, len);
-#endif
- codeset = result;
- }
- *codesetp = codeset;
- new_binding->codeset = (char *) codeset;
- }
- else
- new_binding->codeset = NULL;
-
- /* Now enqueue it. */
- if (_nl_domain_bindings == NULL
- || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
- {
- new_binding->next = _nl_domain_bindings;
- _nl_domain_bindings = new_binding;
- }
- else
- {
- binding = _nl_domain_bindings;
- while (binding->next != NULL
- && strcmp (domainname, binding->next->domainname) > 0)
- binding = binding->next;
-
- new_binding->next = binding->next;
- binding->next = new_binding;
- }
-
- modified = 1;
-
- /* Here we deal with memory allocation failures. */
- if (0)
- {
- failed_codeset:
- if (new_binding->dirname != _nl_default_dirname)
- free (new_binding->dirname);
- failed_dirname:
- free (new_binding);
- failed:
- if (dirnamep)
- *dirnamep = NULL;
- if (codesetp)
- *codesetp = NULL;
- }
- }
-
- /* If we modified any binding, we flush the caches. */
- if (modified)
- ++_nl_msg_cat_cntr;
-
- gl_rwlock_unlock (_nl_state_lock);
-}
-
-/* Specify that the DOMAINNAME message catalog will be found
- in DIRNAME rather than in the system locale data base. */
-char *
-BINDTEXTDOMAIN (const char *domainname, const char *dirname)
-{
- set_binding_values (domainname, &dirname, NULL);
- return (char *) dirname;
-}
-
-/* Specify the character encoding in which the messages from the
- DOMAINNAME message catalog will be returned. */
-char *
-BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
-{
- set_binding_values (domainname, NULL, &codeset);
- return (char *) codeset;
-}
-
-#ifdef _LIBC
-/* Aliases for function names in GNU C Library. */
-weak_alias (__bindtextdomain, bindtextdomain);
-weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
-#endif
diff --git a/intl/config.charset b/intl/config.charset
deleted file mode 100644
index e8c258b..0000000
--- a/intl/config.charset
+++ /dev/null
@@ -1,640 +0,0 @@
-#! /bin/sh
-# Output a system dependent table of character encoding aliases.
-#
-# Copyright (C) 2000-2004, 2006 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-#
-# The table consists of lines of the form
-# ALIAS CANONICAL
-#
-# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
-# ALIAS is compared in a case sensitive way.
-#
-# CANONICAL is the GNU canonical name for this character encoding.
-# It must be an encoding supported by libiconv. Support by GNU libc is
-# also desirable. CANONICAL is case insensitive. Usually an upper case
-# MIME charset name is preferred.
-# The current list of GNU canonical charset names is as follows.
-#
-# name MIME? used by which systems
-# ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin
-# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd darwin
-# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd darwin
-# ISO-8859-3 Y glibc solaris
-# ISO-8859-4 Y osf solaris freebsd netbsd darwin
-# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd darwin
-# ISO-8859-6 Y glibc aix hpux solaris
-# ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd darwin
-# ISO-8859-8 Y glibc aix hpux osf solaris
-# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin
-# ISO-8859-13 glibc netbsd darwin
-# ISO-8859-14 glibc
-# ISO-8859-15 glibc aix osf solaris freebsd darwin
-# KOI8-R Y glibc solaris freebsd netbsd darwin
-# KOI8-U Y glibc freebsd netbsd darwin
-# KOI8-T glibc
-# CP437 dos
-# CP775 dos
-# CP850 aix osf dos
-# CP852 dos
-# CP855 dos
-# CP856 aix
-# CP857 dos
-# CP861 dos
-# CP862 dos
-# CP864 dos
-# CP865 dos
-# CP866 freebsd netbsd darwin dos
-# CP869 dos
-# CP874 woe32 dos
-# CP922 aix
-# CP932 aix woe32 dos
-# CP943 aix
-# CP949 osf woe32 dos
-# CP950 woe32 dos
-# CP1046 aix
-# CP1124 aix
-# CP1125 dos
-# CP1129 aix
-# CP1250 woe32
-# CP1251 glibc solaris netbsd darwin woe32
-# CP1252 aix woe32
-# CP1253 woe32
-# CP1254 woe32
-# CP1255 glibc woe32
-# CP1256 woe32
-# CP1257 woe32
-# GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin
-# EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin
-# EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin
-# EUC-TW glibc aix hpux irix osf solaris netbsd
-# BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin
-# BIG5-HKSCS glibc solaris
-# GBK glibc aix osf solaris woe32 dos
-# GB18030 glibc solaris netbsd
-# SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin
-# JOHAB glibc solaris woe32
-# TIS-620 glibc aix hpux osf solaris
-# VISCII Y glibc
-# TCVN5712-1 glibc
-# GEORGIAN-PS glibc
-# HP-ROMAN8 hpux
-# HP-ARABIC8 hpux
-# HP-GREEK8 hpux
-# HP-HEBREW8 hpux
-# HP-TURKISH8 hpux
-# HP-KANA8 hpux
-# DEC-KANJI osf
-# DEC-HANYU osf
-# UTF-8 Y glibc aix hpux osf solaris netbsd darwin
-#
-# Note: Names which are not marked as being a MIME name should not be used in
-# Internet protocols for information interchange (mail, news, etc.).
-#
-# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
-# must understand both names and treat them as equivalent.
-#
-# The first argument passed to this file is the canonical host specification,
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-
-host="$1"
-os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
-echo "# This file contains a table of character encoding aliases,"
-echo "# suitable for operating system '${os}'."
-echo "# It was automatically generated from config.charset."
-# List of references, updated during installation:
-echo "# Packages using this file: "
-case "$os" in
- linux-gnulibc1*)
- # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
- # localcharset.c falls back to using the full locale name
- # from the environment variables.
- echo "C ASCII"
- echo "POSIX ASCII"
- for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
- en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
- en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
- es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
- et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
- fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
- it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
- sv_FI sv_SE; do
- echo "$l ISO-8859-1"
- echo "$l.iso-8859-1 ISO-8859-1"
- echo "$l.iso-8859-15 ISO-8859-15"
- echo "$l.iso-8859-15 at euro ISO-8859-15"
- echo "$l at euro ISO-8859-15"
- echo "$l.cp-437 CP437"
- echo "$l.cp-850 CP850"
- echo "$l.cp-1252 CP1252"
- echo "$l.cp-1252 at euro CP1252"
- #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
- echo "$l.utf-8 UTF-8"
- echo "$l.utf-8 at euro UTF-8"
- done
- for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
- sl_SI sr sr_CS sr_YU; do
- echo "$l ISO-8859-2"
- echo "$l.iso-8859-2 ISO-8859-2"
- echo "$l.cp-852 CP852"
- echo "$l.cp-1250 CP1250"
- echo "$l.utf-8 UTF-8"
- done
- for l in mk mk_MK ru ru_RU; do
- echo "$l ISO-8859-5"
- echo "$l.iso-8859-5 ISO-8859-5"
- echo "$l.koi8-r KOI8-R"
- echo "$l.cp-866 CP866"
- echo "$l.cp-1251 CP1251"
- echo "$l.utf-8 UTF-8"
- done
- for l in ar ar_SA; do
- echo "$l ISO-8859-6"
- echo "$l.iso-8859-6 ISO-8859-6"
- echo "$l.cp-864 CP864"
- #echo "$l.cp-868 CP868" # not a commonly used encoding
- echo "$l.cp-1256 CP1256"
- echo "$l.utf-8 UTF-8"
- done
- for l in el el_GR gr gr_GR; do
- echo "$l ISO-8859-7"
- echo "$l.iso-8859-7 ISO-8859-7"
- echo "$l.cp-869 CP869"
- echo "$l.cp-1253 CP1253"
- echo "$l.cp-1253 at euro CP1253"
- echo "$l.utf-8 UTF-8"
- echo "$l.utf-8 at euro UTF-8"
- done
- for l in he he_IL iw iw_IL; do
- echo "$l ISO-8859-8"
- echo "$l.iso-8859-8 ISO-8859-8"
- echo "$l.cp-862 CP862"
- echo "$l.cp-1255 CP1255"
- echo "$l.utf-8 UTF-8"
- done
- for l in tr tr_TR; do
- echo "$l ISO-8859-9"
- echo "$l.iso-8859-9 ISO-8859-9"
- echo "$l.cp-857 CP857"
- echo "$l.cp-1254 CP1254"
- echo "$l.utf-8 UTF-8"
- done
- for l in lt lt_LT lv lv_LV; do
- #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
- echo "$l ISO-8859-13"
- done
- for l in ru_UA uk uk_UA; do
- echo "$l KOI8-U"
- done
- for l in zh zh_CN; do
- #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
- echo "$l GB2312"
- done
- for l in ja ja_JP ja_JP.EUC; do
- echo "$l EUC-JP"
- done
- for l in ko ko_KR; do
- echo "$l EUC-KR"
- done
- for l in th th_TH; do
- echo "$l TIS-620"
- done
- for l in fa fa_IR; do
- #echo "$l ISIRI-3342" # a broken encoding
- echo "$l.utf-8 UTF-8"
- done
- ;;
- linux* | *-gnu*)
- # With glibc-2.1 or newer, we don't need any canonicalization,
- # because glibc has iconv and both glibc and libiconv support all
- # GNU canonical names directly. Therefore, the Makefile does not
- # need to install the alias file at all.
- # The following applies only to glibc-2.0.x and older libcs.
- echo "ISO_646.IRV:1983 ASCII"
- ;;
- aix*)
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-6 ISO-8859-6"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-8 ISO-8859-8"
- echo "ISO8859-9 ISO-8859-9"
- echo "ISO8859-15 ISO-8859-15"
- echo "IBM-850 CP850"
- echo "IBM-856 CP856"
- echo "IBM-921 ISO-8859-13"
- echo "IBM-922 CP922"
- echo "IBM-932 CP932"
- echo "IBM-943 CP943"
- echo "IBM-1046 CP1046"
- echo "IBM-1124 CP1124"
- echo "IBM-1129 CP1129"
- echo "IBM-1252 CP1252"
- echo "IBM-eucCN GB2312"
- echo "IBM-eucJP EUC-JP"
- echo "IBM-eucKR EUC-KR"
- echo "IBM-eucTW EUC-TW"
- echo "big5 BIG5"
- echo "GBK GBK"
- echo "TIS-620 TIS-620"
- echo "UTF-8 UTF-8"
- ;;
- hpux*)
- echo "iso88591 ISO-8859-1"
- echo "iso88592 ISO-8859-2"
- echo "iso88595 ISO-8859-5"
- echo "iso88596 ISO-8859-6"
- echo "iso88597 ISO-8859-7"
- echo "iso88598 ISO-8859-8"
- echo "iso88599 ISO-8859-9"
- echo "iso885915 ISO-8859-15"
- echo "roman8 HP-ROMAN8"
- echo "arabic8 HP-ARABIC8"
- echo "greek8 HP-GREEK8"
- echo "hebrew8 HP-HEBREW8"
- echo "turkish8 HP-TURKISH8"
- echo "kana8 HP-KANA8"
- echo "tis620 TIS-620"
- echo "big5 BIG5"
- echo "eucJP EUC-JP"
- echo "eucKR EUC-KR"
- echo "eucTW EUC-TW"
- echo "hp15CN GB2312"
- #echo "ccdc ?" # what is this?
- echo "SJIS SHIFT_JIS"
- echo "utf8 UTF-8"
- ;;
- irix*)
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-9 ISO-8859-9"
- echo "eucCN GB2312"
- echo "eucJP EUC-JP"
- echo "eucKR EUC-KR"
- echo "eucTW EUC-TW"
- ;;
- osf*)
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-4 ISO-8859-4"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-8 ISO-8859-8"
- echo "ISO8859-9 ISO-8859-9"
- echo "ISO8859-15 ISO-8859-15"
- echo "cp850 CP850"
- echo "big5 BIG5"
- echo "dechanyu DEC-HANYU"
- echo "dechanzi GB2312"
- echo "deckanji DEC-KANJI"
- echo "deckorean EUC-KR"
- echo "eucJP EUC-JP"
- echo "eucKR EUC-KR"
- echo "eucTW EUC-TW"
- echo "GBK GBK"
- echo "KSC5601 CP949"
- echo "sdeckanji EUC-JP"
- echo "SJIS SHIFT_JIS"
- echo "TACTIS TIS-620"
- echo "UTF-8 UTF-8"
- ;;
- solaris*)
- echo "646 ASCII"
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-3 ISO-8859-3"
- echo "ISO8859-4 ISO-8859-4"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-6 ISO-8859-6"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-8 ISO-8859-8"
- echo "ISO8859-9 ISO-8859-9"
- echo "ISO8859-15 ISO-8859-15"
- echo "koi8-r KOI8-R"
- echo "ansi-1251 CP1251"
- echo "BIG5 BIG5"
- echo "Big5-HKSCS BIG5-HKSCS"
- echo "gb2312 GB2312"
- echo "GBK GBK"
- echo "GB18030 GB18030"
- echo "cns11643 EUC-TW"
- echo "5601 EUC-KR"
- echo "ko_KR.johap92 JOHAB"
- echo "eucJP EUC-JP"
- echo "PCK SHIFT_JIS"
- echo "TIS620.2533 TIS-620"
- #echo "sun_eu_greek ?" # what is this?
- echo "UTF-8 UTF-8"
- ;;
- freebsd* | os2*)
- # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
- # localcharset.c falls back to using the full locale name
- # from the environment variables.
- # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
- # reuse FreeBSD's locale data for OS/2.
- echo "C ASCII"
- echo "US-ASCII ASCII"
- for l in la_LN lt_LN; do
- echo "$l.ASCII ASCII"
- done
- for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
- fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
- lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
- echo "$l.ISO_8859-1 ISO-8859-1"
- echo "$l.DIS_8859-15 ISO-8859-15"
- done
- for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
- echo "$l.ISO_8859-2 ISO-8859-2"
- done
- for l in la_LN lt_LT; do
- echo "$l.ISO_8859-4 ISO-8859-4"
- done
- for l in ru_RU ru_SU; do
- echo "$l.KOI8-R KOI8-R"
- echo "$l.ISO_8859-5 ISO-8859-5"
- echo "$l.CP866 CP866"
- done
- echo "uk_UA.KOI8-U KOI8-U"
- echo "zh_TW.BIG5 BIG5"
- echo "zh_TW.Big5 BIG5"
- echo "zh_CN.EUC GB2312"
- echo "ja_JP.EUC EUC-JP"
- echo "ja_JP.SJIS SHIFT_JIS"
- echo "ja_JP.Shift_JIS SHIFT_JIS"
- echo "ko_KR.EUC EUC-KR"
- ;;
- netbsd*)
- echo "646 ASCII"
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-4 ISO-8859-4"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-13 ISO-8859-13"
- echo "ISO8859-15 ISO-8859-15"
- echo "eucCN GB2312"
- echo "eucJP EUC-JP"
- echo "eucKR EUC-KR"
- echo "eucTW EUC-TW"
- echo "BIG5 BIG5"
- echo "SJIS SHIFT_JIS"
- ;;
- darwin[56]*)
- # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
- # localcharset.c falls back to using the full locale name
- # from the environment variables.
- echo "C ASCII"
- for l in en_AU en_CA en_GB en_US la_LN; do
- echo "$l.US-ASCII ASCII"
- done
- for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
- fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
- nl_NL no_NO pt_PT sv_SE; do
- echo "$l ISO-8859-1"
- echo "$l.ISO8859-1 ISO-8859-1"
- echo "$l.ISO8859-15 ISO-8859-15"
- done
- for l in la_LN; do
- echo "$l.ISO8859-1 ISO-8859-1"
- echo "$l.ISO8859-15 ISO-8859-15"
- done
- for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
- echo "$l.ISO8859-2 ISO-8859-2"
- done
- for l in la_LN lt_LT; do
- echo "$l.ISO8859-4 ISO-8859-4"
- done
- for l in ru_RU; do
- echo "$l.KOI8-R KOI8-R"
- echo "$l.ISO8859-5 ISO-8859-5"
- echo "$l.CP866 CP866"
- done
- for l in bg_BG; do
- echo "$l.CP1251 CP1251"
- done
- echo "uk_UA.KOI8-U KOI8-U"
- echo "zh_TW.BIG5 BIG5"
- echo "zh_TW.Big5 BIG5"
- echo "zh_CN.EUC GB2312"
- echo "ja_JP.EUC EUC-JP"
- echo "ja_JP.SJIS SHIFT_JIS"
- echo "ko_KR.EUC EUC-KR"
- ;;
- darwin*)
- # Darwin 7.5 has nl_langinfo(CODESET), but it is useless:
- # - It returns the empty string when LANG is set to a locale of the
- # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
- # LC_CTYPE file.
- # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
- # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
- # - The documentation says:
- # "... all code that calls BSD system routines should ensure
- # that the const *char parameters of these routines are in UTF-8
- # encoding. All BSD system functions expect their string
- # parameters to be in UTF-8 encoding and nothing else."
- # It also says
- # "An additional caveat is that string parameters for files,
- # paths, and other file-system entities must be in canonical
- # UTF-8. In a canonical UTF-8 Unicode string, all decomposable
- # characters are decomposed ..."
- # but this is not true: You can pass non-decomposed UTF-8 strings
- # to file system functions, and it is the OS which will convert
- # them to decomposed UTF-8 before accessing the file system.
- # - The Apple Terminal application displays UTF-8 by default.
- # - However, other applications are free to use different encodings:
- # - xterm uses ISO-8859-1 by default.
- # - TextEdit uses MacRoman by default.
- # We prefer UTF-8 over decomposed UTF-8-MAC because one should
- # minimize the use of decomposed Unicode. Unfortunately, through the
- # Darwin file system, decomposed UTF-8 strings are leaked into user
- # space nevertheless.
- echo "* UTF-8"
- ;;
- beos*)
- # BeOS has a single locale, and it has UTF-8 encoding.
- echo "* UTF-8"
- ;;
- msdosdjgpp*)
- # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
- # localcharset.c falls back to using the full locale name
- # from the environment variables.
- echo "#"
- echo "# The encodings given here may not all be correct."
- echo "# If you find that the encoding given for your language and"
- echo "# country is not the one your DOS machine actually uses, just"
- echo "# correct it in this file, and send a mail to"
- echo "# Juan Manuel Guerrero <juan.guerrero at gmx.de>"
- echo "# and Bruno Haible <bruno at clisp.org>."
- echo "#"
- echo "C ASCII"
- # ISO-8859-1 languages
- echo "ca CP850"
- echo "ca_ES CP850"
- echo "da CP865" # not CP850 ??
- echo "da_DK CP865" # not CP850 ??
- echo "de CP850"
- echo "de_AT CP850"
- echo "de_CH CP850"
- echo "de_DE CP850"
- echo "en CP850"
- echo "en_AU CP850" # not CP437 ??
- echo "en_CA CP850"
- echo "en_GB CP850"
- echo "en_NZ CP437"
- echo "en_US CP437"
- echo "en_ZA CP850" # not CP437 ??
- echo "es CP850"
- echo "es_AR CP850"
- echo "es_BO CP850"
- echo "es_CL CP850"
- echo "es_CO CP850"
- echo "es_CR CP850"
- echo "es_CU CP850"
- echo "es_DO CP850"
- echo "es_EC CP850"
- echo "es_ES CP850"
- echo "es_GT CP850"
- echo "es_HN CP850"
- echo "es_MX CP850"
- echo "es_NI CP850"
- echo "es_PA CP850"
- echo "es_PY CP850"
- echo "es_PE CP850"
- echo "es_SV CP850"
- echo "es_UY CP850"
- echo "es_VE CP850"
- echo "et CP850"
- echo "et_EE CP850"
- echo "eu CP850"
- echo "eu_ES CP850"
- echo "fi CP850"
- echo "fi_FI CP850"
- echo "fr CP850"
- echo "fr_BE CP850"
- echo "fr_CA CP850"
- echo "fr_CH CP850"
- echo "fr_FR CP850"
- echo "ga CP850"
- echo "ga_IE CP850"
- echo "gd CP850"
- echo "gd_GB CP850"
- echo "gl CP850"
- echo "gl_ES CP850"
- echo "id CP850" # not CP437 ??
- echo "id_ID CP850" # not CP437 ??
- echo "is CP861" # not CP850 ??
- echo "is_IS CP861" # not CP850 ??
- echo "it CP850"
- echo "it_CH CP850"
- echo "it_IT CP850"
- echo "lt CP775"
- echo "lt_LT CP775"
- echo "lv CP775"
- echo "lv_LV CP775"
- echo "nb CP865" # not CP850 ??
- echo "nb_NO CP865" # not CP850 ??
- echo "nl CP850"
- echo "nl_BE CP850"
- echo "nl_NL CP850"
- echo "nn CP865" # not CP850 ??
- echo "nn_NO CP865" # not CP850 ??
- echo "no CP865" # not CP850 ??
- echo "no_NO CP865" # not CP850 ??
- echo "pt CP850"
- echo "pt_BR CP850"
- echo "pt_PT CP850"
- echo "sv CP850"
- echo "sv_SE CP850"
- # ISO-8859-2 languages
- echo "cs CP852"
- echo "cs_CZ CP852"
- echo "hr CP852"
- echo "hr_HR CP852"
- echo "hu CP852"
- echo "hu_HU CP852"
- echo "pl CP852"
- echo "pl_PL CP852"
- echo "ro CP852"
- echo "ro_RO CP852"
- echo "sk CP852"
- echo "sk_SK CP852"
- echo "sl CP852"
- echo "sl_SI CP852"
- echo "sq CP852"
- echo "sq_AL CP852"
- echo "sr CP852" # CP852 or CP866 or CP855 ??
- echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
- echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
- # ISO-8859-3 languages
- echo "mt CP850"
- echo "mt_MT CP850"
- # ISO-8859-5 languages
- echo "be CP866"
- echo "be_BE CP866"
- echo "bg CP866" # not CP855 ??
- echo "bg_BG CP866" # not CP855 ??
- echo "mk CP866" # not CP855 ??
- echo "mk_MK CP866" # not CP855 ??
- echo "ru CP866"
- echo "ru_RU CP866"
- echo "uk CP1125"
- echo "uk_UA CP1125"
- # ISO-8859-6 languages
- echo "ar CP864"
- echo "ar_AE CP864"
- echo "ar_DZ CP864"
- echo "ar_EG CP864"
- echo "ar_IQ CP864"
- echo "ar_IR CP864"
- echo "ar_JO CP864"
- echo "ar_KW CP864"
- echo "ar_MA CP864"
- echo "ar_OM CP864"
- echo "ar_QA CP864"
- echo "ar_SA CP864"
- echo "ar_SY CP864"
- # ISO-8859-7 languages
- echo "el CP869"
- echo "el_GR CP869"
- # ISO-8859-8 languages
- echo "he CP862"
- echo "he_IL CP862"
- # ISO-8859-9 languages
- echo "tr CP857"
- echo "tr_TR CP857"
- # Japanese
- echo "ja CP932"
- echo "ja_JP CP932"
- # Chinese
- echo "zh_CN GBK"
- echo "zh_TW CP950" # not CP938 ??
- # Korean
- echo "kr CP949" # not CP934 ??
- echo "kr_KR CP949" # not CP934 ??
- # Thai
- echo "th CP874"
- echo "th_TH CP874"
- # Other
- echo "eo CP850"
- echo "eo_EO CP850"
- ;;
-esac
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
deleted file mode 100644
index c2a63f0..0000000
--- a/intl/dcgettext.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Implementation of the dcgettext(3) function.
- Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DCGETTEXT __dcgettext
-# define DCIGETTEXT __dcigettext
-#else
-# define DCGETTEXT libintl_dcgettext
-# define DCIGETTEXT libintl_dcigettext
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
- locale. */
-char *
-DCGETTEXT (const char *domainname, const char *msgid, int category)
-{
- return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-INTDEF(__dcgettext)
-weak_alias (__dcgettext, dcgettext);
-#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
deleted file mode 100644
index 623e51d..0000000
--- a/intl/dcigettext.c
+++ /dev/null
@@ -1,1689 +0,0 @@
-/* Implementation of the internal dcigettext function.
- Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* NL_LOCALE_NAME does not work in glibc-2.4. Ignore it. */
-#undef HAVE_NL_LOCALE_NAME
-
-#include <sys/types.h>
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# ifdef _MSC_VER
-# include <malloc.h>
-# define alloca _alloca
-# else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-#ifndef __set_errno
-# define __set_errno(val) errno = (val)
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include <locale.h>
-
-#ifdef _LIBC
- /* Guess whether integer division by zero raises signal SIGFPE.
- Set to 1 only if you know for sure. In case of doubt, set to 0. */
-# if defined __alpha__ || defined __arm__ || defined __i386__ \
- || defined __m68k__ || defined __s390__
-# define INTDIV0_RAISES_SIGFPE 1
-# else
-# define INTDIV0_RAISES_SIGFPE 0
-# endif
-#endif
-#if !INTDIV0_RAISES_SIGFPE
-# include <signal.h>
-#endif
-
-#if defined HAVE_SYS_PARAM_H || defined _LIBC
-# include <sys/param.h>
-#endif
-
-#if !defined _LIBC
-# if HAVE_NL_LOCALE_NAME
-# include <langinfo.h>
-# endif
-# include "localcharset.h"
-#endif
-
-#include "gettextP.h"
-#include "plural-exp.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# ifdef IN_LIBGLOCALE
-# include <libintl.h>
-# endif
-# include "libgnuintl.h"
-#endif
-#include "hash-string.h"
-
-/* Handle multi-threaded applications. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-# define gl_rwlock_define_initialized __libc_rwlock_define_initialized
-# define gl_rwlock_rdlock __libc_rwlock_rdlock
-# define gl_rwlock_wrlock __libc_rwlock_wrlock
-# define gl_rwlock_unlock __libc_rwlock_unlock
-#else
-# include "lock.h"
-#endif
-
-/* Alignment of types. */
-#if defined __GNUC__ && __GNUC__ >= 2
-# define alignof(TYPE) __alignof__ (TYPE)
-#else
-# define alignof(TYPE) \
- ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
-#endif
-
-/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
-#ifndef offsetof
-# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions. This is required by the standard
- because some ANSI C functions will require linking with this object
- file and the name space must not be polluted. */
-# define getcwd __getcwd
-# ifndef stpcpy
-# define stpcpy __stpcpy
-# endif
-# define tfind __tfind
-#else
-# if !defined HAVE_GETCWD
-char *getwd ();
-# define getcwd(buf, max) getwd (buf)
-# else
-# if VMS
-# define getcwd(buf, max) (getcwd) (buf, max, 0)
-# else
-char *getcwd ();
-# endif
-# endif
-# ifndef HAVE_STPCPY
-static char *stpcpy (char *dest, const char *src);
-# endif
-# ifndef HAVE_MEMPCPY
-static void *mempcpy (void *dest, const void *src, size_t n);
-# endif
-#endif
-
-/* Use a replacement if the system does not provide the `tsearch' function
- family. */
-#if HAVE_TSEARCH || defined _LIBC
-# include <search.h>
-#else
-# define tsearch libintl_tsearch
-# define tfind libintl_tfind
-# define tdelete libintl_tdelete
-# define twalk libintl_twalk
-# include "tsearch.h"
-#endif
-
-#ifdef _LIBC
-# define tsearch __tsearch
-#endif
-
-/* Amount to increase buffer size by in each try. */
-#define PATH_INCR 32
-
-/* The following is from pathmax.h. */
-/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
- PATH_MAX but might cause redefinition warnings when sys/param.h is
- later included (as on MORE/BSD 4.3). */
-#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
-# include <limits.h>
-#endif
-
-#ifndef _POSIX_PATH_MAX
-# define _POSIX_PATH_MAX 255
-#endif
-
-#if !defined PATH_MAX && defined _PC_PATH_MAX
-# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
-#endif
-
-/* Don't include sys/param.h if it already has been. */
-#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
-# include <sys/param.h>
-#endif
-
-#if !defined PATH_MAX && defined MAXPATHLEN
-# define PATH_MAX MAXPATHLEN
-#endif
-
-#ifndef PATH_MAX
-# define PATH_MAX _POSIX_PATH_MAX
-#endif
-
-/* Pathname support.
- ISSLASH(C) tests whether C is a directory separator character.
- IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
- it may be concatenated to a directory pathname.
- IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
- */
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
- /* Win32, Cygwin, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-# define HAS_DEVICE(P) \
- ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
- && (P)[1] == ':')
-# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
-# define IS_PATH_WITH_DIR(P) \
- (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
-#else
- /* Unix */
-# define ISSLASH(C) ((C) == '/')
-# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
-# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
-#endif
-
-/* Whether to support different locales in different threads. */
-#if defined _LIBC || HAVE_NL_LOCALE_NAME || (HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS) || defined IN_LIBGLOCALE
-# define HAVE_PER_THREAD_LOCALE
-#endif
-
-/* This is the type used for the search tree where known translations
- are stored. */
-struct known_translation_t
-{
- /* Domain in which to search. */
- const char *domainname;
-
- /* The category. */
- int category;
-
-#ifdef HAVE_PER_THREAD_LOCALE
- /* Name of the relevant locale category, or "" for the global locale. */
- const char *localename;
-#endif
-
-#ifdef IN_LIBGLOCALE
- /* The character encoding. */
- const char *encoding;
-#endif
-
- /* State of the catalog counter at the point the string was found. */
- int counter;
-
- /* Catalog where the string was found. */
- struct loaded_l10nfile *domain;
-
- /* And finally the translation. */
- const char *translation;
- size_t translation_length;
-
- /* Pointer to the string in question. */
- char msgid[ZERO];
-};
-
-gl_rwlock_define_initialized (static, tree_lock)
-
-/* Root of the search tree with known translations. */
-static void *root;
-
-/* Function to compare two entries in the table of known translations. */
-static int
-transcmp (const void *p1, const void *p2)
-{
- const struct known_translation_t *s1;
- const struct known_translation_t *s2;
- int result;
-
- s1 = (const struct known_translation_t *) p1;
- s2 = (const struct known_translation_t *) p2;
-
- result = strcmp (s1->msgid, s2->msgid);
- if (result == 0)
- {
- result = strcmp (s1->domainname, s2->domainname);
- if (result == 0)
- {
-#ifdef HAVE_PER_THREAD_LOCALE
- result = strcmp (s1->localename, s2->localename);
- if (result == 0)
-#endif
- {
-#ifdef IN_LIBGLOCALE
- result = strcmp (s1->encoding, s2->encoding);
- if (result == 0)
-#endif
- /* We compare the category last (though this is the cheapest
- operation) since it is hopefully always the same (namely
- LC_MESSAGES). */
- result = s1->category - s2->category;
- }
- }
- }
-
- return result;
-}
-
-/* Name of the default domain used for gettext(3) prior any call to
- textdomain(3). The default value for this is "messages". */
-const char _nl_default_default_domain[] attribute_hidden = "messages";
-
-#ifndef IN_LIBGLOCALE
-/* Value used as the default domain for gettext(3). */
-const char *_nl_current_default_domain attribute_hidden
- = _nl_default_default_domain;
-#endif
-
-/* Contains the default location of the message catalogs. */
-#if defined __EMX__
-extern const char _nl_default_dirname[];
-#else
-# ifdef _LIBC
-extern const char _nl_default_dirname[];
-libc_hidden_proto (_nl_default_dirname)
-# endif
-const char _nl_default_dirname[] = LOCALEDIR;
-# ifdef _LIBC
-libc_hidden_data_def (_nl_default_dirname)
-# endif
-#endif
-
-#ifndef IN_LIBGLOCALE
-/* List with bindings of specific domains created by bindtextdomain()
- calls. */
-struct binding *_nl_domain_bindings;
-#endif
-
-/* Prototypes for local functions. */
-static char *plural_lookup (struct loaded_l10nfile *domain,
- unsigned long int n,
- const char *translation, size_t translation_len)
- internal_function;
-
-#ifdef IN_LIBGLOCALE
-static const char *guess_category_value (int category,
- const char *categoryname,
- const char *localename)
- internal_function;
-#else
-static const char *guess_category_value (int category,
- const char *categoryname)
- internal_function;
-#endif
-
-#ifdef _LIBC
-# include "../locale/localeinfo.h"
-# define category_to_name(category) \
- _nl_category_names.str + _nl_category_name_idxs[category]
-#else
-static const char *category_to_name (int category) internal_function;
-#endif
-#if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE
-static const char *get_output_charset (struct binding *domainbinding)
- internal_function;
-#endif
-
-
-/* For those loosing systems which don't have `alloca' we have to add
- some additional code emulating it. */
-#ifdef HAVE_ALLOCA
-/* Nothing has to be done. */
-# define freea(p) /* nothing */
-# define ADD_BLOCK(list, address) /* nothing */
-# define FREE_BLOCKS(list) /* nothing */
-#else
-struct block_list
-{
- void *address;
- struct block_list *next;
-};
-# define ADD_BLOCK(list, addr) \
- do { \
- struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
- /* If we cannot get a free block we cannot add the new element to \
- the list. */ \
- if (newp != NULL) { \
- newp->address = (addr); \
- newp->next = (list); \
- (list) = newp; \
- } \
- } while (0)
-# define FREE_BLOCKS(list) \
- do { \
- while (list != NULL) { \
- struct block_list *old = list; \
- list = list->next; \
- free (old->address); \
- free (old); \
- } \
- } while (0)
-# undef alloca
-# define alloca(size) (malloc (size))
-# define freea(p) free (p)
-#endif /* have alloca */
-
-
-#ifdef _LIBC
-/* List of blocks allocated for translations. */
-typedef struct transmem_list
-{
- struct transmem_list *next;
- char data[ZERO];
-} transmem_block_t;
-static struct transmem_list *transmem_list;
-#else
-typedef unsigned char transmem_block_t;
-#endif
-
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DCIGETTEXT __dcigettext
-#else
-# define DCIGETTEXT libintl_dcigettext
-#endif
-
-/* Lock variable to protect the global data in the gettext implementation. */
-gl_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
-
-/* Checking whether the binaries runs SUID must be done and glibc provides
- easier methods therefore we make a difference here. */
-#ifdef _LIBC
-# define ENABLE_SECURE __libc_enable_secure
-# define DETERMINE_SECURE
-#else
-# ifndef HAVE_GETUID
-# define getuid() 0
-# endif
-# ifndef HAVE_GETGID
-# define getgid() 0
-# endif
-# ifndef HAVE_GETEUID
-# define geteuid() getuid()
-# endif
-# ifndef HAVE_GETEGID
-# define getegid() getgid()
-# endif
-static int enable_secure;
-# define ENABLE_SECURE (enable_secure == 1)
-# define DETERMINE_SECURE \
- if (enable_secure == 0) \
- { \
- if (getuid () != geteuid () || getgid () != getegid ()) \
- enable_secure = 1; \
- else \
- enable_secure = -1; \
- }
-#endif
-
-/* Get the function to evaluate the plural expression. */
-#include "eval-plural.h"
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
- CATEGORY locale and, if PLURAL is nonzero, search over string
- depending on the plural form determined by N. */
-#ifdef IN_LIBGLOCALE
-char *
-gl_dcigettext (const char *domainname,
- const char *msgid1, const char *msgid2,
- int plural, unsigned long int n,
- int category,
- const char *localename, const char *encoding)
-#else
-char *
-DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
- int plural, unsigned long int n, int category)
-#endif
-{
-#ifndef HAVE_ALLOCA
- struct block_list *block_list = NULL;
-#endif
- struct loaded_l10nfile *domain;
- struct binding *binding;
- const char *categoryname;
- const char *categoryvalue;
- const char *dirname;
- char *xdomainname;
- char *single_locale;
- char *retval;
- size_t retlen;
- int saved_errno;
- struct known_translation_t *search;
- struct known_translation_t **foundp = NULL;
- size_t msgid_len;
-#if defined HAVE_PER_THREAD_LOCALE && !defined IN_LIBGLOCALE
- const char *localename;
-#endif
- size_t domainname_len;
-
- /* If no real MSGID is given return NULL. */
- if (msgid1 == NULL)
- return NULL;
-
-#ifdef _LIBC
- if (category < 0 || category >= __LC_LAST || category == LC_ALL)
- /* Bogus. */
- return (plural == 0
- ? (char *) msgid1
- /* Use the Germanic plural rule. */
- : n == 1 ? (char *) msgid1 : (char *) msgid2);
-#endif
-
- /* Preserve the `errno' value. */
- saved_errno = errno;
-
- gl_rwlock_rdlock (_nl_state_lock);
-
- /* If DOMAINNAME is NULL, we are interested in the default domain. If
- CATEGORY is not LC_MESSAGES this might not make much sense but the
- definition left this undefined. */
- if (domainname == NULL)
- domainname = _nl_current_default_domain;
-
- /* OS/2 specific: backward compatibility with older libintl versions */
-#ifdef LC_MESSAGES_COMPAT
- if (category == LC_MESSAGES_COMPAT)
- category = LC_MESSAGES;
-#endif
-
- msgid_len = strlen (msgid1) + 1;
-
- /* Try to find the translation among those which we found at
- some time. */
- search = (struct known_translation_t *)
- alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
- memcpy (search->msgid, msgid1, msgid_len);
- search->domainname = domainname;
- search->category = category;
-#ifdef HAVE_PER_THREAD_LOCALE
-# ifndef IN_LIBGLOCALE
-# ifdef _LIBC
- localename = __current_locale_name (category);
-# else
-# if HAVE_NL_LOCALE_NAME
- /* NL_LOCALE_NAME is public glibc API introduced in glibc-2.4. */
- localename = nl_langinfo (NL_LOCALE_NAME (category));
-# else
-# if HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS
- /* The __names field is not public glibc API and must therefore not be used
- in code that is installed in public locations. */
- {
- locale_t thread_locale = uselocale (NULL);
- if (thread_locale != LC_GLOBAL_LOCALE)
- localename = thread_locale->__names[category];
- else
- localename = "";
- }
-# endif
-# endif
-# endif
-# endif
- search->localename = localename;
-# ifdef IN_LIBGLOCALE
- search->encoding = encoding;
-# endif
-
- /* Since tfind/tsearch manage a balanced tree, concurrent tfind and
- tsearch calls can be fatal. */
- gl_rwlock_rdlock (tree_lock);
-
- foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
-
- gl_rwlock_unlock (tree_lock);
-
- freea (search);
- if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
- {
- /* Now deal with plural. */
- if (plural)
- retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
- (*foundp)->translation_length);
- else
- retval = (char *) (*foundp)->translation;
-
- gl_rwlock_unlock (_nl_state_lock);
- __set_errno (saved_errno);
- return retval;
- }
-#endif
-
- /* See whether this is a SUID binary or not. */
- DETERMINE_SECURE;
-
- /* First find matching binding. */
-#ifdef IN_LIBGLOCALE
- /* We can use a trivial binding, since _nl_find_msg will ignore it anyway,
- and _nl_load_domain and _nl_find_domain just pass it through. */
- binding = NULL;
- dirname = bindtextdomain (domainname, NULL);
-#else
- for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
- {
- int compare = strcmp (domainname, binding->domainname);
- if (compare == 0)
- /* We found it! */
- break;
- if (compare < 0)
- {
- /* It is not in the list. */
- binding = NULL;
- break;
- }
- }
-
- if (binding == NULL)
- dirname = _nl_default_dirname;
- else
- {
- dirname = binding->dirname;
-#endif
- if (!IS_ABSOLUTE_PATH (dirname))
- {
- /* We have a relative path. Make it absolute now. */
- size_t dirname_len = strlen (dirname) + 1;
- size_t path_max;
- char *resolved_dirname;
- char *ret;
-
- path_max = (unsigned int) PATH_MAX;
- path_max += 2; /* The getcwd docs say to do this. */
-
- for (;;)
- {
- resolved_dirname = (char *) alloca (path_max + dirname_len);
- ADD_BLOCK (block_list, tmp_dirname);
-
- __set_errno (0);
- ret = getcwd (resolved_dirname, path_max);
- if (ret != NULL || errno != ERANGE)
- break;
-
- path_max += path_max / 2;
- path_max += PATH_INCR;
- }
-
- if (ret == NULL)
- /* We cannot get the current working directory. Don't signal an
- error but simply return the default string. */
- goto return_untranslated;
-
- stpcpy (stpcpy (strchr (resolved_dirname, '\0'), "/"), dirname);
- dirname = resolved_dirname;
- }
-#ifndef IN_LIBGLOCALE
- }
-#endif
-
- /* Now determine the symbolic name of CATEGORY and its value. */
- categoryname = category_to_name (category);
-#ifdef IN_LIBGLOCALE
- categoryvalue = guess_category_value (category, categoryname, localename);
-#else
- categoryvalue = guess_category_value (category, categoryname);
-#endif
-
- domainname_len = strlen (domainname);
- xdomainname = (char *) alloca (strlen (categoryname)
- + domainname_len + 5);
- ADD_BLOCK (block_list, xdomainname);
-
- stpcpy ((char *) mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
- domainname, domainname_len),
- ".mo");
-
- /* Creating working area. */
- single_locale = (char *) alloca (strlen (categoryvalue) + 1);
- ADD_BLOCK (block_list, single_locale);
-
-
- /* Search for the given string. This is a loop because we perhaps
- got an ordered list of languages to consider for the translation. */
- while (1)
- {
- /* Make CATEGORYVALUE point to the next element of the list. */
- while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
- ++categoryvalue;
- if (categoryvalue[0] == '\0')
- {
- /* The whole contents of CATEGORYVALUE has been searched but
- no valid entry has been found. We solve this situation
- by implicitly appending a "C" entry, i.e. no translation
- will take place. */
- single_locale[0] = 'C';
- single_locale[1] = '\0';
- }
- else
- {
- char *cp = single_locale;
- while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
- *cp++ = *categoryvalue++;
- *cp = '\0';
-
- /* When this is a SUID binary we must not allow accessing files
- outside the dedicated directories. */
- if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
- /* Ingore this entry. */
- continue;
- }
-
- /* If the current locale value is C (or POSIX) we don't load a
- domain. Return the MSGID. */
- if (strcmp (single_locale, "C") == 0
- || strcmp (single_locale, "POSIX") == 0)
- break;
-
- /* Find structure describing the message catalog matching the
- DOMAINNAME and CATEGORY. */
- domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
-
- if (domain != NULL)
- {
-#if defined IN_LIBGLOCALE
- retval = _nl_find_msg (domain, binding, encoding, msgid1, &retlen);
-#else
- retval = _nl_find_msg (domain, binding, msgid1, 1, &retlen);
-#endif
-
- if (retval == NULL)
- {
- int cnt;
-
- for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
- {
-#if defined IN_LIBGLOCALE
- retval = _nl_find_msg (domain->successor[cnt], binding,
- encoding, msgid1, &retlen);
-#else
- retval = _nl_find_msg (domain->successor[cnt], binding,
- msgid1, 1, &retlen);
-#endif
-
- if (retval != NULL)
- {
- domain = domain->successor[cnt];
- break;
- }
- }
- }
-
- /* Returning -1 means that some resource problem exists
- (likely memory) and that the strings could not be
- converted. Return the original strings. */
- if (__builtin_expect (retval == (char *) -1, 0))
- break;
-
- if (retval != NULL)
- {
- /* Found the translation of MSGID1 in domain DOMAIN:
- starting at RETVAL, RETLEN bytes. */
- FREE_BLOCKS (block_list);
- if (foundp == NULL)
- {
- /* Create a new entry and add it to the search tree. */
- size_t size;
- struct known_translation_t *newp;
-
- size = offsetof (struct known_translation_t, msgid)
- + msgid_len + domainname_len + 1;
-#ifdef HAVE_PER_THREAD_LOCALE
- size += strlen (localename) + 1;
-#endif
- newp = (struct known_translation_t *) malloc (size);
- if (newp != NULL)
- {
- char *new_domainname;
-#ifdef HAVE_PER_THREAD_LOCALE
- char *new_localename;
-#endif
-
- new_domainname =
- (char *) mempcpy (newp->msgid, msgid1, msgid_len);
- memcpy (new_domainname, domainname, domainname_len + 1);
-#ifdef HAVE_PER_THREAD_LOCALE
- new_localename = new_domainname + domainname_len + 1;
- strcpy (new_localename, localename);
-#endif
- newp->domainname = new_domainname;
- newp->category = category;
-#ifdef HAVE_PER_THREAD_LOCALE
- newp->localename = new_localename;
-#endif
-#ifdef IN_LIBGLOCALE
- newp->encoding = encoding;
-#endif
- newp->counter = _nl_msg_cat_cntr;
- newp->domain = domain;
- newp->translation = retval;
- newp->translation_length = retlen;
-
- gl_rwlock_wrlock (tree_lock);
-
- /* Insert the entry in the search tree. */
- foundp = (struct known_translation_t **)
- tsearch (newp, &root, transcmp);
-
- gl_rwlock_unlock (tree_lock);
-
- if (foundp == NULL
- || __builtin_expect (*foundp != newp, 0))
- /* The insert failed. */
- free (newp);
- }
- }
- else
- {
- /* We can update the existing entry. */
- (*foundp)->counter = _nl_msg_cat_cntr;
- (*foundp)->domain = domain;
- (*foundp)->translation = retval;
- (*foundp)->translation_length = retlen;
- }
-
- __set_errno (saved_errno);
-
- /* Now deal with plural. */
- if (plural)
- retval = plural_lookup (domain, n, retval, retlen);
-
- gl_rwlock_unlock (_nl_state_lock);
- return retval;
- }
- }
- }
-
- return_untranslated:
- /* Return the untranslated MSGID. */
- FREE_BLOCKS (block_list);
- gl_rwlock_unlock (_nl_state_lock);
-#ifndef _LIBC
- if (!ENABLE_SECURE)
- {
- extern void _nl_log_untranslated (const char *logfilename,
- const char *domainname,
- const char *msgid1, const char *msgid2,
- int plural);
- const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
-
- if (logfilename != NULL && logfilename[0] != '\0')
- _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
- }
-#endif
- __set_errno (saved_errno);
- return (plural == 0
- ? (char *) msgid1
- /* Use the Germanic plural rule. */
- : n == 1 ? (char *) msgid1 : (char *) msgid2);
-}
-
-
-/* Look up the translation of msgid within DOMAIN_FILE and DOMAINBINDING.
- Return it if found. Return NULL if not found or in case of a conversion
- failure (problem in the particular message catalog). Return (char *) -1
- in case of a memory allocation failure during conversion (only if
- ENCODING != NULL resp. CONVERT == true). */
-char *
-internal_function
-#ifdef IN_LIBGLOCALE
-_nl_find_msg (struct loaded_l10nfile *domain_file,
- struct binding *domainbinding, const char *encoding,
- const char *msgid,
- size_t *lengthp)
-#else
-_nl_find_msg (struct loaded_l10nfile *domain_file,
- struct binding *domainbinding,
- const char *msgid, int convert,
- size_t *lengthp)
-#endif
-{
- struct loaded_domain *domain;
- nls_uint32 nstrings;
- size_t act;
- char *result;
- size_t resultlen;
-
- if (domain_file->decided <= 0)
- _nl_load_domain (domain_file, domainbinding);
-
- if (domain_file->data == NULL)
- return NULL;
-
- domain = (struct loaded_domain *) domain_file->data;
-
- nstrings = domain->nstrings;
-
- /* Locate the MSGID and its translation. */
- if (domain->hash_tab != NULL)
- {
- /* Use the hashing table. */
- nls_uint32 len = strlen (msgid);
- nls_uint32 hash_val = __hash_string (msgid);
- nls_uint32 idx = hash_val % domain->hash_size;
- nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
-
- while (1)
- {
- nls_uint32 nstr =
- W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
-
- if (nstr == 0)
- /* Hash table entry is empty. */
- return NULL;
-
- nstr--;
-
- /* Compare msgid with the original string at index nstr.
- We compare the lengths with >=, not ==, because plural entries
- are represented by strings with an embedded NUL. */
- if (nstr < nstrings
- ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
- && (strcmp (msgid,
- domain->data + W (domain->must_swap,
- domain->orig_tab[nstr].offset))
- == 0)
- : domain->orig_sysdep_tab[nstr - nstrings].length > len
- && (strcmp (msgid,
- domain->orig_sysdep_tab[nstr - nstrings].pointer)
- == 0))
- {
- act = nstr;
- goto found;
- }
-
- if (idx >= domain->hash_size - incr)
- idx -= domain->hash_size - incr;
- else
- idx += incr;
- }
- /* NOTREACHED */
- }
- else
- {
- /* Try the default method: binary search in the sorted array of
- messages. */
- size_t top, bottom;
-
- bottom = 0;
- top = nstrings;
- while (bottom < top)
- {
- int cmp_val;
-
- act = (bottom + top) / 2;
- cmp_val = strcmp (msgid, (domain->data
- + W (domain->must_swap,
- domain->orig_tab[act].offset)));
- if (cmp_val < 0)
- top = act;
- else if (cmp_val > 0)
- bottom = act + 1;
- else
- goto found;
- }
- /* No translation was found. */
- return NULL;
- }
-
- found:
- /* The translation was found at index ACT. If we have to convert the
- string to use a different character set, this is the time. */
- if (act < nstrings)
- {
- result = (char *)
- (domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
- resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
- }
- else
- {
- result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
- resultlen = domain->trans_sysdep_tab[act - nstrings].length;
- }
-
-#if defined _LIBC || HAVE_ICONV
-# ifdef IN_LIBGLOCALE
- if (encoding != NULL)
-# else
- if (convert)
-# endif
- {
- /* We are supposed to do a conversion. */
-# ifndef IN_LIBGLOCALE
- const char *encoding = get_output_charset (domainbinding);
-# endif
- size_t nconversions;
- struct converted_domain *convd;
- size_t i;
-
- /* Protect against reallocation of the table. */
- gl_rwlock_rdlock (domain->conversions_lock);
-
- /* Search whether a table with converted translations for this
- encoding has already been allocated. */
- nconversions = domain->nconversions;
- convd = NULL;
-
- for (i = nconversions; i > 0; )
- {
- i--;
- if (strcmp (domain->conversions[i].encoding, encoding) == 0)
- {
- convd = &domain->conversions[i];
- break;
- }
- }
-
- gl_rwlock_unlock (domain->conversions_lock);
-
- if (convd == NULL)
- {
- /* We have to allocate a new conversions table. */
- gl_rwlock_wrlock (domain->conversions_lock);
-
- /* Maybe in the meantime somebody added the translation.
- Recheck. */
- for (i = nconversions; i > 0; )
- {
- i--;
- if (strcmp (domain->conversions[i].encoding, encoding) == 0)
- {
- convd = &domain->conversions[i];
- goto found_convd;
- }
- }
-
- {
- /* Allocate a table for the converted translations for this
- encoding. */
- struct converted_domain *new_conversions =
- (struct converted_domain *)
- (domain->conversions != NULL
- ? realloc (domain->conversions,
- (nconversions + 1) * sizeof (struct converted_domain))
- : malloc ((nconversions + 1) * sizeof (struct converted_domain)));
-
- if (__builtin_expect (new_conversions == NULL, 0))
- {
- /* Nothing we can do, no more memory. We cannot use the
- translation because it might be encoded incorrectly. */
- unlock_fail:
- gl_rwlock_unlock (domain->conversions_lock);
- return (char *) -1;
- }
-
- domain->conversions = new_conversions;
-
- /* Copy the 'encoding' string to permanent storage. */
- encoding = strdup (encoding);
- if (__builtin_expect (encoding == NULL, 0))
- /* Nothing we can do, no more memory. We cannot use the
- translation because it might be encoded incorrectly. */
- goto unlock_fail;
-
- convd = &new_conversions[nconversions];
- convd->encoding = encoding;
-
- /* Find out about the character set the file is encoded with.
- This can be found (in textual form) in the entry "". If this
- entry does not exist or if this does not contain the 'charset='
- information, we will assume the charset matches the one the
- current locale and we don't have to perform any conversion. */
-# ifdef _LIBC
- convd->conv = (__gconv_t) -1;
-# else
-# if HAVE_ICONV
- convd->conv = (iconv_t) -1;
-# endif
-# endif
- {
- char *nullentry;
- size_t nullentrylen;
-
- /* Get the header entry. This is a recursion, but it doesn't
- reallocate domain->conversions because we pass
- encoding = NULL or convert = 0, respectively. */
- nullentry =
-# ifdef IN_LIBGLOCALE
- _nl_find_msg (domain_file, domainbinding, NULL, "",
- &nullentrylen);
-# else
- _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen);
-# endif
-
- if (nullentry != NULL)
- {
- const char *charsetstr;
-
- charsetstr = strstr (nullentry, "charset=");
- if (charsetstr != NULL)
- {
- size_t len;
- char *charset;
- const char *outcharset;
-
- charsetstr += strlen ("charset=");
- len = strcspn (charsetstr, " \t\n");
-
- charset = (char *) alloca (len + 1);
-# if defined _LIBC || HAVE_MEMPCPY
- *((char *) mempcpy (charset, charsetstr, len)) = '\0';
-# else
- memcpy (charset, charsetstr, len);
- charset[len] = '\0';
-# endif
-
- outcharset = encoding;
-
-# ifdef _LIBC
- /* We always want to use transliteration. */
- outcharset = norm_add_slashes (outcharset, "TRANSLIT");
- charset = norm_add_slashes (charset, "");
- int r = __gconv_open (outcharset, charset, &convd->conv,
- GCONV_AVOID_NOCONV);
- if (__builtin_expect (r != __GCONV_OK, 0))
- {
- /* If the output encoding is the same there is
- nothing to do. Otherwise do not use the
- translation at all. */
- if (__builtin_expect (r != __GCONV_NULCONV, 1))
- {
- gl_rwlock_unlock (domain->conversions_lock);
- free ((char *) encoding);
- return NULL;
- }
-
- convd->conv = (__gconv_t) -1;
- }
-# else
-# if HAVE_ICONV
- /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
- we want to use transliteration. */
-# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
- || _LIBICONV_VERSION >= 0x0105
- if (strchr (outcharset, '/') == NULL)
- {
- char *tmp;
-
- len = strlen (outcharset);
- tmp = (char *) alloca (len + 10 + 1);
- memcpy (tmp, outcharset, len);
- memcpy (tmp + len, "//TRANSLIT", 10 + 1);
- outcharset = tmp;
-
- convd->conv = iconv_open (outcharset, charset);
-
- freea (outcharset);
- }
- else
-# endif
- convd->conv = iconv_open (outcharset, charset);
-# endif
-# endif
-
- freea (charset);
- }
- }
- }
- convd->conv_tab = NULL;
- /* Here domain->conversions is still == new_conversions. */
- domain->nconversions++;
- }
-
- found_convd:
- gl_rwlock_unlock (domain->conversions_lock);
- }
-
- if (
-# ifdef _LIBC
- convd->conv != (__gconv_t) -1
-# else
-# if HAVE_ICONV
- convd->conv != (iconv_t) -1
-# endif
-# endif
- )
- {
- /* We are supposed to do a conversion. First allocate an
- appropriate table with the same structure as the table
- of translations in the file, where we can put the pointers
- to the converted strings in.
- There is a slight complication with plural entries. They
- are represented by consecutive NUL terminated strings. We
- handle this case by converting RESULTLEN bytes, including
- NULs. */
-
- if (convd->conv_tab == NULL
- && ((convd->conv_tab =
- (char **) calloc (nstrings + domain->n_sysdep_strings,
- sizeof (char *)))
- == NULL))
- /* Mark that we didn't succeed allocating a table. */
- convd->conv_tab = (char **) -1;
-
- if (__builtin_expect (convd->conv_tab == (char **) -1, 0))
- /* Nothing we can do, no more memory. We cannot use the
- translation because it might be encoded incorrectly. */
- return (char *) -1;
-
- if (convd->conv_tab[act] == NULL)
- {
- /* We haven't used this string so far, so it is not
- translated yet. Do this now. */
- /* We use a bit more efficient memory handling.
- We allocate always larger blocks which get used over
- time. This is faster than many small allocations. */
- __libc_lock_define_initialized (static, lock)
-# define INITIAL_BLOCK_SIZE 4080
- static unsigned char *freemem;
- static size_t freemem_size;
-
- const unsigned char *inbuf;
- unsigned char *outbuf;
- int malloc_count;
-# ifndef _LIBC
- transmem_block_t *transmem_list = NULL;
-# endif
-
- __libc_lock_lock (lock);
-
- inbuf = (const unsigned char *) result;
- outbuf = freemem + sizeof (size_t);
-
- malloc_count = 0;
- while (1)
- {
- transmem_block_t *newmem;
-# ifdef _LIBC
- size_t non_reversible;
- int res;
-
- if (freemem_size < sizeof (size_t))
- goto resize_freemem;
-
- res = __gconv (convd->conv,
- &inbuf, inbuf + resultlen,
- &outbuf,
- outbuf + freemem_size - sizeof (size_t),
- &non_reversible);
-
- if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
- break;
-
- if (res != __GCONV_FULL_OUTPUT)
- {
- /* We should not use the translation at all, it
- is incorrectly encoded. */
- __libc_lock_unlock (lock);
- return NULL;
- }
-
- inbuf = (const unsigned char *) result;
-# else
-# if HAVE_ICONV
- const char *inptr = (const char *) inbuf;
- size_t inleft = resultlen;
- char *outptr = (char *) outbuf;
- size_t outleft;
-
- if (freemem_size < sizeof (size_t))
- goto resize_freemem;
-
- outleft = freemem_size - sizeof (size_t);
- if (iconv (convd->conv,
- (ICONV_CONST char **) &inptr, &inleft,
- &outptr, &outleft)
- != (size_t) (-1))
- {
- outbuf = (unsigned char *) outptr;
- break;
- }
- if (errno != E2BIG)
- {
- __libc_lock_unlock (lock);
- return NULL;
- }
-# endif
-# endif
-
- resize_freemem:
- /* We must allocate a new buffer or resize the old one. */
- if (malloc_count > 0)
- {
- ++malloc_count;
- freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
- newmem = (transmem_block_t *) realloc (transmem_list,
- freemem_size);
-# ifdef _LIBC
- if (newmem != NULL)
- transmem_list = transmem_list->next;
- else
- {
- struct transmem_list *old = transmem_list;
-
- transmem_list = transmem_list->next;
- free (old);
- }
-# endif
- }
- else
- {
- malloc_count = 1;
- freemem_size = INITIAL_BLOCK_SIZE;
- newmem = (transmem_block_t *) malloc (freemem_size);
- }
- if (__builtin_expect (newmem == NULL, 0))
- {
- freemem = NULL;
- freemem_size = 0;
- __libc_lock_unlock (lock);
- return (char *) -1;
- }
-
-# ifdef _LIBC
- /* Add the block to the list of blocks we have to free
- at some point. */
- newmem->next = transmem_list;
- transmem_list = newmem;
-
- freemem = (unsigned char *) newmem->data;
- freemem_size -= offsetof (struct transmem_list, data);
-# else
- transmem_list = newmem;
- freemem = newmem;
-# endif
-
- outbuf = freemem + sizeof (size_t);
- }
-
- /* We have now in our buffer a converted string. Put this
- into the table of conversions. */
- *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
- convd->conv_tab[act] = (char *) freemem;
- /* Shrink freemem, but keep it aligned. */
- freemem_size -= outbuf - freemem;
- freemem = outbuf;
- freemem += freemem_size & (alignof (size_t) - 1);
- freemem_size = freemem_size & ~ (alignof (size_t) - 1);
-
- __libc_lock_unlock (lock);
- }
-
- /* Now convd->conv_tab[act] contains the translation of all
- the plural variants. */
- result = convd->conv_tab[act] + sizeof (size_t);
- resultlen = *(size_t *) convd->conv_tab[act];
- }
- }
-
- /* The result string is converted. */
-
-#endif /* _LIBC || HAVE_ICONV */
-
- *lengthp = resultlen;
- return result;
-}
-
-
-/* Look up a plural variant. */
-static char *
-internal_function
-plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
- const char *translation, size_t translation_len)
-{
- struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
- unsigned long int index;
- const char *p;
-
- index = plural_eval (domaindata->plural, n);
- if (index >= domaindata->nplurals)
- /* This should never happen. It means the plural expression and the
- given maximum value do not match. */
- index = 0;
-
- /* Skip INDEX strings at TRANSLATION. */
- p = translation;
- while (index-- > 0)
- {
-#ifdef _LIBC
- p = __rawmemchr (p, '\0');
-#else
- p = strchr (p, '\0');
-#endif
- /* And skip over the NUL byte. */
- p++;
-
- if (p >= translation + translation_len)
- /* This should never happen. It means the plural expression
- evaluated to a value larger than the number of variants
- available for MSGID1. */
- return (char *) translation;
- }
- return (char *) p;
-}
-
-#ifndef _LIBC
-/* Return string representation of locale CATEGORY. */
-static const char *
-internal_function
-category_to_name (int category)
-{
- const char *retval;
-
- switch (category)
- {
-#ifdef LC_COLLATE
- case LC_COLLATE:
- retval = "LC_COLLATE";
- break;
-#endif
-#ifdef LC_CTYPE
- case LC_CTYPE:
- retval = "LC_CTYPE";
- break;
-#endif
-#ifdef LC_MONETARY
- case LC_MONETARY:
- retval = "LC_MONETARY";
- break;
-#endif
-#ifdef LC_NUMERIC
- case LC_NUMERIC:
- retval = "LC_NUMERIC";
- break;
-#endif
-#ifdef LC_TIME
- case LC_TIME:
- retval = "LC_TIME";
- break;
-#endif
-#ifdef LC_MESSAGES
- case LC_MESSAGES:
- retval = "LC_MESSAGES";
- break;
-#endif
-#ifdef LC_RESPONSE
- case LC_RESPONSE:
- retval = "LC_RESPONSE";
- break;
-#endif
-#ifdef LC_ALL
- case LC_ALL:
- /* This might not make sense but is perhaps better than any other
- value. */
- retval = "LC_ALL";
- break;
-#endif
- default:
- /* If you have a better idea for a default value let me know. */
- retval = "LC_XXX";
- }
-
- return retval;
-}
-#endif
-
-/* Guess value of current locale from value of the environment variables
- or system-dependent defaults. */
-static const char *
-internal_function
-#ifdef IN_LIBGLOCALE
-guess_category_value (int category, const char *categoryname,
- const char *locale)
-
-#else
-guess_category_value (int category, const char *categoryname)
-#endif
-{
- const char *language;
-#ifndef IN_LIBGLOCALE
- const char *locale;
-# ifndef _LIBC
- const char *language_default;
- int locale_defaulted;
-# endif
-#endif
-
- /* We use the settings in the following order:
- 1. The value of the environment variable 'LANGUAGE'. This is a GNU
- extension. Its value can be a colon-separated list of locale names.
- 2. The value of the environment variable 'LC_ALL', 'LC_xxx', or 'LANG'.
- More precisely, the first among these that is set to a non-empty value.
- This is how POSIX specifies it. The value is a single locale name.
- 3. A system-dependent preference list of languages. Its value can be a
- colon-separated list of locale names.
- 4. A system-dependent default locale name.
- This way:
- - System-dependent settings can be overridden by environment variables.
- - If the system provides both a list of languages and a default locale,
- the former is used. */
-
-#ifndef IN_LIBGLOCALE
- /* Fetch the locale name, through the POSIX method of looking to `LC_ALL',
- `LC_xxx', and `LANG'. On some systems this can be done by the
- `setlocale' function itself. */
-# ifdef _LIBC
- locale = __current_locale_name (category);
-# else
-# if HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS
- /* The __names field is not public glibc API and must therefore not be used
- in code that is installed in public locations. */
- locale_t thread_locale = uselocale (NULL);
- if (thread_locale != LC_GLOBAL_LOCALE)
- {
- locale = thread_locale->__names[category];
- locale_defaulted = 0;
- }
- else
-# endif
- {
- locale = _nl_locale_name_posix (category, categoryname);
- locale_defaulted = 0;
- if (locale == NULL)
- {
- locale = _nl_locale_name_default ();
- locale_defaulted = 1;
- }
- }
-# endif
-#endif
-
- /* Ignore LANGUAGE and its system-dependent analogon if the locale is set
- to "C" because
- 1. "C" locale usually uses the ASCII encoding, and most international
- messages use non-ASCII characters. These characters get displayed
- as question marks (if using glibc's iconv()) or as invalid 8-bit
- characters (because other iconv()s refuse to convert most non-ASCII
- characters to ASCII). In any case, the output is ugly.
- 2. The precise output of some programs in the "C" locale is specified
- by POSIX and should not depend on environment variables like
- "LANGUAGE" or system-dependent information. We allow such programs
- to use gettext(). */
- if (strcmp (locale, "C") == 0)
- return locale;
-
- /* The highest priority value is the value of the 'LANGUAGE' environment
- variable. */
- language = getenv ("LANGUAGE");
- if (language != NULL && language[0] != '\0')
- return language;
-#if !defined IN_LIBGLOCALE && !defined _LIBC
- /* The next priority value is the locale name, if not defaulted. */
- if (locale_defaulted)
- {
- /* The next priority value is the default language preferences list. */
- language_default = _nl_language_preferences_default ();
- if (language_default != NULL)
- return language_default;
- }
- /* The least priority value is the locale name, if defaulted. */
-#endif
- return locale;
-}
-
-#if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE
-/* Returns the output charset. */
-static const char *
-internal_function
-get_output_charset (struct binding *domainbinding)
-{
- /* The output charset should normally be determined by the locale. But
- sometimes the locale is not used or not correctly set up, so we provide
- a possibility for the user to override this: the OUTPUT_CHARSET
- environment variable. Moreover, the value specified through
- bind_textdomain_codeset overrides both. */
- if (domainbinding != NULL && domainbinding->codeset != NULL)
- return domainbinding->codeset;
- else
- {
- /* For speed reasons, we look at the value of OUTPUT_CHARSET only
- once. This is a user variable that is not supposed to change
- during a program run. */
- static char *output_charset_cache;
- static int output_charset_cached;
-
- if (!output_charset_cached)
- {
- const char *value = getenv ("OUTPUT_CHARSET");
-
- if (value != NULL && value[0] != '\0')
- {
- size_t len = strlen (value) + 1;
- char *value_copy = (char *) malloc (len);
-
- if (value_copy != NULL)
- memcpy (value_copy, value, len);
- output_charset_cache = value_copy;
- }
- output_charset_cached = 1;
- }
-
- if (output_charset_cache != NULL)
- return output_charset_cache;
- else
- {
-# ifdef _LIBC
- return _NL_CURRENT (LC_CTYPE, CODESET);
-# else
-# if HAVE_ICONV
- return locale_charset ();
-# endif
-# endif
- }
- }
-}
-#endif
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library. So we
- avoid the non-standard function stpcpy. In GNU C Library this
- function is available, though. Also allow the symbol HAVE_STPCPY
- to be defined. */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (char *dest, const char *src)
-{
- while ((*dest++ = *src++) != '\0')
- /* Do nothing. */ ;
- return dest - 1;
-}
-#endif
-
-#if !_LIBC && !HAVE_MEMPCPY
-static void *
-mempcpy (void *dest, const void *src, size_t n)
-{
- return (void *) ((char *) memcpy (dest, src, n) + n);
-}
-#endif
-
-#if !_LIBC && !HAVE_TSEARCH
-# include "tsearch.c"
-#endif
-
-
-#ifdef _LIBC
-/* If we want to free all resources we have to do some work at
- program's end. */
-libc_freeres_fn (free_mem)
-{
- void *old;
-
- while (_nl_domain_bindings != NULL)
- {
- struct binding *oldp = _nl_domain_bindings;
- _nl_domain_bindings = _nl_domain_bindings->next;
- if (oldp->dirname != _nl_default_dirname)
- /* Yes, this is a pointer comparison. */
- free (oldp->dirname);
- free (oldp->codeset);
- free (oldp);
- }
-
- if (_nl_current_default_domain != _nl_default_default_domain)
- /* Yes, again a pointer comparison. */
- free ((char *) _nl_current_default_domain);
-
- /* Remove the search tree with the known translations. */
- __tdestroy (root, free);
- root = NULL;
-
- while (transmem_list != NULL)
- {
- old = transmem_list;
- transmem_list = transmem_list->next;
- free (old);
- }
-}
-#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
deleted file mode 100644
index eb36833..0000000
--- a/intl/dcngettext.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Implementation of the dcngettext(3) function.
- Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DCNGETTEXT __dcngettext
-# define DCIGETTEXT __dcigettext
-#else
-# define DCNGETTEXT libintl_dcngettext
-# define DCIGETTEXT libintl_dcigettext
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
- locale. */
-char *
-DCNGETTEXT (const char *domainname,
- const char *msgid1, const char *msgid2, unsigned long int n,
- int category)
-{
- return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__dcngettext, dcngettext);
-#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
deleted file mode 100644
index 9b0d0de..0000000
--- a/intl/dgettext.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Implementation of the dgettext(3) function.
- Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-
-#include <locale.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DGETTEXT __dgettext
-# define DCGETTEXT INTUSE(__dcgettext)
-#else
-# define DGETTEXT libintl_dgettext
-# define DCGETTEXT libintl_dcgettext
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog of the current
- LC_MESSAGES locale. */
-char *
-DGETTEXT (const char *domainname, const char *msgid)
-{
- return DCGETTEXT (domainname, msgid, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__dgettext, dgettext);
-#endif
diff --git a/intl/dngettext.c b/intl/dngettext.c
deleted file mode 100644
index 3278438..0000000
--- a/intl/dngettext.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Implementation of the dngettext(3) function.
- Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-
-#include <locale.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DNGETTEXT __dngettext
-# define DCNGETTEXT __dcngettext
-#else
-# define DNGETTEXT libintl_dngettext
-# define DCNGETTEXT libintl_dcngettext
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog of the current
- LC_MESSAGES locale and skip message according to the plural form. */
-char *
-DNGETTEXT (const char *domainname,
- const char *msgid1, const char *msgid2, unsigned long int n)
-{
- return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__dngettext, dngettext);
-#endif
diff --git a/intl/eval-plural.h b/intl/eval-plural.h
deleted file mode 100644
index 21eecb3..0000000
--- a/intl/eval-plural.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Plural expression evaluation.
- Copyright (C) 2000-2003, 2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef STATIC
-#define STATIC static
-#endif
-
-/* Evaluate the plural expression and return an index value. */
-STATIC
-unsigned long int
-internal_function
-plural_eval (const struct expression *pexp, unsigned long int n)
-{
- switch (pexp->nargs)
- {
- case 0:
- switch (pexp->operation)
- {
- case var:
- return n;
- case num:
- return pexp->val.num;
- default:
- break;
- }
- /* NOTREACHED */
- break;
- case 1:
- {
- /* pexp->operation must be lnot. */
- unsigned long int arg = plural_eval (pexp->val.args[0], n);
- return ! arg;
- }
- case 2:
- {
- unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
- if (pexp->operation == lor)
- return leftarg || plural_eval (pexp->val.args[1], n);
- else if (pexp->operation == land)
- return leftarg && plural_eval (pexp->val.args[1], n);
- else
- {
- unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
-
- switch (pexp->operation)
- {
- case mult:
- return leftarg * rightarg;
- case divide:
-#if !INTDIV0_RAISES_SIGFPE
- if (rightarg == 0)
- raise (SIGFPE);
-#endif
- return leftarg / rightarg;
- case module:
-#if !INTDIV0_RAISES_SIGFPE
- if (rightarg == 0)
- raise (SIGFPE);
-#endif
- return leftarg % rightarg;
- case plus:
- return leftarg + rightarg;
- case minus:
- return leftarg - rightarg;
- case less_than:
- return leftarg < rightarg;
- case greater_than:
- return leftarg > rightarg;
- case less_or_equal:
- return leftarg <= rightarg;
- case greater_or_equal:
- return leftarg >= rightarg;
- case equal:
- return leftarg == rightarg;
- case not_equal:
- return leftarg != rightarg;
- default:
- break;
- }
- }
- /* NOTREACHED */
- break;
- }
- case 3:
- {
- /* pexp->operation must be qmop. */
- unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
- return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
- }
- }
- /* NOTREACHED */
- return 0;
-}
diff --git a/intl/explodename.c b/intl/explodename.c
deleted file mode 100644
index eb5dd75..0000000
--- a/intl/explodename.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Copyright (C) 1995-1998, 2000-2001, 2003, 2005, 2007 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include "loadinfo.h"
-
-/* On some strange systems still no definition of NULL is found. Sigh! */
-#ifndef NULL
-# if defined __STDC__ && __STDC__
-# define NULL ((void *) 0)
-# else
-# define NULL 0
-# endif
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Split a locale name NAME into a leading language part and all the
- rest. Return a pointer to the first character after the language,
- i.e. to the first byte of the rest. */
-static char *_nl_find_language (const char *name);
-
-static char *
-_nl_find_language (const char *name)
-{
- while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '.')
- ++name;
-
- return (char *) name;
-}
-
-
-int
-_nl_explode_name (char *name,
- const char **language, const char **modifier,
- const char **territory, const char **codeset,
- const char **normalized_codeset)
-{
- char *cp;
- int mask;
-
- *modifier = NULL;
- *territory = NULL;
- *codeset = NULL;
- *normalized_codeset = NULL;
-
- /* Now we determine the single parts of the locale name. First
- look for the language. Termination symbols are `_', '.', and `@'. */
- mask = 0;
- *language = cp = name;
- cp = _nl_find_language (*language);
-
- if (*language == cp)
- /* This does not make sense: language has to be specified. Use
- this entry as it is without exploding. Perhaps it is an alias. */
- cp = strchr (*language, '\0');
- else
- {
- if (cp[0] == '_')
- {
- /* Next is the territory. */
- cp[0] = '\0';
- *territory = ++cp;
-
- while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@')
- ++cp;
-
- mask |= XPG_TERRITORY;
- }
-
- if (cp[0] == '.')
- {
- /* Next is the codeset. */
- cp[0] = '\0';
- *codeset = ++cp;
-
- while (cp[0] != '\0' && cp[0] != '@')
- ++cp;
-
- mask |= XPG_CODESET;
-
- if (*codeset != cp && (*codeset)[0] != '\0')
- {
- *normalized_codeset = _nl_normalize_codeset (*codeset,
- cp - *codeset);
- if (*normalized_codeset == NULL)
- return -1;
- else if (strcmp (*codeset, *normalized_codeset) == 0)
- free ((char *) *normalized_codeset);
- else
- mask |= XPG_NORM_CODESET;
- }
- }
- }
-
- if (cp[0] == '@')
- {
- /* Next is the modifier. */
- cp[0] = '\0';
- *modifier = ++cp;
-
- if (cp[0] != '\0')
- mask |= XPG_MODIFIER;
- }
-
- if (*territory != NULL && (*territory)[0] == '\0')
- mask &= ~XPG_TERRITORY;
-
- if (*codeset != NULL && (*codeset)[0] == '\0')
- mask &= ~XPG_CODESET;
-
- return mask;
-}
diff --git a/intl/export.h b/intl/export.h
deleted file mode 100644
index b5c47ad..0000000
--- a/intl/export.h
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#if @HAVE_VISIBILITY@ && BUILDING_LIBINTL
-#define LIBINTL_DLL_EXPORTED __attribute__((__visibility__("default")))
-#else
-#define LIBINTL_DLL_EXPORTED
-#endif
diff --git a/intl/finddomain.c b/intl/finddomain.c
deleted file mode 100644
index cab2c99..0000000
--- a/intl/finddomain.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* Handle list of needed message catalogs
- Copyright (C) 1995-1999, 2000-2001, 2003-2007 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper at gnu.org>, 1995.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* Handle multi-threaded applications. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-# define gl_rwlock_define_initialized __libc_rwlock_define_initialized
-# define gl_rwlock_rdlock __libc_rwlock_rdlock
-# define gl_rwlock_wrlock __libc_rwlock_wrlock
-# define gl_rwlock_unlock __libc_rwlock_unlock
-#else
-# include "lock.h"
-#endif
-
-/* @@ end of prolog @@ */
-/* List of already loaded domains. */
-static struct loaded_l10nfile *_nl_loaded_domains;
-
-
-/* Return a data structure describing the message catalog described by
- the DOMAINNAME and CATEGORY parameters with respect to the currently
- established bindings. */
-struct loaded_l10nfile *
-internal_function
-_nl_find_domain (const char *dirname, char *locale,
- const char *domainname, struct binding *domainbinding)
-{
- struct loaded_l10nfile *retval;
- const char *language;
- const char *modifier;
- const char *territory;
- const char *codeset;
- const char *normalized_codeset;
- const char *alias_value;
- int mask;
-
- /* LOCALE can consist of up to four recognized parts for the XPG syntax:
-
- language[_territory][.codeset][@modifier]
-
- Beside the first part all of them are allowed to be missing. If
- the full specified locale is not found, the less specific one are
- looked for. The various parts will be stripped off according to
- the following order:
- (1) codeset
- (2) normalized codeset
- (3) territory
- (4) modifier
- */
-
- /* We need to protect modifying the _NL_LOADED_DOMAINS data. */
- gl_rwlock_define_initialized (static, lock);
- gl_rwlock_rdlock (lock);
-
- /* If we have already tested for this locale entry there has to
- be one data set in the list of loaded domains. */
- retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
- strlen (dirname) + 1, 0, locale, NULL, NULL,
- NULL, NULL, domainname, 0);
-
- gl_rwlock_unlock (lock);
-
- if (retval != NULL)
- {
- /* We know something about this locale. */
- int cnt;
-
- if (retval->decided <= 0)
- _nl_load_domain (retval, domainbinding);
-
- if (retval->data != NULL)
- return retval;
-
- for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
- {
- if (retval->successor[cnt]->decided <= 0)
- _nl_load_domain (retval->successor[cnt], domainbinding);
-
- if (retval->successor[cnt]->data != NULL)
- break;
- }
-
- return retval;
- /* NOTREACHED */
- }
-
- /* See whether the locale value is an alias. If yes its value
- *overwrites* the alias name. No test for the original value is
- done. */
- alias_value = _nl_expand_alias (locale);
- if (alias_value != NULL)
- {
-#if defined _LIBC || defined HAVE_STRDUP
- locale = strdup (alias_value);
- if (locale == NULL)
- return NULL;
-#else
- size_t len = strlen (alias_value) + 1;
- locale = (char *) malloc (len);
- if (locale == NULL)
- return NULL;
-
- memcpy (locale, alias_value, len);
-#endif
- }
-
- /* Now we determine the single parts of the locale name. First
- look for the language. Termination symbols are `_', '.', and `@'. */
- mask = _nl_explode_name (locale, &language, &modifier, &territory,
- &codeset, &normalized_codeset);
- if (mask == -1)
- /* This means we are out of core. */
- return NULL;
-
- /* We need to protect modifying the _NL_LOADED_DOMAINS data. */
- gl_rwlock_wrlock (lock);
-
- /* Create all possible locale entries which might be interested in
- generalization. */
- retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
- strlen (dirname) + 1, mask, language, territory,
- codeset, normalized_codeset, modifier,
- domainname, 1);
-
- gl_rwlock_unlock (lock);
-
- if (retval == NULL)
- /* This means we are out of core. */
- goto out;
-
- if (retval->decided <= 0)
- _nl_load_domain (retval, domainbinding);
- if (retval->data == NULL)
- {
- int cnt;
- for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
- {
- if (retval->successor[cnt]->decided <= 0)
- _nl_load_domain (retval->successor[cnt], domainbinding);
- if (retval->successor[cnt]->data != NULL)
- break;
- }
- }
-
- /* The room for an alias was dynamically allocated. Free it now. */
- if (alias_value != NULL)
- free (locale);
-
-out:
- /* The space for normalized_codeset is dynamically allocated. Free it. */
- if (mask & XPG_NORM_CODESET)
- free ((void *) normalized_codeset);
-
- return retval;
-}
-
-
-#ifdef _LIBC
-/* This is called from iconv/gconv_db.c's free_mem, as locales must
- be freed before freeing gconv steps arrays. */
-void __libc_freeres_fn_section
-_nl_finddomain_subfreeres ()
-{
- struct loaded_l10nfile *runp = _nl_loaded_domains;
-
- while (runp != NULL)
- {
- struct loaded_l10nfile *here = runp;
- if (runp->data != NULL)
- _nl_unload_domain ((struct loaded_domain *) runp->data);
- runp = runp->next;
- free ((char *) here->filename);
- free (here);
- }
-}
-#endif
diff --git a/intl/gettext.c b/intl/gettext.c
deleted file mode 100644
index d82d439..0000000
--- a/intl/gettext.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Implementation of gettext(3) function.
- Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef _LIBC
-# define __need_NULL
-# include <stddef.h>
-#else
-# include <stdlib.h> /* Just for NULL. */
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define GETTEXT __gettext
-# define DCGETTEXT INTUSE(__dcgettext)
-#else
-# define GETTEXT libintl_gettext
-# define DCGETTEXT libintl_dcgettext
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
- LC_MESSAGES locale. If not found, returns MSGID itself (the default
- text). */
-char *
-GETTEXT (const char *msgid)
-{
- return DCGETTEXT (NULL, msgid, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__gettext, gettext);
-#endif
diff --git a/intl/gettext.h b/intl/gettext.h
deleted file mode 100644
index 6f5d760..0000000
--- a/intl/gettext.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Description of GNU message catalog format: general file layout.
- Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifndef _GETTEXT_H
-#define _GETTEXT_H 1
-
-#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
- as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
- when cross-compiling. */
-
-#if __STDC__
-# define UINT_MAX_32_BITS 4294967295U
-#else
-# define UINT_MAX_32_BITS 0xFFFFFFFF
-#endif
-
-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
- This should be valid for all systems GNU cares about because
- that doesn't include 16-bit systems, and only modern systems
- (that certainly have <limits.h>) have 64+-bit integral types. */
-
-#ifndef UINT_MAX
-# define UINT_MAX UINT_MAX_32_BITS
-#endif
-
-#if UINT_MAX == UINT_MAX_32_BITS
-typedef unsigned nls_uint32;
-#else
-# if USHRT_MAX == UINT_MAX_32_BITS
-typedef unsigned short nls_uint32;
-# else
-# if ULONG_MAX == UINT_MAX_32_BITS
-typedef unsigned long nls_uint32;
-# else
- /* The following line is intended to throw an error. Using #error is
- not portable enough. */
- "Cannot determine unsigned 32-bit data type."
-# endif
-# endif
-#endif
-
-
-/* Header for binary .mo file format. */
-struct mo_file_header
-{
- /* The magic number. */
- nls_uint32 magic;
- /* The revision number of the file format. */
- nls_uint32 revision;
- /* The number of strings pairs. */
- nls_uint32 nstrings;
- /* Offset of table with start offsets of original strings. */
- nls_uint32 orig_tab_offset;
- /* Offset of table with start offsets of translation strings. */
- nls_uint32 trans_tab_offset;
- /* Size of hashing table. */
- nls_uint32 hash_tab_size;
- /* Offset of first hashing entry. */
- nls_uint32 hash_tab_offset;
-};
-
-struct string_desc
-{
- /* Length of addressed string. */
- nls_uint32 length;
- /* Offset of string in file. */
- nls_uint32 offset;
-};
-
-/* @@ begin of epilog @@ */
-
-#endif /* gettext.h */
diff --git a/intl/gettextP.h b/intl/gettextP.h
deleted file mode 100644
index 5706fb5..0000000
--- a/intl/gettextP.h
+++ /dev/null
@@ -1,297 +0,0 @@
-/* Header describing internals of libintl library.
- Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper at cygnus.com>, 1995.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _GETTEXTP_H
-#define _GETTEXTP_H
-
-#include <stddef.h> /* Get size_t. */
-
-#ifdef _LIBC
-# include "../iconv/gconv_int.h"
-#else
-# if HAVE_ICONV
-# include <iconv.h>
-# endif
-#endif
-
-/* Handle multi-threaded applications. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-# define gl_rwlock_define __libc_rwlock_define
-#else
-# include "lock.h"
-#endif
-
-#ifdef _LIBC
-extern char *__gettext (const char *__msgid);
-extern char *__dgettext (const char *__domainname, const char *__msgid);
-extern char *__dcgettext (const char *__domainname, const char *__msgid,
- int __category);
-extern char *__ngettext (const char *__msgid1, const char *__msgid2,
- unsigned long int __n);
-extern char *__dngettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int n);
-extern char *__dcngettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int __n, int __category);
-extern char *__dcigettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- int __plural, unsigned long int __n,
- int __category);
-extern char *__textdomain (const char *__domainname);
-extern char *__bindtextdomain (const char *__domainname,
- const char *__dirname);
-extern char *__bind_textdomain_codeset (const char *__domainname,
- const char *__codeset);
-extern void _nl_finddomain_subfreeres (void) attribute_hidden;
-extern void _nl_unload_domain (struct loaded_domain *__domain)
- internal_function attribute_hidden;
-#else
-/* Declare the exported libintl_* functions, in a way that allows us to
- call them under their real name. */
-# undef _INTL_REDIRECT_INLINE
-# undef _INTL_REDIRECT_MACROS
-# define _INTL_REDIRECT_MACROS
-# include "libgnuintl.h"
-# ifdef IN_LIBGLOCALE
-extern char *gl_dcigettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- int __plural, unsigned long int __n,
- int __category,
- const char *__localename, const char *__encoding);
-# else
-extern char *libintl_dcigettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- int __plural, unsigned long int __n,
- int __category);
-# endif
-#endif
-
-#include "loadinfo.h"
-
-#include "gmo.h" /* Get nls_uint32. */
-
-/* @@ end of prolog @@ */
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-#ifndef attribute_hidden
-# define attribute_hidden
-#endif
-
-/* Tell the compiler when a conditional or integer expression is
- almost always true or almost always false. */
-#ifndef HAVE_BUILTIN_EXPECT
-# define __builtin_expect(expr, val) (expr)
-#endif
-
-#ifndef W
-# define W(flag, data) ((flag) ? SWAP (data) : (data))
-#endif
-
-
-#ifdef _LIBC
-# include <byteswap.h>
-# define SWAP(i) bswap_32 (i)
-#else
-static inline nls_uint32
-# ifdef __cplusplus
-SWAP (nls_uint32 i)
-# else
-SWAP (i)
- nls_uint32 i;
-# endif
-{
- return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
-}
-#endif
-
-
-/* In-memory representation of system dependent string. */
-struct sysdep_string_desc
-{
- /* Length of addressed string, including the trailing NUL. */
- size_t length;
- /* Pointer to addressed string. */
- const char *pointer;
-};
-
-/* Cache of translated strings after charset conversion.
- Note: The strings are converted to the target encoding only on an as-needed
- basis. */
-struct converted_domain
-{
- /* The target encoding name. */
- const char *encoding;
- /* The descriptor for conversion from the message catalog's encoding to
- this target encoding. */
-#ifdef _LIBC
- __gconv_t conv;
-#else
-# if HAVE_ICONV
- iconv_t conv;
-# endif
-#endif
- /* The table of translated strings after charset conversion. */
- char **conv_tab;
-};
-
-/* The representation of an opened message catalog. */
-struct loaded_domain
-{
- /* Pointer to memory containing the .mo file. */
- const char *data;
- /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */
- int use_mmap;
- /* Size of mmap()ed memory. */
- size_t mmap_size;
- /* 1 if the .mo file uses a different endianness than this machine. */
- int must_swap;
- /* Pointer to additional malloc()ed memory. */
- void *malloced;
-
- /* Number of static strings pairs. */
- nls_uint32 nstrings;
- /* Pointer to descriptors of original strings in the file. */
- const struct string_desc *orig_tab;
- /* Pointer to descriptors of translated strings in the file. */
- const struct string_desc *trans_tab;
-
- /* Number of system dependent strings pairs. */
- nls_uint32 n_sysdep_strings;
- /* Pointer to descriptors of original sysdep strings. */
- const struct sysdep_string_desc *orig_sysdep_tab;
- /* Pointer to descriptors of translated sysdep strings. */
- const struct sysdep_string_desc *trans_sysdep_tab;
-
- /* Size of hash table. */
- nls_uint32 hash_size;
- /* Pointer to hash table. */
- const nls_uint32 *hash_tab;
- /* 1 if the hash table uses a different endianness than this machine. */
- int must_swap_hash_tab;
-
- /* Cache of charset conversions of the translated strings. */
- struct converted_domain *conversions;
- size_t nconversions;
- gl_rwlock_define (, conversions_lock)
-
- const struct expression *plural;
- unsigned long int nplurals;
-};
-
-/* We want to allocate a string at the end of the struct. But ISO C
- doesn't allow zero sized arrays. */
-#ifdef __GNUC__
-# define ZERO 0
-#else
-# define ZERO 1
-#endif
-
-/* A set of settings bound to a message domain. Used to store settings
- from bindtextdomain() and bind_textdomain_codeset(). */
-struct binding
-{
- struct binding *next;
- char *dirname;
- char *codeset;
- char domainname[ZERO];
-};
-
-/* A counter which is incremented each time some previous translations
- become invalid.
- This variable is part of the external ABI of the GNU libintl. */
-#ifdef IN_LIBGLOCALE
-# include <glocale/config.h>
-extern LIBGLOCALE_DLL_EXPORTED int _nl_msg_cat_cntr;
-#else
-extern LIBINTL_DLL_EXPORTED int _nl_msg_cat_cntr;
-#endif
-
-#ifndef _LIBC
-extern const char *_nl_language_preferences_default (void);
-# define gl_locale_name_canonicalize _nl_locale_name_canonicalize
-extern void _nl_locale_name_canonicalize (char *name);
-# define gl_locale_name_posix _nl_locale_name_posix
-extern const char *_nl_locale_name_posix (int category,
- const char *categoryname);
-# define gl_locale_name_default _nl_locale_name_default
-extern const char *_nl_locale_name_default (void);
-# define gl_locale_name _nl_locale_name
-extern const char *_nl_locale_name (int category, const char *categoryname);
-#endif
-
-struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
- const char *__domainname,
- struct binding *__domainbinding)
- internal_function;
-void _nl_load_domain (struct loaded_l10nfile *__domain,
- struct binding *__domainbinding)
- internal_function;
-
-#ifdef IN_LIBGLOCALE
-char *_nl_find_msg (struct loaded_l10nfile *domain_file,
- struct binding *domainbinding, const char *encoding,
- const char *msgid,
- size_t *lengthp)
- internal_function;
-#else
-char *_nl_find_msg (struct loaded_l10nfile *domain_file,
- struct binding *domainbinding, const char *msgid,
- int convert, size_t *lengthp)
- internal_function;
-#endif
-
-/* The internal variables in the standalone libintl.a must have different
- names than the internal variables in GNU libc, otherwise programs
- using libintl.a cannot be linked statically. */
-#if !defined _LIBC
-# define _nl_default_dirname libintl_nl_default_dirname
-# define _nl_domain_bindings libintl_nl_domain_bindings
-#endif
-
-/* Contains the default location of the message catalogs. */
-extern const char _nl_default_dirname[];
-#ifdef _LIBC
-libc_hidden_proto (_nl_default_dirname)
-#endif
-
-/* List with bindings of specific domains. */
-extern struct binding *_nl_domain_bindings;
-
-/* The internal variables in the standalone libintl.a must have different
- names than the internal variables in GNU libc, otherwise programs
- using libintl.a cannot be linked statically. */
-#if !defined _LIBC
-# define _nl_default_default_domain libintl_nl_default_default_domain
-# define _nl_current_default_domain libintl_nl_current_default_domain
-#endif
-
-/* Name of the default text domain. */
-extern const char _nl_default_default_domain[] attribute_hidden;
-
-/* Default text domain in which entries for gettext(3) are to be found. */
-extern const char *_nl_current_default_domain attribute_hidden;
-
-/* @@ begin of epilog @@ */
-
-#endif /* gettextP.h */
diff --git a/intl/gmo.h b/intl/gmo.h
deleted file mode 100644
index da9dbaa..0000000
--- a/intl/gmo.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Description of GNU message catalog format: general file layout.
- Copyright (C) 1995, 1997, 2000-2002, 2004, 2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _GETTEXT_H
-#define _GETTEXT_H 1
-
-#include <limits.h>
-
-/* @@ end of prolog @@ */
-
-/* The magic number of the GNU message catalog format. */
-#define _MAGIC 0x950412de
-#define _MAGIC_SWAPPED 0xde120495
-
-/* Revision number of the currently used .mo (binary) file format. */
-#define MO_REVISION_NUMBER 0
-#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
-
-/* The following contortions are an attempt to use the C preprocessor
- to determine an unsigned integral type that is 32 bits wide. An
- alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
- as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
- when cross-compiling. */
-
-#if __STDC__
-# define UINT_MAX_32_BITS 4294967295U
-#else
-# define UINT_MAX_32_BITS 0xFFFFFFFF
-#endif
-
-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
- This should be valid for all systems GNU cares about because
- that doesn't include 16-bit systems, and only modern systems
- (that certainly have <limits.h>) have 64+-bit integral types. */
-
-#ifndef UINT_MAX
-# define UINT_MAX UINT_MAX_32_BITS
-#endif
-
-#if UINT_MAX == UINT_MAX_32_BITS
-typedef unsigned nls_uint32;
-#else
-# if USHRT_MAX == UINT_MAX_32_BITS
-typedef unsigned short nls_uint32;
-# else
-# if ULONG_MAX == UINT_MAX_32_BITS
-typedef unsigned long nls_uint32;
-# else
- /* The following line is intended to throw an error. Using #error is
- not portable enough. */
- "Cannot determine unsigned 32-bit data type."
-# endif
-# endif
-#endif
-
-
-/* Header for binary .mo file format. */
-struct mo_file_header
-{
- /* The magic number. */
- nls_uint32 magic;
- /* The revision number of the file format. */
- nls_uint32 revision;
-
- /* The following are only used in .mo files with major revision 0 or 1. */
-
- /* The number of strings pairs. */
- nls_uint32 nstrings;
- /* Offset of table with start offsets of original strings. */
- nls_uint32 orig_tab_offset;
- /* Offset of table with start offsets of translated strings. */
- nls_uint32 trans_tab_offset;
- /* Size of hash table. */
- nls_uint32 hash_tab_size;
- /* Offset of first hash table entry. */
- nls_uint32 hash_tab_offset;
-
- /* The following are only used in .mo files with minor revision >= 1. */
-
- /* The number of system dependent segments. */
- nls_uint32 n_sysdep_segments;
- /* Offset of table describing system dependent segments. */
- nls_uint32 sysdep_segments_offset;
- /* The number of system dependent strings pairs. */
- nls_uint32 n_sysdep_strings;
- /* Offset of table with start offsets of original sysdep strings. */
- nls_uint32 orig_sysdep_tab_offset;
- /* Offset of table with start offsets of translated sysdep strings. */
- nls_uint32 trans_sysdep_tab_offset;
-};
-
-/* Descriptor for static string contained in the binary .mo file. */
-struct string_desc
-{
- /* Length of addressed string, not including the trailing NUL. */
- nls_uint32 length;
- /* Offset of string in file. */
- nls_uint32 offset;
-};
-
-/* The following are only used in .mo files with minor revision >= 1. */
-
-/* Descriptor for system dependent string segment. */
-struct sysdep_segment
-{
- /* Length of addressed string, including the trailing NUL. */
- nls_uint32 length;
- /* Offset of string in file. */
- nls_uint32 offset;
-};
-
-/* Pair of a static and a system dependent segment, in struct sysdep_string. */
-struct segment_pair
-{
- /* Size of static segment. */
- nls_uint32 segsize;
- /* Reference to system dependent string segment, or ~0 at the end. */
- nls_uint32 sysdepref;
-};
-
-/* Descriptor for system dependent string. */
-struct sysdep_string
-{
- /* Offset of static string segments in file. */
- nls_uint32 offset;
- /* Alternating sequence of static and system dependent segments.
- The last segment is a static segment, including the trailing NUL. */
- struct segment_pair segments[1];
-};
-
-/* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF,
- regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */
-#define SEGMENTS_END ((nls_uint32) ~0)
-
-/* @@ begin of epilog @@ */
-
-#endif /* gettext.h */
diff --git a/intl/hash-string.c b/intl/hash-string.c
deleted file mode 100644
index 3c513f0..0000000
--- a/intl/hash-string.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Implements a string hashing function.
- Copyright (C) 1995, 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Specification. */
-#include "hash-string.h"
-
-
-/* Defines the so called `hashpjw' function by P.J. Weinberger
- [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
- 1986, 1987 Bell Telephone Laboratories, Inc.] */
-unsigned long int
-__hash_string (const char *str_param)
-{
- unsigned long int hval, g;
- const char *str = str_param;
-
- /* Compute the hash value for the given string. */
- hval = 0;
- while (*str != '\0')
- {
- hval <<= 4;
- hval += (unsigned char) *str++;
- g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
- if (g != 0)
- {
- hval ^= g >> (HASHWORDBITS - 8);
- hval ^= g;
- }
- }
- return hval;
-}
diff --git a/intl/hash-string.h b/intl/hash-string.h
deleted file mode 100644
index 98c07e4..0000000
--- a/intl/hash-string.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Description of GNU message catalog format: string hashing function.
- Copyright (C) 1995, 1997-1998, 2000-2003, 2005 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* @@ end of prolog @@ */
-
-/* We assume to have `unsigned long int' value with at least 32 bits. */
-#define HASHWORDBITS 32
-
-
-#ifndef _LIBC
-# ifdef IN_LIBINTL
-# define __hash_string libintl_hash_string
-# else
-# define __hash_string hash_string
-# endif
-#endif
-
-/* Defines the so called `hashpjw' function by P.J. Weinberger
- [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
- 1986, 1987 Bell Telephone Laboratories, Inc.] */
-extern unsigned long int __hash_string (const char *str_param);
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
deleted file mode 100644
index 9b9ecbb..0000000
--- a/intl/intl-compat.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
- Library.
- Copyright (C) 1995, 2000-2003, 2005 Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-
-/* @@ end of prolog @@ */
-
-/* This file redirects the gettext functions (without prefix) to those
- defined in the included GNU libintl library (with "libintl_" prefix).
- It is compiled into libintl in order to make the AM_GNU_GETTEXT test
- of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
- has the redirections primarily in the <libintl.h> include file.
- It is also compiled into libgnuintl so that libgnuintl.so can be used
- as LD_PRELOADable library on glibc systems, to provide the extra
- features that the functions in the libc don't have (namely, logging). */
-
-
-#undef gettext
-#undef dgettext
-#undef dcgettext
-#undef ngettext
-#undef dngettext
-#undef dcngettext
-#undef textdomain
-#undef bindtextdomain
-#undef bind_textdomain_codeset
-
-
-/* When building a DLL, we must export some functions. Note that because
- the functions are only defined for binary backward compatibility, we
- don't need to use __declspec(dllimport) in any case. */
-#if HAVE_VISIBILITY && BUILDING_DLL
-# define DLL_EXPORTED __attribute__((__visibility__("default")))
-#elif defined _MSC_VER && BUILDING_DLL
-# define DLL_EXPORTED __declspec(dllexport)
-#else
-# define DLL_EXPORTED
-#endif
-
-
-DLL_EXPORTED
-char *
-gettext (const char *msgid)
-{
- return libintl_gettext (msgid);
-}
-
-
-DLL_EXPORTED
-char *
-dgettext (const char *domainname, const char *msgid)
-{
- return libintl_dgettext (domainname, msgid);
-}
-
-
-DLL_EXPORTED
-char *
-dcgettext (const char *domainname, const char *msgid, int category)
-{
- return libintl_dcgettext (domainname, msgid, category);
-}
-
-
-DLL_EXPORTED
-char *
-ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
-{
- return libintl_ngettext (msgid1, msgid2, n);
-}
-
-
-DLL_EXPORTED
-char *
-dngettext (const char *domainname,
- const char *msgid1, const char *msgid2, unsigned long int n)
-{
- return libintl_dngettext (domainname, msgid1, msgid2, n);
-}
-
-
-DLL_EXPORTED
-char *
-dcngettext (const char *domainname,
- const char *msgid1, const char *msgid2, unsigned long int n,
- int category)
-{
- return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
-}
-
-
-DLL_EXPORTED
-char *
-textdomain (const char *domainname)
-{
- return libintl_textdomain (domainname);
-}
-
-
-DLL_EXPORTED
-char *
-bindtextdomain (const char *domainname, const char *dirname)
-{
- return libintl_bindtextdomain (domainname, dirname);
-}
-
-
-DLL_EXPORTED
-char *
-bind_textdomain_codeset (const char *domainname, const char *codeset)
-{
- return libintl_bind_textdomain_codeset (domainname, codeset);
-}
diff --git a/intl/intl-exports.c b/intl/intl-exports.c
deleted file mode 100644
index 7176589..0000000
--- a/intl/intl-exports.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* List of exported symbols of libintl on Cygwin.
- Copyright (C) 2006 Free Software Foundation, Inc.
- Written by Bruno Haible <bruno at clisp.org>, 2006.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
- /* IMP(x) is a symbol that contains the address of x. */
-#define IMP(x) _imp__##x
-
- /* Ensure that the variable x is exported from the library, and that a
- pseudo-variable IMP(x) is available. */
-#define VARIABLE(x) \
- /* Export x without redefining x. This code was found by compiling a \
- snippet: \
- extern __declspec(dllexport) int x; int x = 42; */ \
- asm (".section .drectve\n"); \
- asm (".ascii \" -export:" #x ",data\"\n"); \
- asm (".data\n"); \
- /* Allocate a pseudo-variable IMP(x). */ \
- extern int x; \
- void * IMP(x) = &x;
-
-VARIABLE(libintl_version)
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
deleted file mode 100644
index 365aeb7..0000000
--- a/intl/l10nflist.c
+++ /dev/null
@@ -1,400 +0,0 @@
-/* Copyright (C) 1995-1999, 2000-2006 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Tell glibc's <string.h> to provide a prototype for stpcpy().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#if defined _LIBC || defined HAVE_ARGZ_H
-# include <argz.h>
-#endif
-#include <ctype.h>
-#include <sys/types.h>
-#include <stdlib.h>
-
-#include "loadinfo.h"
-
-/* On some strange systems still no definition of NULL is found. Sigh! */
-#ifndef NULL
-# if defined __STDC__ && __STDC__
-# define NULL ((void *) 0)
-# else
-# define NULL 0
-# endif
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions. This is required by the standard
- because some ANSI C functions will require linking with this object
- file and the name space must not be polluted. */
-# ifndef stpcpy
-# define stpcpy(dest, src) __stpcpy(dest, src)
-# endif
-#else
-# ifndef HAVE_STPCPY
-static char *stpcpy (char *dest, const char *src);
-# endif
-#endif
-
-/* Pathname support.
- ISSLASH(C) tests whether C is a directory separator character.
- IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
- it may be concatenated to a directory pathname.
- */
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
- /* Win32, Cygwin, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-# define HAS_DEVICE(P) \
- ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
- && (P)[1] == ':')
-# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
-#else
- /* Unix */
-# define ISSLASH(C) ((C) == '/')
-# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
-#endif
-
-/* Define function which are usually not available. */
-
-#ifdef _LIBC
-# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
-#elif defined HAVE_ARGZ_COUNT
-# undef __argz_count
-# define __argz_count argz_count
-#else
-/* Returns the number of strings in ARGZ. */
-static size_t
-argz_count__ (const char *argz, size_t len)
-{
- size_t count = 0;
- while (len > 0)
- {
- size_t part_len = strlen (argz);
- argz += part_len + 1;
- len -= part_len + 1;
- count++;
- }
- return count;
-}
-# undef __argz_count
-# define __argz_count(argz, len) argz_count__ (argz, len)
-#endif /* !_LIBC && !HAVE_ARGZ_COUNT */
-
-#ifdef _LIBC
-# define __argz_stringify(argz, len, sep) \
- INTUSE(__argz_stringify) (argz, len, sep)
-#elif defined HAVE_ARGZ_STRINGIFY
-# undef __argz_stringify
-# define __argz_stringify argz_stringify
-#else
-/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
- except the last into the character SEP. */
-static void
-argz_stringify__ (char *argz, size_t len, int sep)
-{
- while (len > 0)
- {
- size_t part_len = strlen (argz);
- argz += part_len;
- len -= part_len + 1;
- if (len > 0)
- *argz++ = sep;
- }
-}
-# undef __argz_stringify
-# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
-#endif /* !_LIBC && !HAVE_ARGZ_STRINGIFY */
-
-#ifdef _LIBC
-#elif defined HAVE_ARGZ_NEXT
-# undef __argz_next
-# define __argz_next argz_next
-#else
-static char *
-argz_next__ (char *argz, size_t argz_len, const char *entry)
-{
- if (entry)
- {
- if (entry < argz + argz_len)
- entry = strchr (entry, '\0') + 1;
-
- return entry >= argz + argz_len ? NULL : (char *) entry;
- }
- else
- if (argz_len > 0)
- return argz;
- else
- return 0;
-}
-# undef __argz_next
-# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
-#endif /* !_LIBC && !HAVE_ARGZ_NEXT */
-
-
-/* Return number of bits set in X. */
-static inline int
-pop (int x)
-{
- /* We assume that no more than 16 bits are used. */
- x = ((x & ~0x5555) >> 1) + (x & 0x5555);
- x = ((x & ~0x3333) >> 2) + (x & 0x3333);
- x = ((x >> 4) + x) & 0x0f0f;
- x = ((x >> 8) + x) & 0xff;
-
- return x;
-}
-
-
-struct loaded_l10nfile *
-_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
- const char *dirlist, size_t dirlist_len,
- int mask, const char *language, const char *territory,
- const char *codeset, const char *normalized_codeset,
- const char *modifier,
- const char *filename, int do_allocate)
-{
- char *abs_filename;
- struct loaded_l10nfile **lastp;
- struct loaded_l10nfile *retval;
- char *cp;
- size_t dirlist_count;
- size_t entries;
- int cnt;
-
- /* If LANGUAGE contains an absolute directory specification, we ignore
- DIRLIST. */
- if (IS_ABSOLUTE_PATH (language))
- dirlist_len = 0;
-
- /* Allocate room for the full file name. */
- abs_filename = (char *) malloc (dirlist_len
- + strlen (language)
- + ((mask & XPG_TERRITORY) != 0
- ? strlen (territory) + 1 : 0)
- + ((mask & XPG_CODESET) != 0
- ? strlen (codeset) + 1 : 0)
- + ((mask & XPG_NORM_CODESET) != 0
- ? strlen (normalized_codeset) + 1 : 0)
- + ((mask & XPG_MODIFIER) != 0
- ? strlen (modifier) + 1 : 0)
- + 1 + strlen (filename) + 1);
-
- if (abs_filename == NULL)
- return NULL;
-
- /* Construct file name. */
- cp = abs_filename;
- if (dirlist_len > 0)
- {
- memcpy (cp, dirlist, dirlist_len);
- __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
- cp += dirlist_len;
- cp[-1] = '/';
- }
-
- cp = stpcpy (cp, language);
-
- if ((mask & XPG_TERRITORY) != 0)
- {
- *cp++ = '_';
- cp = stpcpy (cp, territory);
- }
- if ((mask & XPG_CODESET) != 0)
- {
- *cp++ = '.';
- cp = stpcpy (cp, codeset);
- }
- if ((mask & XPG_NORM_CODESET) != 0)
- {
- *cp++ = '.';
- cp = stpcpy (cp, normalized_codeset);
- }
- if ((mask & XPG_MODIFIER) != 0)
- {
- *cp++ = '@';
- cp = stpcpy (cp, modifier);
- }
-
- *cp++ = '/';
- stpcpy (cp, filename);
-
- /* Look in list of already loaded domains whether it is already
- available. */
- lastp = l10nfile_list;
- for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
- if (retval->filename != NULL)
- {
- int compare = strcmp (retval->filename, abs_filename);
- if (compare == 0)
- /* We found it! */
- break;
- if (compare < 0)
- {
- /* It's not in the list. */
- retval = NULL;
- break;
- }
-
- lastp = &retval->next;
- }
-
- if (retval != NULL || do_allocate == 0)
- {
- free (abs_filename);
- return retval;
- }
-
- dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
-
- /* Allocate a new loaded_l10nfile. */
- retval =
- (struct loaded_l10nfile *)
- malloc (sizeof (*retval)
- + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
- * sizeof (struct loaded_l10nfile *)));
- if (retval == NULL)
- {
- free (abs_filename);
- return NULL;
- }
-
- retval->filename = abs_filename;
-
- /* We set retval->data to NULL here; it is filled in later.
- Setting retval->decided to 1 here means that retval does not
- correspond to a real file (dirlist_count > 1) or is not worth
- looking up (if an unnormalized codeset was specified). */
- retval->decided = (dirlist_count > 1
- || ((mask & XPG_CODESET) != 0
- && (mask & XPG_NORM_CODESET) != 0));
- retval->data = NULL;
-
- retval->next = *lastp;
- *lastp = retval;
-
- entries = 0;
- /* Recurse to fill the inheritance list of RETVAL.
- If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
- entry does not correspond to a real file; retval->filename contains
- colons. In this case we loop across all elements of DIRLIST and
- across all bit patterns dominated by MASK.
- If the DIRLIST is a single directory or entirely redundant (i.e.
- DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
- MASK, excluding MASK itself.
- In either case, we loop down from MASK to 0. This has the effect
- that the extra bits in the locale name are dropped in this order:
- first the modifier, then the territory, then the codeset, then the
- normalized_codeset. */
- for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
- if ((cnt & ~mask) == 0
- && !((cnt & XPG_CODESET) != 0 && (cnt & XPG_NORM_CODESET) != 0))
- {
- if (dirlist_count > 1)
- {
- /* Iterate over all elements of the DIRLIST. */
- char *dir = NULL;
-
- while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
- != NULL)
- retval->successor[entries++]
- = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
- cnt, language, territory, codeset,
- normalized_codeset, modifier, filename,
- 1);
- }
- else
- retval->successor[entries++]
- = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
- cnt, language, territory, codeset,
- normalized_codeset, modifier, filename, 1);
- }
- retval->successor[entries] = NULL;
-
- return retval;
-}
-
-/* Normalize codeset name. There is no standard for the codeset
- names. Normalization allows the user to use any of the common
- names. The return value is dynamically allocated and has to be
- freed by the caller. */
-const char *
-_nl_normalize_codeset (const char *codeset, size_t name_len)
-{
- int len = 0;
- int only_digit = 1;
- char *retval;
- char *wp;
- size_t cnt;
-
- for (cnt = 0; cnt < name_len; ++cnt)
- if (isalnum ((unsigned char) codeset[cnt]))
- {
- ++len;
-
- if (isalpha ((unsigned char) codeset[cnt]))
- only_digit = 0;
- }
-
- retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
-
- if (retval != NULL)
- {
- if (only_digit)
- wp = stpcpy (retval, "iso");
- else
- wp = retval;
-
- for (cnt = 0; cnt < name_len; ++cnt)
- if (isalpha ((unsigned char) codeset[cnt]))
- *wp++ = tolower ((unsigned char) codeset[cnt]);
- else if (isdigit ((unsigned char) codeset[cnt]))
- *wp++ = codeset[cnt];
-
- *wp = '\0';
- }
-
- return (const char *) retval;
-}
-
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library. So we
- avoid the non-standard function stpcpy. In GNU C Library this
- function is available, though. Also allow the symbol HAVE_STPCPY
- to be defined. */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (char *dest, const char *src)
-{
- while ((*dest++ = *src++) != '\0')
- /* Do nothing. */ ;
- return dest - 1;
-}
-#endif
diff --git a/intl/langprefs.c b/intl/langprefs.c
deleted file mode 100644
index 59c8def..0000000
--- a/intl/langprefs.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Determine the user's language preferences.
- Copyright (C) 2004-2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Written by Bruno Haible <bruno at clisp.org>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-
-#if HAVE_CFPREFERENCESCOPYAPPVALUE
-# include <string.h>
-# include <CoreFoundation/CFPreferences.h>
-# include <CoreFoundation/CFPropertyList.h>
-# include <CoreFoundation/CFArray.h>
-# include <CoreFoundation/CFString.h>
-extern void _nl_locale_name_canonicalize (char *name);
-#endif
-
-/* Determine the user's language preferences, as a colon separated list of
- locale names in XPG syntax
- language[_territory][.codeset][@modifier]
- The result must not be freed; it is statically allocated.
- The LANGUAGE environment variable does not need to be considered; it is
- already taken into account by the caller. */
-
-const char *
-_nl_language_preferences_default (void)
-{
-#if HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */
- {
- /* Cache the preferences list, since CoreFoundation calls are expensive. */
- static const char *cached_languages;
- static int cache_initialized;
-
- if (!cache_initialized)
- {
- CFTypeRef preferences =
- CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"),
- kCFPreferencesCurrentApplication);
- if (preferences != NULL
- && CFGetTypeID (preferences) == CFArrayGetTypeID ())
- {
- CFArrayRef prefArray = (CFArrayRef)preferences;
- int n = CFArrayGetCount (prefArray);
- char buf[256];
- size_t size = 0;
- int i;
-
- for (i = 0; i < n; i++)
- {
- CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i);
- if (element != NULL
- && CFGetTypeID (element) == CFStringGetTypeID ()
- && CFStringGetCString ((CFStringRef)element,
- buf, sizeof (buf),
- kCFStringEncodingASCII))
- {
- _nl_locale_name_canonicalize (buf);
- size += strlen (buf) + 1;
- /* Most GNU programs use msgids in English and don't ship
- an en.mo message catalog. Therefore when we see "en"
- in the preferences list, arrange for gettext() to
- return the msgid, and ignore all further elements of
- the preferences list. */
- if (strcmp (buf, "en") == 0)
- break;
- }
- else
- break;
- }
- if (size > 0)
- {
- char *languages = (char *) malloc (size);
-
- if (languages != NULL)
- {
- char *p = languages;
-
- for (i = 0; i < n; i++)
- {
- CFTypeRef element =
- CFArrayGetValueAtIndex (prefArray, i);
- if (element != NULL
- && CFGetTypeID (element) == CFStringGetTypeID ()
- && CFStringGetCString ((CFStringRef)element,
- buf, sizeof (buf),
- kCFStringEncodingASCII))
- {
- _nl_locale_name_canonicalize (buf);
- strcpy (p, buf);
- p += strlen (buf);
- *p++ = ':';
- if (strcmp (buf, "en") == 0)
- break;
- }
- else
- break;
- }
- *--p = '\0';
-
- cached_languages = languages;
- }
- }
- }
- cache_initialized = 1;
- }
- if (cached_languages != NULL)
- return cached_languages;
- }
-#endif
-
- return NULL;
-}
diff --git a/intl/libgettext.h b/intl/libgettext.h
deleted file mode 100644
index c5be54a..0000000
--- a/intl/libgettext.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Convenience header for conditional use of GNU <libintl.h>.
- Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifndef _LIBGETTEXT_H
-#define _LIBGETTEXT_H 1
-
-/* NLS can be disabled through the configure --disable-nls option. */
-#if ENABLE_NLS
-
-/* Get declarations of GNU message catalog functions. */
-# include <libintl.h>
-
-#else
-
-# define gettext(Msgid) (Msgid)
-# define dgettext(Domainname, Msgid) (Msgid)
-# define dcgettext(Domainname, Msgid, Category) (Msgid)
-# define ngettext(Msgid1, Msgid2, N) \
- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
-# define dngettext(Domainname, Msgid1, Msgid2, N) \
- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
-# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
-# define textdomain(Domainname) ((char *) (Domainname))
-# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname))
-# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset))
-
-#endif
-
-/* For automatical extraction of messages sometimes no real
- translation is needed. Instead the string itself is the result. */
-#define gettext_noop(Str) (Str)
-
-#endif /* _LIBGETTEXT_H */
diff --git a/intl/libgnuintl.h.in b/intl/libgnuintl.h.in
deleted file mode 100644
index c9da798..0000000
--- a/intl/libgnuintl.h.in
+++ /dev/null
@@ -1,419 +0,0 @@
-/* Message catalogs for internationalization.
- Copyright (C) 1995-1997, 2000-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _LIBINTL_H
-#define _LIBINTL_H 1
-
-#include <locale.h>
-
-/* The LC_MESSAGES locale category is the category used by the functions
- gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
- On systems that don't define it, use an arbitrary value instead.
- On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
- then includes <libintl.h> (i.e. this file!) and then only defines
- LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
- in this case. */
-#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
-# define LC_MESSAGES 1729
-#endif
-
-/* We define an additional symbol to signal that we use the GNU
- implementation of gettext. */
-#define __USE_GNU_GETTEXT 1
-
-/* Provide information about the supported file formats. Returns the
- maximum minor revision number supported for a given major revision. */
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
- ((major) == 0 || (major) == 1 ? 1 : -1)
-
-/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
- precedence over _conio_gettext. */
-#ifdef __DJGPP__
-# undef gettext
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Version number: (major<<16) + (minor<<8) + subminor */
-#define LIBINTL_VERSION 0x001100
-extern int libintl_version;
-
-
-/* We redirect the functions to those prefixed with "libintl_". This is
- necessary, because some systems define gettext/textdomain/... in the C
- library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
- If we used the unprefixed names, there would be cases where the
- definition in the C library would override the one in the libintl.so
- shared library. Recall that on ELF systems, the symbols are looked
- up in the following order:
- 1. in the executable,
- 2. in the shared libraries specified on the link command line, in order,
- 3. in the dependencies of the shared libraries specified on the link
- command line,
- 4. in the dlopen()ed shared libraries, in the order in which they were
- dlopen()ed.
- The definition in the C library would override the one in libintl.so if
- either
- * -lc is given on the link command line and -lintl isn't, or
- * -lc is given on the link command line before -lintl, or
- * libintl.so is a dependency of a dlopen()ed shared library but not
- linked to the executable at link time.
- Since Solaris gettext() behaves differently than GNU gettext(), this
- would be unacceptable.
-
- The redirection happens by default through macros in C, so that &gettext
- is independent of the compilation unit, but through inline functions in
- C++, in order not to interfere with the name mangling of class fields or
- class methods called 'gettext'. */
-
-/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
- If he doesn't, we choose the method. A third possible method is
- _INTL_REDIRECT_ASM, supported only by GCC. */
-#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
-# if __GNUC__ >= 2 && !(__APPLE_CC__ > 1) && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
-# define _INTL_REDIRECT_ASM
-# else
-# ifdef __cplusplus
-# define _INTL_REDIRECT_INLINE
-# else
-# define _INTL_REDIRECT_MACROS
-# endif
-# endif
-#endif
-/* Auxiliary macros. */
-#ifdef _INTL_REDIRECT_ASM
-# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
-# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
-# define _INTL_STRINGIFY(prefix) #prefix
-#else
-# define _INTL_ASM(cname)
-#endif
-
-/* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return
- its n-th argument literally. This enables GCC to warn for example about
- printf (gettext ("foo %y")). */
-#if __GNUC__ >= 3 && !(__APPLE_CC__ > 1 && defined __cplusplus)
-# define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n)))
-#else
-# define _INTL_MAY_RETURN_STRING_ARG(n)
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
- LC_MESSAGES locale. If not found, returns MSGID itself (the default
- text). */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_gettext (const char *__msgid)
- _INTL_MAY_RETURN_STRING_ARG (1);
-static inline char *gettext (const char *__msgid)
-{
- return libintl_gettext (__msgid);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define gettext libintl_gettext
-#endif
-extern char *gettext (const char *__msgid)
- _INTL_ASM (libintl_gettext)
- _INTL_MAY_RETURN_STRING_ARG (1);
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
- LC_MESSAGES locale. */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dgettext (const char *__domainname, const char *__msgid)
- _INTL_MAY_RETURN_STRING_ARG (2);
-static inline char *dgettext (const char *__domainname, const char *__msgid)
-{
- return libintl_dgettext (__domainname, __msgid);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define dgettext libintl_dgettext
-#endif
-extern char *dgettext (const char *__domainname, const char *__msgid)
- _INTL_ASM (libintl_dgettext)
- _INTL_MAY_RETURN_STRING_ARG (2);
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
- locale. */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
- int __category)
- _INTL_MAY_RETURN_STRING_ARG (2);
-static inline char *dcgettext (const char *__domainname, const char *__msgid,
- int __category)
-{
- return libintl_dcgettext (__domainname, __msgid, __category);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define dcgettext libintl_dcgettext
-#endif
-extern char *dcgettext (const char *__domainname, const char *__msgid,
- int __category)
- _INTL_ASM (libintl_dcgettext)
- _INTL_MAY_RETURN_STRING_ARG (2);
-#endif
-
-
-/* Similar to `gettext' but select the plural form corresponding to the
- number N. */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
- unsigned long int __n)
- _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
-static inline char *ngettext (const char *__msgid1, const char *__msgid2,
- unsigned long int __n)
-{
- return libintl_ngettext (__msgid1, __msgid2, __n);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define ngettext libintl_ngettext
-#endif
-extern char *ngettext (const char *__msgid1, const char *__msgid2,
- unsigned long int __n)
- _INTL_ASM (libintl_ngettext)
- _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
-#endif
-
-/* Similar to `dgettext' but select the plural form corresponding to the
- number N. */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
- const char *__msgid2, unsigned long int __n)
- _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
-static inline char *dngettext (const char *__domainname, const char *__msgid1,
- const char *__msgid2, unsigned long int __n)
-{
- return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define dngettext libintl_dngettext
-#endif
-extern char *dngettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int __n)
- _INTL_ASM (libintl_dngettext)
- _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
-#endif
-
-/* Similar to `dcgettext' but select the plural form corresponding to the
- number N. */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dcngettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int __n, int __category)
- _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
-static inline char *dcngettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int __n, int __category)
-{
- return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define dcngettext libintl_dcngettext
-#endif
-extern char *dcngettext (const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int __n, int __category)
- _INTL_ASM (libintl_dcngettext)
- _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
-#endif
-
-
-#ifndef IN_LIBGLOCALE
-
-/* Set the current default message catalog to DOMAINNAME.
- If DOMAINNAME is null, return the current default.
- If DOMAINNAME is "", reset to the default of "messages". */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_textdomain (const char *__domainname);
-static inline char *textdomain (const char *__domainname)
-{
- return libintl_textdomain (__domainname);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define textdomain libintl_textdomain
-#endif
-extern char *textdomain (const char *__domainname)
- _INTL_ASM (libintl_textdomain);
-#endif
-
-/* Specify that the DOMAINNAME message catalog will be found
- in DIRNAME rather than in the system locale data base. */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_bindtextdomain (const char *__domainname,
- const char *__dirname);
-static inline char *bindtextdomain (const char *__domainname,
- const char *__dirname)
-{
- return libintl_bindtextdomain (__domainname, __dirname);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define bindtextdomain libintl_bindtextdomain
-#endif
-extern char *bindtextdomain (const char *__domainname, const char *__dirname)
- _INTL_ASM (libintl_bindtextdomain);
-#endif
-
-/* Specify the character encoding in which the messages from the
- DOMAINNAME message catalog will be returned. */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_bind_textdomain_codeset (const char *__domainname,
- const char *__codeset);
-static inline char *bind_textdomain_codeset (const char *__domainname,
- const char *__codeset)
-{
- return libintl_bind_textdomain_codeset (__domainname, __codeset);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define bind_textdomain_codeset libintl_bind_textdomain_codeset
-#endif
-extern char *bind_textdomain_codeset (const char *__domainname,
- const char *__codeset)
- _INTL_ASM (libintl_bind_textdomain_codeset);
-#endif
-
-#endif /* IN_LIBGLOCALE */
-
-
-/* Support for format strings with positions in *printf(), following the
- POSIX/XSI specification.
- Note: These replacements for the *printf() functions are visible only
- in source files that #include <libintl.h> or #include "gettext.h".
- Packages that use *printf() in source files that don't refer to _()
- or gettext() but for which the format string could be the return value
- of _() or gettext() need to add this #include. Oh well. */
-
-#if !@HAVE_POSIX_PRINTF@
-
-#include <stdio.h>
-#include <stddef.h>
-
-/* Get va_list. */
-#if __STDC__ || defined __cplusplus || defined _MSC_VER
-# include <stdarg.h>
-#else
-# include <varargs.h>
-#endif
-
-#undef fprintf
-#define fprintf libintl_fprintf
-extern int fprintf (FILE *, const char *, ...);
-#undef vfprintf
-#define vfprintf libintl_vfprintf
-extern int vfprintf (FILE *, const char *, va_list);
-
-#undef printf
-#if defined __NetBSD__ || defined __BEOS__ || defined __CYGWIN__ || defined __MINGW32__
-/* Don't break __attribute__((format(printf,M,N))).
- This redefinition is only possible because the libc in NetBSD, Cygwin,
- mingw does not have a function __printf__. */
-# define libintl_printf __printf__
-#endif
-#define printf libintl_printf
-extern int printf (const char *, ...);
-#undef vprintf
-#define vprintf libintl_vprintf
-extern int vprintf (const char *, va_list);
-
-#undef sprintf
-#define sprintf libintl_sprintf
-extern int sprintf (char *, const char *, ...);
-#undef vsprintf
-#define vsprintf libintl_vsprintf
-extern int vsprintf (char *, const char *, va_list);
-
-#if @HAVE_SNPRINTF@
-
-#undef snprintf
-#define snprintf libintl_snprintf
-extern int snprintf (char *, size_t, const char *, ...);
-#undef vsnprintf
-#define vsnprintf libintl_vsnprintf
-extern int vsnprintf (char *, size_t, const char *, va_list);
-
-#endif
-
-#if @HAVE_ASPRINTF@
-
-#undef asprintf
-#define asprintf libintl_asprintf
-extern int asprintf (char **, const char *, ...);
-#undef vasprintf
-#define vasprintf libintl_vasprintf
-extern int vasprintf (char **, const char *, va_list);
-
-#endif
-
-#if @HAVE_WPRINTF@
-
-#undef fwprintf
-#define fwprintf libintl_fwprintf
-extern int fwprintf (FILE *, const wchar_t *, ...);
-#undef vfwprintf
-#define vfwprintf libintl_vfwprintf
-extern int vfwprintf (FILE *, const wchar_t *, va_list);
-
-#undef wprintf
-#define wprintf libintl_wprintf
-extern int wprintf (const wchar_t *, ...);
-#undef vwprintf
-#define vwprintf libintl_vwprintf
-extern int vwprintf (const wchar_t *, va_list);
-
-#undef swprintf
-#define swprintf libintl_swprintf
-extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
-#undef vswprintf
-#define vswprintf libintl_vswprintf
-extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
-
-#endif
-
-#endif
-
-
-/* Support for relocatable packages. */
-
-/* Sets the original and the current installation prefix of the package.
- Relocation simply replaces a pathname starting with the original prefix
- by the corresponding pathname with the current prefix instead. Both
- prefixes should be directory names without trailing slash (i.e. use ""
- instead of "/"). */
-#define libintl_set_relocation_prefix libintl_set_relocation_prefix
-extern void
- libintl_set_relocation_prefix (const char *orig_prefix,
- const char *curr_prefix);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* libintl.h */
diff --git a/intl/libintl.rc b/intl/libintl.rc
deleted file mode 100644
index f00f0b3..0000000
--- a/intl/libintl.rc
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Resources for intl.dll */
-
-#include <winver.h>
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0
- PRODUCTVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0
- FILEFLAGSMASK 0x3fL /* VS_FFI_FILEFLAGSMASK */
-#ifdef _DEBUG
- FILEFLAGS 0x1L /* VS_FF_DEBUG */
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x10004L /* VOS_DOS_WINDOWS32 */
- FILETYPE 0x2L /* VFT_DLL */
- FILESUBTYPE 0x0L /* VFT2_UNKNOWN */
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "04090000" /* Lang = US English, Charset = ASCII */
- BEGIN
- VALUE "Comments", "This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\0"
- VALUE "CompanyName", "Free Software Foundation\0"
- VALUE "FileDescription", "LGPLed libintl for Windows NT/2000/XP/Vista and Windows 95/98/ME\0"
- VALUE "FileVersion", PACKAGE_VERSION_STRING "\0"
- VALUE "InternalName", "intl.dll\0"
- VALUE "LegalCopyright", "Copyright (C) 1995-2007\0"
- VALUE "LegalTrademarks", "\0"
- VALUE "OriginalFilename", "intl.dll\0"
- VALUE "ProductName", "libintl: accessing NLS message catalogs\0"
- VALUE "ProductVersion", PACKAGE_VERSION_STRING "\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x0409, 0 /* US English, ASCII */
- END
-END
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
deleted file mode 100644
index a7a1970..0000000
--- a/intl/loadinfo.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright (C) 1996-1999, 2000-2003, 2005-2006 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper at cygnus.com>, 1996.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _LOADINFO_H
-#define _LOADINFO_H 1
-
-/* Declarations of locale dependent catalog lookup functions.
- Implemented in
-
- localealias.c Possibly replace a locale name by another.
- explodename.c Split a locale name into its various fields.
- l10nflist.c Generate a list of filenames of possible message catalogs.
- finddomain.c Find and open the relevant message catalogs.
-
- The main function _nl_find_domain() in finddomain.c is declared
- in gettextP.h.
- */
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-#ifndef LIBINTL_DLL_EXPORTED
-# define LIBINTL_DLL_EXPORTED
-#endif
-
-/* Tell the compiler when a conditional or integer expression is
- almost always true or almost always false. */
-#ifndef HAVE_BUILTIN_EXPECT
-# define __builtin_expect(expr, val) (expr)
-#endif
-
-/* Separator in PATH like lists of pathnames. */
-#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
- /* Win32, OS/2, DOS */
-# define PATH_SEPARATOR ';'
-#else
- /* Unix */
-# define PATH_SEPARATOR ':'
-#endif
-
-/* Encoding of locale name parts. */
-#define XPG_NORM_CODESET 1
-#define XPG_CODESET 2
-#define XPG_TERRITORY 4
-#define XPG_MODIFIER 8
-
-
-struct loaded_l10nfile
-{
- const char *filename;
- int decided;
-
- const void *data;
-
- struct loaded_l10nfile *next;
- struct loaded_l10nfile *successor[1];
-};
-
-
-/* Normalize codeset name. There is no standard for the codeset
- names. Normalization allows the user to use any of the common
- names. The return value is dynamically allocated and has to be
- freed by the caller. */
-extern const char *_nl_normalize_codeset (const char *codeset,
- size_t name_len);
-
-/* Lookup a locale dependent file.
- *L10NFILE_LIST denotes a pool of lookup results of locale dependent
- files of the same kind, sorted in decreasing order of ->filename.
- DIRLIST and DIRLIST_LEN are an argz list of directories in which to
- look, containing at least one directory (i.e. DIRLIST_LEN > 0).
- MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER
- are the pieces of the locale name, as produced by _nl_explode_name().
- FILENAME is the filename suffix.
- The return value is the lookup result, either found in *L10NFILE_LIST,
- or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
- If the return value is non-NULL, it is added to *L10NFILE_LIST, and
- its ->next field denotes the chaining inside *L10NFILE_LIST, and
- furthermore its ->successor[] field contains a list of other lookup
- results from which this lookup result inherits. */
-extern struct loaded_l10nfile *
-_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
- const char *dirlist, size_t dirlist_len, int mask,
- const char *language, const char *territory,
- const char *codeset, const char *normalized_codeset,
- const char *modifier,
- const char *filename, int do_allocate);
-
-/* Lookup the real locale name for a locale alias NAME, or NULL if
- NAME is not a locale alias (but possibly a real locale name).
- The return value is statically allocated and must not be freed. */
-/* Part of the libintl ABI only for the sake of the gettext.m4 macro. */
-extern LIBINTL_DLL_EXPORTED const char *_nl_expand_alias (const char *name);
-
-/* Split a locale name NAME into its pieces: language, modifier,
- territory, codeset.
- NAME gets destructively modified: NUL bytes are inserted here and
- there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
- *CODESET gets assigned either a pointer into the old NAME string, or
- NULL. *NORMALIZED_CODESET gets assigned the expanded *CODESET, if it
- is different from *CODESET; this one is dynamically allocated and has
- to be freed by the caller.
- The return value is a bitmask, where each bit corresponds to one
- filled-in value:
- XPG_MODIFIER for *MODIFIER,
- XPG_TERRITORY for *TERRITORY,
- XPG_CODESET for *CODESET,
- XPG_NORM_CODESET for *NORMALIZED_CODESET.
- */
-extern int _nl_explode_name (char *name, const char **language,
- const char **modifier, const char **territory,
- const char **codeset,
- const char **normalized_codeset);
-
-#endif /* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
deleted file mode 100644
index 3432a8c..0000000
--- a/intl/loadmsgcat.c
+++ /dev/null
@@ -1,1336 +0,0 @@
-/* Load needed message catalogs.
- Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef __GNUC__
-# undef alloca
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# ifdef _MSC_VER
-# include <malloc.h>
-# define alloca _alloca
-# else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#ifdef _LIBC
-# include <langinfo.h>
-# include <locale.h>
-#endif
-
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
- || (defined _LIBC && defined _POSIX_MAPPED_FILES)
-# include <sys/mman.h>
-# undef HAVE_MMAP
-# define HAVE_MMAP 1
-#else
-# undef HAVE_MMAP
-#endif
-
-#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
-# include <stdint.h>
-#endif
-#if defined HAVE_INTTYPES_H || defined _LIBC
-# include <inttypes.h>
-#endif
-
-#include "gmo.h"
-#include "gettextP.h"
-#include "hash-string.h"
-#include "plural-exp.h"
-
-#ifdef _LIBC
-# include "../locale/localeinfo.h"
-# include <not-cancel.h>
-#endif
-
-/* Handle multi-threaded applications. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-#else
-# include "lock.h"
-#endif
-
-/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
- Note that our fallback values need not be literal strings, because we don't
- use them with preprocessor string concatenation. */
-#if !defined PRId8 || PRI_MACROS_BROKEN
-# undef PRId8
-# define PRId8 "d"
-#endif
-#if !defined PRIi8 || PRI_MACROS_BROKEN
-# undef PRIi8
-# define PRIi8 "i"
-#endif
-#if !defined PRIo8 || PRI_MACROS_BROKEN
-# undef PRIo8
-# define PRIo8 "o"
-#endif
-#if !defined PRIu8 || PRI_MACROS_BROKEN
-# undef PRIu8
-# define PRIu8 "u"
-#endif
-#if !defined PRIx8 || PRI_MACROS_BROKEN
-# undef PRIx8
-# define PRIx8 "x"
-#endif
-#if !defined PRIX8 || PRI_MACROS_BROKEN
-# undef PRIX8
-# define PRIX8 "X"
-#endif
-#if !defined PRId16 || PRI_MACROS_BROKEN
-# undef PRId16
-# define PRId16 "d"
-#endif
-#if !defined PRIi16 || PRI_MACROS_BROKEN
-# undef PRIi16
-# define PRIi16 "i"
-#endif
-#if !defined PRIo16 || PRI_MACROS_BROKEN
-# undef PRIo16
-# define PRIo16 "o"
-#endif
-#if !defined PRIu16 || PRI_MACROS_BROKEN
-# undef PRIu16
-# define PRIu16 "u"
-#endif
-#if !defined PRIx16 || PRI_MACROS_BROKEN
-# undef PRIx16
-# define PRIx16 "x"
-#endif
-#if !defined PRIX16 || PRI_MACROS_BROKEN
-# undef PRIX16
-# define PRIX16 "X"
-#endif
-#if !defined PRId32 || PRI_MACROS_BROKEN
-# undef PRId32
-# define PRId32 "d"
-#endif
-#if !defined PRIi32 || PRI_MACROS_BROKEN
-# undef PRIi32
-# define PRIi32 "i"
-#endif
-#if !defined PRIo32 || PRI_MACROS_BROKEN
-# undef PRIo32
-# define PRIo32 "o"
-#endif
-#if !defined PRIu32 || PRI_MACROS_BROKEN
-# undef PRIu32
-# define PRIu32 "u"
-#endif
-#if !defined PRIx32 || PRI_MACROS_BROKEN
-# undef PRIx32
-# define PRIx32 "x"
-#endif
-#if !defined PRIX32 || PRI_MACROS_BROKEN
-# undef PRIX32
-# define PRIX32 "X"
-#endif
-#if !defined PRId64 || PRI_MACROS_BROKEN
-# undef PRId64
-# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
-#endif
-#if !defined PRIi64 || PRI_MACROS_BROKEN
-# undef PRIi64
-# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
-#endif
-#if !defined PRIo64 || PRI_MACROS_BROKEN
-# undef PRIo64
-# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
-#endif
-#if !defined PRIu64 || PRI_MACROS_BROKEN
-# undef PRIu64
-# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
-#endif
-#if !defined PRIx64 || PRI_MACROS_BROKEN
-# undef PRIx64
-# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
-#endif
-#if !defined PRIX64 || PRI_MACROS_BROKEN
-# undef PRIX64
-# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
-#endif
-#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
-# undef PRIdLEAST8
-# define PRIdLEAST8 "d"
-#endif
-#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
-# undef PRIiLEAST8
-# define PRIiLEAST8 "i"
-#endif
-#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
-# undef PRIoLEAST8
-# define PRIoLEAST8 "o"
-#endif
-#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
-# undef PRIuLEAST8
-# define PRIuLEAST8 "u"
-#endif
-#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
-# undef PRIxLEAST8
-# define PRIxLEAST8 "x"
-#endif
-#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
-# undef PRIXLEAST8
-# define PRIXLEAST8 "X"
-#endif
-#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
-# undef PRIdLEAST16
-# define PRIdLEAST16 "d"
-#endif
-#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
-# undef PRIiLEAST16
-# define PRIiLEAST16 "i"
-#endif
-#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
-# undef PRIoLEAST16
-# define PRIoLEAST16 "o"
-#endif
-#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
-# undef PRIuLEAST16
-# define PRIuLEAST16 "u"
-#endif
-#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
-# undef PRIxLEAST16
-# define PRIxLEAST16 "x"
-#endif
-#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
-# undef PRIXLEAST16
-# define PRIXLEAST16 "X"
-#endif
-#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
-# undef PRIdLEAST32
-# define PRIdLEAST32 "d"
-#endif
-#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
-# undef PRIiLEAST32
-# define PRIiLEAST32 "i"
-#endif
-#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
-# undef PRIoLEAST32
-# define PRIoLEAST32 "o"
-#endif
-#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
-# undef PRIuLEAST32
-# define PRIuLEAST32 "u"
-#endif
-#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
-# undef PRIxLEAST32
-# define PRIxLEAST32 "x"
-#endif
-#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
-# undef PRIXLEAST32
-# define PRIXLEAST32 "X"
-#endif
-#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
-# undef PRIdLEAST64
-# define PRIdLEAST64 PRId64
-#endif
-#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
-# undef PRIiLEAST64
-# define PRIiLEAST64 PRIi64
-#endif
-#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
-# undef PRIoLEAST64
-# define PRIoLEAST64 PRIo64
-#endif
-#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
-# undef PRIuLEAST64
-# define PRIuLEAST64 PRIu64
-#endif
-#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
-# undef PRIxLEAST64
-# define PRIxLEAST64 PRIx64
-#endif
-#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
-# undef PRIXLEAST64
-# define PRIXLEAST64 PRIX64
-#endif
-#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
-# undef PRIdFAST8
-# define PRIdFAST8 "d"
-#endif
-#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
-# undef PRIiFAST8
-# define PRIiFAST8 "i"
-#endif
-#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
-# undef PRIoFAST8
-# define PRIoFAST8 "o"
-#endif
-#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
-# undef PRIuFAST8
-# define PRIuFAST8 "u"
-#endif
-#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
-# undef PRIxFAST8
-# define PRIxFAST8 "x"
-#endif
-#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
-# undef PRIXFAST8
-# define PRIXFAST8 "X"
-#endif
-#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
-# undef PRIdFAST16
-# define PRIdFAST16 "d"
-#endif
-#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
-# undef PRIiFAST16
-# define PRIiFAST16 "i"
-#endif
-#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
-# undef PRIoFAST16
-# define PRIoFAST16 "o"
-#endif
-#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
-# undef PRIuFAST16
-# define PRIuFAST16 "u"
-#endif
-#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
-# undef PRIxFAST16
-# define PRIxFAST16 "x"
-#endif
-#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
-# undef PRIXFAST16
-# define PRIXFAST16 "X"
-#endif
-#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
-# undef PRIdFAST32
-# define PRIdFAST32 "d"
-#endif
-#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
-# undef PRIiFAST32
-# define PRIiFAST32 "i"
-#endif
-#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
-# undef PRIoFAST32
-# define PRIoFAST32 "o"
-#endif
-#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
-# undef PRIuFAST32
-# define PRIuFAST32 "u"
-#endif
-#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
-# undef PRIxFAST32
-# define PRIxFAST32 "x"
-#endif
-#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
-# undef PRIXFAST32
-# define PRIXFAST32 "X"
-#endif
-#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
-# undef PRIdFAST64
-# define PRIdFAST64 PRId64
-#endif
-#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
-# undef PRIiFAST64
-# define PRIiFAST64 PRIi64
-#endif
-#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
-# undef PRIoFAST64
-# define PRIoFAST64 PRIo64
-#endif
-#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
-# undef PRIuFAST64
-# define PRIuFAST64 PRIu64
-#endif
-#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
-# undef PRIxFAST64
-# define PRIxFAST64 PRIx64
-#endif
-#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
-# undef PRIXFAST64
-# define PRIXFAST64 PRIX64
-#endif
-#if !defined PRIdMAX || PRI_MACROS_BROKEN
-# undef PRIdMAX
-# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
-#endif
-#if !defined PRIiMAX || PRI_MACROS_BROKEN
-# undef PRIiMAX
-# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
-#endif
-#if !defined PRIoMAX || PRI_MACROS_BROKEN
-# undef PRIoMAX
-# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
-#endif
-#if !defined PRIuMAX || PRI_MACROS_BROKEN
-# undef PRIuMAX
-# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
-#endif
-#if !defined PRIxMAX || PRI_MACROS_BROKEN
-# undef PRIxMAX
-# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
-#endif
-#if !defined PRIXMAX || PRI_MACROS_BROKEN
-# undef PRIXMAX
-# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
-#endif
-#if !defined PRIdPTR || PRI_MACROS_BROKEN
-# undef PRIdPTR
-# define PRIdPTR \
- (sizeof (void *) == sizeof (long) ? "ld" : \
- sizeof (void *) == sizeof (int) ? "d" : \
- "lld")
-#endif
-#if !defined PRIiPTR || PRI_MACROS_BROKEN
-# undef PRIiPTR
-# define PRIiPTR \
- (sizeof (void *) == sizeof (long) ? "li" : \
- sizeof (void *) == sizeof (int) ? "i" : \
- "lli")
-#endif
-#if !defined PRIoPTR || PRI_MACROS_BROKEN
-# undef PRIoPTR
-# define PRIoPTR \
- (sizeof (void *) == sizeof (long) ? "lo" : \
- sizeof (void *) == sizeof (int) ? "o" : \
- "llo")
-#endif
-#if !defined PRIuPTR || PRI_MACROS_BROKEN
-# undef PRIuPTR
-# define PRIuPTR \
- (sizeof (void *) == sizeof (long) ? "lu" : \
- sizeof (void *) == sizeof (int) ? "u" : \
- "llu")
-#endif
-#if !defined PRIxPTR || PRI_MACROS_BROKEN
-# undef PRIxPTR
-# define PRIxPTR \
- (sizeof (void *) == sizeof (long) ? "lx" : \
- sizeof (void *) == sizeof (int) ? "x" : \
- "llx")
-#endif
-#if !defined PRIXPTR || PRI_MACROS_BROKEN
-# undef PRIXPTR
-# define PRIXPTR \
- (sizeof (void *) == sizeof (long) ? "lX" : \
- sizeof (void *) == sizeof (int) ? "X" : \
- "llX")
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ISO C functions. This is required by the standard
- because some ISO C functions will require linking with this object
- file and the name space must not be polluted. */
-# define open(name, flags) open_not_cancel_2 (name, flags)
-# define close(fd) close_not_cancel_no_status (fd)
-# define read(fd, buf, n) read_not_cancel (fd, buf, n)
-# define mmap(addr, len, prot, flags, fd, offset) \
- __mmap (addr, len, prot, flags, fd, offset)
-# define munmap(addr, len) __munmap (addr, len)
-#endif
-
-/* For those losing systems which don't have `alloca' we have to add
- some additional code emulating it. */
-#ifdef HAVE_ALLOCA
-# define freea(p) /* nothing */
-#else
-# define alloca(n) malloc (n)
-# define freea(p) free (p)
-#endif
-
-/* For systems that distinguish between text and binary I/O.
- O_BINARY is usually declared in <fcntl.h>. */
-#if !defined O_BINARY && defined _O_BINARY
- /* For MSC-compatible compilers. */
-# define O_BINARY _O_BINARY
-# define O_TEXT _O_TEXT
-#endif
-#ifdef __BEOS__
- /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
-# undef O_BINARY
-# undef O_TEXT
-#endif
-/* On reasonable systems, binary I/O is the default. */
-#ifndef O_BINARY
-# define O_BINARY 0
-#endif
-
-
-/* We need a sign, whether a new catalog was loaded, which can be associated
- with all translations. This is important if the translations are
- cached by one of GCC's features. */
-int _nl_msg_cat_cntr;
-
-
-/* Expand a system dependent string segment. Return NULL if unsupported. */
-static const char *
-get_sysdep_segment_value (const char *name)
-{
- /* Test for an ISO C 99 section 7.8.1 format string directive.
- Syntax:
- P R I { d | i | o | u | x | X }
- { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */
- /* We don't use a table of 14 times 6 'const char *' strings here, because
- data relocations cost startup time. */
- if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
- {
- if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
- || name[3] == 'x' || name[3] == 'X')
- {
- if (name[4] == '8' && name[5] == '\0')
- {
- if (name[3] == 'd')
- return PRId8;
- if (name[3] == 'i')
- return PRIi8;
- if (name[3] == 'o')
- return PRIo8;
- if (name[3] == 'u')
- return PRIu8;
- if (name[3] == 'x')
- return PRIx8;
- if (name[3] == 'X')
- return PRIX8;
- abort ();
- }
- if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
- {
- if (name[3] == 'd')
- return PRId16;
- if (name[3] == 'i')
- return PRIi16;
- if (name[3] == 'o')
- return PRIo16;
- if (name[3] == 'u')
- return PRIu16;
- if (name[3] == 'x')
- return PRIx16;
- if (name[3] == 'X')
- return PRIX16;
- abort ();
- }
- if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
- {
- if (name[3] == 'd')
- return PRId32;
- if (name[3] == 'i')
- return PRIi32;
- if (name[3] == 'o')
- return PRIo32;
- if (name[3] == 'u')
- return PRIu32;
- if (name[3] == 'x')
- return PRIx32;
- if (name[3] == 'X')
- return PRIX32;
- abort ();
- }
- if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
- {
- if (name[3] == 'd')
- return PRId64;
- if (name[3] == 'i')
- return PRIi64;
- if (name[3] == 'o')
- return PRIo64;
- if (name[3] == 'u')
- return PRIu64;
- if (name[3] == 'x')
- return PRIx64;
- if (name[3] == 'X')
- return PRIX64;
- abort ();
- }
- if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
- && name[7] == 'S' && name[8] == 'T')
- {
- if (name[9] == '8' && name[10] == '\0')
- {
- if (name[3] == 'd')
- return PRIdLEAST8;
- if (name[3] == 'i')
- return PRIiLEAST8;
- if (name[3] == 'o')
- return PRIoLEAST8;
- if (name[3] == 'u')
- return PRIuLEAST8;
- if (name[3] == 'x')
- return PRIxLEAST8;
- if (name[3] == 'X')
- return PRIXLEAST8;
- abort ();
- }
- if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
- {
- if (name[3] == 'd')
- return PRIdLEAST16;
- if (name[3] == 'i')
- return PRIiLEAST16;
- if (name[3] == 'o')
- return PRIoLEAST16;
- if (name[3] == 'u')
- return PRIuLEAST16;
- if (name[3] == 'x')
- return PRIxLEAST16;
- if (name[3] == 'X')
- return PRIXLEAST16;
- abort ();
- }
- if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
- {
- if (name[3] == 'd')
- return PRIdLEAST32;
- if (name[3] == 'i')
- return PRIiLEAST32;
- if (name[3] == 'o')
- return PRIoLEAST32;
- if (name[3] == 'u')
- return PRIuLEAST32;
- if (name[3] == 'x')
- return PRIxLEAST32;
- if (name[3] == 'X')
- return PRIXLEAST32;
- abort ();
- }
- if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
- {
- if (name[3] == 'd')
- return PRIdLEAST64;
- if (name[3] == 'i')
- return PRIiLEAST64;
- if (name[3] == 'o')
- return PRIoLEAST64;
- if (name[3] == 'u')
- return PRIuLEAST64;
- if (name[3] == 'x')
- return PRIxLEAST64;
- if (name[3] == 'X')
- return PRIXLEAST64;
- abort ();
- }
- }
- if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
- && name[7] == 'T')
- {
- if (name[8] == '8' && name[9] == '\0')
- {
- if (name[3] == 'd')
- return PRIdFAST8;
- if (name[3] == 'i')
- return PRIiFAST8;
- if (name[3] == 'o')
- return PRIoFAST8;
- if (name[3] == 'u')
- return PRIuFAST8;
- if (name[3] == 'x')
- return PRIxFAST8;
- if (name[3] == 'X')
- return PRIXFAST8;
- abort ();
- }
- if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
- {
- if (name[3] == 'd')
- return PRIdFAST16;
- if (name[3] == 'i')
- return PRIiFAST16;
- if (name[3] == 'o')
- return PRIoFAST16;
- if (name[3] == 'u')
- return PRIuFAST16;
- if (name[3] == 'x')
- return PRIxFAST16;
- if (name[3] == 'X')
- return PRIXFAST16;
- abort ();
- }
- if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
- {
- if (name[3] == 'd')
- return PRIdFAST32;
- if (name[3] == 'i')
- return PRIiFAST32;
- if (name[3] == 'o')
- return PRIoFAST32;
- if (name[3] == 'u')
- return PRIuFAST32;
- if (name[3] == 'x')
- return PRIxFAST32;
- if (name[3] == 'X')
- return PRIXFAST32;
- abort ();
- }
- if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
- {
- if (name[3] == 'd')
- return PRIdFAST64;
- if (name[3] == 'i')
- return PRIiFAST64;
- if (name[3] == 'o')
- return PRIoFAST64;
- if (name[3] == 'u')
- return PRIuFAST64;
- if (name[3] == 'x')
- return PRIxFAST64;
- if (name[3] == 'X')
- return PRIXFAST64;
- abort ();
- }
- }
- if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
- && name[7] == '\0')
- {
- if (name[3] == 'd')
- return PRIdMAX;
- if (name[3] == 'i')
- return PRIiMAX;
- if (name[3] == 'o')
- return PRIoMAX;
- if (name[3] == 'u')
- return PRIuMAX;
- if (name[3] == 'x')
- return PRIxMAX;
- if (name[3] == 'X')
- return PRIXMAX;
- abort ();
- }
- if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
- && name[7] == '\0')
- {
- if (name[3] == 'd')
- return PRIdPTR;
- if (name[3] == 'i')
- return PRIiPTR;
- if (name[3] == 'o')
- return PRIoPTR;
- if (name[3] == 'u')
- return PRIuPTR;
- if (name[3] == 'x')
- return PRIxPTR;
- if (name[3] == 'X')
- return PRIXPTR;
- abort ();
- }
- }
- }
- /* Test for a glibc specific printf() format directive flag. */
- if (name[0] == 'I' && name[1] == '\0')
- {
-#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
- /* The 'I' flag, in numeric format directives, replaces ASCII digits
- with the 'outdigits' defined in the LC_CTYPE locale facet. This is
- used for Farsi (Persian) and maybe Arabic. */
- return "I";
-#else
- return "";
-#endif
- }
- /* Other system dependent strings are not valid. */
- return NULL;
-}
-
-/* Load the message catalogs specified by FILENAME. If it is no valid
- message catalog do nothing. */
-void
-internal_function
-_nl_load_domain (struct loaded_l10nfile *domain_file,
- struct binding *domainbinding)
-{
- __libc_lock_define_initialized_recursive (static, lock)
- int fd = -1;
- size_t size;
-#ifdef _LIBC
- struct stat64 st;
-#else
- struct stat st;
-#endif
- struct mo_file_header *data = (struct mo_file_header *) -1;
- int use_mmap = 0;
- struct loaded_domain *domain;
- int revision;
- const char *nullentry;
- size_t nullentrylen;
-
- __libc_lock_lock_recursive (lock);
- if (domain_file->decided != 0)
- {
- /* There are two possibilities:
-
- + this is the same thread calling again during this initialization
- via _nl_find_msg. We have initialized everything this call needs.
-
- + this is another thread which tried to initialize this object.
- Not necessary anymore since if the lock is available this
- is finished.
- */
- goto done;
- }
-
- domain_file->decided = -1;
- domain_file->data = NULL;
-
- /* Note that it would be useless to store domainbinding in domain_file
- because domainbinding might be == NULL now but != NULL later (after
- a call to bind_textdomain_codeset). */
-
- /* If the record does not represent a valid locale the FILENAME
- might be NULL. This can happen when according to the given
- specification the locale file name is different for XPG and CEN
- syntax. */
- if (domain_file->filename == NULL)
- goto out;
-
- /* Try to open the addressed file. */
- fd = open (domain_file->filename, O_RDONLY | O_BINARY);
- if (fd == -1)
- goto out;
-
- /* We must know about the size of the file. */
- if (
-#ifdef _LIBC
- __builtin_expect (fstat64 (fd, &st) != 0, 0)
-#else
- __builtin_expect (fstat (fd, &st) != 0, 0)
-#endif
- || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
- || __builtin_expect (size < sizeof (struct mo_file_header), 0))
- /* Something went wrong. */
- goto out;
-
-#ifdef HAVE_MMAP
- /* Now we are ready to load the file. If mmap() is available we try
- this first. If not available or it failed we try to load it. */
- data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
- MAP_PRIVATE, fd, 0);
-
- if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
- {
- /* mmap() call was successful. */
- close (fd);
- fd = -1;
- use_mmap = 1;
- }
-#endif
-
- /* If the data is not yet available (i.e. mmap'ed) we try to load
- it manually. */
- if (data == (struct mo_file_header *) -1)
- {
- size_t to_read;
- char *read_ptr;
-
- data = (struct mo_file_header *) malloc (size);
- if (data == NULL)
- goto out;
-
- to_read = size;
- read_ptr = (char *) data;
- do
- {
- long int nb = (long int) read (fd, read_ptr, to_read);
- if (nb <= 0)
- {
-#ifdef EINTR
- if (nb == -1 && errno == EINTR)
- continue;
-#endif
- goto out;
- }
- read_ptr += nb;
- to_read -= nb;
- }
- while (to_read > 0);
-
- close (fd);
- fd = -1;
- }
-
- /* Using the magic number we can test whether it really is a message
- catalog file. */
- if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
- 0))
- {
- /* The magic number is wrong: not a message catalog file. */
-#ifdef HAVE_MMAP
- if (use_mmap)
- munmap ((caddr_t) data, size);
- else
-#endif
- free (data);
- goto out;
- }
-
- domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
- if (domain == NULL)
- goto out;
- domain_file->data = domain;
-
- domain->data = (char *) data;
- domain->use_mmap = use_mmap;
- domain->mmap_size = size;
- domain->must_swap = data->magic != _MAGIC;
- domain->malloced = NULL;
-
- /* Fill in the information about the available tables. */
- revision = W (domain->must_swap, data->revision);
- /* We support only the major revisions 0 and 1. */
- switch (revision >> 16)
- {
- case 0:
- case 1:
- domain->nstrings = W (domain->must_swap, data->nstrings);
- domain->orig_tab = (const struct string_desc *)
- ((char *) data + W (domain->must_swap, data->orig_tab_offset));
- domain->trans_tab = (const struct string_desc *)
- ((char *) data + W (domain->must_swap, data->trans_tab_offset));
- domain->hash_size = W (domain->must_swap, data->hash_tab_size);
- domain->hash_tab =
- (domain->hash_size > 2
- ? (const nls_uint32 *)
- ((char *) data + W (domain->must_swap, data->hash_tab_offset))
- : NULL);
- domain->must_swap_hash_tab = domain->must_swap;
-
- /* Now dispatch on the minor revision. */
- switch (revision & 0xffff)
- {
- case 0:
- domain->n_sysdep_strings = 0;
- domain->orig_sysdep_tab = NULL;
- domain->trans_sysdep_tab = NULL;
- break;
- case 1:
- default:
- {
- nls_uint32 n_sysdep_strings;
-
- if (domain->hash_tab == NULL)
- /* This is invalid. These minor revisions need a hash table. */
- goto invalid;
-
- n_sysdep_strings =
- W (domain->must_swap, data->n_sysdep_strings);
- if (n_sysdep_strings > 0)
- {
- nls_uint32 n_sysdep_segments;
- const struct sysdep_segment *sysdep_segments;
- const char **sysdep_segment_values;
- const nls_uint32 *orig_sysdep_tab;
- const nls_uint32 *trans_sysdep_tab;
- nls_uint32 n_inmem_sysdep_strings;
- size_t memneed;
- char *mem;
- struct sysdep_string_desc *inmem_orig_sysdep_tab;
- struct sysdep_string_desc *inmem_trans_sysdep_tab;
- nls_uint32 *inmem_hash_tab;
- unsigned int i, j;
-
- /* Get the values of the system dependent segments. */
- n_sysdep_segments =
- W (domain->must_swap, data->n_sysdep_segments);
- sysdep_segments = (const struct sysdep_segment *)
- ((char *) data
- + W (domain->must_swap, data->sysdep_segments_offset));
- sysdep_segment_values =
- (const char **)
- alloca (n_sysdep_segments * sizeof (const char *));
- for (i = 0; i < n_sysdep_segments; i++)
- {
- const char *name =
- (char *) data
- + W (domain->must_swap, sysdep_segments[i].offset);
- nls_uint32 namelen =
- W (domain->must_swap, sysdep_segments[i].length);
-
- if (!(namelen > 0 && name[namelen - 1] == '\0'))
- {
- freea (sysdep_segment_values);
- goto invalid;
- }
-
- sysdep_segment_values[i] = get_sysdep_segment_value (name);
- }
-
- orig_sysdep_tab = (const nls_uint32 *)
- ((char *) data
- + W (domain->must_swap, data->orig_sysdep_tab_offset));
- trans_sysdep_tab = (const nls_uint32 *)
- ((char *) data
- + W (domain->must_swap, data->trans_sysdep_tab_offset));
-
- /* Compute the amount of additional memory needed for the
- system dependent strings and the augmented hash table.
- At the same time, also drop string pairs which refer to
- an undefined system dependent segment. */
- n_inmem_sysdep_strings = 0;
- memneed = domain->hash_size * sizeof (nls_uint32);
- for (i = 0; i < n_sysdep_strings; i++)
- {
- int valid = 1;
- size_t needs[2];
-
- for (j = 0; j < 2; j++)
- {
- const struct sysdep_string *sysdep_string =
- (const struct sysdep_string *)
- ((char *) data
- + W (domain->must_swap,
- j == 0
- ? orig_sysdep_tab[i]
- : trans_sysdep_tab[i]));
- size_t need = 0;
- const struct segment_pair *p = sysdep_string->segments;
-
- if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
- for (p = sysdep_string->segments;; p++)
- {
- nls_uint32 sysdepref;
-
- need += W (domain->must_swap, p->segsize);
-
- sysdepref = W (domain->must_swap, p->sysdepref);
- if (sysdepref == SEGMENTS_END)
- break;
-
- if (sysdepref >= n_sysdep_segments)
- {
- /* Invalid. */
- freea (sysdep_segment_values);
- goto invalid;
- }
-
- if (sysdep_segment_values[sysdepref] == NULL)
- {
- /* This particular string pair is invalid. */
- valid = 0;
- break;
- }
-
- need += strlen (sysdep_segment_values[sysdepref]);
- }
-
- needs[j] = need;
- if (!valid)
- break;
- }
-
- if (valid)
- {
- n_inmem_sysdep_strings++;
- memneed += needs[0] + needs[1];
- }
- }
- memneed += 2 * n_inmem_sysdep_strings
- * sizeof (struct sysdep_string_desc);
-
- if (n_inmem_sysdep_strings > 0)
- {
- unsigned int k;
-
- /* Allocate additional memory. */
- mem = (char *) malloc (memneed);
- if (mem == NULL)
- goto invalid;
-
- domain->malloced = mem;
- inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
- mem += n_inmem_sysdep_strings
- * sizeof (struct sysdep_string_desc);
- inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
- mem += n_inmem_sysdep_strings
- * sizeof (struct sysdep_string_desc);
- inmem_hash_tab = (nls_uint32 *) mem;
- mem += domain->hash_size * sizeof (nls_uint32);
-
- /* Compute the system dependent strings. */
- k = 0;
- for (i = 0; i < n_sysdep_strings; i++)
- {
- int valid = 1;
-
- for (j = 0; j < 2; j++)
- {
- const struct sysdep_string *sysdep_string =
- (const struct sysdep_string *)
- ((char *) data
- + W (domain->must_swap,
- j == 0
- ? orig_sysdep_tab[i]
- : trans_sysdep_tab[i]));
- const struct segment_pair *p =
- sysdep_string->segments;
-
- if (W (domain->must_swap, p->sysdepref)
- != SEGMENTS_END)
- for (p = sysdep_string->segments;; p++)
- {
- nls_uint32 sysdepref;
-
- sysdepref =
- W (domain->must_swap, p->sysdepref);
- if (sysdepref == SEGMENTS_END)
- break;
-
- if (sysdep_segment_values[sysdepref] == NULL)
- {
- /* This particular string pair is
- invalid. */
- valid = 0;
- break;
- }
- }
-
- if (!valid)
- break;
- }
-
- if (valid)
- {
- for (j = 0; j < 2; j++)
- {
- const struct sysdep_string *sysdep_string =
- (const struct sysdep_string *)
- ((char *) data
- + W (domain->must_swap,
- j == 0
- ? orig_sysdep_tab[i]
- : trans_sysdep_tab[i]));
- const char *static_segments =
- (char *) data
- + W (domain->must_swap, sysdep_string->offset);
- const struct segment_pair *p =
- sysdep_string->segments;
-
- /* Concatenate the segments, and fill
- inmem_orig_sysdep_tab[k] (for j == 0) and
- inmem_trans_sysdep_tab[k] (for j == 1). */
-
- struct sysdep_string_desc *inmem_tab_entry =
- (j == 0
- ? inmem_orig_sysdep_tab
- : inmem_trans_sysdep_tab)
- + k;
-
- if (W (domain->must_swap, p->sysdepref)
- == SEGMENTS_END)
- {
- /* Only one static segment. */
- inmem_tab_entry->length =
- W (domain->must_swap, p->segsize);
- inmem_tab_entry->pointer = static_segments;
- }
- else
- {
- inmem_tab_entry->pointer = mem;
-
- for (p = sysdep_string->segments;; p++)
- {
- nls_uint32 segsize =
- W (domain->must_swap, p->segsize);
- nls_uint32 sysdepref =
- W (domain->must_swap, p->sysdepref);
- size_t n;
-
- if (segsize > 0)
- {
- memcpy (mem, static_segments, segsize);
- mem += segsize;
- static_segments += segsize;
- }
-
- if (sysdepref == SEGMENTS_END)
- break;
-
- n = strlen (sysdep_segment_values[sysdepref]);
- memcpy (mem, sysdep_segment_values[sysdepref], n);
- mem += n;
- }
-
- inmem_tab_entry->length =
- mem - inmem_tab_entry->pointer;
- }
- }
-
- k++;
- }
- }
- if (k != n_inmem_sysdep_strings)
- abort ();
-
- /* Compute the augmented hash table. */
- for (i = 0; i < domain->hash_size; i++)
- inmem_hash_tab[i] =
- W (domain->must_swap_hash_tab, domain->hash_tab[i]);
- for (i = 0; i < n_inmem_sysdep_strings; i++)
- {
- const char *msgid = inmem_orig_sysdep_tab[i].pointer;
- nls_uint32 hash_val = __hash_string (msgid);
- nls_uint32 idx = hash_val % domain->hash_size;
- nls_uint32 incr =
- 1 + (hash_val % (domain->hash_size - 2));
-
- for (;;)
- {
- if (inmem_hash_tab[idx] == 0)
- {
- /* Hash table entry is empty. Use it. */
- inmem_hash_tab[idx] = 1 + domain->nstrings + i;
- break;
- }
-
- if (idx >= domain->hash_size - incr)
- idx -= domain->hash_size - incr;
- else
- idx += incr;
- }
- }
-
- domain->n_sysdep_strings = n_inmem_sysdep_strings;
- domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
- domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
-
- domain->hash_tab = inmem_hash_tab;
- domain->must_swap_hash_tab = 0;
- }
- else
- {
- domain->n_sysdep_strings = 0;
- domain->orig_sysdep_tab = NULL;
- domain->trans_sysdep_tab = NULL;
- }
-
- freea (sysdep_segment_values);
- }
- else
- {
- domain->n_sysdep_strings = 0;
- domain->orig_sysdep_tab = NULL;
- domain->trans_sysdep_tab = NULL;
- }
- }
- break;
- }
- break;
- default:
- /* This is an invalid revision. */
- invalid:
- /* This is an invalid .mo file. */
- if (domain->malloced)
- free (domain->malloced);
-#ifdef HAVE_MMAP
- if (use_mmap)
- munmap ((caddr_t) data, size);
- else
-#endif
- free (data);
- free (domain);
- domain_file->data = NULL;
- goto out;
- }
-
- /* No caches of converted translations so far. */
- domain->conversions = NULL;
- domain->nconversions = 0;
- gl_rwlock_init (domain->conversions_lock);
-
- /* Get the header entry and look for a plural specification. */
-#ifdef IN_LIBGLOCALE
- nullentry =
- _nl_find_msg (domain_file, domainbinding, NULL, "", &nullentrylen);
-#else
- nullentry = _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen);
-#endif
- EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
-
- out:
- if (fd != -1)
- close (fd);
-
- domain_file->decided = 1;
-
- done:
- __libc_lock_unlock_recursive (lock);
-}
-
-
-#ifdef _LIBC
-void
-internal_function __libc_freeres_fn_section
-_nl_unload_domain (struct loaded_domain *domain)
-{
- size_t i;
-
- if (domain->plural != &__gettext_germanic_plural)
- __gettext_free_exp ((struct expression *) domain->plural);
-
- for (i = 0; i < domain->nconversions; i++)
- {
- struct converted_domain *convd = &domain->conversions[i];
-
- free (convd->encoding);
- if (convd->conv_tab != NULL && convd->conv_tab != (char **) -1)
- free (convd->conv_tab);
- if (convd->conv != (__gconv_t) -1)
- __gconv_close (convd->conv);
- }
- if (domain->conversions != NULL)
- free (domain->conversions);
- __libc_rwlock_fini (domain->conversions_lock);
-
- if (domain->malloced)
- free (domain->malloced);
-
-# ifdef _POSIX_MAPPED_FILES
- if (domain->use_mmap)
- munmap ((caddr_t) domain->data, domain->mmap_size);
- else
-# endif /* _POSIX_MAPPED_FILES */
- free ((void *) domain->data);
-
- free (domain);
-}
-#endif
diff --git a/intl/localcharset.c b/intl/localcharset.c
deleted file mode 100644
index e796ae7..0000000
--- a/intl/localcharset.c
+++ /dev/null
@@ -1,461 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-
- Copyright (C) 2000-2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Written by Bruno Haible <bruno at clisp.org>. */
-
-#include <config.h>
-
-/* Specification. */
-#include "localcharset.h"
-
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#if defined _WIN32 || defined __WIN32__
-# define WIN32_NATIVE
-#endif
-
-#if defined __EMX__
-/* Assume EMX program runs on OS/2, even if compiled under DOS. */
-# define OS2
-#endif
-
-#if !defined WIN32_NATIVE
-# if HAVE_LANGINFO_CODESET
-# include <langinfo.h>
-# else
-# if 0 /* see comment below */
-# include <locale.h>
-# endif
-# endif
-# ifdef __CYGWIN__
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-# endif
-#elif defined WIN32_NATIVE
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-#if defined OS2
-# define INCL_DOS
-# include <os2.h>
-#endif
-
-#if ENABLE_RELOCATABLE
-# include "relocatable.h"
-#else
-# define relocate(pathname) (pathname)
-#endif
-
-/* Get LIBDIR. */
-#ifndef LIBDIR
-# include "configmake.h"
-#endif
-
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
- /* Win32, Cygwin, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#endif
-
-#ifndef DIRECTORY_SEPARATOR
-# define DIRECTORY_SEPARATOR '/'
-#endif
-
-#ifndef ISSLASH
-# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
-#endif
-
-#if HAVE_DECL_GETC_UNLOCKED
-# undef getc
-# define getc getc_unlocked
-#endif
-
-/* The following static variable is declared 'volatile' to avoid a
- possible multithread problem in the function get_charset_aliases. If we
- are running in a threaded environment, and if two threads initialize
- 'charset_aliases' simultaneously, both will produce the same value,
- and everything will be ok if the two assignments to 'charset_aliases'
- are atomic. But I don't know what will happen if the two assignments mix. */
-#if __STDC__ != 1
-# define volatile /* empty */
-#endif
-/* Pointer to the contents of the charset.alias file, if it has already been
- read, else NULL. Its format is:
- ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
-static const char * volatile charset_aliases;
-
-/* Return a pointer to the contents of the charset.alias file. */
-static const char *
-get_charset_aliases (void)
-{
- const char *cp;
-
- cp = charset_aliases;
- if (cp == NULL)
- {
-#if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
- FILE *fp;
- const char *dir;
- const char *base = "charset.alias";
- char *file_name;
-
- /* Make it possible to override the charset.alias location. This is
- necessary for running the testsuite before "make install". */
- dir = getenv ("CHARSETALIASDIR");
- if (dir == NULL || dir[0] == '\0')
- dir = relocate (LIBDIR);
-
- /* Concatenate dir and base into freshly allocated file_name. */
- {
- size_t dir_len = strlen (dir);
- size_t base_len = strlen (base);
- int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
- file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
- if (file_name != NULL)
- {
- memcpy (file_name, dir, dir_len);
- if (add_slash)
- file_name[dir_len] = DIRECTORY_SEPARATOR;
- memcpy (file_name + dir_len + add_slash, base, base_len + 1);
- }
- }
-
- if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
- /* Out of memory or file not found, treat it as empty. */
- cp = "";
- else
- {
- /* Parse the file's contents. */
- char *res_ptr = NULL;
- size_t res_size = 0;
-
- for (;;)
- {
- int c;
- char buf1[50+1];
- char buf2[50+1];
- size_t l1, l2;
- char *old_res_ptr;
-
- c = getc (fp);
- if (c == EOF)
- break;
- if (c == '\n' || c == ' ' || c == '\t')
- continue;
- if (c == '#')
- {
- /* Skip comment, to end of line. */
- do
- c = getc (fp);
- while (!(c == EOF || c == '\n'));
- if (c == EOF)
- break;
- continue;
- }
- ungetc (c, fp);
- if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
- break;
- l1 = strlen (buf1);
- l2 = strlen (buf2);
- old_res_ptr = res_ptr;
- if (res_size == 0)
- {
- res_size = l1 + 1 + l2 + 1;
- res_ptr = (char *) malloc (res_size + 1);
- }
- else
- {
- res_size += l1 + 1 + l2 + 1;
- res_ptr = (char *) realloc (res_ptr, res_size + 1);
- }
- if (res_ptr == NULL)
- {
- /* Out of memory. */
- res_size = 0;
- if (old_res_ptr != NULL)
- free (old_res_ptr);
- break;
- }
- strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
- strcpy (res_ptr + res_size - (l2 + 1), buf2);
- }
- fclose (fp);
- if (res_size == 0)
- cp = "";
- else
- {
- *(res_ptr + res_size) = '\0';
- cp = res_ptr;
- }
- }
-
- if (file_name != NULL)
- free (file_name);
-
-#else
-
-# if defined VMS
- /* To avoid the troubles of an extra file charset.alias_vms in the
- sources of many GNU packages, simply inline the aliases here. */
- /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
- "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
- section 10.7 "Handling Different Character Sets". */
- cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
- "ISO8859-2" "\0" "ISO-8859-2" "\0"
- "ISO8859-5" "\0" "ISO-8859-5" "\0"
- "ISO8859-7" "\0" "ISO-8859-7" "\0"
- "ISO8859-8" "\0" "ISO-8859-8" "\0"
- "ISO8859-9" "\0" "ISO-8859-9" "\0"
- /* Japanese */
- "eucJP" "\0" "EUC-JP" "\0"
- "SJIS" "\0" "SHIFT_JIS" "\0"
- "DECKANJI" "\0" "DEC-KANJI" "\0"
- "SDECKANJI" "\0" "EUC-JP" "\0"
- /* Chinese */
- "eucTW" "\0" "EUC-TW" "\0"
- "DECHANYU" "\0" "DEC-HANYU" "\0"
- "DECHANZI" "\0" "GB2312" "\0"
- /* Korean */
- "DECKOREAN" "\0" "EUC-KR" "\0";
-# endif
-
-# if defined WIN32_NATIVE || defined __CYGWIN__
- /* To avoid the troubles of installing a separate file in the same
- directory as the DLL and of retrieving the DLL's directory at
- runtime, simply inline the aliases here. */
-
- cp = "CP936" "\0" "GBK" "\0"
- "CP1361" "\0" "JOHAB" "\0"
- "CP20127" "\0" "ASCII" "\0"
- "CP20866" "\0" "KOI8-R" "\0"
- "CP20936" "\0" "GB2312" "\0"
- "CP21866" "\0" "KOI8-RU" "\0"
- "CP28591" "\0" "ISO-8859-1" "\0"
- "CP28592" "\0" "ISO-8859-2" "\0"
- "CP28593" "\0" "ISO-8859-3" "\0"
- "CP28594" "\0" "ISO-8859-4" "\0"
- "CP28595" "\0" "ISO-8859-5" "\0"
- "CP28596" "\0" "ISO-8859-6" "\0"
- "CP28597" "\0" "ISO-8859-7" "\0"
- "CP28598" "\0" "ISO-8859-8" "\0"
- "CP28599" "\0" "ISO-8859-9" "\0"
- "CP28605" "\0" "ISO-8859-15" "\0"
- "CP38598" "\0" "ISO-8859-8" "\0"
- "CP51932" "\0" "EUC-JP" "\0"
- "CP51936" "\0" "GB2312" "\0"
- "CP51949" "\0" "EUC-KR" "\0"
- "CP51950" "\0" "EUC-TW" "\0"
- "CP54936" "\0" "GB18030" "\0"
- "CP65001" "\0" "UTF-8" "\0";
-# endif
-#endif
-
- charset_aliases = cp;
- }
-
- return cp;
-}
-
-/* Determine the current locale's character encoding, and canonicalize it
- into one of the canonical names listed in config.charset.
- The result must not be freed; it is statically allocated.
- If the canonical name cannot be determined, the result is a non-canonical
- name. */
-
-#ifdef STATIC
-STATIC
-#endif
-const char *
-locale_charset (void)
-{
- const char *codeset;
- const char *aliases;
-
-#if !(defined WIN32_NATIVE || defined OS2)
-
-# if HAVE_LANGINFO_CODESET
-
- /* Most systems support nl_langinfo (CODESET) nowadays. */
- codeset = nl_langinfo (CODESET);
-
-# ifdef __CYGWIN__
- /* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always
- returns "US-ASCII". As long as this is not fixed, return the suffix
- of the locale name from the environment variables (if present) or
- the codepage as a number. */
- if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
- {
- const char *locale;
- static char buf[2 + 10 + 1];
-
- locale = getenv ("LC_ALL");
- if (locale == NULL || locale[0] == '\0')
- {
- locale = getenv ("LC_CTYPE");
- if (locale == NULL || locale[0] == '\0')
- locale = getenv ("LANG");
- }
- if (locale != NULL && locale[0] != '\0')
- {
- /* If the locale name contains an encoding after the dot, return
- it. */
- const char *dot = strchr (locale, '.');
-
- if (dot != NULL)
- {
- const char *modifier;
-
- dot++;
- /* Look for the possible @... trailer and remove it, if any. */
- modifier = strchr (dot, '@');
- if (modifier == NULL)
- return dot;
- if (modifier - dot < sizeof (buf))
- {
- memcpy (buf, dot, modifier - dot);
- buf [modifier - dot] = '\0';
- return buf;
- }
- }
- }
-
- /* Woe32 has a function returning the locale's codepage as a number. */
- sprintf (buf, "CP%u", GetACP ());
- codeset = buf;
- }
-# endif
-
-# else
-
- /* On old systems which lack it, use setlocale or getenv. */
- const char *locale = NULL;
-
- /* But most old systems don't have a complete set of locales. Some
- (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
- use setlocale here; it would return "C" when it doesn't support the
- locale name the user has set. */
-# if 0
- locale = setlocale (LC_CTYPE, NULL);
-# endif
- if (locale == NULL || locale[0] == '\0')
- {
- locale = getenv ("LC_ALL");
- if (locale == NULL || locale[0] == '\0')
- {
- locale = getenv ("LC_CTYPE");
- if (locale == NULL || locale[0] == '\0')
- locale = getenv ("LANG");
- }
- }
-
- /* On some old systems, one used to set locale = "iso8859_1". On others,
- you set it to "language_COUNTRY.charset". In any case, we resolve it
- through the charset.alias file. */
- codeset = locale;
-
-# endif
-
-#elif defined WIN32_NATIVE
-
- static char buf[2 + 10 + 1];
-
- /* Woe32 has a function returning the locale's codepage as a number. */
- sprintf (buf, "CP%u", GetACP ());
- codeset = buf;
-
-#elif defined OS2
-
- const char *locale;
- static char buf[2 + 10 + 1];
- ULONG cp[3];
- ULONG cplen;
-
- /* Allow user to override the codeset, as set in the operating system,
- with standard language environment variables. */
- locale = getenv ("LC_ALL");
- if (locale == NULL || locale[0] == '\0')
- {
- locale = getenv ("LC_CTYPE");
- if (locale == NULL || locale[0] == '\0')
- locale = getenv ("LANG");
- }
- if (locale != NULL && locale[0] != '\0')
- {
- /* If the locale name contains an encoding after the dot, return it. */
- const char *dot = strchr (locale, '.');
-
- if (dot != NULL)
- {
- const char *modifier;
-
- dot++;
- /* Look for the possible @... trailer and remove it, if any. */
- modifier = strchr (dot, '@');
- if (modifier == NULL)
- return dot;
- if (modifier - dot < sizeof (buf))
- {
- memcpy (buf, dot, modifier - dot);
- buf [modifier - dot] = '\0';
- return buf;
- }
- }
-
- /* Resolve through the charset.alias file. */
- codeset = locale;
- }
- else
- {
- /* OS/2 has a function returning the locale's codepage as a number. */
- if (DosQueryCp (sizeof (cp), cp, &cplen))
- codeset = "";
- else
- {
- sprintf (buf, "CP%u", cp[0]);
- codeset = buf;
- }
- }
-
-#endif
-
- if (codeset == NULL)
- /* The canonical name cannot be determined. */
- codeset = "";
-
- /* Resolve alias. */
- for (aliases = get_charset_aliases ();
- *aliases != '\0';
- aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
- if (strcmp (codeset, aliases) == 0
- || (aliases[0] == '*' && aliases[1] == '\0'))
- {
- codeset = aliases + strlen (aliases) + 1;
- break;
- }
-
- /* Don't return an empty string. GNU libc and GNU libiconv interpret
- the empty string as denoting "the locale's character encoding",
- thus GNU libiconv would call this function a second time. */
- if (codeset[0] == '\0')
- codeset = "ASCII";
-
- return codeset;
-}
diff --git a/intl/localcharset.h b/intl/localcharset.h
deleted file mode 100644
index 129e4a4..0000000
--- a/intl/localcharset.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
- Copyright (C) 2000-2003 Free Software Foundation, Inc.
- This file is part of the GNU CHARSET Library.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _LOCALCHARSET_H
-#define _LOCALCHARSET_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Determine the current locale's character encoding, and canonicalize it
- into one of the canonical names listed in config.charset.
- The result must not be freed; it is statically allocated.
- If the canonical name cannot be determined, the result is a non-canonical
- name. */
-extern const char * locale_charset (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LOCALCHARSET_H */
diff --git a/intl/locale.alias b/intl/locale.alias
deleted file mode 100644
index 1044a40..0000000
--- a/intl/locale.alias
+++ /dev/null
@@ -1,77 +0,0 @@
-# Locale name alias data base.
-# Copyright (C) 1996-2001,2003,2007 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# The format of this file is the same as for the corresponding file of
-# the X Window System, which normally can be found in
-# /usr/lib/X11/locale/locale.alias
-# A single line contains two fields: an alias and a substitution value.
-# All entries are case independent.
-
-# Note: This file is obsolete and is kept around for the time being for
-# backward compatibility. Nobody should rely on the names defined here.
-# Locales should always be specified by their full name.
-
-# Packages using this file:
-
-bokmal nb_NO.ISO-8859-1
-bokmål nb_NO.ISO-8859-1
-catalan ca_ES.ISO-8859-1
-croatian hr_HR.ISO-8859-2
-czech cs_CZ.ISO-8859-2
-danish da_DK.ISO-8859-1
-dansk da_DK.ISO-8859-1
-deutsch de_DE.ISO-8859-1
-dutch nl_NL.ISO-8859-1
-eesti et_EE.ISO-8859-1
-estonian et_EE.ISO-8859-1
-finnish fi_FI.ISO-8859-1
-français fr_FR.ISO-8859-1
-french fr_FR.ISO-8859-1
-galego gl_ES.ISO-8859-1
-galician gl_ES.ISO-8859-1
-german de_DE.ISO-8859-1
-greek el_GR.ISO-8859-7
-hebrew he_IL.ISO-8859-8
-hrvatski hr_HR.ISO-8859-2
-hungarian hu_HU.ISO-8859-2
-icelandic is_IS.ISO-8859-1
-italian it_IT.ISO-8859-1
-japanese ja_JP.eucJP
-japanese.euc ja_JP.eucJP
-ja_JP ja_JP.eucJP
-ja_JP.ujis ja_JP.eucJP
-japanese.sjis ja_JP.SJIS
-korean ko_KR.eucKR
-korean.euc ko_KR.eucKR
-ko_KR ko_KR.eucKR
-lithuanian lt_LT.ISO-8859-13
-no_NO nb_NO.ISO-8859-1
-no_NO.ISO-8859-1 nb_NO.ISO-8859-1
-norwegian nb_NO.ISO-8859-1
-nynorsk nn_NO.ISO-8859-1
-polish pl_PL.ISO-8859-2
-portuguese pt_PT.ISO-8859-1
-romanian ro_RO.ISO-8859-2
-russian ru_RU.ISO-8859-5
-slovak sk_SK.ISO-8859-2
-slovene sl_SI.ISO-8859-2
-slovenian sl_SI.ISO-8859-2
-spanish es_ES.ISO-8859-1
-swedish sv_SE.ISO-8859-1
-thai th_TH.TIS-620
-turkish tr_TR.ISO-8859-9
diff --git a/intl/localealias.c b/intl/localealias.c
deleted file mode 100644
index 910db53..0000000
--- a/intl/localealias.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/* Handle aliases for locale names.
- Copyright (C) 1995-1999, 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <stdio.h>
-#if defined _LIBC || defined HAVE___FSETLOCKING
-# include <stdio_ext.h>
-#endif
-#include <sys/types.h>
-
-#ifdef __GNUC__
-# undef alloca
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# ifdef _MSC_VER
-# include <malloc.h>
-# define alloca _alloca
-# else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "gettextP.h"
-
-#if ENABLE_RELOCATABLE
-# include "relocatable.h"
-#else
-# define relocate(pathname) (pathname)
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions. This is required by the standard
- because some ANSI C functions will require linking with this object
- file and the name space must not be polluted. */
-# define strcasecmp __strcasecmp
-
-# ifndef mempcpy
-# define mempcpy __mempcpy
-# endif
-# define HAVE_MEMPCPY 1
-# define HAVE___FSETLOCKING 1
-#endif
-
-/* Handle multi-threaded applications. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-#else
-# include "lock.h"
-#endif
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-/* Some optimizations for glibc. */
-#ifdef _LIBC
-# define FEOF(fp) feof_unlocked (fp)
-# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
-#else
-# define FEOF(fp) feof (fp)
-# define FGETS(buf, n, fp) fgets (buf, n, fp)
-#endif
-
-/* For those losing systems which don't have `alloca' we have to add
- some additional code emulating it. */
-#ifdef HAVE_ALLOCA
-# define freea(p) /* nothing */
-#else
-# define alloca(n) malloc (n)
-# define freea(p) free (p)
-#endif
-
-#if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED
-# undef fgets
-# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
-#endif
-#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED
-# undef feof
-# define feof(s) feof_unlocked (s)
-#endif
-
-
-__libc_lock_define_initialized (static, lock)
-
-
-struct alias_map
-{
- const char *alias;
- const char *value;
-};
-
-
-#ifndef _LIBC
-# define libc_freeres_ptr(decl) decl
-#endif
-
-libc_freeres_ptr (static char *string_space);
-static size_t string_space_act;
-static size_t string_space_max;
-libc_freeres_ptr (static struct alias_map *map);
-static size_t nmap;
-static size_t maxmap;
-
-
-/* Prototypes for local functions. */
-static size_t read_alias_file (const char *fname, int fname_len)
- internal_function;
-static int extend_alias_table (void);
-static int alias_compare (const struct alias_map *map1,
- const struct alias_map *map2);
-
-
-const char *
-_nl_expand_alias (const char *name)
-{
- static const char *locale_alias_path;
- struct alias_map *retval;
- const char *result = NULL;
- size_t added;
-
- __libc_lock_lock (lock);
-
- if (locale_alias_path == NULL)
- locale_alias_path = LOCALE_ALIAS_PATH;
-
- do
- {
- struct alias_map item;
-
- item.alias = name;
-
- if (nmap > 0)
- retval = (struct alias_map *) bsearch (&item, map, nmap,
- sizeof (struct alias_map),
- (int (*) (const void *,
- const void *)
- ) alias_compare);
- else
- retval = NULL;
-
- /* We really found an alias. Return the value. */
- if (retval != NULL)
- {
- result = retval->value;
- break;
- }
-
- /* Perhaps we can find another alias file. */
- added = 0;
- while (added == 0 && locale_alias_path[0] != '\0')
- {
- const char *start;
-
- while (locale_alias_path[0] == PATH_SEPARATOR)
- ++locale_alias_path;
- start = locale_alias_path;
-
- while (locale_alias_path[0] != '\0'
- && locale_alias_path[0] != PATH_SEPARATOR)
- ++locale_alias_path;
-
- if (start < locale_alias_path)
- added = read_alias_file (start, locale_alias_path - start);
- }
- }
- while (added != 0);
-
- __libc_lock_unlock (lock);
-
- return result;
-}
-
-
-static size_t
-internal_function
-read_alias_file (const char *fname, int fname_len)
-{
- FILE *fp;
- char *full_fname;
- size_t added;
- static const char aliasfile[] = "/locale.alias";
-
- full_fname = (char *) alloca (fname_len + sizeof aliasfile);
-#ifdef HAVE_MEMPCPY
- mempcpy (mempcpy (full_fname, fname, fname_len),
- aliasfile, sizeof aliasfile);
-#else
- memcpy (full_fname, fname, fname_len);
- memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
-#endif
-
-#ifdef _LIBC
- /* Note the file is opened with cancellation in the I/O functions
- disabled. */
- fp = fopen (relocate (full_fname), "rc");
-#else
- fp = fopen (relocate (full_fname), "r");
-#endif
- freea (full_fname);
- if (fp == NULL)
- return 0;
-
-#ifdef HAVE___FSETLOCKING
- /* No threads present. */
- __fsetlocking (fp, FSETLOCKING_BYCALLER);
-#endif
-
- added = 0;
- while (!FEOF (fp))
- {
- /* It is a reasonable approach to use a fix buffer here because
- a) we are only interested in the first two fields
- b) these fields must be usable as file names and so must not
- be that long
- We avoid a multi-kilobyte buffer here since this would use up
- stack space which we might not have if the program ran out of
- memory. */
- char buf[400];
- char *alias;
- char *value;
- char *cp;
- int complete_line;
-
- if (FGETS (buf, sizeof buf, fp) == NULL)
- /* EOF reached. */
- break;
-
- /* Determine whether the line is complete. */
- complete_line = strchr (buf, '\n') != NULL;
-
- cp = buf;
- /* Ignore leading white space. */
- while (isspace ((unsigned char) cp[0]))
- ++cp;
-
- /* A leading '#' signals a comment line. */
- if (cp[0] != '\0' && cp[0] != '#')
- {
- alias = cp++;
- while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
- ++cp;
- /* Terminate alias name. */
- if (cp[0] != '\0')
- *cp++ = '\0';
-
- /* Now look for the beginning of the value. */
- while (isspace ((unsigned char) cp[0]))
- ++cp;
-
- if (cp[0] != '\0')
- {
- value = cp++;
- while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
- ++cp;
- /* Terminate value. */
- if (cp[0] == '\n')
- {
- /* This has to be done to make the following test
- for the end of line possible. We are looking for
- the terminating '\n' which do not overwrite here. */
- *cp++ = '\0';
- *cp = '\n';
- }
- else if (cp[0] != '\0')
- *cp++ = '\0';
-
-#ifdef IN_LIBGLOCALE
- /* glibc's locale.alias contains entries for ja_JP and ko_KR
- that make it impossible to use a Japanese or Korean UTF-8
- locale under the name "ja_JP" or "ko_KR". Ignore these
- entries. */
- if (strchr (alias, '_') == NULL)
-#endif
- {
- size_t alias_len;
- size_t value_len;
-
- if (nmap >= maxmap)
- if (__builtin_expect (extend_alias_table (), 0))
- goto out;
-
- alias_len = strlen (alias) + 1;
- value_len = strlen (value) + 1;
-
- if (string_space_act + alias_len + value_len > string_space_max)
- {
- /* Increase size of memory pool. */
- size_t new_size = (string_space_max
- + (alias_len + value_len > 1024
- ? alias_len + value_len : 1024));
- char *new_pool = (char *) realloc (string_space, new_size);
- if (new_pool == NULL)
- goto out;
-
- if (__builtin_expect (string_space != new_pool, 0))
- {
- size_t i;
-
- for (i = 0; i < nmap; i++)
- {
- map[i].alias += new_pool - string_space;
- map[i].value += new_pool - string_space;
- }
- }
-
- string_space = new_pool;
- string_space_max = new_size;
- }
-
- map[nmap].alias =
- (const char *) memcpy (&string_space[string_space_act],
- alias, alias_len);
- string_space_act += alias_len;
-
- map[nmap].value =
- (const char *) memcpy (&string_space[string_space_act],
- value, value_len);
- string_space_act += value_len;
-
- ++nmap;
- ++added;
- }
- }
- }
-
- /* Possibly not the whole line fits into the buffer. Ignore
- the rest of the line. */
- if (! complete_line)
- do
- if (FGETS (buf, sizeof buf, fp) == NULL)
- /* Make sure the inner loop will be left. The outer loop
- will exit at the `feof' test. */
- break;
- while (strchr (buf, '\n') == NULL);
- }
-
- out:
- /* Should we test for ferror()? I think we have to silently ignore
- errors. --drepper */
- fclose (fp);
-
- if (added > 0)
- qsort (map, nmap, sizeof (struct alias_map),
- (int (*) (const void *, const void *)) alias_compare);
-
- return added;
-}
-
-
-static int
-extend_alias_table ()
-{
- size_t new_size;
- struct alias_map *new_map;
-
- new_size = maxmap == 0 ? 100 : 2 * maxmap;
- new_map = (struct alias_map *) realloc (map, (new_size
- * sizeof (struct alias_map)));
- if (new_map == NULL)
- /* Simply don't extend: we don't have any more core. */
- return -1;
-
- map = new_map;
- maxmap = new_size;
- return 0;
-}
-
-
-static int
-alias_compare (const struct alias_map *map1, const struct alias_map *map2)
-{
-#if defined _LIBC || defined HAVE_STRCASECMP
- return strcasecmp (map1->alias, map2->alias);
-#else
- const unsigned char *p1 = (const unsigned char *) map1->alias;
- const unsigned char *p2 = (const unsigned char *) map2->alias;
- unsigned char c1, c2;
-
- if (p1 == p2)
- return 0;
-
- do
- {
- /* I know this seems to be odd but the tolower() function in
- some systems libc cannot handle nonalpha characters. */
- c1 = isupper (*p1) ? tolower (*p1) : *p1;
- c2 = isupper (*p2) ? tolower (*p2) : *p2;
- if (c1 == '\0')
- break;
- ++p1;
- ++p2;
- }
- while (c1 == c2);
-
- return c1 - c2;
-#endif
-}
diff --git a/intl/localename.c b/intl/localename.c
deleted file mode 100644
index af4c229..0000000
--- a/intl/localename.c
+++ /dev/null
@@ -1,1507 +0,0 @@
-/* Determine name of the currently selected locale.
- Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Written by Ulrich Drepper <drepper at gnu.org>, 1995. */
-/* Win32 code written by Tor Lillqvist <tml at iki.fi>. */
-/* MacOS X code written by Bruno Haible <bruno at clisp.org>. */
-
-#include <config.h>
-
-/* Specification. */
-#ifdef IN_LIBINTL
-# include "gettextP.h"
-#else
-# include "localename.h"
-#endif
-
-#include <stdlib.h>
-#include <locale.h>
-
-#if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
-# include <string.h>
-# include <CoreFoundation/CFString.h>
-# if HAVE_CFLOCALECOPYCURRENT
-# include <CoreFoundation/CFLocale.h>
-# elif HAVE_CFPREFERENCESCOPYAPPVALUE
-# include <CoreFoundation/CFPreferences.h>
-# endif
-#endif
-
-#if defined _WIN32 || defined __WIN32__
-# define WIN32_NATIVE
-#endif
-
-#ifdef WIN32_NATIVE
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-/* List of language codes, sorted by value:
- 0x01 LANG_ARABIC
- 0x02 LANG_BULGARIAN
- 0x03 LANG_CATALAN
- 0x04 LANG_CHINESE
- 0x05 LANG_CZECH
- 0x06 LANG_DANISH
- 0x07 LANG_GERMAN
- 0x08 LANG_GREEK
- 0x09 LANG_ENGLISH
- 0x0a LANG_SPANISH
- 0x0b LANG_FINNISH
- 0x0c LANG_FRENCH
- 0x0d LANG_HEBREW
- 0x0e LANG_HUNGARIAN
- 0x0f LANG_ICELANDIC
- 0x10 LANG_ITALIAN
- 0x11 LANG_JAPANESE
- 0x12 LANG_KOREAN
- 0x13 LANG_DUTCH
- 0x14 LANG_NORWEGIAN
- 0x15 LANG_POLISH
- 0x16 LANG_PORTUGUESE
- 0x17 LANG_RHAETO_ROMANCE
- 0x18 LANG_ROMANIAN
- 0x19 LANG_RUSSIAN
- 0x1a LANG_CROATIAN == LANG_SERBIAN
- 0x1b LANG_SLOVAK
- 0x1c LANG_ALBANIAN
- 0x1d LANG_SWEDISH
- 0x1e LANG_THAI
- 0x1f LANG_TURKISH
- 0x20 LANG_URDU
- 0x21 LANG_INDONESIAN
- 0x22 LANG_UKRAINIAN
- 0x23 LANG_BELARUSIAN
- 0x24 LANG_SLOVENIAN
- 0x25 LANG_ESTONIAN
- 0x26 LANG_LATVIAN
- 0x27 LANG_LITHUANIAN
- 0x28 LANG_TAJIK
- 0x29 LANG_FARSI
- 0x2a LANG_VIETNAMESE
- 0x2b LANG_ARMENIAN
- 0x2c LANG_AZERI
- 0x2d LANG_BASQUE
- 0x2e LANG_SORBIAN
- 0x2f LANG_MACEDONIAN
- 0x30 LANG_SUTU
- 0x31 LANG_TSONGA
- 0x32 LANG_TSWANA
- 0x33 LANG_VENDA
- 0x34 LANG_XHOSA
- 0x35 LANG_ZULU
- 0x36 LANG_AFRIKAANS
- 0x37 LANG_GEORGIAN
- 0x38 LANG_FAEROESE
- 0x39 LANG_HINDI
- 0x3a LANG_MALTESE
- 0x3b LANG_SAAMI
- 0x3c LANG_GAELIC
- 0x3d LANG_YIDDISH
- 0x3e LANG_MALAY
- 0x3f LANG_KAZAK
- 0x40 LANG_KYRGYZ
- 0x41 LANG_SWAHILI
- 0x42 LANG_TURKMEN
- 0x43 LANG_UZBEK
- 0x44 LANG_TATAR
- 0x45 LANG_BENGALI
- 0x46 LANG_PUNJABI
- 0x47 LANG_GUJARATI
- 0x48 LANG_ORIYA
- 0x49 LANG_TAMIL
- 0x4a LANG_TELUGU
- 0x4b LANG_KANNADA
- 0x4c LANG_MALAYALAM
- 0x4d LANG_ASSAMESE
- 0x4e LANG_MARATHI
- 0x4f LANG_SANSKRIT
- 0x50 LANG_MONGOLIAN
- 0x51 LANG_TIBETAN
- 0x52 LANG_WELSH
- 0x53 LANG_CAMBODIAN
- 0x54 LANG_LAO
- 0x55 LANG_BURMESE
- 0x56 LANG_GALICIAN
- 0x57 LANG_KONKANI
- 0x58 LANG_MANIPURI
- 0x59 LANG_SINDHI
- 0x5a LANG_SYRIAC
- 0x5b LANG_SINHALESE
- 0x5c LANG_CHEROKEE
- 0x5d LANG_INUKTITUT
- 0x5e LANG_AMHARIC
- 0x5f LANG_TAMAZIGHT
- 0x60 LANG_KASHMIRI
- 0x61 LANG_NEPALI
- 0x62 LANG_FRISIAN
- 0x63 LANG_PASHTO
- 0x64 LANG_TAGALOG
- 0x65 LANG_DIVEHI
- 0x66 LANG_EDO
- 0x67 LANG_FULFULDE
- 0x68 LANG_HAUSA
- 0x69 LANG_IBIBIO
- 0x6a LANG_YORUBA
- 0x70 LANG_IGBO
- 0x71 LANG_KANURI
- 0x72 LANG_OROMO
- 0x73 LANG_TIGRINYA
- 0x74 LANG_GUARANI
- 0x75 LANG_HAWAIIAN
- 0x76 LANG_LATIN
- 0x77 LANG_SOMALI
- 0x78 LANG_YI
- 0x79 LANG_PAPIAMENTU
-*/
-/* Mingw headers don't have latest language and sublanguage codes. */
-# ifndef LANG_AFRIKAANS
-# define LANG_AFRIKAANS 0x36
-# endif
-# ifndef LANG_ALBANIAN
-# define LANG_ALBANIAN 0x1c
-# endif
-# ifndef LANG_AMHARIC
-# define LANG_AMHARIC 0x5e
-# endif
-# ifndef LANG_ARABIC
-# define LANG_ARABIC 0x01
-# endif
-# ifndef LANG_ARMENIAN
-# define LANG_ARMENIAN 0x2b
-# endif
-# ifndef LANG_ASSAMESE
-# define LANG_ASSAMESE 0x4d
-# endif
-# ifndef LANG_AZERI
-# define LANG_AZERI 0x2c
-# endif
-# ifndef LANG_BASQUE
-# define LANG_BASQUE 0x2d
-# endif
-# ifndef LANG_BELARUSIAN
-# define LANG_BELARUSIAN 0x23
-# endif
-# ifndef LANG_BENGALI
-# define LANG_BENGALI 0x45
-# endif
-# ifndef LANG_BURMESE
-# define LANG_BURMESE 0x55
-# endif
-# ifndef LANG_CAMBODIAN
-# define LANG_CAMBODIAN 0x53
-# endif
-# ifndef LANG_CATALAN
-# define LANG_CATALAN 0x03
-# endif
-# ifndef LANG_CHEROKEE
-# define LANG_CHEROKEE 0x5c
-# endif
-# ifndef LANG_DIVEHI
-# define LANG_DIVEHI 0x65
-# endif
-# ifndef LANG_EDO
-# define LANG_EDO 0x66
-# endif
-# ifndef LANG_ESTONIAN
-# define LANG_ESTONIAN 0x25
-# endif
-# ifndef LANG_FAEROESE
-# define LANG_FAEROESE 0x38
-# endif
-# ifndef LANG_FARSI
-# define LANG_FARSI 0x29
-# endif
-# ifndef LANG_FRISIAN
-# define LANG_FRISIAN 0x62
-# endif
-# ifndef LANG_FULFULDE
-# define LANG_FULFULDE 0x67
-# endif
-# ifndef LANG_GAELIC
-# define LANG_GAELIC 0x3c
-# endif
-# ifndef LANG_GALICIAN
-# define LANG_GALICIAN 0x56
-# endif
-# ifndef LANG_GEORGIAN
-# define LANG_GEORGIAN 0x37
-# endif
-# ifndef LANG_GUARANI
-# define LANG_GUARANI 0x74
-# endif
-# ifndef LANG_GUJARATI
-# define LANG_GUJARATI 0x47
-# endif
-# ifndef LANG_HAUSA
-# define LANG_HAUSA 0x68
-# endif
-# ifndef LANG_HAWAIIAN
-# define LANG_HAWAIIAN 0x75
-# endif
-# ifndef LANG_HEBREW
-# define LANG_HEBREW 0x0d
-# endif
-# ifndef LANG_HINDI
-# define LANG_HINDI 0x39
-# endif
-# ifndef LANG_IBIBIO
-# define LANG_IBIBIO 0x69
-# endif
-# ifndef LANG_IGBO
-# define LANG_IGBO 0x70
-# endif
-# ifndef LANG_INDONESIAN
-# define LANG_INDONESIAN 0x21
-# endif
-# ifndef LANG_INUKTITUT
-# define LANG_INUKTITUT 0x5d
-# endif
-# ifndef LANG_KANNADA
-# define LANG_KANNADA 0x4b
-# endif
-# ifndef LANG_KANURI
-# define LANG_KANURI 0x71
-# endif
-# ifndef LANG_KASHMIRI
-# define LANG_KASHMIRI 0x60
-# endif
-# ifndef LANG_KAZAK
-# define LANG_KAZAK 0x3f
-# endif
-# ifndef LANG_KONKANI
-# define LANG_KONKANI 0x57
-# endif
-# ifndef LANG_KYRGYZ
-# define LANG_KYRGYZ 0x40
-# endif
-# ifndef LANG_LAO
-# define LANG_LAO 0x54
-# endif
-# ifndef LANG_LATIN
-# define LANG_LATIN 0x76
-# endif
-# ifndef LANG_LATVIAN
-# define LANG_LATVIAN 0x26
-# endif
-# ifndef LANG_LITHUANIAN
-# define LANG_LITHUANIAN 0x27
-# endif
-# ifndef LANG_MACEDONIAN
-# define LANG_MACEDONIAN 0x2f
-# endif
-# ifndef LANG_MALAY
-# define LANG_MALAY 0x3e
-# endif
-# ifndef LANG_MALAYALAM
-# define LANG_MALAYALAM 0x4c
-# endif
-# ifndef LANG_MALTESE
-# define LANG_MALTESE 0x3a
-# endif
-# ifndef LANG_MANIPURI
-# define LANG_MANIPURI 0x58
-# endif
-# ifndef LANG_MARATHI
-# define LANG_MARATHI 0x4e
-# endif
-# ifndef LANG_MONGOLIAN
-# define LANG_MONGOLIAN 0x50
-# endif
-# ifndef LANG_NEPALI
-# define LANG_NEPALI 0x61
-# endif
-# ifndef LANG_ORIYA
-# define LANG_ORIYA 0x48
-# endif
-# ifndef LANG_OROMO
-# define LANG_OROMO 0x72
-# endif
-# ifndef LANG_PAPIAMENTU
-# define LANG_PAPIAMENTU 0x79
-# endif
-# ifndef LANG_PASHTO
-# define LANG_PASHTO 0x63
-# endif
-# ifndef LANG_PUNJABI
-# define LANG_PUNJABI 0x46
-# endif
-# ifndef LANG_RHAETO_ROMANCE
-# define LANG_RHAETO_ROMANCE 0x17
-# endif
-# ifndef LANG_SAAMI
-# define LANG_SAAMI 0x3b
-# endif
-# ifndef LANG_SANSKRIT
-# define LANG_SANSKRIT 0x4f
-# endif
-# ifndef LANG_SERBIAN
-# define LANG_SERBIAN 0x1a
-# endif
-# ifndef LANG_SINDHI
-# define LANG_SINDHI 0x59
-# endif
-# ifndef LANG_SINHALESE
-# define LANG_SINHALESE 0x5b
-# endif
-# ifndef LANG_SLOVAK
-# define LANG_SLOVAK 0x1b
-# endif
-# ifndef LANG_SOMALI
-# define LANG_SOMALI 0x77
-# endif
-# ifndef LANG_SORBIAN
-# define LANG_SORBIAN 0x2e
-# endif
-# ifndef LANG_SUTU
-# define LANG_SUTU 0x30
-# endif
-# ifndef LANG_SWAHILI
-# define LANG_SWAHILI 0x41
-# endif
-# ifndef LANG_SYRIAC
-# define LANG_SYRIAC 0x5a
-# endif
-# ifndef LANG_TAGALOG
-# define LANG_TAGALOG 0x64
-# endif
-# ifndef LANG_TAJIK
-# define LANG_TAJIK 0x28
-# endif
-# ifndef LANG_TAMAZIGHT
-# define LANG_TAMAZIGHT 0x5f
-# endif
-# ifndef LANG_TAMIL
-# define LANG_TAMIL 0x49
-# endif
-# ifndef LANG_TATAR
-# define LANG_TATAR 0x44
-# endif
-# ifndef LANG_TELUGU
-# define LANG_TELUGU 0x4a
-# endif
-# ifndef LANG_THAI
-# define LANG_THAI 0x1e
-# endif
-# ifndef LANG_TIBETAN
-# define LANG_TIBETAN 0x51
-# endif
-# ifndef LANG_TIGRINYA
-# define LANG_TIGRINYA 0x73
-# endif
-# ifndef LANG_TSONGA
-# define LANG_TSONGA 0x31
-# endif
-# ifndef LANG_TSWANA
-# define LANG_TSWANA 0x32
-# endif
-# ifndef LANG_TURKMEN
-# define LANG_TURKMEN 0x42
-# endif
-# ifndef LANG_UKRAINIAN
-# define LANG_UKRAINIAN 0x22
-# endif
-# ifndef LANG_URDU
-# define LANG_URDU 0x20
-# endif
-# ifndef LANG_UZBEK
-# define LANG_UZBEK 0x43
-# endif
-# ifndef LANG_VENDA
-# define LANG_VENDA 0x33
-# endif
-# ifndef LANG_VIETNAMESE
-# define LANG_VIETNAMESE 0x2a
-# endif
-# ifndef LANG_WELSH
-# define LANG_WELSH 0x52
-# endif
-# ifndef LANG_XHOSA
-# define LANG_XHOSA 0x34
-# endif
-# ifndef LANG_YI
-# define LANG_YI 0x78
-# endif
-# ifndef LANG_YIDDISH
-# define LANG_YIDDISH 0x3d
-# endif
-# ifndef LANG_YORUBA
-# define LANG_YORUBA 0x6a
-# endif
-# ifndef LANG_ZULU
-# define LANG_ZULU 0x35
-# endif
-# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
-# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
-# endif
-# ifndef SUBLANG_ARABIC_IRAQ
-# define SUBLANG_ARABIC_IRAQ 0x02
-# endif
-# ifndef SUBLANG_ARABIC_EGYPT
-# define SUBLANG_ARABIC_EGYPT 0x03
-# endif
-# ifndef SUBLANG_ARABIC_LIBYA
-# define SUBLANG_ARABIC_LIBYA 0x04
-# endif
-# ifndef SUBLANG_ARABIC_ALGERIA
-# define SUBLANG_ARABIC_ALGERIA 0x05
-# endif
-# ifndef SUBLANG_ARABIC_MOROCCO
-# define SUBLANG_ARABIC_MOROCCO 0x06
-# endif
-# ifndef SUBLANG_ARABIC_TUNISIA
-# define SUBLANG_ARABIC_TUNISIA 0x07
-# endif
-# ifndef SUBLANG_ARABIC_OMAN
-# define SUBLANG_ARABIC_OMAN 0x08
-# endif
-# ifndef SUBLANG_ARABIC_YEMEN
-# define SUBLANG_ARABIC_YEMEN 0x09
-# endif
-# ifndef SUBLANG_ARABIC_SYRIA
-# define SUBLANG_ARABIC_SYRIA 0x0a
-# endif
-# ifndef SUBLANG_ARABIC_JORDAN
-# define SUBLANG_ARABIC_JORDAN 0x0b
-# endif
-# ifndef SUBLANG_ARABIC_LEBANON
-# define SUBLANG_ARABIC_LEBANON 0x0c
-# endif
-# ifndef SUBLANG_ARABIC_KUWAIT
-# define SUBLANG_ARABIC_KUWAIT 0x0d
-# endif
-# ifndef SUBLANG_ARABIC_UAE
-# define SUBLANG_ARABIC_UAE 0x0e
-# endif
-# ifndef SUBLANG_ARABIC_BAHRAIN
-# define SUBLANG_ARABIC_BAHRAIN 0x0f
-# endif
-# ifndef SUBLANG_ARABIC_QATAR
-# define SUBLANG_ARABIC_QATAR 0x10
-# endif
-# ifndef SUBLANG_AZERI_LATIN
-# define SUBLANG_AZERI_LATIN 0x01
-# endif
-# ifndef SUBLANG_AZERI_CYRILLIC
-# define SUBLANG_AZERI_CYRILLIC 0x02
-# endif
-# ifndef SUBLANG_BENGALI_INDIA
-# define SUBLANG_BENGALI_INDIA 0x01
-# endif
-# ifndef SUBLANG_BENGALI_BANGLADESH
-# define SUBLANG_BENGALI_BANGLADESH 0x02
-# endif
-# ifndef SUBLANG_CHINESE_MACAU
-# define SUBLANG_CHINESE_MACAU 0x05
-# endif
-# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
-# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
-# endif
-# ifndef SUBLANG_ENGLISH_JAMAICA
-# define SUBLANG_ENGLISH_JAMAICA 0x08
-# endif
-# ifndef SUBLANG_ENGLISH_CARIBBEAN
-# define SUBLANG_ENGLISH_CARIBBEAN 0x09
-# endif
-# ifndef SUBLANG_ENGLISH_BELIZE
-# define SUBLANG_ENGLISH_BELIZE 0x0a
-# endif
-# ifndef SUBLANG_ENGLISH_TRINIDAD
-# define SUBLANG_ENGLISH_TRINIDAD 0x0b
-# endif
-# ifndef SUBLANG_ENGLISH_ZIMBABWE
-# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
-# endif
-# ifndef SUBLANG_ENGLISH_PHILIPPINES
-# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
-# endif
-# ifndef SUBLANG_ENGLISH_INDONESIA
-# define SUBLANG_ENGLISH_INDONESIA 0x0e
-# endif
-# ifndef SUBLANG_ENGLISH_HONGKONG
-# define SUBLANG_ENGLISH_HONGKONG 0x0f
-# endif
-# ifndef SUBLANG_ENGLISH_INDIA
-# define SUBLANG_ENGLISH_INDIA 0x10
-# endif
-# ifndef SUBLANG_ENGLISH_MALAYSIA
-# define SUBLANG_ENGLISH_MALAYSIA 0x11
-# endif
-# ifndef SUBLANG_ENGLISH_SINGAPORE
-# define SUBLANG_ENGLISH_SINGAPORE 0x12
-# endif
-# ifndef SUBLANG_FRENCH_LUXEMBOURG
-# define SUBLANG_FRENCH_LUXEMBOURG 0x05
-# endif
-# ifndef SUBLANG_FRENCH_MONACO
-# define SUBLANG_FRENCH_MONACO 0x06
-# endif
-# ifndef SUBLANG_FRENCH_WESTINDIES
-# define SUBLANG_FRENCH_WESTINDIES 0x07
-# endif
-# ifndef SUBLANG_FRENCH_REUNION
-# define SUBLANG_FRENCH_REUNION 0x08
-# endif
-# ifndef SUBLANG_FRENCH_CONGO
-# define SUBLANG_FRENCH_CONGO 0x09
-# endif
-# ifndef SUBLANG_FRENCH_SENEGAL
-# define SUBLANG_FRENCH_SENEGAL 0x0a
-# endif
-# ifndef SUBLANG_FRENCH_CAMEROON
-# define SUBLANG_FRENCH_CAMEROON 0x0b
-# endif
-# ifndef SUBLANG_FRENCH_COTEDIVOIRE
-# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
-# endif
-# ifndef SUBLANG_FRENCH_MALI
-# define SUBLANG_FRENCH_MALI 0x0d
-# endif
-# ifndef SUBLANG_FRENCH_MOROCCO
-# define SUBLANG_FRENCH_MOROCCO 0x0e
-# endif
-# ifndef SUBLANG_FRENCH_HAITI
-# define SUBLANG_FRENCH_HAITI 0x0f
-# endif
-# ifndef SUBLANG_GERMAN_LUXEMBOURG
-# define SUBLANG_GERMAN_LUXEMBOURG 0x04
-# endif
-# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
-# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
-# endif
-# ifndef SUBLANG_KASHMIRI_INDIA
-# define SUBLANG_KASHMIRI_INDIA 0x02
-# endif
-# ifndef SUBLANG_MALAY_MALAYSIA
-# define SUBLANG_MALAY_MALAYSIA 0x01
-# endif
-# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
-# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
-# endif
-# ifndef SUBLANG_NEPALI_INDIA
-# define SUBLANG_NEPALI_INDIA 0x02
-# endif
-# ifndef SUBLANG_PUNJABI_INDIA
-# define SUBLANG_PUNJABI_INDIA 0x01
-# endif
-# ifndef SUBLANG_PUNJABI_PAKISTAN
-# define SUBLANG_PUNJABI_PAKISTAN 0x02
-# endif
-# ifndef SUBLANG_ROMANIAN_ROMANIA
-# define SUBLANG_ROMANIAN_ROMANIA 0x01
-# endif
-# ifndef SUBLANG_ROMANIAN_MOLDOVA
-# define SUBLANG_ROMANIAN_MOLDOVA 0x02
-# endif
-# ifndef SUBLANG_SERBIAN_LATIN
-# define SUBLANG_SERBIAN_LATIN 0x02
-# endif
-# ifndef SUBLANG_SERBIAN_CYRILLIC
-# define SUBLANG_SERBIAN_CYRILLIC 0x03
-# endif
-# ifndef SUBLANG_SINDHI_PAKISTAN
-# define SUBLANG_SINDHI_PAKISTAN 0x01
-# endif
-# ifndef SUBLANG_SINDHI_AFGHANISTAN
-# define SUBLANG_SINDHI_AFGHANISTAN 0x02
-# endif
-# ifndef SUBLANG_SPANISH_GUATEMALA
-# define SUBLANG_SPANISH_GUATEMALA 0x04
-# endif
-# ifndef SUBLANG_SPANISH_COSTA_RICA
-# define SUBLANG_SPANISH_COSTA_RICA 0x05
-# endif
-# ifndef SUBLANG_SPANISH_PANAMA
-# define SUBLANG_SPANISH_PANAMA 0x06
-# endif
-# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
-# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
-# endif
-# ifndef SUBLANG_SPANISH_VENEZUELA
-# define SUBLANG_SPANISH_VENEZUELA 0x08
-# endif
-# ifndef SUBLANG_SPANISH_COLOMBIA
-# define SUBLANG_SPANISH_COLOMBIA 0x09
-# endif
-# ifndef SUBLANG_SPANISH_PERU
-# define SUBLANG_SPANISH_PERU 0x0a
-# endif
-# ifndef SUBLANG_SPANISH_ARGENTINA
-# define SUBLANG_SPANISH_ARGENTINA 0x0b
-# endif
-# ifndef SUBLANG_SPANISH_ECUADOR
-# define SUBLANG_SPANISH_ECUADOR 0x0c
-# endif
-# ifndef SUBLANG_SPANISH_CHILE
-# define SUBLANG_SPANISH_CHILE 0x0d
-# endif
-# ifndef SUBLANG_SPANISH_URUGUAY
-# define SUBLANG_SPANISH_URUGUAY 0x0e
-# endif
-# ifndef SUBLANG_SPANISH_PARAGUAY
-# define SUBLANG_SPANISH_PARAGUAY 0x0f
-# endif
-# ifndef SUBLANG_SPANISH_BOLIVIA
-# define SUBLANG_SPANISH_BOLIVIA 0x10
-# endif
-# ifndef SUBLANG_SPANISH_EL_SALVADOR
-# define SUBLANG_SPANISH_EL_SALVADOR 0x11
-# endif
-# ifndef SUBLANG_SPANISH_HONDURAS
-# define SUBLANG_SPANISH_HONDURAS 0x12
-# endif
-# ifndef SUBLANG_SPANISH_NICARAGUA
-# define SUBLANG_SPANISH_NICARAGUA 0x13
-# endif
-# ifndef SUBLANG_SPANISH_PUERTO_RICO
-# define SUBLANG_SPANISH_PUERTO_RICO 0x14
-# endif
-# ifndef SUBLANG_SWEDISH_FINLAND
-# define SUBLANG_SWEDISH_FINLAND 0x02
-# endif
-# ifndef SUBLANG_TAMAZIGHT_ARABIC
-# define SUBLANG_TAMAZIGHT_ARABIC 0x01
-# endif
-# ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN
-# define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02
-# endif
-# ifndef SUBLANG_TIGRINYA_ETHIOPIA
-# define SUBLANG_TIGRINYA_ETHIOPIA 0x01
-# endif
-# ifndef SUBLANG_TIGRINYA_ERITREA
-# define SUBLANG_TIGRINYA_ERITREA 0x02
-# endif
-# ifndef SUBLANG_URDU_PAKISTAN
-# define SUBLANG_URDU_PAKISTAN 0x01
-# endif
-# ifndef SUBLANG_URDU_INDIA
-# define SUBLANG_URDU_INDIA 0x02
-# endif
-# ifndef SUBLANG_UZBEK_LATIN
-# define SUBLANG_UZBEK_LATIN 0x01
-# endif
-# ifndef SUBLANG_UZBEK_CYRILLIC
-# define SUBLANG_UZBEK_CYRILLIC 0x02
-# endif
-#endif
-
-# if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
-/* MacOS X 10.2 or newer */
-
-/* Canonicalize a MacOS X locale name to a Unix locale name.
- NAME is a sufficiently large buffer.
- On input, it contains the MacOS X locale name.
- On output, it contains the Unix locale name. */
-# if !defined IN_LIBINTL
-static
-# endif
-void
-gl_locale_name_canonicalize (char *name)
-{
- /* This conversion is based on a posting by
- Deborah GoldSmith <goldsmit at apple.com> on 2005-03-08,
- http://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */
-
- /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and
- ISO 3166) names. Prior to MacOS X 10.3, there is no API for doing this.
- Therefore we do it ourselves, using a table based on the results of the
- MacOS X 10.3.8 function
- CFLocaleCreateCanonicalLocaleIdentifierFromString(). */
- typedef struct { const char legacy[21+1]; const char unixy[5+1]; }
- legacy_entry;
- static const legacy_entry legacy_table[] = {
- { "Afrikaans", "af" },
- { "Albanian", "sq" },
- { "Amharic", "am" },
- { "Arabic", "ar" },
- { "Armenian", "hy" },
- { "Assamese", "as" },
- { "Aymara", "ay" },
- { "Azerbaijani", "az" },
- { "Basque", "eu" },
- { "Belarusian", "be" },
- { "Belorussian", "be" },
- { "Bengali", "bn" },
- { "Brazilian Portugese", "pt_BR" },
- { "Brazilian Portuguese", "pt_BR" },
- { "Breton", "br" },
- { "Bulgarian", "bg" },
- { "Burmese", "my" },
- { "Byelorussian", "be" },
- { "Catalan", "ca" },
- { "Chewa", "ny" },
- { "Chichewa", "ny" },
- { "Chinese", "zh" },
- { "Chinese, Simplified", "zh_CN" },
- { "Chinese, Traditional", "zh_TW" },
- { "Chinese, Tradtional", "zh_TW" },
- { "Croatian", "hr" },
- { "Czech", "cs" },
- { "Danish", "da" },
- { "Dutch", "nl" },
- { "Dzongkha", "dz" },
- { "English", "en" },
- { "Esperanto", "eo" },
- { "Estonian", "et" },
- { "Faroese", "fo" },
- { "Farsi", "fa" },
- { "Finnish", "fi" },
- { "Flemish", "nl_BE" },
- { "French", "fr" },
- { "Galician", "gl" },
- { "Gallegan", "gl" },
- { "Georgian", "ka" },
- { "German", "de" },
- { "Greek", "el" },
- { "Greenlandic", "kl" },
- { "Guarani", "gn" },
- { "Gujarati", "gu" },
- { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */
- { "Hebrew", "he" },
- { "Hindi", "hi" },
- { "Hungarian", "hu" },
- { "Icelandic", "is" },
- { "Indonesian", "id" },
- { "Inuktitut", "iu" },
- { "Irish", "ga" },
- { "Italian", "it" },
- { "Japanese", "ja" },
- { "Javanese", "jv" },
- { "Kalaallisut", "kl" },
- { "Kannada", "kn" },
- { "Kashmiri", "ks" },
- { "Kazakh", "kk" },
- { "Khmer", "km" },
- { "Kinyarwanda", "rw" },
- { "Kirghiz", "ky" },
- { "Korean", "ko" },
- { "Kurdish", "ku" },
- { "Latin", "la" },
- { "Latvian", "lv" },
- { "Lithuanian", "lt" },
- { "Macedonian", "mk" },
- { "Malagasy", "mg" },
- { "Malay", "ms" },
- { "Malayalam", "ml" },
- { "Maltese", "mt" },
- { "Manx", "gv" },
- { "Marathi", "mr" },
- { "Moldavian", "mo" },
- { "Mongolian", "mn" },
- { "Nepali", "ne" },
- { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */
- { "Nyanja", "ny" },
- { "Nynorsk", "nn" },
- { "Oriya", "or" },
- { "Oromo", "om" },
- { "Panjabi", "pa" },
- { "Pashto", "ps" },
- { "Persian", "fa" },
- { "Polish", "pl" },
- { "Portuguese", "pt" },
- { "Portuguese, Brazilian", "pt_BR" },
- { "Punjabi", "pa" },
- { "Pushto", "ps" },
- { "Quechua", "qu" },
- { "Romanian", "ro" },
- { "Ruanda", "rw" },
- { "Rundi", "rn" },
- { "Russian", "ru" },
- { "Sami", "se_NO" }, /* Not just "se". */
- { "Sanskrit", "sa" },
- { "Scottish", "gd" },
- { "Serbian", "sr" },
- { "Simplified Chinese", "zh_CN" },
- { "Sindhi", "sd" },
- { "Sinhalese", "si" },
- { "Slovak", "sk" },
- { "Slovenian", "sl" },
- { "Somali", "so" },
- { "Spanish", "es" },
- { "Sundanese", "su" },
- { "Swahili", "sw" },
- { "Swedish", "sv" },
- { "Tagalog", "tl" },
- { "Tajik", "tg" },
- { "Tajiki", "tg" },
- { "Tamil", "ta" },
- { "Tatar", "tt" },
- { "Telugu", "te" },
- { "Thai", "th" },
- { "Tibetan", "bo" },
- { "Tigrinya", "ti" },
- { "Tongan", "to" },
- { "Traditional Chinese", "zh_TW" },
- { "Turkish", "tr" },
- { "Turkmen", "tk" },
- { "Uighur", "ug" },
- { "Ukrainian", "uk" },
- { "Urdu", "ur" },
- { "Uzbek", "uz" },
- { "Vietnamese", "vi" },
- { "Welsh", "cy" },
- { "Yiddish", "yi" }
- };
-
- /* Convert new-style locale names with language tags (ISO 639 and ISO 15924)
- to Unix (ISO 639 and ISO 3166) names. */
- typedef struct { const char langtag[7+1]; const char unixy[12+1]; }
- langtag_entry;
- static const langtag_entry langtag_table[] = {
- /* MacOS X has "az-Arab", "az-Cyrl", "az-Latn".
- The default script for az on Unix is Latin. */
- { "az-Latn", "az" },
- /* MacOS X has "ga-dots". Does not yet exist on Unix. */
- { "ga-dots", "ga" },
- /* MacOS X has "kk-Cyrl". Does not yet exist on Unix. */
- /* MacOS X has "mn-Cyrl", "mn-Mong".
- The default script for mn on Unix is Cyrillic. */
- { "mn-Cyrl", "mn" },
- /* MacOS X has "ms-Arab", "ms-Latn".
- The default script for ms on Unix is Latin. */
- { "ms-Latn", "ms" },
- /* MacOS X has "tg-Cyrl".
- The default script for tg on Unix is Cyrillic. */
- { "tg-Cyrl", "tg" },
- /* MacOS X has "tk-Cyrl". Does not yet exist on Unix. */
- /* MacOS X has "tt-Cyrl".
- The default script for tt on Unix is Cyrillic. */
- { "tt-Cyrl", "tt" },
- /* MacOS X has "zh-Hans", "zh-Hant".
- Country codes are used to distinguish these on Unix. */
- { "zh-Hans", "zh_CN" },
- { "zh-Hant", "zh_TW" }
- };
-
- /* Convert script names (ISO 15924) to Unix conventions.
- See http://www.unicode.org/iso15924/iso15924-codes.html */
- typedef struct { const char script[4+1]; const char unixy[9+1]; }
- script_entry;
- static const script_entry script_table[] = {
- { "Arab", "arabic" },
- { "Cyrl", "cyrillic" },
- { "Mong", "mongolian" }
- };
-
- /* Step 1: Convert using legacy_table. */
- if (name[0] >= 'A' && name[0] <= 'Z')
- {
- unsigned int i1, i2;
- i1 = 0;
- i2 = sizeof (legacy_table) / sizeof (legacy_entry);
- while (i2 - i1 > 1)
- {
- /* At this point we know that if name occurs in legacy_table,
- its index must be >= i1 and < i2. */
- unsigned int i = (i1 + i2) >> 1;
- const legacy_entry *p = &legacy_table[i];
- if (strcmp (name, p->legacy) < 0)
- i2 = i;
- else
- i1 = i;
- }
- if (strcmp (name, legacy_table[i1].legacy) == 0)
- {
- strcpy (name, legacy_table[i1].unixy);
- return;
- }
- }
-
- /* Step 2: Convert using langtag_table and script_table. */
- if (strlen (name) == 7 && name[2] == '-')
- {
- unsigned int i1, i2;
- i1 = 0;
- i2 = sizeof (langtag_table) / sizeof (langtag_entry);
- while (i2 - i1 > 1)
- {
- /* At this point we know that if name occurs in langtag_table,
- its index must be >= i1 and < i2. */
- unsigned int i = (i1 + i2) >> 1;
- const langtag_entry *p = &langtag_table[i];
- if (strcmp (name, p->langtag) < 0)
- i2 = i;
- else
- i1 = i;
- }
- if (strcmp (name, langtag_table[i1].langtag) == 0)
- {
- strcpy (name, langtag_table[i1].unixy);
- return;
- }
-
- i1 = 0;
- i2 = sizeof (script_table) / sizeof (script_entry);
- while (i2 - i1 > 1)
- {
- /* At this point we know that if (name + 3) occurs in script_table,
- its index must be >= i1 and < i2. */
- unsigned int i = (i1 + i2) >> 1;
- const script_entry *p = &script_table[i];
- if (strcmp (name + 3, p->script) < 0)
- i2 = i;
- else
- i1 = i;
- }
- if (strcmp (name + 3, script_table[i1].script) == 0)
- {
- name[2] = '@';
- strcpy (name + 3, script_table[i1].unixy);
- return;
- }
- }
-
- /* Step 3: Convert new-style dash to Unix underscore. */
- {
- char *p;
- for (p = name; *p != '\0'; p++)
- if (*p == '-')
- *p = '_';
- }
-}
-
-#endif
-
-/* XPG3 defines the result of 'setlocale (category, NULL)' as:
- "Directs 'setlocale()' to query 'category' and return the current
- setting of 'local'."
- However it does not specify the exact format. Neither do SUSV2 and
- ISO C 99. So we can use this feature only on selected systems (e.g.
- those using GNU C Library). */
-#if defined _LIBC || (defined __GLIBC__ && __GLIBC__ >= 2)
-# define HAVE_LOCALE_NULL
-#endif
-
-/* Determine the current locale's name, and canonicalize it into XPG syntax
- language[_territory][.codeset][@modifier]
- The codeset part in the result is not reliable; the locale_charset()
- should be used for codeset information instead.
- The result must not be freed; it is statically allocated. */
-
-const char *
-gl_locale_name_posix (int category, const char *categoryname)
-{
- /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
- On some systems this can be done by the 'setlocale' function itself. */
-#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
- return setlocale (category, NULL);
-#else
- const char *retval;
-
- /* Setting of LC_ALL overrides all other. */
- retval = getenv ("LC_ALL");
- if (retval != NULL && retval[0] != '\0')
- return retval;
- /* Next comes the name of the desired category. */
- retval = getenv (categoryname);
- if (retval != NULL && retval[0] != '\0')
- return retval;
- /* Last possibility is the LANG environment variable. */
- retval = getenv ("LANG");
- if (retval != NULL && retval[0] != '\0')
- return retval;
-
- return NULL;
-#endif
-}
-
-const char *
-gl_locale_name_default (void)
-{
- /* POSIX:2001 says:
- "All implementations shall define a locale as the default locale, to be
- invoked when no environment variables are set, or set to the empty
- string. This default locale can be the POSIX locale or any other
- implementation-defined locale. Some implementations may provide
- facilities for local installation administrators to set the default
- locale, customizing it for each location. POSIX:2001 does not require
- such a facility. */
-
-#if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined(WIN32_NATIVE))
-
- /* The system does not have a way of setting the locale, other than the
- POSIX specified environment variables. We use C as default locale. */
- return "C";
-
-#else
-
- /* Return an XPG style locale name language[_territory][@modifier].
- Don't even bother determining the codeset; it's not useful in this
- context, because message catalogs are not specific to a single
- codeset. */
-
-# if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
- /* MacOS X 10.2 or newer */
- {
- /* Cache the locale name, since CoreFoundation calls are expensive. */
- static const char *cached_localename;
-
- if (cached_localename == NULL)
- {
- char namebuf[256];
-# if HAVE_CFLOCALECOPYCURRENT /* MacOS X 10.3 or newer */
- CFLocaleRef locale = CFLocaleCopyCurrent ();
- CFStringRef name = CFLocaleGetIdentifier (locale);
-
- if (CFStringGetCString (name, namebuf, sizeof(namebuf),
- kCFStringEncodingASCII))
- {
- gl_locale_name_canonicalize (namebuf);
- cached_localename = strdup (namebuf);
- }
- CFRelease (locale);
-# elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */
- CFTypeRef value =
- CFPreferencesCopyAppValue (CFSTR ("AppleLocale"),
- kCFPreferencesCurrentApplication);
- if (value != NULL
- && CFGetTypeID (value) == CFStringGetTypeID ()
- && CFStringGetCString ((CFStringRef)value, namebuf, sizeof(namebuf),
- kCFStringEncodingASCII))
- {
- gl_locale_name_canonicalize (namebuf);
- cached_localename = strdup (namebuf);
- }
-# endif
- if (cached_localename == NULL)
- cached_localename = "C";
- }
- return cached_localename;
- }
-
-# endif
-
-# if defined(WIN32_NATIVE) /* WIN32, not Cygwin */
- {
- LCID lcid;
- LANGID langid;
- int primary, sub;
-
- /* Use native Win32 API locale ID. */
- lcid = GetThreadLocale ();
-
- /* Strip off the sorting rules, keep only the language part. */
- langid = LANGIDFROMLCID (lcid);
-
- /* Split into language and territory part. */
- primary = PRIMARYLANGID (langid);
- sub = SUBLANGID (langid);
-
- /* Dispatch on language.
- See also http://www.unicode.org/unicode/onlinedat/languages.html .
- For details about languages, see http://www.ethnologue.com/ . */
- switch (primary)
- {
- case LANG_AFRIKAANS: return "af_ZA";
- case LANG_ALBANIAN: return "sq_AL";
- case LANG_AMHARIC: return "am_ET";
- case LANG_ARABIC:
- switch (sub)
- {
- case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
- case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
- case SUBLANG_ARABIC_EGYPT: return "ar_EG";
- case SUBLANG_ARABIC_LIBYA: return "ar_LY";
- case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
- case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
- case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
- case SUBLANG_ARABIC_OMAN: return "ar_OM";
- case SUBLANG_ARABIC_YEMEN: return "ar_YE";
- case SUBLANG_ARABIC_SYRIA: return "ar_SY";
- case SUBLANG_ARABIC_JORDAN: return "ar_JO";
- case SUBLANG_ARABIC_LEBANON: return "ar_LB";
- case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
- case SUBLANG_ARABIC_UAE: return "ar_AE";
- case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
- case SUBLANG_ARABIC_QATAR: return "ar_QA";
- }
- return "ar";
- case LANG_ARMENIAN: return "hy_AM";
- case LANG_ASSAMESE: return "as_IN";
- case LANG_AZERI:
- switch (sub)
- {
- /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
- case SUBLANG_AZERI_LATIN: return "az_AZ at latin";
- case SUBLANG_AZERI_CYRILLIC: return "az_AZ at cyrillic";
- }
- return "az";
- case LANG_BASQUE:
- switch (sub)
- {
- case SUBLANG_DEFAULT: return "eu_ES";
- }
- return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
- case LANG_BELARUSIAN: return "be_BY";
- case LANG_BENGALI:
- switch (sub)
- {
- case SUBLANG_BENGALI_INDIA: return "bn_IN";
- case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
- }
- return "bn";
- case LANG_BULGARIAN: return "bg_BG";
- case LANG_BURMESE: return "my_MM";
- case LANG_CAMBODIAN: return "km_KH";
- case LANG_CATALAN: return "ca_ES";
- case LANG_CHEROKEE: return "chr_US";
- case LANG_CHINESE:
- switch (sub)
- {
- case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
- case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
- case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
- case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
- case SUBLANG_CHINESE_MACAU: return "zh_MO";
- }
- return "zh";
- case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
- * What used to be called Serbo-Croatian
- * should really now be two separate
- * languages because of political reasons.
- * (Says tml, who knows nothing about Serbian
- * or Croatian.)
- * (I can feel those flames coming already.)
- */
- switch (sub)
- {
- case SUBLANG_DEFAULT: return "hr_HR";
- case SUBLANG_SERBIAN_LATIN: return "sr_CS";
- case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS at cyrillic";
- }
- return "hr";
- case LANG_CZECH: return "cs_CZ";
- case LANG_DANISH: return "da_DK";
- case LANG_DIVEHI: return "dv_MV";
- case LANG_DUTCH:
- switch (sub)
- {
- case SUBLANG_DUTCH: return "nl_NL";
- case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
- }
- return "nl";
- case LANG_EDO: return "bin_NG";
- case LANG_ENGLISH:
- switch (sub)
- {
- /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
- * English was the language spoken in England.
- * Oh well.
- */
- case SUBLANG_ENGLISH_US: return "en_US";
- case SUBLANG_ENGLISH_UK: return "en_GB";
- case SUBLANG_ENGLISH_AUS: return "en_AU";
- case SUBLANG_ENGLISH_CAN: return "en_CA";
- case SUBLANG_ENGLISH_NZ: return "en_NZ";
- case SUBLANG_ENGLISH_EIRE: return "en_IE";
- case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
- case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
- case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
- case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
- case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
- case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
- case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
- case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
- case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
- case SUBLANG_ENGLISH_INDIA: return "en_IN";
- case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
- case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
- }
- return "en";
- case LANG_ESTONIAN: return "et_EE";
- case LANG_FAEROESE: return "fo_FO";
- case LANG_FARSI: return "fa_IR";
- case LANG_FINNISH: return "fi_FI";
- case LANG_FRENCH:
- switch (sub)
- {
- case SUBLANG_FRENCH: return "fr_FR";
- case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
- case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
- case SUBLANG_FRENCH_SWISS: return "fr_CH";
- case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
- case SUBLANG_FRENCH_MONACO: return "fr_MC";
- case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
- case SUBLANG_FRENCH_REUNION: return "fr_RE";
- case SUBLANG_FRENCH_CONGO: return "fr_CG";
- case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
- case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
- case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
- case SUBLANG_FRENCH_MALI: return "fr_ML";
- case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
- case SUBLANG_FRENCH_HAITI: return "fr_HT";
- }
- return "fr";
- case LANG_FRISIAN: return "fy_NL";
- case LANG_FULFULDE:
- /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */
- return "ff_NG";
- case LANG_GAELIC:
- switch (sub)
- {
- case 0x01: /* SCOTTISH */ return "gd_GB";
- case 0x02: /* IRISH */ return "ga_IE";
- }
- return "C";
- case LANG_GALICIAN: return "gl_ES";
- case LANG_GEORGIAN: return "ka_GE";
- case LANG_GERMAN:
- switch (sub)
- {
- case SUBLANG_GERMAN: return "de_DE";
- case SUBLANG_GERMAN_SWISS: return "de_CH";
- case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
- case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
- case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
- }
- return "de";
- case LANG_GREEK: return "el_GR";
- case LANG_GUARANI: return "gn_PY";
- case LANG_GUJARATI: return "gu_IN";
- case LANG_HAUSA: return "ha_NG";
- case LANG_HAWAIIAN:
- /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
- or Hawaii Creole English ("cpe_US", 600000 speakers)? */
- return "cpe_US";
- case LANG_HEBREW: return "he_IL";
- case LANG_HINDI: return "hi_IN";
- case LANG_HUNGARIAN: return "hu_HU";
- case LANG_IBIBIO: return "nic_NG";
- case LANG_ICELANDIC: return "is_IS";
- case LANG_IGBO: return "ig_NG";
- case LANG_INDONESIAN: return "id_ID";
- case LANG_INUKTITUT: return "iu_CA";
- case LANG_ITALIAN:
- switch (sub)
- {
- case SUBLANG_ITALIAN: return "it_IT";
- case SUBLANG_ITALIAN_SWISS: return "it_CH";
- }
- return "it";
- case LANG_JAPANESE: return "ja_JP";
- case LANG_KANNADA: return "kn_IN";
- case LANG_KANURI: return "kr_NG";
- case LANG_KASHMIRI:
- switch (sub)
- {
- case SUBLANG_DEFAULT: return "ks_PK";
- case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
- }
- return "ks";
- case LANG_KAZAK: return "kk_KZ";
- case LANG_KONKANI:
- /* FIXME: Adjust this when such locales appear on Unix. */
- return "kok_IN";
- case LANG_KOREAN: return "ko_KR";
- case LANG_KYRGYZ: return "ky_KG";
- case LANG_LAO: return "lo_LA";
- case LANG_LATIN: return "la_VA";
- case LANG_LATVIAN: return "lv_LV";
- case LANG_LITHUANIAN: return "lt_LT";
- case LANG_MACEDONIAN: return "mk_MK";
- case LANG_MALAY:
- switch (sub)
- {
- case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
- case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
- }
- return "ms";
- case LANG_MALAYALAM: return "ml_IN";
- case LANG_MALTESE: return "mt_MT";
- case LANG_MANIPURI:
- /* FIXME: Adjust this when such locales appear on Unix. */
- return "mni_IN";
- case LANG_MARATHI: return "mr_IN";
- case LANG_MONGOLIAN:
- switch (sub)
- {
- case SUBLANG_DEFAULT: return "mn_MN";
- }
- return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
- case LANG_NEPALI:
- switch (sub)
- {
- case SUBLANG_DEFAULT: return "ne_NP";
- case SUBLANG_NEPALI_INDIA: return "ne_IN";
- }
- return "ne";
- case LANG_NORWEGIAN:
- switch (sub)
- {
- case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO";
- case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
- }
- return "no";
- case LANG_ORIYA: return "or_IN";
- case LANG_OROMO: return "om_ET";
- case LANG_PAPIAMENTU: return "pap_AN";
- case LANG_PASHTO:
- return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
- case LANG_POLISH: return "pl_PL";
- case LANG_PORTUGUESE:
- switch (sub)
- {
- case SUBLANG_PORTUGUESE: return "pt_PT";
- /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
- Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
- case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
- }
- return "pt";
- case LANG_PUNJABI:
- switch (sub)
- {
- case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
- case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
- }
- return "pa";
- case LANG_RHAETO_ROMANCE: return "rm_CH";
- case LANG_ROMANIAN:
- switch (sub)
- {
- case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
- case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
- }
- return "ro";
- case LANG_RUSSIAN:
- switch (sub)
- {
- case SUBLANG_DEFAULT: return "ru_RU";
- }
- return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */
- case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
- case LANG_SANSKRIT: return "sa_IN";
- case LANG_SINDHI:
- switch (sub)
- {
- case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
- case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";
- }
- return "sd";
- case LANG_SINHALESE: return "si_LK";
- case LANG_SLOVAK: return "sk_SK";
- case LANG_SLOVENIAN: return "sl_SI";
- case LANG_SOMALI: return "so_SO";
- case LANG_SORBIAN:
- /* FIXME: Adjust this when such locales appear on Unix. */
- return "wen_DE";
- case LANG_SPANISH:
- switch (sub)
- {
- case SUBLANG_SPANISH: return "es_ES";
- case SUBLANG_SPANISH_MEXICAN: return "es_MX";
- case SUBLANG_SPANISH_MODERN:
- return "es_ES at modern"; /* not seen on Unix */
- case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
- case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
- case SUBLANG_SPANISH_PANAMA: return "es_PA";
- case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
- case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
- case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
- case SUBLANG_SPANISH_PERU: return "es_PE";
- case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
- case SUBLANG_SPANISH_ECUADOR: return "es_EC";
- case SUBLANG_SPANISH_CHILE: return "es_CL";
- case SUBLANG_SPANISH_URUGUAY: return "es_UY";
- case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
- case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
- case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
- case SUBLANG_SPANISH_HONDURAS: return "es_HN";
- case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
- case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
- }
- return "es";
- case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
- case LANG_SWAHILI: return "sw_KE";
- case LANG_SWEDISH:
- switch (sub)
- {
- case SUBLANG_DEFAULT: return "sv_SE";
- case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
- }
- return "sv";
- case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
- case LANG_TAGALOG: return "tl_PH";
- case LANG_TAJIK: return "tg_TJ";
- case LANG_TAMAZIGHT:
- switch (sub)
- {
- /* FIXME: Adjust this when Tamazight locales appear on Unix. */
- case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA at arabic";
- case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ at latin";
- }
- return "ber_MA";
- case LANG_TAMIL:
- switch (sub)
- {
- case SUBLANG_DEFAULT: return "ta_IN";
- }
- return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
- case LANG_TATAR: return "tt_RU";
- case LANG_TELUGU: return "te_IN";
- case LANG_THAI: return "th_TH";
- case LANG_TIBETAN: return "bo_CN";
- case LANG_TIGRINYA:
- switch (sub)
- {
- case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
- case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
- }
- return "ti";
- case LANG_TSONGA: return "ts_ZA";
- case LANG_TSWANA: return "tn_BW";
- case LANG_TURKISH: return "tr_TR";
- case LANG_TURKMEN: return "tk_TM";
- case LANG_UKRAINIAN: return "uk_UA";
- case LANG_URDU:
- switch (sub)
- {
- case SUBLANG_URDU_PAKISTAN: return "ur_PK";
- case SUBLANG_URDU_INDIA: return "ur_IN";
- }
- return "ur";
- case LANG_UZBEK:
- switch (sub)
- {
- case SUBLANG_UZBEK_LATIN: return "uz_UZ";
- case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ at cyrillic";
- }
- return "uz";
- case LANG_VENDA: return "ve_ZA";
- case LANG_VIETNAMESE: return "vi_VN";
- case LANG_WELSH: return "cy_GB";
- case LANG_XHOSA: return "xh_ZA";
- case LANG_YI: return "sit_CN";
- case LANG_YIDDISH: return "yi_IL";
- case LANG_YORUBA: return "yo_NG";
- case LANG_ZULU: return "zu_ZA";
- default: return "C";
- }
- }
-# endif
-#endif
-}
-
-const char *
-gl_locale_name (int category, const char *categoryname)
-{
- const char *retval;
-
- retval = gl_locale_name_posix (category, categoryname);
- if (retval != NULL)
- return retval;
-
- return gl_locale_name_default ();
-}
diff --git a/intl/lock.c b/intl/lock.c
deleted file mode 100644
index f60a8d9..0000000
--- a/intl/lock.c
+++ /dev/null
@@ -1,922 +0,0 @@
-/* Locking in multithreaded situations.
- Copyright (C) 2005-2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Written by Bruno Haible <bruno at clisp.org>, 2005.
- Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h,
- gthr-win32.h. */
-
-#include <config.h>
-
-#include "lock.h"
-
-/* ========================================================================= */
-
-#if USE_POSIX_THREADS
-
-/* Use the POSIX threads library. */
-
-# if PTHREAD_IN_USE_DETECTION_HARD
-
-/* The function to be executed by a dummy thread. */
-static void *
-dummy_thread_func (void *arg)
-{
- return arg;
-}
-
-int
-glthread_in_use (void)
-{
- static int tested;
- static int result; /* 1: linked with -lpthread, 0: only with libc */
-
- if (!tested)
- {
- pthread_t thread;
-
- if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0)
- /* Thread creation failed. */
- result = 0;
- else
- {
- /* Thread creation works. */
- void *retval;
- if (pthread_join (thread, &retval) != 0)
- abort ();
- result = 1;
- }
- tested = 1;
- }
- return result;
-}
-
-# endif
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-# if HAVE_PTHREAD_RWLOCK
-
-# if !defined PTHREAD_RWLOCK_INITIALIZER
-
-void
-glthread_rwlock_init (gl_rwlock_t *lock)
-{
- if (pthread_rwlock_init (&lock->rwlock, NULL) != 0)
- abort ();
- lock->initialized = 1;
-}
-
-void
-glthread_rwlock_rdlock (gl_rwlock_t *lock)
-{
- if (!lock->initialized)
- {
- if (pthread_mutex_lock (&lock->guard) != 0)
- abort ();
- if (!lock->initialized)
- glthread_rwlock_init (lock);
- if (pthread_mutex_unlock (&lock->guard) != 0)
- abort ();
- }
- if (pthread_rwlock_rdlock (&lock->rwlock) != 0)
- abort ();
-}
-
-void
-glthread_rwlock_wrlock (gl_rwlock_t *lock)
-{
- if (!lock->initialized)
- {
- if (pthread_mutex_lock (&lock->guard) != 0)
- abort ();
- if (!lock->initialized)
- glthread_rwlock_init (lock);
- if (pthread_mutex_unlock (&lock->guard) != 0)
- abort ();
- }
- if (pthread_rwlock_wrlock (&lock->rwlock) != 0)
- abort ();
-}
-
-void
-glthread_rwlock_unlock (gl_rwlock_t *lock)
-{
- if (!lock->initialized)
- abort ();
- if (pthread_rwlock_unlock (&lock->rwlock) != 0)
- abort ();
-}
-
-void
-glthread_rwlock_destroy (gl_rwlock_t *lock)
-{
- if (!lock->initialized)
- abort ();
- if (pthread_rwlock_destroy (&lock->rwlock) != 0)
- abort ();
- lock->initialized = 0;
-}
-
-# endif
-
-# else
-
-void
-glthread_rwlock_init (gl_rwlock_t *lock)
-{
- if (pthread_mutex_init (&lock->lock, NULL) != 0)
- abort ();
- if (pthread_cond_init (&lock->waiting_readers, NULL) != 0)
- abort ();
- if (pthread_cond_init (&lock->waiting_writers, NULL) != 0)
- abort ();
- lock->waiting_writers_count = 0;
- lock->runcount = 0;
-}
-
-void
-glthread_rwlock_rdlock (gl_rwlock_t *lock)
-{
- if (pthread_mutex_lock (&lock->lock) != 0)
- abort ();
- /* Test whether only readers are currently running, and whether the runcount
- field will not overflow. */
- /* POSIX says: "It is implementation-defined whether the calling thread
- acquires the lock when a writer does not hold the lock and there are
- writers blocked on the lock." Let's say, no: give the writers a higher
- priority. */
- while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0))
- {
- /* This thread has to wait for a while. Enqueue it among the
- waiting_readers. */
- if (pthread_cond_wait (&lock->waiting_readers, &lock->lock) != 0)
- abort ();
- }
- lock->runcount++;
- if (pthread_mutex_unlock (&lock->lock) != 0)
- abort ();
-}
-
-void
-glthread_rwlock_wrlock (gl_rwlock_t *lock)
-{
- if (pthread_mutex_lock (&lock->lock) != 0)
- abort ();
- /* Test whether no readers or writers are currently running. */
- while (!(lock->runcount == 0))
- {
- /* This thread has to wait for a while. Enqueue it among the
- waiting_writers. */
- lock->waiting_writers_count++;
- if (pthread_cond_wait (&lock->waiting_writers, &lock->lock) != 0)
- abort ();
- lock->waiting_writers_count--;
- }
- lock->runcount--; /* runcount becomes -1 */
- if (pthread_mutex_unlock (&lock->lock) != 0)
- abort ();
-}
-
-void
-glthread_rwlock_unlock (gl_rwlock_t *lock)
-{
- if (pthread_mutex_lock (&lock->lock) != 0)
- abort ();
- if (lock->runcount < 0)
- {
- /* Drop a writer lock. */
- if (!(lock->runcount == -1))
- abort ();
- lock->runcount = 0;
- }
- else
- {
- /* Drop a reader lock. */
- if (!(lock->runcount > 0))
- abort ();
- lock->runcount--;
- }
- if (lock->runcount == 0)
- {
- /* POSIX recommends that "write locks shall take precedence over read
- locks", to avoid "writer starvation". */
- if (lock->waiting_writers_count > 0)
- {
- /* Wake up one of the waiting writers. */
- if (pthread_cond_signal (&lock->waiting_writers) != 0)
- abort ();
- }
- else
- {
- /* Wake up all waiting readers. */
- if (pthread_cond_broadcast (&lock->waiting_readers) != 0)
- abort ();
- }
- }
- if (pthread_mutex_unlock (&lock->lock) != 0)
- abort ();
-}
-
-void
-glthread_rwlock_destroy (gl_rwlock_t *lock)
-{
- if (pthread_mutex_destroy (&lock->lock) != 0)
- abort ();
- if (pthread_cond_destroy (&lock->waiting_readers) != 0)
- abort ();
- if (pthread_cond_destroy (&lock->waiting_writers) != 0)
- abort ();
-}
-
-# endif
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-# if HAVE_PTHREAD_MUTEX_RECURSIVE
-
-# if !(defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
-
-void
-glthread_recursive_lock_init (gl_recursive_lock_t *lock)
-{
- pthread_mutexattr_t attributes;
-
- if (pthread_mutexattr_init (&attributes) != 0)
- abort ();
- if (pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE) != 0)
- abort ();
- if (pthread_mutex_init (&lock->recmutex, &attributes) != 0)
- abort ();
- if (pthread_mutexattr_destroy (&attributes) != 0)
- abort ();
- lock->initialized = 1;
-}
-
-void
-glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
-{
- if (!lock->initialized)
- {
- if (pthread_mutex_lock (&lock->guard) != 0)
- abort ();
- if (!lock->initialized)
- glthread_recursive_lock_init (lock);
- if (pthread_mutex_unlock (&lock->guard) != 0)
- abort ();
- }
- if (pthread_mutex_lock (&lock->recmutex) != 0)
- abort ();
-}
-
-void
-glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
-{
- if (!lock->initialized)
- abort ();
- if (pthread_mutex_unlock (&lock->recmutex) != 0)
- abort ();
-}
-
-void
-glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
-{
- if (!lock->initialized)
- abort ();
- if (pthread_mutex_destroy (&lock->recmutex) != 0)
- abort ();
- lock->initialized = 0;
-}
-
-# endif
-
-# else
-
-void
-glthread_recursive_lock_init (gl_recursive_lock_t *lock)
-{
- if (pthread_mutex_init (&lock->mutex, NULL) != 0)
- abort ();
- lock->owner = (pthread_t) 0;
- lock->depth = 0;
-}
-
-void
-glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
-{
- pthread_t self = pthread_self ();
- if (lock->owner != self)
- {
- if (pthread_mutex_lock (&lock->mutex) != 0)
- abort ();
- lock->owner = self;
- }
- if (++(lock->depth) == 0) /* wraparound? */
- abort ();
-}
-
-void
-glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
-{
- if (lock->owner != pthread_self ())
- abort ();
- if (lock->depth == 0)
- abort ();
- if (--(lock->depth) == 0)
- {
- lock->owner = (pthread_t) 0;
- if (pthread_mutex_unlock (&lock->mutex) != 0)
- abort ();
- }
-}
-
-void
-glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
-{
- if (lock->owner != (pthread_t) 0)
- abort ();
- if (pthread_mutex_destroy (&lock->mutex) != 0)
- abort ();
-}
-
-# endif
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT;
-
-int
-glthread_once_singlethreaded (pthread_once_t *once_control)
-{
- /* We don't know whether pthread_once_t is an integer type, a floating-point
- type, a pointer type, or a structure type. */
- char *firstbyte = (char *)once_control;
- if (*firstbyte == *(const char *)&fresh_once)
- {
- /* First time use of once_control. Invert the first byte. */
- *firstbyte = ~ *(const char *)&fresh_once;
- return 1;
- }
- else
- return 0;
-}
-
-#endif
-
-/* ========================================================================= */
-
-#if USE_PTH_THREADS
-
-/* Use the GNU Pth threads library. */
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-void
-glthread_once_call (void *arg)
-{
- void (**gl_once_temp_addr) (void) = (void (**) (void)) arg;
- void (*initfunction) (void) = *gl_once_temp_addr;
- initfunction ();
-}
-
-int
-glthread_once_singlethreaded (pth_once_t *once_control)
-{
- /* We know that pth_once_t is an integer type. */
- if (*once_control == PTH_ONCE_INIT)
- {
- /* First time use of once_control. Invert the marker. */
- *once_control = ~ PTH_ONCE_INIT;
- return 1;
- }
- else
- return 0;
-}
-
-#endif
-
-/* ========================================================================= */
-
-#if USE_SOLARIS_THREADS
-
-/* Use the old Solaris threads library. */
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-void
-glthread_recursive_lock_init (gl_recursive_lock_t *lock)
-{
- if (mutex_init (&lock->mutex, USYNC_THREAD, NULL) != 0)
- abort ();
- lock->owner = (thread_t) 0;
- lock->depth = 0;
-}
-
-void
-glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
-{
- thread_t self = thr_self ();
- if (lock->owner != self)
- {
- if (mutex_lock (&lock->mutex) != 0)
- abort ();
- lock->owner = self;
- }
- if (++(lock->depth) == 0) /* wraparound? */
- abort ();
-}
-
-void
-glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
-{
- if (lock->owner != thr_self ())
- abort ();
- if (lock->depth == 0)
- abort ();
- if (--(lock->depth) == 0)
- {
- lock->owner = (thread_t) 0;
- if (mutex_unlock (&lock->mutex) != 0)
- abort ();
- }
-}
-
-void
-glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
-{
- if (lock->owner != (thread_t) 0)
- abort ();
- if (mutex_destroy (&lock->mutex) != 0)
- abort ();
-}
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-void
-glthread_once (gl_once_t *once_control, void (*initfunction) (void))
-{
- if (!once_control->inited)
- {
- /* Use the mutex to guarantee that if another thread is already calling
- the initfunction, this thread waits until it's finished. */
- if (mutex_lock (&once_control->mutex) != 0)
- abort ();
- if (!once_control->inited)
- {
- once_control->inited = 1;
- initfunction ();
- }
- if (mutex_unlock (&once_control->mutex) != 0)
- abort ();
- }
-}
-
-int
-glthread_once_singlethreaded (gl_once_t *once_control)
-{
- /* We know that gl_once_t contains an integer type. */
- if (!once_control->inited)
- {
- /* First time use of once_control. Invert the marker. */
- once_control->inited = ~ 0;
- return 1;
- }
- else
- return 0;
-}
-
-#endif
-
-/* ========================================================================= */
-
-#if USE_WIN32_THREADS
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-void
-glthread_lock_init (gl_lock_t *lock)
-{
- InitializeCriticalSection (&lock->lock);
- lock->guard.done = 1;
-}
-
-void
-glthread_lock_lock (gl_lock_t *lock)
-{
- if (!lock->guard.done)
- {
- if (InterlockedIncrement (&lock->guard.started) == 0)
- /* This thread is the first one to need this lock. Initialize it. */
- glthread_lock_init (lock);
- else
- /* Yield the CPU while waiting for another thread to finish
- initializing this lock. */
- while (!lock->guard.done)
- Sleep (0);
- }
- EnterCriticalSection (&lock->lock);
-}
-
-void
-glthread_lock_unlock (gl_lock_t *lock)
-{
- if (!lock->guard.done)
- abort ();
- LeaveCriticalSection (&lock->lock);
-}
-
-void
-glthread_lock_destroy (gl_lock_t *lock)
-{
- if (!lock->guard.done)
- abort ();
- DeleteCriticalSection (&lock->lock);
- lock->guard.done = 0;
-}
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-static inline void
-gl_waitqueue_init (gl_waitqueue_t *wq)
-{
- wq->array = NULL;
- wq->count = 0;
- wq->alloc = 0;
- wq->offset = 0;
-}
-
-/* Enqueues the current thread, represented by an event, in a wait queue.
- Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */
-static HANDLE
-gl_waitqueue_add (gl_waitqueue_t *wq)
-{
- HANDLE event;
- unsigned int index;
-
- if (wq->count == wq->alloc)
- {
- unsigned int new_alloc = 2 * wq->alloc + 1;
- HANDLE *new_array =
- (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE));
- if (new_array == NULL)
- /* No more memory. */
- return INVALID_HANDLE_VALUE;
- /* Now is a good opportunity to rotate the array so that its contents
- starts at offset 0. */
- if (wq->offset > 0)
- {
- unsigned int old_count = wq->count;
- unsigned int old_alloc = wq->alloc;
- unsigned int old_offset = wq->offset;
- unsigned int i;
- if (old_offset + old_count > old_alloc)
- {
- unsigned int limit = old_offset + old_count - old_alloc;
- for (i = 0; i < limit; i++)
- new_array[old_alloc + i] = new_array[i];
- }
- for (i = 0; i < old_count; i++)
- new_array[i] = new_array[old_offset + i];
- wq->offset = 0;
- }
- wq->array = new_array;
- wq->alloc = new_alloc;
- }
- event = CreateEvent (NULL, TRUE, FALSE, NULL);
- if (event == INVALID_HANDLE_VALUE)
- /* No way to allocate an event. */
- return INVALID_HANDLE_VALUE;
- index = wq->offset + wq->count;
- if (index >= wq->alloc)
- index -= wq->alloc;
- wq->array[index] = event;
- wq->count++;
- return event;
-}
-
-/* Notifies the first thread from a wait queue and dequeues it. */
-static inline void
-gl_waitqueue_notify_first (gl_waitqueue_t *wq)
-{
- SetEvent (wq->array[wq->offset + 0]);
- wq->offset++;
- wq->count--;
- if (wq->count == 0 || wq->offset == wq->alloc)
- wq->offset = 0;
-}
-
-/* Notifies all threads from a wait queue and dequeues them all. */
-static inline void
-gl_waitqueue_notify_all (gl_waitqueue_t *wq)
-{
- unsigned int i;
-
- for (i = 0; i < wq->count; i++)
- {
- unsigned int index = wq->offset + i;
- if (index >= wq->alloc)
- index -= wq->alloc;
- SetEvent (wq->array[index]);
- }
- wq->count = 0;
- wq->offset = 0;
-}
-
-void
-glthread_rwlock_init (gl_rwlock_t *lock)
-{
- InitializeCriticalSection (&lock->lock);
- gl_waitqueue_init (&lock->waiting_readers);
- gl_waitqueue_init (&lock->waiting_writers);
- lock->runcount = 0;
- lock->guard.done = 1;
-}
-
-void
-glthread_rwlock_rdlock (gl_rwlock_t *lock)
-{
- if (!lock->guard.done)
- {
- if (InterlockedIncrement (&lock->guard.started) == 0)
- /* This thread is the first one to need this lock. Initialize it. */
- glthread_rwlock_init (lock);
- else
- /* Yield the CPU while waiting for another thread to finish
- initializing this lock. */
- while (!lock->guard.done)
- Sleep (0);
- }
- EnterCriticalSection (&lock->lock);
- /* Test whether only readers are currently running, and whether the runcount
- field will not overflow. */
- if (!(lock->runcount + 1 > 0))
- {
- /* This thread has to wait for a while. Enqueue it among the
- waiting_readers. */
- HANDLE event = gl_waitqueue_add (&lock->waiting_readers);
- if (event != INVALID_HANDLE_VALUE)
- {
- DWORD result;
- LeaveCriticalSection (&lock->lock);
- /* Wait until another thread signals this event. */
- result = WaitForSingleObject (event, INFINITE);
- if (result == WAIT_FAILED || result == WAIT_TIMEOUT)
- abort ();
- CloseHandle (event);
- /* The thread which signalled the event already did the bookkeeping:
- removed us from the waiting_readers, incremented lock->runcount. */
- if (!(lock->runcount > 0))
- abort ();
- return;
- }
- else
- {
- /* Allocation failure. Weird. */
- do
- {
- LeaveCriticalSection (&lock->lock);
- Sleep (1);
- EnterCriticalSection (&lock->lock);
- }
- while (!(lock->runcount + 1 > 0));
- }
- }
- lock->runcount++;
- LeaveCriticalSection (&lock->lock);
-}
-
-void
-glthread_rwlock_wrlock (gl_rwlock_t *lock)
-{
- if (!lock->guard.done)
- {
- if (InterlockedIncrement (&lock->guard.started) == 0)
- /* This thread is the first one to need this lock. Initialize it. */
- glthread_rwlock_init (lock);
- else
- /* Yield the CPU while waiting for another thread to finish
- initializing this lock. */
- while (!lock->guard.done)
- Sleep (0);
- }
- EnterCriticalSection (&lock->lock);
- /* Test whether no readers or writers are currently running. */
- if (!(lock->runcount == 0))
- {
- /* This thread has to wait for a while. Enqueue it among the
- waiting_writers. */
- HANDLE event = gl_waitqueue_add (&lock->waiting_writers);
- if (event != INVALID_HANDLE_VALUE)
- {
- DWORD result;
- LeaveCriticalSection (&lock->lock);
- /* Wait until another thread signals this event. */
- result = WaitForSingleObject (event, INFINITE);
- if (result == WAIT_FAILED || result == WAIT_TIMEOUT)
- abort ();
- CloseHandle (event);
- /* The thread which signalled the event already did the bookkeeping:
- removed us from the waiting_writers, set lock->runcount = -1. */
- if (!(lock->runcount == -1))
- abort ();
- return;
- }
- else
- {
- /* Allocation failure. Weird. */
- do
- {
- LeaveCriticalSection (&lock->lock);
- Sleep (1);
- EnterCriticalSection (&lock->lock);
- }
- while (!(lock->runcount == 0));
- }
- }
- lock->runcount--; /* runcount becomes -1 */
- LeaveCriticalSection (&lock->lock);
-}
-
-void
-glthread_rwlock_unlock (gl_rwlock_t *lock)
-{
- if (!lock->guard.done)
- abort ();
- EnterCriticalSection (&lock->lock);
- if (lock->runcount < 0)
- {
- /* Drop a writer lock. */
- if (!(lock->runcount == -1))
- abort ();
- lock->runcount = 0;
- }
- else
- {
- /* Drop a reader lock. */
- if (!(lock->runcount > 0))
- abort ();
- lock->runcount--;
- }
- if (lock->runcount == 0)
- {
- /* POSIX recommends that "write locks shall take precedence over read
- locks", to avoid "writer starvation". */
- if (lock->waiting_writers.count > 0)
- {
- /* Wake up one of the waiting writers. */
- lock->runcount--;
- gl_waitqueue_notify_first (&lock->waiting_writers);
- }
- else
- {
- /* Wake up all waiting readers. */
- lock->runcount += lock->waiting_readers.count;
- gl_waitqueue_notify_all (&lock->waiting_readers);
- }
- }
- LeaveCriticalSection (&lock->lock);
-}
-
-void
-glthread_rwlock_destroy (gl_rwlock_t *lock)
-{
- if (!lock->guard.done)
- abort ();
- if (lock->runcount != 0)
- abort ();
- DeleteCriticalSection (&lock->lock);
- if (lock->waiting_readers.array != NULL)
- free (lock->waiting_readers.array);
- if (lock->waiting_writers.array != NULL)
- free (lock->waiting_writers.array);
- lock->guard.done = 0;
-}
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-void
-glthread_recursive_lock_init (gl_recursive_lock_t *lock)
-{
- lock->owner = 0;
- lock->depth = 0;
- InitializeCriticalSection (&lock->lock);
- lock->guard.done = 1;
-}
-
-void
-glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
-{
- if (!lock->guard.done)
- {
- if (InterlockedIncrement (&lock->guard.started) == 0)
- /* This thread is the first one to need this lock. Initialize it. */
- glthread_recursive_lock_init (lock);
- else
- /* Yield the CPU while waiting for another thread to finish
- initializing this lock. */
- while (!lock->guard.done)
- Sleep (0);
- }
- {
- DWORD self = GetCurrentThreadId ();
- if (lock->owner != self)
- {
- EnterCriticalSection (&lock->lock);
- lock->owner = self;
- }
- if (++(lock->depth) == 0) /* wraparound? */
- abort ();
- }
-}
-
-void
-glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
-{
- if (lock->owner != GetCurrentThreadId ())
- abort ();
- if (lock->depth == 0)
- abort ();
- if (--(lock->depth) == 0)
- {
- lock->owner = 0;
- LeaveCriticalSection (&lock->lock);
- }
-}
-
-void
-glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
-{
- if (lock->owner != 0)
- abort ();
- DeleteCriticalSection (&lock->lock);
- lock->guard.done = 0;
-}
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-void
-glthread_once (gl_once_t *once_control, void (*initfunction) (void))
-{
- if (once_control->inited <= 0)
- {
- if (InterlockedIncrement (&once_control->started) == 0)
- {
- /* This thread is the first one to come to this once_control. */
- InitializeCriticalSection (&once_control->lock);
- EnterCriticalSection (&once_control->lock);
- once_control->inited = 0;
- initfunction ();
- once_control->inited = 1;
- LeaveCriticalSection (&once_control->lock);
- }
- else
- {
- /* Undo last operation. */
- InterlockedDecrement (&once_control->started);
- /* Some other thread has already started the initialization.
- Yield the CPU while waiting for the other thread to finish
- initializing and taking the lock. */
- while (once_control->inited < 0)
- Sleep (0);
- if (once_control->inited <= 0)
- {
- /* Take the lock. This blocks until the other thread has
- finished calling the initfunction. */
- EnterCriticalSection (&once_control->lock);
- LeaveCriticalSection (&once_control->lock);
- if (!(once_control->inited > 0))
- abort ();
- }
- }
- }
-}
-
-#endif
-
-/* ========================================================================= */
diff --git a/intl/lock.h b/intl/lock.h
deleted file mode 100644
index 144531d..0000000
--- a/intl/lock.h
+++ /dev/null
@@ -1,1105 +0,0 @@
-/* Locking in multithreaded situations.
- Copyright (C) 2005-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Written by Bruno Haible <bruno at clisp.org>, 2005.
- Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h,
- gthr-win32.h. */
-
-/* This file contains locking primitives for use with a given thread library.
- It does not contain primitives for creating threads or for other
- synchronization primitives.
-
- Normal (non-recursive) locks:
- Type: gl_lock_t
- Declaration: gl_lock_define(extern, name)
- Initializer: gl_lock_define_initialized(, name)
- Initialization: gl_lock_init (name);
- Taking the lock: gl_lock_lock (name);
- Releasing the lock: gl_lock_unlock (name);
- De-initialization: gl_lock_destroy (name);
-
- Read-Write (non-recursive) locks:
- Type: gl_rwlock_t
- Declaration: gl_rwlock_define(extern, name)
- Initializer: gl_rwlock_define_initialized(, name)
- Initialization: gl_rwlock_init (name);
- Taking the lock: gl_rwlock_rdlock (name);
- gl_rwlock_wrlock (name);
- Releasing the lock: gl_rwlock_unlock (name);
- De-initialization: gl_rwlock_destroy (name);
-
- Recursive locks:
- Type: gl_recursive_lock_t
- Declaration: gl_recursive_lock_define(extern, name)
- Initializer: gl_recursive_lock_define_initialized(, name)
- Initialization: gl_recursive_lock_init (name);
- Taking the lock: gl_recursive_lock_lock (name);
- Releasing the lock: gl_recursive_lock_unlock (name);
- De-initialization: gl_recursive_lock_destroy (name);
-
- Once-only execution:
- Type: gl_once_t
- Initializer: gl_once_define(extern, name)
- Execution: gl_once (name, initfunction);
-*/
-
-
-#ifndef _LOCK_H
-#define _LOCK_H
-
-/* ========================================================================= */
-
-#if USE_POSIX_THREADS
-
-/* Use the POSIX threads library. */
-
-# include <pthread.h>
-# include <stdlib.h>
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-# if PTHREAD_IN_USE_DETECTION_HARD
-
-/* The pthread_in_use() detection needs to be done at runtime. */
-# define pthread_in_use() \
- glthread_in_use ()
-extern int glthread_in_use (void);
-
-# endif
-
-# if USE_POSIX_THREADS_WEAK
-
-/* Use weak references to the POSIX threads library. */
-
-/* Weak references avoid dragging in external libraries if the other parts
- of the program don't use them. Here we use them, because we don't want
- every program that uses libintl to depend on libpthread. This assumes
- that libpthread would not be loaded after libintl; i.e. if libintl is
- loaded first, by an executable that does not depend on libpthread, and
- then a module is dynamically loaded that depends on libpthread, libintl
- will not be multithread-safe. */
-
-/* The way to test at runtime whether libpthread is present is to test
- whether a function pointer's value, such as &pthread_mutex_init, is
- non-NULL. However, some versions of GCC have a bug through which, in
- PIC mode, &foo != NULL always evaluates to true if there is a direct
- call to foo(...) in the same function. To avoid this, we test the
- address of a function in libpthread that we don't use. */
-
-# pragma weak pthread_mutex_init
-# pragma weak pthread_mutex_lock
-# pragma weak pthread_mutex_unlock
-# pragma weak pthread_mutex_destroy
-# pragma weak pthread_rwlock_init
-# pragma weak pthread_rwlock_rdlock
-# pragma weak pthread_rwlock_wrlock
-# pragma weak pthread_rwlock_unlock
-# pragma weak pthread_rwlock_destroy
-# pragma weak pthread_once
-# pragma weak pthread_cond_init
-# pragma weak pthread_cond_wait
-# pragma weak pthread_cond_signal
-# pragma weak pthread_cond_broadcast
-# pragma weak pthread_cond_destroy
-# pragma weak pthread_mutexattr_init
-# pragma weak pthread_mutexattr_settype
-# pragma weak pthread_mutexattr_destroy
-# ifndef pthread_self
-# pragma weak pthread_self
-# endif
-
-# if !PTHREAD_IN_USE_DETECTION_HARD
-# pragma weak pthread_cancel
-# define pthread_in_use() (pthread_cancel != NULL)
-# endif
-
-# else
-
-# if !PTHREAD_IN_USE_DETECTION_HARD
-# define pthread_in_use() 1
-# endif
-
-# endif
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-typedef pthread_mutex_t gl_lock_t;
-# define gl_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS pthread_mutex_t NAME;
-# define gl_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer;
-# define gl_lock_initializer \
- PTHREAD_MUTEX_INITIALIZER
-# define gl_lock_init(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_mutex_init (&NAME, NULL) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_lock_lock(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_mutex_lock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_lock_unlock(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_mutex_unlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_lock_destroy(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_mutex_destroy (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-# if HAVE_PTHREAD_RWLOCK
-
-# ifdef PTHREAD_RWLOCK_INITIALIZER
-
-typedef pthread_rwlock_t gl_rwlock_t;
-# define gl_rwlock_define(STORAGECLASS, NAME) \
- STORAGECLASS pthread_rwlock_t NAME;
-# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer;
-# define gl_rwlock_initializer \
- PTHREAD_RWLOCK_INITIALIZER
-# define gl_rwlock_init(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_rwlock_init (&NAME, NULL) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_rdlock(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_rwlock_rdlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_wrlock(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_rwlock_wrlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_unlock(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_rwlock_unlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_destroy(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_rwlock_destroy (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-
-# else
-
-typedef struct
- {
- int initialized;
- pthread_mutex_t guard; /* protects the initialization */
- pthread_rwlock_t rwlock; /* read-write lock */
- }
- gl_rwlock_t;
-# define gl_rwlock_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_rwlock_t NAME;
-# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
-# define gl_rwlock_initializer \
- { 0, PTHREAD_MUTEX_INITIALIZER }
-# define gl_rwlock_init(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_init (&NAME); \
- } \
- while (0)
-# define gl_rwlock_rdlock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_rdlock (&NAME); \
- } \
- while (0)
-# define gl_rwlock_wrlock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_wrlock (&NAME); \
- } \
- while (0)
-# define gl_rwlock_unlock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_unlock (&NAME); \
- } \
- while (0)
-# define gl_rwlock_destroy(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_destroy (&NAME); \
- } \
- while (0)
-extern void glthread_rwlock_init (gl_rwlock_t *lock);
-extern void glthread_rwlock_rdlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_wrlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_unlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_destroy (gl_rwlock_t *lock);
-
-# endif
-
-# else
-
-typedef struct
- {
- pthread_mutex_t lock; /* protects the remaining fields */
- pthread_cond_t waiting_readers; /* waiting readers */
- pthread_cond_t waiting_writers; /* waiting writers */
- unsigned int waiting_writers_count; /* number of waiting writers */
- int runcount; /* number of readers running, or -1 when a writer runs */
- }
- gl_rwlock_t;
-# define gl_rwlock_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_rwlock_t NAME;
-# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
-# define gl_rwlock_initializer \
- { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 }
-# define gl_rwlock_init(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_init (&NAME); \
- } \
- while (0)
-# define gl_rwlock_rdlock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_rdlock (&NAME); \
- } \
- while (0)
-# define gl_rwlock_wrlock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_wrlock (&NAME); \
- } \
- while (0)
-# define gl_rwlock_unlock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_unlock (&NAME); \
- } \
- while (0)
-# define gl_rwlock_destroy(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_rwlock_destroy (&NAME); \
- } \
- while (0)
-extern void glthread_rwlock_init (gl_rwlock_t *lock);
-extern void glthread_rwlock_rdlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_wrlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_unlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_destroy (gl_rwlock_t *lock);
-
-# endif
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-# if HAVE_PTHREAD_MUTEX_RECURSIVE
-
-# if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
-
-typedef pthread_mutex_t gl_recursive_lock_t;
-# define gl_recursive_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS pthread_mutex_t NAME;
-# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer;
-# ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER
-# define gl_recursive_lock_initializer \
- PTHREAD_RECURSIVE_MUTEX_INITIALIZER
-# else
-# define gl_recursive_lock_initializer \
- PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
-# endif
-# define gl_recursive_lock_init(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_mutex_init (&NAME, NULL) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_recursive_lock_lock(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_mutex_lock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_recursive_lock_unlock(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_mutex_unlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_recursive_lock_destroy(NAME) \
- do \
- { \
- if (pthread_in_use () && pthread_mutex_destroy (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-
-# else
-
-typedef struct
- {
- pthread_mutex_t recmutex; /* recursive mutex */
- pthread_mutex_t guard; /* protects the initialization */
- int initialized;
- }
- gl_recursive_lock_t;
-# define gl_recursive_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_recursive_lock_t NAME;
-# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
-# define gl_recursive_lock_initializer \
- { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 }
-# define gl_recursive_lock_init(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_recursive_lock_init (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_lock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_recursive_lock_lock (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_unlock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_recursive_lock_unlock (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_destroy(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_recursive_lock_destroy (&NAME); \
- } \
- while (0)
-extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
-
-# endif
-
-# else
-
-/* Old versions of POSIX threads on Solaris did not have recursive locks.
- We have to implement them ourselves. */
-
-typedef struct
- {
- pthread_mutex_t mutex;
- pthread_t owner;
- unsigned long depth;
- }
- gl_recursive_lock_t;
-# define gl_recursive_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_recursive_lock_t NAME;
-# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
-# define gl_recursive_lock_initializer \
- { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 }
-# define gl_recursive_lock_init(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_recursive_lock_init (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_lock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_recursive_lock_lock (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_unlock(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_recursive_lock_unlock (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_destroy(NAME) \
- do \
- { \
- if (pthread_in_use ()) \
- glthread_recursive_lock_destroy (&NAME); \
- } \
- while (0)
-extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
-
-# endif
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-typedef pthread_once_t gl_once_t;
-# define gl_once_define(STORAGECLASS, NAME) \
- STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT;
-# define gl_once(NAME, INITFUNCTION) \
- do \
- { \
- if (pthread_in_use ()) \
- { \
- if (pthread_once (&NAME, INITFUNCTION) != 0) \
- abort (); \
- } \
- else \
- { \
- if (glthread_once_singlethreaded (&NAME)) \
- INITFUNCTION (); \
- } \
- } \
- while (0)
-extern int glthread_once_singlethreaded (pthread_once_t *once_control);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
-
-/* ========================================================================= */
-
-#if USE_PTH_THREADS
-
-/* Use the GNU Pth threads library. */
-
-# include <pth.h>
-# include <stdlib.h>
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-# if USE_PTH_THREADS_WEAK
-
-/* Use weak references to the GNU Pth threads library. */
-
-# pragma weak pth_mutex_init
-# pragma weak pth_mutex_acquire
-# pragma weak pth_mutex_release
-# pragma weak pth_rwlock_init
-# pragma weak pth_rwlock_acquire
-# pragma weak pth_rwlock_release
-# pragma weak pth_once
-
-# pragma weak pth_cancel
-# define pth_in_use() (pth_cancel != NULL)
-
-# else
-
-# define pth_in_use() 1
-
-# endif
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-typedef pth_mutex_t gl_lock_t;
-# define gl_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS pth_mutex_t NAME;
-# define gl_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS pth_mutex_t NAME = gl_lock_initializer;
-# define gl_lock_initializer \
- PTH_MUTEX_INIT
-# define gl_lock_init(NAME) \
- do \
- { \
- if (pth_in_use() && !pth_mutex_init (&NAME)) \
- abort (); \
- } \
- while (0)
-# define gl_lock_lock(NAME) \
- do \
- { \
- if (pth_in_use() && !pth_mutex_acquire (&NAME, 0, NULL)) \
- abort (); \
- } \
- while (0)
-# define gl_lock_unlock(NAME) \
- do \
- { \
- if (pth_in_use() && !pth_mutex_release (&NAME)) \
- abort (); \
- } \
- while (0)
-# define gl_lock_destroy(NAME) \
- (void)(&NAME)
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-typedef pth_rwlock_t gl_rwlock_t;
-# define gl_rwlock_define(STORAGECLASS, NAME) \
- STORAGECLASS pth_rwlock_t NAME;
-# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer;
-# define gl_rwlock_initializer \
- PTH_RWLOCK_INIT
-# define gl_rwlock_init(NAME) \
- do \
- { \
- if (pth_in_use() && !pth_rwlock_init (&NAME)) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_rdlock(NAME) \
- do \
- { \
- if (pth_in_use() \
- && !pth_rwlock_acquire (&NAME, PTH_RWLOCK_RD, 0, NULL)) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_wrlock(NAME) \
- do \
- { \
- if (pth_in_use() \
- && !pth_rwlock_acquire (&NAME, PTH_RWLOCK_RW, 0, NULL)) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_unlock(NAME) \
- do \
- { \
- if (pth_in_use() && !pth_rwlock_release (&NAME)) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_destroy(NAME) \
- (void)(&NAME)
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-/* In Pth, mutexes are recursive by default. */
-typedef pth_mutex_t gl_recursive_lock_t;
-# define gl_recursive_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS pth_mutex_t NAME;
-# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer;
-# define gl_recursive_lock_initializer \
- PTH_MUTEX_INIT
-# define gl_recursive_lock_init(NAME) \
- do \
- { \
- if (pth_in_use() && !pth_mutex_init (&NAME)) \
- abort (); \
- } \
- while (0)
-# define gl_recursive_lock_lock(NAME) \
- do \
- { \
- if (pth_in_use() && !pth_mutex_acquire (&NAME, 0, NULL)) \
- abort (); \
- } \
- while (0)
-# define gl_recursive_lock_unlock(NAME) \
- do \
- { \
- if (pth_in_use() && !pth_mutex_release (&NAME)) \
- abort (); \
- } \
- while (0)
-# define gl_recursive_lock_destroy(NAME) \
- (void)(&NAME)
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-typedef pth_once_t gl_once_t;
-# define gl_once_define(STORAGECLASS, NAME) \
- STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT;
-# define gl_once(NAME, INITFUNCTION) \
- do \
- { \
- if (pth_in_use ()) \
- { \
- void (*gl_once_temp) (void) = INITFUNCTION; \
- if (!pth_once (&NAME, glthread_once_call, &gl_once_temp)) \
- abort (); \
- } \
- else \
- { \
- if (glthread_once_singlethreaded (&NAME)) \
- INITFUNCTION (); \
- } \
- } \
- while (0)
-extern void glthread_once_call (void *arg);
-extern int glthread_once_singlethreaded (pth_once_t *once_control);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
-
-/* ========================================================================= */
-
-#if USE_SOLARIS_THREADS
-
-/* Use the old Solaris threads library. */
-
-# include <thread.h>
-# include <synch.h>
-# include <stdlib.h>
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-# if USE_SOLARIS_THREADS_WEAK
-
-/* Use weak references to the old Solaris threads library. */
-
-# pragma weak mutex_init
-# pragma weak mutex_lock
-# pragma weak mutex_unlock
-# pragma weak mutex_destroy
-# pragma weak rwlock_init
-# pragma weak rw_rdlock
-# pragma weak rw_wrlock
-# pragma weak rw_unlock
-# pragma weak rwlock_destroy
-# pragma weak thr_self
-
-# pragma weak thr_suspend
-# define thread_in_use() (thr_suspend != NULL)
-
-# else
-
-# define thread_in_use() 1
-
-# endif
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-typedef mutex_t gl_lock_t;
-# define gl_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS mutex_t NAME;
-# define gl_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS mutex_t NAME = gl_lock_initializer;
-# define gl_lock_initializer \
- DEFAULTMUTEX
-# define gl_lock_init(NAME) \
- do \
- { \
- if (thread_in_use () && mutex_init (&NAME, USYNC_THREAD, NULL) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_lock_lock(NAME) \
- do \
- { \
- if (thread_in_use () && mutex_lock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_lock_unlock(NAME) \
- do \
- { \
- if (thread_in_use () && mutex_unlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_lock_destroy(NAME) \
- do \
- { \
- if (thread_in_use () && mutex_destroy (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-typedef rwlock_t gl_rwlock_t;
-# define gl_rwlock_define(STORAGECLASS, NAME) \
- STORAGECLASS rwlock_t NAME;
-# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS rwlock_t NAME = gl_rwlock_initializer;
-# define gl_rwlock_initializer \
- DEFAULTRWLOCK
-# define gl_rwlock_init(NAME) \
- do \
- { \
- if (thread_in_use () && rwlock_init (&NAME, USYNC_THREAD, NULL) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_rdlock(NAME) \
- do \
- { \
- if (thread_in_use () && rw_rdlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_wrlock(NAME) \
- do \
- { \
- if (thread_in_use () && rw_wrlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_unlock(NAME) \
- do \
- { \
- if (thread_in_use () && rw_unlock (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-# define gl_rwlock_destroy(NAME) \
- do \
- { \
- if (thread_in_use () && rwlock_destroy (&NAME) != 0) \
- abort (); \
- } \
- while (0)
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-/* Old Solaris threads did not have recursive locks.
- We have to implement them ourselves. */
-
-typedef struct
- {
- mutex_t mutex;
- thread_t owner;
- unsigned long depth;
- }
- gl_recursive_lock_t;
-# define gl_recursive_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_recursive_lock_t NAME;
-# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
-# define gl_recursive_lock_initializer \
- { DEFAULTMUTEX, (thread_t) 0, 0 }
-# define gl_recursive_lock_init(NAME) \
- do \
- { \
- if (thread_in_use ()) \
- glthread_recursive_lock_init (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_lock(NAME) \
- do \
- { \
- if (thread_in_use ()) \
- glthread_recursive_lock_lock (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_unlock(NAME) \
- do \
- { \
- if (thread_in_use ()) \
- glthread_recursive_lock_unlock (&NAME); \
- } \
- while (0)
-# define gl_recursive_lock_destroy(NAME) \
- do \
- { \
- if (thread_in_use ()) \
- glthread_recursive_lock_destroy (&NAME); \
- } \
- while (0)
-extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-typedef struct
- {
- volatile int inited;
- mutex_t mutex;
- }
- gl_once_t;
-# define gl_once_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX };
-# define gl_once(NAME, INITFUNCTION) \
- do \
- { \
- if (thread_in_use ()) \
- { \
- glthread_once (&NAME, INITFUNCTION); \
- } \
- else \
- { \
- if (glthread_once_singlethreaded (&NAME)) \
- INITFUNCTION (); \
- } \
- } \
- while (0)
-extern void glthread_once (gl_once_t *once_control, void (*initfunction) (void));
-extern int glthread_once_singlethreaded (gl_once_t *once_control);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
-
-/* ========================================================================= */
-
-#if USE_WIN32_THREADS
-
-# include <windows.h>
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* We can use CRITICAL_SECTION directly, rather than the Win32 Event, Mutex,
- Semaphore types, because
- - we need only to synchronize inside a single process (address space),
- not inter-process locking,
- - we don't need to support trylock operations. (TryEnterCriticalSection
- does not work on Windows 95/98/ME. Packages that need trylock usually
- define their own mutex type.) */
-
-/* There is no way to statically initialize a CRITICAL_SECTION. It needs
- to be done lazily, once only. For this we need spinlocks. */
-
-typedef struct { volatile int done; volatile long started; } gl_spinlock_t;
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-typedef struct
- {
- gl_spinlock_t guard; /* protects the initialization */
- CRITICAL_SECTION lock;
- }
- gl_lock_t;
-# define gl_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_lock_t NAME;
-# define gl_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS gl_lock_t NAME = gl_lock_initializer;
-# define gl_lock_initializer \
- { { 0, -1 } }
-# define gl_lock_init(NAME) \
- glthread_lock_init (&NAME)
-# define gl_lock_lock(NAME) \
- glthread_lock_lock (&NAME)
-# define gl_lock_unlock(NAME) \
- glthread_lock_unlock (&NAME)
-# define gl_lock_destroy(NAME) \
- glthread_lock_destroy (&NAME)
-extern void glthread_lock_init (gl_lock_t *lock);
-extern void glthread_lock_lock (gl_lock_t *lock);
-extern void glthread_lock_unlock (gl_lock_t *lock);
-extern void glthread_lock_destroy (gl_lock_t *lock);
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-/* It is impossible to implement read-write locks using plain locks, without
- introducing an extra thread dedicated to managing read-write locks.
- Therefore here we need to use the low-level Event type. */
-
-typedef struct
- {
- HANDLE *array; /* array of waiting threads, each represented by an event */
- unsigned int count; /* number of waiting threads */
- unsigned int alloc; /* length of allocated array */
- unsigned int offset; /* index of first waiting thread in array */
- }
- gl_waitqueue_t;
-typedef struct
- {
- gl_spinlock_t guard; /* protects the initialization */
- CRITICAL_SECTION lock; /* protects the remaining fields */
- gl_waitqueue_t waiting_readers; /* waiting readers */
- gl_waitqueue_t waiting_writers; /* waiting writers */
- int runcount; /* number of readers running, or -1 when a writer runs */
- }
- gl_rwlock_t;
-# define gl_rwlock_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_rwlock_t NAME;
-# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
-# define gl_rwlock_initializer \
- { { 0, -1 } }
-# define gl_rwlock_init(NAME) \
- glthread_rwlock_init (&NAME)
-# define gl_rwlock_rdlock(NAME) \
- glthread_rwlock_rdlock (&NAME)
-# define gl_rwlock_wrlock(NAME) \
- glthread_rwlock_wrlock (&NAME)
-# define gl_rwlock_unlock(NAME) \
- glthread_rwlock_unlock (&NAME)
-# define gl_rwlock_destroy(NAME) \
- glthread_rwlock_destroy (&NAME)
-extern void glthread_rwlock_init (gl_rwlock_t *lock);
-extern void glthread_rwlock_rdlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_wrlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_unlock (gl_rwlock_t *lock);
-extern void glthread_rwlock_destroy (gl_rwlock_t *lock);
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-/* The Win32 documentation says that CRITICAL_SECTION already implements a
- recursive lock. But we need not rely on it: It's easy to implement a
- recursive lock without this assumption. */
-
-typedef struct
- {
- gl_spinlock_t guard; /* protects the initialization */
- DWORD owner;
- unsigned long depth;
- CRITICAL_SECTION lock;
- }
- gl_recursive_lock_t;
-# define gl_recursive_lock_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_recursive_lock_t NAME;
-# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
- STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
-# define gl_recursive_lock_initializer \
- { { 0, -1 }, 0, 0 }
-# define gl_recursive_lock_init(NAME) \
- glthread_recursive_lock_init (&NAME)
-# define gl_recursive_lock_lock(NAME) \
- glthread_recursive_lock_lock (&NAME)
-# define gl_recursive_lock_unlock(NAME) \
- glthread_recursive_lock_unlock (&NAME)
-# define gl_recursive_lock_destroy(NAME) \
- glthread_recursive_lock_destroy (&NAME)
-extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
-extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-typedef struct
- {
- volatile int inited;
- volatile long started;
- CRITICAL_SECTION lock;
- }
- gl_once_t;
-# define gl_once_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_once_t NAME = { -1, -1 };
-# define gl_once(NAME, INITFUNCTION) \
- glthread_once (&NAME, INITFUNCTION)
-extern void glthread_once (gl_once_t *once_control, void (*initfunction) (void));
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
-
-/* ========================================================================= */
-
-#if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_THREADS)
-
-/* Provide dummy implementation if threads are not supported. */
-
-/* -------------------------- gl_lock_t datatype -------------------------- */
-
-typedef int gl_lock_t;
-# define gl_lock_define(STORAGECLASS, NAME)
-# define gl_lock_define_initialized(STORAGECLASS, NAME)
-# define gl_lock_init(NAME)
-# define gl_lock_lock(NAME)
-# define gl_lock_unlock(NAME)
-
-/* ------------------------- gl_rwlock_t datatype ------------------------- */
-
-typedef int gl_rwlock_t;
-# define gl_rwlock_define(STORAGECLASS, NAME)
-# define gl_rwlock_define_initialized(STORAGECLASS, NAME)
-# define gl_rwlock_init(NAME)
-# define gl_rwlock_rdlock(NAME)
-# define gl_rwlock_wrlock(NAME)
-# define gl_rwlock_unlock(NAME)
-
-/* --------------------- gl_recursive_lock_t datatype --------------------- */
-
-typedef int gl_recursive_lock_t;
-# define gl_recursive_lock_define(STORAGECLASS, NAME)
-# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME)
-# define gl_recursive_lock_init(NAME)
-# define gl_recursive_lock_lock(NAME)
-# define gl_recursive_lock_unlock(NAME)
-
-/* -------------------------- gl_once_t datatype -------------------------- */
-
-typedef int gl_once_t;
-# define gl_once_define(STORAGECLASS, NAME) \
- STORAGECLASS gl_once_t NAME = 0;
-# define gl_once(NAME, INITFUNCTION) \
- do \
- { \
- if (NAME == 0) \
- { \
- NAME = ~ 0; \
- INITFUNCTION (); \
- } \
- } \
- while (0)
-
-#endif
-
-/* ========================================================================= */
-
-#endif /* _LOCK_H */
diff --git a/intl/log.c b/intl/log.c
deleted file mode 100644
index e3ab5d0..0000000
--- a/intl/log.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Log file output.
- Copyright (C) 2003, 2005 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Written by Bruno Haible <bruno at clisp.org>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Handle multi-threaded applications. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-#else
-# include "lock.h"
-#endif
-
-/* Print an ASCII string with quotes and escape sequences where needed. */
-static void
-print_escaped (FILE *stream, const char *str)
-{
- putc ('"', stream);
- for (; *str != '\0'; str++)
- if (*str == '\n')
- {
- fputs ("\\n\"", stream);
- if (str[1] == '\0')
- return;
- fputs ("\n\"", stream);
- }
- else
- {
- if (*str == '"' || *str == '\\')
- putc ('\\', stream);
- putc (*str, stream);
- }
- putc ('"', stream);
-}
-
-static char *last_logfilename = NULL;
-static FILE *last_logfile = NULL;
-__libc_lock_define_initialized (static, lock)
-
-static inline void
-_nl_log_untranslated_locked (const char *logfilename, const char *domainname,
- const char *msgid1, const char *msgid2, int plural)
-{
- FILE *logfile;
-
- /* Can we reuse the last opened logfile? */
- if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
- {
- /* Close the last used logfile. */
- if (last_logfilename != NULL)
- {
- if (last_logfile != NULL)
- {
- fclose (last_logfile);
- last_logfile = NULL;
- }
- free (last_logfilename);
- last_logfilename = NULL;
- }
- /* Open the logfile. */
- last_logfilename = (char *) malloc (strlen (logfilename) + 1);
- if (last_logfilename == NULL)
- return;
- strcpy (last_logfilename, logfilename);
- last_logfile = fopen (logfilename, "a");
- if (last_logfile == NULL)
- return;
- }
- logfile = last_logfile;
-
- fprintf (logfile, "domain ");
- print_escaped (logfile, domainname);
- fprintf (logfile, "\nmsgid ");
- print_escaped (logfile, msgid1);
- if (plural)
- {
- fprintf (logfile, "\nmsgid_plural ");
- print_escaped (logfile, msgid2);
- fprintf (logfile, "\nmsgstr[0] \"\"\n");
- }
- else
- fprintf (logfile, "\nmsgstr \"\"\n");
- putc ('\n', logfile);
-}
-
-/* Add to the log file an entry denoting a failed translation. */
-void
-_nl_log_untranslated (const char *logfilename, const char *domainname,
- const char *msgid1, const char *msgid2, int plural)
-{
- __libc_lock_lock (lock);
- _nl_log_untranslated_locked (logfilename, domainname, msgid1, msgid2, plural);
- __libc_lock_unlock (lock);
-}
diff --git a/intl/ngettext.c b/intl/ngettext.c
deleted file mode 100644
index a33529c..0000000
--- a/intl/ngettext.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Implementation of ngettext(3) function.
- Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef _LIBC
-# define __need_NULL
-# include <stddef.h>
-#else
-# include <stdlib.h> /* Just for NULL. */
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-#include <locale.h>
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define NGETTEXT __ngettext
-# define DCNGETTEXT __dcngettext
-#else
-# define NGETTEXT libintl_ngettext
-# define DCNGETTEXT libintl_dcngettext
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
- LC_MESSAGES locale. If not found, returns MSGID itself (the default
- text). */
-char *
-NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n)
-{
- return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__ngettext, ngettext);
-#endif
diff --git a/intl/os2compat.c b/intl/os2compat.c
deleted file mode 100644
index d041de2..0000000
--- a/intl/os2compat.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* OS/2 compatibility functions.
- Copyright (C) 2001-2002 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#define OS2_AWARE
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/param.h>
-
-/* A version of getenv() that works from DLLs */
-extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
-
-char *
-_nl_getenv (const char *name)
-{
- unsigned char *value;
- if (DosScanEnv (name, &value))
- return NULL;
- else
- return value;
-}
-
-/* A fixed size buffer. */
-char libintl_nl_default_dirname[MAXPATHLEN+1];
-
-char *_nlos2_libdir = NULL;
-char *_nlos2_localealiaspath = NULL;
-char *_nlos2_localedir = NULL;
-
-static __attribute__((constructor)) void
-nlos2_initialize ()
-{
- char *root = getenv ("UNIXROOT");
- char *gnulocaledir = getenv ("GNULOCALEDIR");
-
- _nlos2_libdir = gnulocaledir;
- if (!_nlos2_libdir)
- {
- if (root)
- {
- size_t sl = strlen (root);
- _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
- memcpy (_nlos2_libdir, root, sl);
- memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
- }
- else
- _nlos2_libdir = LIBDIR;
- }
-
- _nlos2_localealiaspath = gnulocaledir;
- if (!_nlos2_localealiaspath)
- {
- if (root)
- {
- size_t sl = strlen (root);
- _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
- memcpy (_nlos2_localealiaspath, root, sl);
- memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
- }
- else
- _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
- }
-
- _nlos2_localedir = gnulocaledir;
- if (!_nlos2_localedir)
- {
- if (root)
- {
- size_t sl = strlen (root);
- _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
- memcpy (_nlos2_localedir, root, sl);
- memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
- }
- else
- _nlos2_localedir = LOCALEDIR;
- }
-
- if (strlen (_nlos2_localedir) <= MAXPATHLEN)
- strcpy (libintl_nl_default_dirname, _nlos2_localedir);
-}
diff --git a/intl/os2compat.h b/intl/os2compat.h
deleted file mode 100644
index a18d582..0000000
--- a/intl/os2compat.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* OS/2 compatibility defines.
- This file is intended to be included from config.h
- Copyright (C) 2001-2002 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* When included from os2compat.h we need all the original definitions */
-#ifndef OS2_AWARE
-
-#undef LIBDIR
-#define LIBDIR _nlos2_libdir
-extern char *_nlos2_libdir;
-
-#undef LOCALEDIR
-#define LOCALEDIR _nlos2_localedir
-extern char *_nlos2_localedir;
-
-#undef LOCALE_ALIAS_PATH
-#define LOCALE_ALIAS_PATH _nlos2_localealiaspath
-extern char *_nlos2_localealiaspath;
-
-#endif
-
-#undef HAVE_STRCASECMP
-#define HAVE_STRCASECMP 1
-#define strcasecmp stricmp
-#define strncasecmp strnicmp
-
-/* We have our own getenv() which works even if library is compiled as DLL */
-#define getenv _nl_getenv
-
-/* Older versions of gettext used -1 as the value of LC_MESSAGES */
-#define LC_MESSAGES_COMPAT (-1)
diff --git a/intl/osdep.c b/intl/osdep.c
deleted file mode 100644
index 3cc35c0..0000000
--- a/intl/osdep.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* OS dependent parts of libintl.
- Copyright (C) 2001-2002, 2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#if defined __CYGWIN__
-# include "intl-exports.c"
-#elif defined __EMX__
-# include "os2compat.c"
-#else
-/* Avoid AIX compiler warning. */
-typedef int dummy;
-#endif
diff --git a/intl/plural-exp.c b/intl/plural-exp.c
deleted file mode 100644
index 751a688..0000000
--- a/intl/plural-exp.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Expression parsing for plural form selection.
- Copyright (C) 2000-2001, 2003, 2005-2007 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "plural-exp.h"
-
-#if (defined __GNUC__ && !(__APPLE_CC__ > 1) && !defined __cplusplus) \
- || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
-
-/* These structs are the constant expression for the germanic plural
- form determination. It represents the expression "n != 1". */
-static const struct expression plvar =
-{
- .nargs = 0,
- .operation = var,
-};
-static const struct expression plone =
-{
- .nargs = 0,
- .operation = num,
- .val =
- {
- .num = 1
- }
-};
-struct expression GERMANIC_PLURAL =
-{
- .nargs = 2,
- .operation = not_equal,
- .val =
- {
- .args =
- {
- [0] = (struct expression *) &plvar,
- [1] = (struct expression *) &plone
- }
- }
-};
-
-# define INIT_GERMANIC_PLURAL()
-
-#else
-
-/* For compilers without support for ISO C 99 struct/union initializers:
- Initialization at run-time. */
-
-static struct expression plvar;
-static struct expression plone;
-struct expression GERMANIC_PLURAL;
-
-static void
-init_germanic_plural ()
-{
- if (plone.val.num == 0)
- {
- plvar.nargs = 0;
- plvar.operation = var;
-
- plone.nargs = 0;
- plone.operation = num;
- plone.val.num = 1;
-
- GERMANIC_PLURAL.nargs = 2;
- GERMANIC_PLURAL.operation = not_equal;
- GERMANIC_PLURAL.val.args[0] = &plvar;
- GERMANIC_PLURAL.val.args[1] = &plone;
- }
-}
-
-# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
-
-#endif
-
-void
-internal_function
-EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
- const struct expression **pluralp,
- unsigned long int *npluralsp)
-{
- if (nullentry != NULL)
- {
- const char *plural;
- const char *nplurals;
-
- plural = strstr (nullentry, "plural=");
- nplurals = strstr (nullentry, "nplurals=");
- if (plural == NULL || nplurals == NULL)
- goto no_plural;
- else
- {
- char *endp;
- unsigned long int n;
- struct parse_args args;
-
- /* First get the number. */
- nplurals += 9;
- while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
- ++nplurals;
- if (!(*nplurals >= '0' && *nplurals <= '9'))
- goto no_plural;
-#if defined HAVE_STRTOUL || defined _LIBC
- n = strtoul (nplurals, &endp, 10);
-#else
- for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
- n = n * 10 + (*endp - '0');
-#endif
- if (nplurals == endp)
- goto no_plural;
- *npluralsp = n;
-
- /* Due to the restrictions bison imposes onto the interface of the
- scanner function we have to put the input string and the result
- passed up from the parser into the same structure which address
- is passed down to the parser. */
- plural += 7;
- args.cp = plural;
- if (PLURAL_PARSE (&args) != 0)
- goto no_plural;
- *pluralp = args.res;
- }
- }
- else
- {
- /* By default we are using the Germanic form: singular form only
- for `one', the plural form otherwise. Yes, this is also what
- English is using since English is a Germanic language. */
- no_plural:
- INIT_GERMANIC_PLURAL ();
- *pluralp = &GERMANIC_PLURAL;
- *npluralsp = 2;
- }
-}
diff --git a/intl/plural-exp.h b/intl/plural-exp.h
deleted file mode 100644
index d6cb8c5..0000000
--- a/intl/plural-exp.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Expression parsing and evaluation for plural form selection.
- Copyright (C) 2000-2003, 2005-2007 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _PLURAL_EXP_H
-#define _PLURAL_EXP_H
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-#ifndef attribute_hidden
-# define attribute_hidden
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-enum expression_operator
-{
- /* Without arguments: */
- var, /* The variable "n". */
- num, /* Decimal number. */
- /* Unary operators: */
- lnot, /* Logical NOT. */
- /* Binary operators: */
- mult, /* Multiplication. */
- divide, /* Division. */
- module, /* Modulo operation. */
- plus, /* Addition. */
- minus, /* Subtraction. */
- less_than, /* Comparison. */
- greater_than, /* Comparison. */
- less_or_equal, /* Comparison. */
- greater_or_equal, /* Comparison. */
- equal, /* Comparison for equality. */
- not_equal, /* Comparison for inequality. */
- land, /* Logical AND. */
- lor, /* Logical OR. */
- /* Ternary operators: */
- qmop /* Question mark operator. */
-};
-
-/* This is the representation of the expressions to determine the
- plural form. */
-struct expression
-{
- int nargs; /* Number of arguments. */
- enum expression_operator operation;
- union
- {
- unsigned long int num; /* Number value for `num'. */
- struct expression *args[3]; /* Up to three arguments. */
- } val;
-};
-
-/* This is the data structure to pass information to the parser and get
- the result in a thread-safe way. */
-struct parse_args
-{
- const char *cp;
- struct expression *res;
-};
-
-
-/* Names for the libintl functions are a problem. This source code is used
- 1. in the GNU C Library library,
- 2. in the GNU libintl library,
- 3. in the GNU gettext tools.
- The function names in each situation must be different, to allow for
- binary incompatible changes in 'struct expression'. Furthermore,
- 1. in the GNU C Library library, the names have a __ prefix,
- 2.+3. in the GNU libintl library and in the GNU gettext tools, the names
- must follow ANSI C and not start with __.
- So we have to distinguish the three cases. */
-#ifdef _LIBC
-# define FREE_EXPRESSION __gettext_free_exp
-# define PLURAL_PARSE __gettextparse
-# define GERMANIC_PLURAL __gettext_germanic_plural
-# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
-#elif defined (IN_LIBINTL)
-# define FREE_EXPRESSION libintl_gettext_free_exp
-# define PLURAL_PARSE libintl_gettextparse
-# define GERMANIC_PLURAL libintl_gettext_germanic_plural
-# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
-#else
-# define FREE_EXPRESSION free_plural_expression
-# define PLURAL_PARSE parse_plural_expression
-# define GERMANIC_PLURAL germanic_plural
-# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
-#endif
-
-extern void FREE_EXPRESSION (struct expression *exp)
- internal_function;
-extern int PLURAL_PARSE (void *arg);
-extern struct expression GERMANIC_PLURAL attribute_hidden;
-extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
- const struct expression **pluralp,
- unsigned long int *npluralsp)
- internal_function;
-
-#if !defined (_LIBC) && !defined (IN_LIBINTL) && !defined (IN_LIBGLOCALE)
-extern unsigned long int plural_eval (const struct expression *pexp,
- unsigned long int n);
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _PLURAL_EXP_H */
diff --git a/intl/plural.c b/intl/plural.c
deleted file mode 100644
index 7a4d947..0000000
--- a/intl/plural.c
+++ /dev/null
@@ -1,1961 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3a. */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
- simplifying the original so-called "semantic" parser. */
-
-/* All symbols defined below should begin with yy or YY, to avoid
- infringing on user name space. This should be done even for local
- variables, as they might otherwise be expanded by user macros.
- There are some unavoidable exceptions within include files to
- define necessary library symbols; they are noted "INFRINGES ON
- USER NAME SPACE" below. */
-
-/* Identify Bison output. */
-#define YYBISON 1
-
-/* Bison version. */
-#define YYBISON_VERSION "2.3a"
-
-/* Skeleton name. */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers. */
-#define YYPURE 1
-
-/* Using locations. */
-#define YYLSP_NEEDED 0
-
-/* Substitute the variable and function names. */
-#define yyparse __gettextparse
-#define yylex __gettextlex
-#define yyerror __gettexterror
-#define yylval __gettextlval
-#define yychar __gettextchar
-#define yydebug __gettextdebug
-#define yynerrs __gettextnerrs
-
-
-/* Copy the first part of user declarations. */
-/* Line 164 of yacc.c. */
-#line 1 "plural.y"
-
-/* Expression parsing for plural form selection.
- Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* For bison < 2.0, the bison generated parser uses alloca. AIX 3 forces us
- to put this declaration at the beginning of the file. The declaration in
- bison's skeleton file comes too late. This must come before <config.h>
- because <config.h> may include arbitrary system headers.
- This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0. */
-#if defined _AIX && !defined __GNUC__
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include "plural-exp.h"
-
-/* The main function generated by the parser is called __gettextparse,
- but we want it to be called PLURAL_PARSE. */
-#ifndef _LIBC
-# define __gettextparse PLURAL_PARSE
-#endif
-
-#define YYLEX_PARAM &((struct parse_args *) arg)->cp
-#define YYPARSE_PARAM arg
-
-
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-
-/* Tokens. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- EQUOP2 = 258,
- CMPOP2 = 259,
- ADDOP2 = 260,
- MULOP2 = 261,
- NUMBER = 262
- };
-#endif
-/* Tokens. */
-#define EQUOP2 258
-#define CMPOP2 259
-#define ADDOP2 260
-#define MULOP2 261
-#define NUMBER 262
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-{/* Line 191 of yacc.c. */
-#line 51 "plural.y"
-
- unsigned long int num;
- enum expression_operator op;
- struct expression *exp;
-}
-/* Line 191 of yacc.c. */
-#line 175 "plural.c"
- YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-
-
-/* Copy the second part of user declarations. */
-/* Line 221 of yacc.c. */
-#line 57 "plural.y"
-
-/* Prototypes for local functions. */
-static int yylex (YYSTYPE *lval, const char **pexp);
-static void yyerror (const char *str);
-
-/* Allocation of expressions. */
-
-static struct expression *
-new_exp (int nargs, enum expression_operator op,
- struct expression * const *args)
-{
- int i;
- struct expression *newp;
-
- /* If any of the argument could not be malloc'ed, just return NULL. */
- for (i = nargs - 1; i >= 0; i--)
- if (args[i] == NULL)
- goto fail;
-
- /* Allocate a new expression. */
- newp = (struct expression *) malloc (sizeof (*newp));
- if (newp != NULL)
- {
- newp->nargs = nargs;
- newp->operation = op;
- for (i = nargs - 1; i >= 0; i--)
- newp->val.args[i] = args[i];
- return newp;
- }
-
- fail:
- for (i = nargs - 1; i >= 0; i--)
- FREE_EXPRESSION (args[i]);
-
- return NULL;
-}
-
-static inline struct expression *
-new_exp_0 (enum expression_operator op)
-{
- return new_exp (0, op, NULL);
-}
-
-static inline struct expression *
-new_exp_1 (enum expression_operator op, struct expression *right)
-{
- struct expression *args[1];
-
- args[0] = right;
- return new_exp (1, op, args);
-}
-
-static struct expression *
-new_exp_2 (enum expression_operator op, struct expression *left,
- struct expression *right)
-{
- struct expression *args[2];
-
- args[0] = left;
- args[1] = right;
- return new_exp (2, op, args);
-}
-
-static inline struct expression *
-new_exp_3 (enum expression_operator op, struct expression *bexp,
- struct expression *tbranch, struct expression *fbranch)
-{
- struct expression *args[3];
-
- args[0] = bexp;
- args[1] = tbranch;
- args[2] = fbranch;
- return new_exp (3, op, args);
-}
-
-
-/* Line 221 of yacc.c. */
-#line 265 "plural.c"
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-# define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-# define YYSIZE_T size_t
-# else
-# define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-# if ENABLE_NLS
-# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-# define YY_(msgid) dgettext ("bison-runtime", msgid)
-# endif
-# endif
-# ifndef YY_
-# define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E. */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions. */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
- int yyi;
-#endif
-{
- return yyi;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols. */
-
-# ifdef YYSTACK_USE_ALLOCA
-# if YYSTACK_USE_ALLOCA
-# ifdef __GNUC__
-# define YYSTACK_ALLOC __builtin_alloca
-# elif defined __BUILTIN_VA_ARG_INCR
-# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-# elif defined _AIX
-# define YYSTACK_ALLOC __alloca
-# elif defined _MSC_VER
-# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-# define alloca _alloca
-# else
-# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# endif
-# endif
-# endif
-
-# ifdef YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-# ifndef YYSTACK_ALLOC_MAXIMUM
- /* The OS might guarantee only one guard page at the bottom of the stack,
- and a page size can be as small as 4096 bytes. So we cannot safely
- invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
- to allow for a few compiler-allocated temporary stack slots. */
-# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-# endif
-# else
-# define YYSTACK_ALLOC YYMALLOC
-# define YYSTACK_FREE YYFREE
-# ifndef YYSTACK_ALLOC_MAXIMUM
-# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-# endif
-# if (defined __cplusplus && ! defined _STDLIB_H \
- && ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# ifndef YYMALLOC
-# define YYMALLOC malloc
-# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# ifndef YYFREE
-# define YYFREE free
-# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
- && (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member. */
-union yyalloc
-{
- yytype_int16 yyss;
- YYSTYPE yyvs;
- };
-
-/* The size of the maximum gap between one aligned stack and the next. */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
- N elements. */
-# define YYSTACK_BYTES(N) \
- ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
- + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO. The source and destination do
- not overlap. */
-# ifndef YYCOPY
-# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-# else
-# define YYCOPY(To, From, Count) \
- do \
- { \
- YYSIZE_T yyi; \
- for (yyi = 0; yyi < (Count); yyi++) \
- (To)[yyi] = (From)[yyi]; \
- } \
- while (YYID (0))
-# endif
-# endif
-
-/* Relocate STACK from its old location to the new one. The
- local variables YYSIZE and YYSTACKSIZE give the old and new number of
- elements in the stack, and YYPTR gives the new location of the
- stack. Advance YYPTR to a properly aligned location for the next
- stack. */
-# define YYSTACK_RELOCATE(Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack, Stack, yysize); \
- Stack = &yyptr->Stack; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 9
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 54
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 16
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 3
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 13
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 27
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 262
-
-#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
-static const yytype_uint8 yytranslate[] =
-{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 10, 2, 2, 2, 2, 5, 2,
- 14, 15, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 12, 2,
- 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 4, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 6, 7,
- 8, 9, 11
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const yytype_uint8 yyprhs[] =
-{
- 0, 0, 3, 5, 11, 15, 19, 23, 27, 31,
- 35, 38, 40, 42
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yytype_int8 yyrhs[] =
-{
- 17, 0, -1, 18, -1, 18, 3, 18, 12, 18,
- -1, 18, 4, 18, -1, 18, 5, 18, -1, 18,
- 6, 18, -1, 18, 7, 18, -1, 18, 8, 18,
- -1, 18, 9, 18, -1, 10, 18, -1, 13, -1,
- 11, -1, 14, 18, 15, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const yytype_uint8 yyrline[] =
-{
- 0, 154, 154, 162, 166, 170, 174, 178, 182, 186,
- 190, 194, 198, 203
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
- "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
- "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
- "$accept", "start", "exp", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
- token YYLEX-NUM. */
-static const yytype_uint16 yytoknum[] =
-{
- 0, 256, 257, 63, 124, 38, 258, 259, 260, 261,
- 33, 262, 58, 110, 40, 41
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
-{
- 0, 16, 17, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
-{
- 0, 2, 1, 5, 3, 3, 3, 3, 3, 3,
- 2, 1, 1, 3
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
- STATE-NUM when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
-static const yytype_uint8 yydefact[] =
-{
- 0, 0, 12, 11, 0, 0, 2, 10, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 13, 0, 4,
- 5, 6, 7, 8, 9, 0, 3
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int8 yydefgoto[] =
-{
- -1, 5, 6
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -10
-static const yytype_int8 yypact[] =
-{
- -9, -9, -10, -10, -9, 8, 36, -10, 13, -10,
- -9, -9, -9, -9, -9, -9, -9, -10, 26, 41,
- 45, 18, -2, 14, -10, -9, 36
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yytype_int8 yypgoto[] =
-{
- -10, -10, -1
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule which
- number is the opposite. If zero, do what YYDEFACT says.
- If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -1
-static const yytype_uint8 yytable[] =
-{
- 7, 1, 2, 8, 3, 4, 15, 16, 9, 18,
- 19, 20, 21, 22, 23, 24, 10, 11, 12, 13,
- 14, 15, 16, 16, 26, 14, 15, 16, 17, 10,
- 11, 12, 13, 14, 15, 16, 0, 0, 25, 10,
- 11, 12, 13, 14, 15, 16, 12, 13, 14, 15,
- 16, 13, 14, 15, 16
-};
-
-static const yytype_int8 yycheck[] =
-{
- 1, 10, 11, 4, 13, 14, 8, 9, 0, 10,
- 11, 12, 13, 14, 15, 16, 3, 4, 5, 6,
- 7, 8, 9, 9, 25, 7, 8, 9, 15, 3,
- 4, 5, 6, 7, 8, 9, -1, -1, 12, 3,
- 4, 5, 6, 7, 8, 9, 5, 6, 7, 8,
- 9, 6, 7, 8, 9
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const yytype_uint8 yystos[] =
-{
- 0, 10, 11, 13, 14, 17, 18, 18, 18, 0,
- 3, 4, 5, 6, 7, 8, 9, 15, 18, 18,
- 18, 18, 18, 18, 18, 12, 18
-};
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-
-#define YYFAIL goto yyerrlab
-
-#define YYRECOVERING() (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- yytoken = YYTRANSLATE (yychar); \
- YYPOPSTACK (1); \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (YYID (0))
-
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N) \
- do \
- if (YYID (N)) \
- { \
- (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
- (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
- (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
- (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
- } \
- else \
- { \
- (Current).first_line = (Current).last_line = \
- YYRHSLOC (Rhs, 0).last_line; \
- (Current).first_column = (Current).last_column = \
- YYRHSLOC (Rhs, 0).last_column; \
- } \
- while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
- This macro was not mandated originally: define only if we know
- we won't break user code: when these are the locations we know. */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-# define YY_LOCATION_PRINT(File, Loc) \
- fprintf (File, "%d.%d-%d.%d", \
- (Loc).first_line, (Loc).first_column, \
- (Loc).last_line, (Loc).last_column)
-# else
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments. */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval)
-#endif
-
-/* Enable debugging if requested. */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-# define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (!yyvaluep)
- return;
-# ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
- YYUSE (yyoutput);
-# endif
- switch (yytype)
- {
- default:
- break;
- }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (yytype < YYNTOKENS)
- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
- else
- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included). |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
- yytype_int16 *yybottom;
- yytype_int16 *yytop;
-#endif
-{
- YYFPRINTF (stderr, "Stack now");
- for (; yybottom <= yytop; yybottom++)
- {
- int yybot = *yybottom;
- YYFPRINTF (stderr, " %d", yybot);
- }
- YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced. |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
- YYSTYPE *yyvsp;
- int yyrule;
-#endif
-{
- int yynrhs = yyr2[yyrule];
- int yyi;
- unsigned long int yylno = yyrline[yyrule];
- YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
- /* The symbols being reduced. */
- for (yyi = 0; yyi < yynrhs; yyi++)
- {
- fprintf (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
- fprintf (stderr, "\n");
- }
-}
-
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace. It is left uninitialized so that
- multiple parsers can coexist. */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
- if the built-in stack extension method is used).
-
- Do not make this value too large; the results are undefined if
- YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
- evaluated with infinite-precision integer arithmetic. */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-# if defined __GLIBC__ && defined _STRING_H
-# define yystrlen strlen
-# else
-/* Return the length of YYSTR. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
- const char *yystr;
-#endif
-{
- YYSIZE_T yylen;
- for (yylen = 0; yystr[yylen]; yylen++)
- continue;
- return yylen;
-}
-# endif
-# endif
-
-# ifndef yystpcpy
-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-# define yystpcpy stpcpy
-# else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
- YYDEST. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
- char *yydest;
- const char *yysrc;
-#endif
-{
- char *yyd = yydest;
- const char *yys = yysrc;
-
- while ((*yyd++ = *yys++) != '\0')
- continue;
-
- return yyd - 1;
-}
-# endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
- quotes and backslashes, so that it's suitable for yyerror. The
- heuristic is that double-quoting is unnecessary unless the string
- contains an apostrophe, a comma, or backslash (other than
- backslash-backslash). YYSTR is taken from yytname. If YYRES is
- null, do not copy; instead, return the length of what the result
- would have been. */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
- if (*yystr == '"')
- {
- YYSIZE_T yyn = 0;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
- do_not_strip_quotes: ;
- }
-
- if (! yyres)
- return yystrlen (yystr);
-
- return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into YYRESULT an error message about the unexpected token
- YYCHAR while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
- int yyn = yypact[yystate];
-
- if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- return 0;
- else
- {
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
- YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
- int yysize_overflow = 0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
-
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
-
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
-
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- }
-
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
-
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
-
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
- }
- return yysize;
- }
-}
-#endif /* YYERROR_VERBOSE */
-
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol. |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
- const char *yymsg;
- int yytype;
- YYSTYPE *yyvaluep;
-#endif
-{
- YYUSE (yyvaluep);
-
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
- switch (yytype)
- {
-
- default:
- break;
- }
-}
-
-
-/* Prevent warnings from -Wmissing-prototypes. */
-
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-
-
-
-
-/*----------.
-| yyparse. |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
- /* The lookahead symbol. */
-int yychar;
-
-/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far. */
-int yynerrs;
-
- int yystate;
- int yyn;
- int yyresult;
- /* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
- /* Lookahead token as an internal (translated) token number. */
- int yytoken = 0;
-#if YYERROR_VERBOSE
- /* Buffer for error messages, and its allocated size. */
- char yymsgbuf[128];
- char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
- /* Three stacks and their tools:
- `yyss': related to states,
- `yyvs': related to semantic values,
- `yyls': related to locations.
-
- Refer to the stacks thru separate pointers, to allow yyoverflow
- to reallocate them elsewhere. */
-
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss = yyssa;
- yytype_int16 *yyssp;
-
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs = yyvsa;
- YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
-
- YYSIZE_T yystacksize = YYINITDEPTH;
-
- /* The variables used to return semantic value and location from the
- action routines. */
- YYSTYPE yyval;
-
-
- /* The number of symbols on the RHS of the reduced rule.
- Keep to zero when no symbol should be popped. */
- int yylen = 0;
-
- YYDPRINTF ((stderr, "Starting parse\n"));
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
-
- yyssp = yyss;
- yyvsp = yyvs;
-
- goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
-`------------------------------------------------------------*/
- yynewstate:
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. So pushing a state here evens the stacks. */
- yyssp++;
-
- yysetstate:
- *yyssp = yystate;
-
- if (yyss + yystacksize - 1 <= yyssp)
- {
- /* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- {
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
-
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
- }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
- /* Extend the stack our own way. */
- if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
- yystacksize *= 2;
- if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
-
- {
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss);
- YYSTACK_RELOCATE (yyvs);
-
-# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
- }
-# endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + yysize - 1;
- yyvsp = yyvs + yysize - 1;
-
-
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
-
- if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
- }
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
- if (yystate == YYFINAL)
- YYACCEPT;
-
- goto yybackup;
-
-/*-----------.
-| yybackup. |
-`-----------*/
-yybackup:
-
- /* Do appropriate processing given the current state. Read a
- lookahead token if we need one and don't already have one. */
-
- /* First try to decide what to do without reference to lookahead token. */
- yyn = yypact[yystate];
- if (yyn == YYPACT_NINF)
- goto yydefault;
-
- /* Not known => get a lookahead token if don't already have one. */
-
- /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
- if (yychar == YYEMPTY)
- {
- YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
- }
-
- if (yychar <= YYEOF)
- {
- yychar = yytoken = YYEOF;
- YYDPRINTF ((stderr, "Now at end of input.\n"));
- }
- else
- {
- yytoken = YYTRANSLATE (yychar);
- YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
- }
-
- /* If the proper action on seeing token YYTOKEN is to reduce or to
- detect an error, take that action. */
- yyn += yytoken;
- if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
- goto yydefault;
- yyn = yytable[yyn];
- if (yyn <= 0)
- {
- if (yyn == 0 || yyn == YYTABLE_NINF)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
-
- /* Count tokens shifted since error; after three, turn off error
- status. */
- if (yyerrstatus)
- yyerrstatus--;
-
- /* Shift the lookahead token. */
- YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token. */
- yychar = YYEMPTY;
-
- yystate = yyn;
- *++yyvsp = yylval;
-
- goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state. |
-`-----------------------------------------------------------*/
-yydefault:
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
- goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction. |
-`-----------------------------*/
-yyreduce:
- /* yyn is the number of a rule to reduce with. */
- yylen = yyr2[yyn];
-
- /* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
-
- Otherwise, the following line sets YYVAL to garbage.
- This behavior is undocumented and Bison
- users should not rely upon it. Assigning to YYVAL
- unconditionally makes the parser a bit smaller, and it avoids a
- GCC warning that YYVAL may be used uninitialized. */
- yyval = yyvsp[1-yylen];
-
-
- YY_REDUCE_PRINT (yyn);
- switch (yyn)
- {
- case 2:
-/* Line 1269 of yacc.c. */
-#line 155 "plural.y"
- {
- if ((yyvsp[(1) - (1)].exp) == NULL)
- YYABORT;
- ((struct parse_args *) arg)->res = (yyvsp[(1) - (1)].exp);
- }
- break;
-
- case 3:
-/* Line 1269 of yacc.c. */
-#line 163 "plural.y"
- {
- (yyval.exp) = new_exp_3 (qmop, (yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].exp), (yyvsp[(5) - (5)].exp));
- }
- break;
-
- case 4:
-/* Line 1269 of yacc.c. */
-#line 167 "plural.y"
- {
- (yyval.exp) = new_exp_2 (lor, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- }
- break;
-
- case 5:
-/* Line 1269 of yacc.c. */
-#line 171 "plural.y"
- {
- (yyval.exp) = new_exp_2 (land, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- }
- break;
-
- case 6:
-/* Line 1269 of yacc.c. */
-#line 175 "plural.y"
- {
- (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- }
- break;
-
- case 7:
-/* Line 1269 of yacc.c. */
-#line 179 "plural.y"
- {
- (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- }
- break;
-
- case 8:
-/* Line 1269 of yacc.c. */
-#line 183 "plural.y"
- {
- (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- }
- break;
-
- case 9:
-/* Line 1269 of yacc.c. */
-#line 187 "plural.y"
- {
- (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- }
- break;
-
- case 10:
-/* Line 1269 of yacc.c. */
-#line 191 "plural.y"
- {
- (yyval.exp) = new_exp_1 (lnot, (yyvsp[(2) - (2)].exp));
- }
- break;
-
- case 11:
-/* Line 1269 of yacc.c. */
-#line 195 "plural.y"
- {
- (yyval.exp) = new_exp_0 (var);
- }
- break;
-
- case 12:
-/* Line 1269 of yacc.c. */
-#line 199 "plural.y"
- {
- if (((yyval.exp) = new_exp_0 (num)) != NULL)
- (yyval.exp)->val.num = (yyvsp[(1) - (1)].num);
- }
- break;
-
- case 13:
-/* Line 1269 of yacc.c. */
-#line 204 "plural.y"
- {
- (yyval.exp) = (yyvsp[(2) - (3)].exp);
- }
- break;
-
-
-/* Line 1269 of yacc.c. */
-#line 1572 "plural.c"
- default: break;
- }
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
-
- *++yyvsp = yyval;
-
-
- /* Now `shift' the result of the reduction. Determine what state
- that goes to, based on the state we popped back to and the rule
- number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
-
- goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
- /* If not already recovering from an error, report this error. */
- if (!yyerrstatus)
- {
- ++yynerrs;
-#if ! YYERROR_VERBOSE
- yyerror (YY_("syntax error"));
-#else
- {
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
- }
-#endif
- }
-
-
-
- if (yyerrstatus == 3)
- {
- /* If just tried and failed to reuse lookahead token after an
- error, discard it. */
-
- if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
- else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval);
- yychar = YYEMPTY;
- }
- }
-
- /* Else will try to reuse lookahead token after shifting the error
- token. */
- goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR. |
-`---------------------------------------------------*/
-yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
-
- /* Do not reclaim the symbols of the rule which action triggered
- this YYERROR. */
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
- yystate = *yyssp;
- goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR. |
-`-------------------------------------------------------------*/
-yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
-
- for (;;)
- {
- yyn = yypact[yystate];
- if (yyn != YYPACT_NINF)
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
-
- /* Pop the current state because it cannot handle the error token. */
- if (yyssp == yyss)
- YYABORT;
-
-
- yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
- YYPOPSTACK (1);
- yystate = *yyssp;
- YY_STACK_PRINT (yyss, yyssp);
- }
-
- *++yyvsp = yylval;
-
-
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
- yystate = yyn;
- goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here. |
-`-------------------------------------*/
-yyacceptlab:
- yyresult = 0;
- goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here. |
-`-----------------------------------*/
-yyabortlab:
- yyresult = 1;
- goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here. |
-`-------------------------------------------------*/
-yyexhaustedlab:
- yyerror (YY_("memory exhausted"));
- yyresult = 2;
- /* Fall through. */
-#endif
-
-yyreturn:
- if (yychar != YYEMPTY)
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
- /* Do not reclaim the symbols of the rule which action triggered
- this YYABORT or YYACCEPT. */
- YYPOPSTACK (yylen);
- YY_STACK_PRINT (yyss, yyssp);
- while (yyssp != yyss)
- {
- yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
- YYPOPSTACK (1);
- }
-#ifndef yyoverflow
- if (yyss != yyssa)
- YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
-#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
-}
-
-
-/* Line 1486 of yacc.c. */
-#line 209 "plural.y"
-
-
-void
-internal_function
-FREE_EXPRESSION (struct expression *exp)
-{
- if (exp == NULL)
- return;
-
- /* Handle the recursive case. */
- switch (exp->nargs)
- {
- case 3:
- FREE_EXPRESSION (exp->val.args[2]);
- /* FALLTHROUGH */
- case 2:
- FREE_EXPRESSION (exp->val.args[1]);
- /* FALLTHROUGH */
- case 1:
- FREE_EXPRESSION (exp->val.args[0]);
- /* FALLTHROUGH */
- default:
- break;
- }
-
- free (exp);
-}
-
-
-static int
-yylex (YYSTYPE *lval, const char **pexp)
-{
- const char *exp = *pexp;
- int result;
-
- while (1)
- {
- if (exp[0] == '\0')
- {
- *pexp = exp;
- return YYEOF;
- }
-
- if (exp[0] != ' ' && exp[0] != '\t')
- break;
-
- ++exp;
- }
-
- result = *exp++;
- switch (result)
- {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- {
- unsigned long int n = result - '0';
- while (exp[0] >= '0' && exp[0] <= '9')
- {
- n *= 10;
- n += exp[0] - '0';
- ++exp;
- }
- lval->num = n;
- result = NUMBER;
- }
- break;
-
- case '=':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = equal;
- result = EQUOP2;
- }
- else
- result = YYERRCODE;
- break;
-
- case '!':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = not_equal;
- result = EQUOP2;
- }
- break;
-
- case '&':
- case '|':
- if (exp[0] == result)
- ++exp;
- else
- result = YYERRCODE;
- break;
-
- case '<':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = less_or_equal;
- }
- else
- lval->op = less_than;
- result = CMPOP2;
- break;
-
- case '>':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = greater_or_equal;
- }
- else
- lval->op = greater_than;
- result = CMPOP2;
- break;
-
- case '*':
- lval->op = mult;
- result = MULOP2;
- break;
-
- case '/':
- lval->op = divide;
- result = MULOP2;
- break;
-
- case '%':
- lval->op = module;
- result = MULOP2;
- break;
-
- case '+':
- lval->op = plus;
- result = ADDOP2;
- break;
-
- case '-':
- lval->op = minus;
- result = ADDOP2;
- break;
-
- case 'n':
- case '?':
- case ':':
- case '(':
- case ')':
- /* Nothing, just return the character. */
- break;
-
- case ';':
- case '\n':
- case '\0':
- /* Be safe and let the user call this function again. */
- --exp;
- result = YYEOF;
- break;
-
- default:
- result = YYERRCODE;
-#if YYDEBUG != 0
- --exp;
-#endif
- break;
- }
-
- *pexp = exp;
-
- return result;
-}
-
-
-static void
-yyerror (const char *str)
-{
- /* Do nothing. We don't print error messages here. */
-}
-
diff --git a/intl/plural.y b/intl/plural.y
deleted file mode 100644
index ec36a09..0000000
--- a/intl/plural.y
+++ /dev/null
@@ -1,385 +0,0 @@
-%{
-/* Expression parsing for plural form selection.
- Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* For bison < 2.0, the bison generated parser uses alloca. AIX 3 forces us
- to put this declaration at the beginning of the file. The declaration in
- bison's skeleton file comes too late. This must come before <config.h>
- because <config.h> may include arbitrary system headers.
- This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0. */
-#if defined _AIX && !defined __GNUC__
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include "plural-exp.h"
-
-/* The main function generated by the parser is called __gettextparse,
- but we want it to be called PLURAL_PARSE. */
-#ifndef _LIBC
-# define __gettextparse PLURAL_PARSE
-#endif
-
-#define YYLEX_PARAM &((struct parse_args *) arg)->cp
-#define YYPARSE_PARAM arg
-%}
-%pure_parser
-%expect 7
-
-%union {
- unsigned long int num;
- enum expression_operator op;
- struct expression *exp;
-}
-
-%{
-/* Prototypes for local functions. */
-static int yylex (YYSTYPE *lval, const char **pexp);
-static void yyerror (const char *str);
-
-/* Allocation of expressions. */
-
-static struct expression *
-new_exp (int nargs, enum expression_operator op,
- struct expression * const *args)
-{
- int i;
- struct expression *newp;
-
- /* If any of the argument could not be malloc'ed, just return NULL. */
- for (i = nargs - 1; i >= 0; i--)
- if (args[i] == NULL)
- goto fail;
-
- /* Allocate a new expression. */
- newp = (struct expression *) malloc (sizeof (*newp));
- if (newp != NULL)
- {
- newp->nargs = nargs;
- newp->operation = op;
- for (i = nargs - 1; i >= 0; i--)
- newp->val.args[i] = args[i];
- return newp;
- }
-
- fail:
- for (i = nargs - 1; i >= 0; i--)
- FREE_EXPRESSION (args[i]);
-
- return NULL;
-}
-
-static inline struct expression *
-new_exp_0 (enum expression_operator op)
-{
- return new_exp (0, op, NULL);
-}
-
-static inline struct expression *
-new_exp_1 (enum expression_operator op, struct expression *right)
-{
- struct expression *args[1];
-
- args[0] = right;
- return new_exp (1, op, args);
-}
-
-static struct expression *
-new_exp_2 (enum expression_operator op, struct expression *left,
- struct expression *right)
-{
- struct expression *args[2];
-
- args[0] = left;
- args[1] = right;
- return new_exp (2, op, args);
-}
-
-static inline struct expression *
-new_exp_3 (enum expression_operator op, struct expression *bexp,
- struct expression *tbranch, struct expression *fbranch)
-{
- struct expression *args[3];
-
- args[0] = bexp;
- args[1] = tbranch;
- args[2] = fbranch;
- return new_exp (3, op, args);
-}
-
-%}
-
-/* This declares that all operators have the same associativity and the
- precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
- There is no unary minus and no bitwise operators.
- Operators with the same syntactic behaviour have been merged into a single
- token, to save space in the array generated by bison. */
-%right '?' /* ? */
-%left '|' /* || */
-%left '&' /* && */
-%left EQUOP2 /* == != */
-%left CMPOP2 /* < > <= >= */
-%left ADDOP2 /* + - */
-%left MULOP2 /* * / % */
-%right '!' /* ! */
-
-%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
-%token <num> NUMBER
-%type <exp> exp
-
-%%
-
-start: exp
- {
- if ($1 == NULL)
- YYABORT;
- ((struct parse_args *) arg)->res = $1;
- }
- ;
-
-exp: exp '?' exp ':' exp
- {
- $$ = new_exp_3 (qmop, $1, $3, $5);
- }
- | exp '|' exp
- {
- $$ = new_exp_2 (lor, $1, $3);
- }
- | exp '&' exp
- {
- $$ = new_exp_2 (land, $1, $3);
- }
- | exp EQUOP2 exp
- {
- $$ = new_exp_2 ($2, $1, $3);
- }
- | exp CMPOP2 exp
- {
- $$ = new_exp_2 ($2, $1, $3);
- }
- | exp ADDOP2 exp
- {
- $$ = new_exp_2 ($2, $1, $3);
- }
- | exp MULOP2 exp
- {
- $$ = new_exp_2 ($2, $1, $3);
- }
- | '!' exp
- {
- $$ = new_exp_1 (lnot, $2);
- }
- | 'n'
- {
- $$ = new_exp_0 (var);
- }
- | NUMBER
- {
- if (($$ = new_exp_0 (num)) != NULL)
- $$->val.num = $1;
- }
- | '(' exp ')'
- {
- $$ = $2;
- }
- ;
-
-%%
-
-void
-internal_function
-FREE_EXPRESSION (struct expression *exp)
-{
- if (exp == NULL)
- return;
-
- /* Handle the recursive case. */
- switch (exp->nargs)
- {
- case 3:
- FREE_EXPRESSION (exp->val.args[2]);
- /* FALLTHROUGH */
- case 2:
- FREE_EXPRESSION (exp->val.args[1]);
- /* FALLTHROUGH */
- case 1:
- FREE_EXPRESSION (exp->val.args[0]);
- /* FALLTHROUGH */
- default:
- break;
- }
-
- free (exp);
-}
-
-
-static int
-yylex (YYSTYPE *lval, const char **pexp)
-{
- const char *exp = *pexp;
- int result;
-
- while (1)
- {
- if (exp[0] == '\0')
- {
- *pexp = exp;
- return YYEOF;
- }
-
- if (exp[0] != ' ' && exp[0] != '\t')
- break;
-
- ++exp;
- }
-
- result = *exp++;
- switch (result)
- {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- {
- unsigned long int n = result - '0';
- while (exp[0] >= '0' && exp[0] <= '9')
- {
- n *= 10;
- n += exp[0] - '0';
- ++exp;
- }
- lval->num = n;
- result = NUMBER;
- }
- break;
-
- case '=':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = equal;
- result = EQUOP2;
- }
- else
- result = YYERRCODE;
- break;
-
- case '!':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = not_equal;
- result = EQUOP2;
- }
- break;
-
- case '&':
- case '|':
- if (exp[0] == result)
- ++exp;
- else
- result = YYERRCODE;
- break;
-
- case '<':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = less_or_equal;
- }
- else
- lval->op = less_than;
- result = CMPOP2;
- break;
-
- case '>':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = greater_or_equal;
- }
- else
- lval->op = greater_than;
- result = CMPOP2;
- break;
-
- case '*':
- lval->op = mult;
- result = MULOP2;
- break;
-
- case '/':
- lval->op = divide;
- result = MULOP2;
- break;
-
- case '%':
- lval->op = module;
- result = MULOP2;
- break;
-
- case '+':
- lval->op = plus;
- result = ADDOP2;
- break;
-
- case '-':
- lval->op = minus;
- result = ADDOP2;
- break;
-
- case 'n':
- case '?':
- case ':':
- case '(':
- case ')':
- /* Nothing, just return the character. */
- break;
-
- case ';':
- case '\n':
- case '\0':
- /* Be safe and let the user call this function again. */
- --exp;
- result = YYEOF;
- break;
-
- default:
- result = YYERRCODE;
-#if YYDEBUG != 0
- --exp;
-#endif
- break;
- }
-
- *pexp = exp;
-
- return result;
-}
-
-
-static void
-yyerror (const char *str)
-{
- /* Do nothing. We don't print error messages here. */
-}
diff --git a/intl/printf-args.c b/intl/printf-args.c
deleted file mode 100644
index cbd437d..0000000
--- a/intl/printf-args.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Decomposed printf argument list.
- Copyright (C) 1999, 2002-2003, 2005-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* This file can be parametrized with the following macros:
- ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions.
- PRINTF_FETCHARGS Name of the function to be defined.
- STATIC Set to 'static' to declare the function static. */
-
-#ifndef PRINTF_FETCHARGS
-# include <config.h>
-#endif
-
-/* Specification. */
-#ifndef PRINTF_FETCHARGS
-# include "printf-args.h"
-#endif
-
-#ifdef STATIC
-STATIC
-#endif
-int
-PRINTF_FETCHARGS (va_list args, arguments *a)
-{
- size_t i;
- argument *ap;
-
- for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
- switch (ap->type)
- {
- case TYPE_SCHAR:
- ap->a.a_schar = va_arg (args, /*signed char*/ int);
- break;
- case TYPE_UCHAR:
- ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
- break;
- case TYPE_SHORT:
- ap->a.a_short = va_arg (args, /*short*/ int);
- break;
- case TYPE_USHORT:
- ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
- break;
- case TYPE_INT:
- ap->a.a_int = va_arg (args, int);
- break;
- case TYPE_UINT:
- ap->a.a_uint = va_arg (args, unsigned int);
- break;
- case TYPE_LONGINT:
- ap->a.a_longint = va_arg (args, long int);
- break;
- case TYPE_ULONGINT:
- ap->a.a_ulongint = va_arg (args, unsigned long int);
- break;
-#if HAVE_LONG_LONG_INT
- case TYPE_LONGLONGINT:
- ap->a.a_longlongint = va_arg (args, long long int);
- break;
- case TYPE_ULONGLONGINT:
- ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
- break;
-#endif
- case TYPE_DOUBLE:
- ap->a.a_double = va_arg (args, double);
- break;
- case TYPE_LONGDOUBLE:
- ap->a.a_longdouble = va_arg (args, long double);
- break;
- case TYPE_CHAR:
- ap->a.a_char = va_arg (args, int);
- break;
-#if HAVE_WINT_T
- case TYPE_WIDE_CHAR:
- /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by
- default argument promotions", this is not the case in mingw32,
- where wint_t is 'unsigned short'. */
- ap->a.a_wide_char =
- (sizeof (wint_t) < sizeof (int)
- ? va_arg (args, int)
- : va_arg (args, wint_t));
- break;
-#endif
- case TYPE_STRING:
- ap->a.a_string = va_arg (args, const char *);
- /* A null pointer is an invalid argument for "%s", but in practice
- it occurs quite frequently in printf statements that produce
- debug output. Use a fallback in this case. */
- if (ap->a.a_string == NULL)
- ap->a.a_string = "(NULL)";
- break;
-#if HAVE_WCHAR_T
- case TYPE_WIDE_STRING:
- ap->a.a_wide_string = va_arg (args, const wchar_t *);
- /* A null pointer is an invalid argument for "%ls", but in practice
- it occurs quite frequently in printf statements that produce
- debug output. Use a fallback in this case. */
- if (ap->a.a_wide_string == NULL)
- {
- static const wchar_t wide_null_string[] =
- {
- (wchar_t)'(',
- (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L',
- (wchar_t)')',
- (wchar_t)0
- };
- ap->a.a_wide_string = wide_null_string;
- }
- break;
-#endif
- case TYPE_POINTER:
- ap->a.a_pointer = va_arg (args, void *);
- break;
- case TYPE_COUNT_SCHAR_POINTER:
- ap->a.a_count_schar_pointer = va_arg (args, signed char *);
- break;
- case TYPE_COUNT_SHORT_POINTER:
- ap->a.a_count_short_pointer = va_arg (args, short *);
- break;
- case TYPE_COUNT_INT_POINTER:
- ap->a.a_count_int_pointer = va_arg (args, int *);
- break;
- case TYPE_COUNT_LONGINT_POINTER:
- ap->a.a_count_longint_pointer = va_arg (args, long int *);
- break;
-#if HAVE_LONG_LONG_INT
- case TYPE_COUNT_LONGLONGINT_POINTER:
- ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
- break;
-#endif
-#if ENABLE_UNISTDIO
- /* The unistdio extensions. */
- case TYPE_U8_STRING:
- ap->a.a_u8_string = va_arg (args, const uint8_t *);
- /* A null pointer is an invalid argument for "%U", but in practice
- it occurs quite frequently in printf statements that produce
- debug output. Use a fallback in this case. */
- if (ap->a.a_u8_string == NULL)
- {
- static const uint8_t u8_null_string[] =
- { '(', 'N', 'U', 'L', 'L', ')', 0 };
- ap->a.a_u8_string = u8_null_string;
- }
- break;
- case TYPE_U16_STRING:
- ap->a.a_u16_string = va_arg (args, const uint16_t *);
- /* A null pointer is an invalid argument for "%lU", but in practice
- it occurs quite frequently in printf statements that produce
- debug output. Use a fallback in this case. */
- if (ap->a.a_u16_string == NULL)
- {
- static const uint16_t u16_null_string[] =
- { '(', 'N', 'U', 'L', 'L', ')', 0 };
- ap->a.a_u16_string = u16_null_string;
- }
- break;
- case TYPE_U32_STRING:
- ap->a.a_u32_string = va_arg (args, const uint32_t *);
- /* A null pointer is an invalid argument for "%llU", but in practice
- it occurs quite frequently in printf statements that produce
- debug output. Use a fallback in this case. */
- if (ap->a.a_u32_string == NULL)
- {
- static const uint32_t u32_null_string[] =
- { '(', 'N', 'U', 'L', 'L', ')', 0 };
- ap->a.a_u32_string = u32_null_string;
- }
- break;
-#endif
- default:
- /* Unknown type. */
- return -1;
- }
- return 0;
-}
diff --git a/intl/printf-args.h b/intl/printf-args.h
deleted file mode 100644
index cf89c3e..0000000
--- a/intl/printf-args.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Decomposed printf argument list.
- Copyright (C) 1999, 2002-2003, 2006-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _PRINTF_ARGS_H
-#define _PRINTF_ARGS_H
-
-/* This file can be parametrized with the following macros:
- ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions.
- PRINTF_FETCHARGS Name of the function to be declared.
- STATIC Set to 'static' to declare the function static. */
-
-/* Default parameters. */
-#ifndef PRINTF_FETCHARGS
-# define PRINTF_FETCHARGS printf_fetchargs
-#endif
-
-/* Get size_t. */
-#include <stddef.h>
-
-/* Get wchar_t. */
-#if HAVE_WCHAR_T
-# include <stddef.h>
-#endif
-
-/* Get wint_t. */
-#if HAVE_WINT_T
-# include <wchar.h>
-#endif
-
-/* Get va_list. */
-#include <stdarg.h>
-
-
-/* Argument types */
-typedef enum
-{
- TYPE_NONE,
- TYPE_SCHAR,
- TYPE_UCHAR,
- TYPE_SHORT,
- TYPE_USHORT,
- TYPE_INT,
- TYPE_UINT,
- TYPE_LONGINT,
- TYPE_ULONGINT,
-#if HAVE_LONG_LONG_INT
- TYPE_LONGLONGINT,
- TYPE_ULONGLONGINT,
-#endif
- TYPE_DOUBLE,
- TYPE_LONGDOUBLE,
- TYPE_CHAR,
-#if HAVE_WINT_T
- TYPE_WIDE_CHAR,
-#endif
- TYPE_STRING,
-#if HAVE_WCHAR_T
- TYPE_WIDE_STRING,
-#endif
- TYPE_POINTER,
- TYPE_COUNT_SCHAR_POINTER,
- TYPE_COUNT_SHORT_POINTER,
- TYPE_COUNT_INT_POINTER,
- TYPE_COUNT_LONGINT_POINTER
-#if HAVE_LONG_LONG_INT
-, TYPE_COUNT_LONGLONGINT_POINTER
-#endif
-#if ENABLE_UNISTDIO
- /* The unistdio extensions. */
-, TYPE_U8_STRING
-, TYPE_U16_STRING
-, TYPE_U32_STRING
-#endif
-} arg_type;
-
-/* Polymorphic argument */
-typedef struct
-{
- arg_type type;
- union
- {
- signed char a_schar;
- unsigned char a_uchar;
- short a_short;
- unsigned short a_ushort;
- int a_int;
- unsigned int a_uint;
- long int a_longint;
- unsigned long int a_ulongint;
-#if HAVE_LONG_LONG_INT
- long long int a_longlongint;
- unsigned long long int a_ulonglongint;
-#endif
- float a_float;
- double a_double;
- long double a_longdouble;
- int a_char;
-#if HAVE_WINT_T
- wint_t a_wide_char;
-#endif
- const char* a_string;
-#if HAVE_WCHAR_T
- const wchar_t* a_wide_string;
-#endif
- void* a_pointer;
- signed char * a_count_schar_pointer;
- short * a_count_short_pointer;
- int * a_count_int_pointer;
- long int * a_count_longint_pointer;
-#if HAVE_LONG_LONG_INT
- long long int * a_count_longlongint_pointer;
-#endif
-#if ENABLE_UNISTDIO
- /* The unistdio extensions. */
- const uint8_t * a_u8_string;
- const uint16_t * a_u16_string;
- const uint32_t * a_u32_string;
-#endif
- }
- a;
-}
-argument;
-
-typedef struct
-{
- size_t count;
- argument *arg;
-}
-arguments;
-
-
-/* Fetch the arguments, putting them into a. */
-#ifdef STATIC
-STATIC
-#else
-extern
-#endif
-int PRINTF_FETCHARGS (va_list args, arguments *a);
-
-#endif /* _PRINTF_ARGS_H */
diff --git a/intl/printf-parse.c b/intl/printf-parse.c
deleted file mode 100644
index 6ed1cc3..0000000
--- a/intl/printf-parse.c
+++ /dev/null
@@ -1,590 +0,0 @@
-/* Formatted output to strings.
- Copyright (C) 1999-2000, 2002-2003, 2006-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* This file can be parametrized with the following macros:
- CHAR_T The element type of the format string.
- CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters
- in the format string are ASCII.
- DIRECTIVE Structure denoting a format directive.
- Depends on CHAR_T.
- DIRECTIVES Structure denoting the set of format directives of a
- format string. Depends on CHAR_T.
- PRINTF_PARSE Function that parses a format string.
- Depends on CHAR_T.
- STATIC Set to 'static' to declare the function static.
- ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */
-
-#ifndef PRINTF_PARSE
-# include <config.h>
-#endif
-
-/* Specification. */
-#ifndef PRINTF_PARSE
-# include "printf-parse.h"
-#endif
-
-/* Default parameters. */
-#ifndef PRINTF_PARSE
-# define PRINTF_PARSE printf_parse
-# define CHAR_T char
-# define DIRECTIVE char_directive
-# define DIRECTIVES char_directives
-#endif
-
-/* Get size_t, NULL. */
-#include <stddef.h>
-
-/* Get intmax_t. */
-#if defined IN_LIBINTL || defined IN_LIBASPRINTF
-# if HAVE_STDINT_H_WITH_UINTMAX
-# include <stdint.h>
-# endif
-# if HAVE_INTTYPES_H_WITH_UINTMAX
-# include <inttypes.h>
-# endif
-#else
-# include <stdint.h>
-#endif
-
-/* malloc(), realloc(), free(). */
-#include <stdlib.h>
-
-/* errno. */
-#include <errno.h>
-
-/* Checked size_t computations. */
-#include "xsize.h"
-
-#if CHAR_T_ONLY_ASCII
-/* c_isascii(). */
-# include "c-ctype.h"
-#endif
-
-#ifdef STATIC
-STATIC
-#endif
-int
-PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
-{
- const CHAR_T *cp = format; /* pointer into format */
- size_t arg_posn = 0; /* number of regular arguments consumed */
- size_t d_allocated; /* allocated elements of d->dir */
- size_t a_allocated; /* allocated elements of a->arg */
- size_t max_width_length = 0;
- size_t max_precision_length = 0;
-
- d->count = 0;
- d_allocated = 1;
- d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE));
- if (d->dir == NULL)
- /* Out of memory. */
- goto out_of_memory_1;
-
- a->count = 0;
- a_allocated = 0;
- a->arg = NULL;
-
-#define REGISTER_ARG(_index_,_type_) \
- { \
- size_t n = (_index_); \
- if (n >= a_allocated) \
- { \
- size_t memory_size; \
- argument *memory; \
- \
- a_allocated = xtimes (a_allocated, 2); \
- if (a_allocated <= n) \
- a_allocated = xsum (n, 1); \
- memory_size = xtimes (a_allocated, sizeof (argument)); \
- if (size_overflow_p (memory_size)) \
- /* Overflow, would lead to out of memory. */ \
- goto out_of_memory; \
- memory = (argument *) (a->arg \
- ? realloc (a->arg, memory_size) \
- : malloc (memory_size)); \
- if (memory == NULL) \
- /* Out of memory. */ \
- goto out_of_memory; \
- a->arg = memory; \
- } \
- while (a->count <= n) \
- a->arg[a->count++].type = TYPE_NONE; \
- if (a->arg[n].type == TYPE_NONE) \
- a->arg[n].type = (_type_); \
- else if (a->arg[n].type != (_type_)) \
- /* Ambiguous type for positional argument. */ \
- goto error; \
- }
-
- while (*cp != '\0')
- {
- CHAR_T c = *cp++;
- if (c == '%')
- {
- size_t arg_index = ARG_NONE;
- DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */
-
- /* Initialize the next directive. */
- dp->dir_start = cp - 1;
- dp->flags = 0;
- dp->width_start = NULL;
- dp->width_end = NULL;
- dp->width_arg_index = ARG_NONE;
- dp->precision_start = NULL;
- dp->precision_end = NULL;
- dp->precision_arg_index = ARG_NONE;
- dp->arg_index = ARG_NONE;
-
- /* Test for positional argument. */
- if (*cp >= '0' && *cp <= '9')
- {
- const CHAR_T *np;
-
- for (np = cp; *np >= '0' && *np <= '9'; np++)
- ;
- if (*np == '$')
- {
- size_t n = 0;
-
- for (np = cp; *np >= '0' && *np <= '9'; np++)
- n = xsum (xtimes (n, 10), *np - '0');
- if (n == 0)
- /* Positional argument 0. */
- goto error;
- if (size_overflow_p (n))
- /* n too large, would lead to out of memory later. */
- goto error;
- arg_index = n - 1;
- cp = np + 1;
- }
- }
-
- /* Read the flags. */
- for (;;)
- {
- if (*cp == '\'')
- {
- dp->flags |= FLAG_GROUP;
- cp++;
- }
- else if (*cp == '-')
- {
- dp->flags |= FLAG_LEFT;
- cp++;
- }
- else if (*cp == '+')
- {
- dp->flags |= FLAG_SHOWSIGN;
- cp++;
- }
- else if (*cp == ' ')
- {
- dp->flags |= FLAG_SPACE;
- cp++;
- }
- else if (*cp == '#')
- {
- dp->flags |= FLAG_ALT;
- cp++;
- }
- else if (*cp == '0')
- {
- dp->flags |= FLAG_ZERO;
- cp++;
- }
- else
- break;
- }
-
- /* Parse the field width. */
- if (*cp == '*')
- {
- dp->width_start = cp;
- cp++;
- dp->width_end = cp;
- if (max_width_length < 1)
- max_width_length = 1;
-
- /* Test for positional argument. */
- if (*cp >= '0' && *cp <= '9')
- {
- const CHAR_T *np;
-
- for (np = cp; *np >= '0' && *np <= '9'; np++)
- ;
- if (*np == '$')
- {
- size_t n = 0;
-
- for (np = cp; *np >= '0' && *np <= '9'; np++)
- n = xsum (xtimes (n, 10), *np - '0');
- if (n == 0)
- /* Positional argument 0. */
- goto error;
- if (size_overflow_p (n))
- /* n too large, would lead to out of memory later. */
- goto error;
- dp->width_arg_index = n - 1;
- cp = np + 1;
- }
- }
- if (dp->width_arg_index == ARG_NONE)
- {
- dp->width_arg_index = arg_posn++;
- if (dp->width_arg_index == ARG_NONE)
- /* arg_posn wrapped around. */
- goto error;
- }
- REGISTER_ARG (dp->width_arg_index, TYPE_INT);
- }
- else if (*cp >= '0' && *cp <= '9')
- {
- size_t width_length;
-
- dp->width_start = cp;
- for (; *cp >= '0' && *cp <= '9'; cp++)
- ;
- dp->width_end = cp;
- width_length = dp->width_end - dp->width_start;
- if (max_width_length < width_length)
- max_width_length = width_length;
- }
-
- /* Parse the precision. */
- if (*cp == '.')
- {
- cp++;
- if (*cp == '*')
- {
- dp->precision_start = cp - 1;
- cp++;
- dp->precision_end = cp;
- if (max_precision_length < 2)
- max_precision_length = 2;
-
- /* Test for positional argument. */
- if (*cp >= '0' && *cp <= '9')
- {
- const CHAR_T *np;
-
- for (np = cp; *np >= '0' && *np <= '9'; np++)
- ;
- if (*np == '$')
- {
- size_t n = 0;
-
- for (np = cp; *np >= '0' && *np <= '9'; np++)
- n = xsum (xtimes (n, 10), *np - '0');
- if (n == 0)
- /* Positional argument 0. */
- goto error;
- if (size_overflow_p (n))
- /* n too large, would lead to out of memory
- later. */
- goto error;
- dp->precision_arg_index = n - 1;
- cp = np + 1;
- }
- }
- if (dp->precision_arg_index == ARG_NONE)
- {
- dp->precision_arg_index = arg_posn++;
- if (dp->precision_arg_index == ARG_NONE)
- /* arg_posn wrapped around. */
- goto error;
- }
- REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
- }
- else
- {
- size_t precision_length;
-
- dp->precision_start = cp - 1;
- for (; *cp >= '0' && *cp <= '9'; cp++)
- ;
- dp->precision_end = cp;
- precision_length = dp->precision_end - dp->precision_start;
- if (max_precision_length < precision_length)
- max_precision_length = precision_length;
- }
- }
-
- {
- arg_type type;
-
- /* Parse argument type/size specifiers. */
- {
- int flags = 0;
-
- for (;;)
- {
- if (*cp == 'h')
- {
- flags |= (1 << (flags & 1));
- cp++;
- }
- else if (*cp == 'L')
- {
- flags |= 4;
- cp++;
- }
- else if (*cp == 'l')
- {
- flags += 8;
- cp++;
- }
- else if (*cp == 'j')
- {
- if (sizeof (intmax_t) > sizeof (long))
- {
- /* intmax_t = long long */
- flags += 16;
- }
- else if (sizeof (intmax_t) > sizeof (int))
- {
- /* intmax_t = long */
- flags += 8;
- }
- cp++;
- }
- else if (*cp == 'z' || *cp == 'Z')
- {
- /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
- because the warning facility in gcc-2.95.2 understands
- only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */
- if (sizeof (size_t) > sizeof (long))
- {
- /* size_t = long long */
- flags += 16;
- }
- else if (sizeof (size_t) > sizeof (int))
- {
- /* size_t = long */
- flags += 8;
- }
- cp++;
- }
- else if (*cp == 't')
- {
- if (sizeof (ptrdiff_t) > sizeof (long))
- {
- /* ptrdiff_t = long long */
- flags += 16;
- }
- else if (sizeof (ptrdiff_t) > sizeof (int))
- {
- /* ptrdiff_t = long */
- flags += 8;
- }
- cp++;
- }
- else
- break;
- }
-
- /* Read the conversion character. */
- c = *cp++;
- switch (c)
- {
- case 'd': case 'i':
-#if HAVE_LONG_LONG_INT
- /* If 'long long' exists and is larger than 'long': */
- if (flags >= 16 || (flags & 4))
- type = TYPE_LONGLONGINT;
- else
-#endif
- /* If 'long long' exists and is the same as 'long', we parse
- "lld" into TYPE_LONGINT. */
- if (flags >= 8)
- type = TYPE_LONGINT;
- else if (flags & 2)
- type = TYPE_SCHAR;
- else if (flags & 1)
- type = TYPE_SHORT;
- else
- type = TYPE_INT;
- break;
- case 'o': case 'u': case 'x': case 'X':
-#if HAVE_LONG_LONG_INT
- /* If 'long long' exists and is larger than 'long': */
- if (flags >= 16 || (flags & 4))
- type = TYPE_ULONGLONGINT;
- else
-#endif
- /* If 'unsigned long long' exists and is the same as
- 'unsigned long', we parse "llu" into TYPE_ULONGINT. */
- if (flags >= 8)
- type = TYPE_ULONGINT;
- else if (flags & 2)
- type = TYPE_UCHAR;
- else if (flags & 1)
- type = TYPE_USHORT;
- else
- type = TYPE_UINT;
- break;
- case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
- case 'a': case 'A':
- if (flags >= 16 || (flags & 4))
- type = TYPE_LONGDOUBLE;
- else
- type = TYPE_DOUBLE;
- break;
- case 'c':
- if (flags >= 8)
-#if HAVE_WINT_T
- type = TYPE_WIDE_CHAR;
-#else
- goto error;
-#endif
- else
- type = TYPE_CHAR;
- break;
-#if HAVE_WINT_T
- case 'C':
- type = TYPE_WIDE_CHAR;
- c = 'c';
- break;
-#endif
- case 's':
- if (flags >= 8)
-#if HAVE_WCHAR_T
- type = TYPE_WIDE_STRING;
-#else
- goto error;
-#endif
- else
- type = TYPE_STRING;
- break;
-#if HAVE_WCHAR_T
- case 'S':
- type = TYPE_WIDE_STRING;
- c = 's';
- break;
-#endif
- case 'p':
- type = TYPE_POINTER;
- break;
- case 'n':
-#if HAVE_LONG_LONG_INT
- /* If 'long long' exists and is larger than 'long': */
- if (flags >= 16 || (flags & 4))
- type = TYPE_COUNT_LONGLONGINT_POINTER;
- else
-#endif
- /* If 'long long' exists and is the same as 'long', we parse
- "lln" into TYPE_COUNT_LONGINT_POINTER. */
- if (flags >= 8)
- type = TYPE_COUNT_LONGINT_POINTER;
- else if (flags & 2)
- type = TYPE_COUNT_SCHAR_POINTER;
- else if (flags & 1)
- type = TYPE_COUNT_SHORT_POINTER;
- else
- type = TYPE_COUNT_INT_POINTER;
- break;
-#if ENABLE_UNISTDIO
- /* The unistdio extensions. */
- case 'U':
- if (flags >= 16)
- type = TYPE_U32_STRING;
- else if (flags >= 8)
- type = TYPE_U16_STRING;
- else
- type = TYPE_U8_STRING;
- break;
-#endif
- case '%':
- type = TYPE_NONE;
- break;
- default:
- /* Unknown conversion character. */
- goto error;
- }
- }
-
- if (type != TYPE_NONE)
- {
- dp->arg_index = arg_index;
- if (dp->arg_index == ARG_NONE)
- {
- dp->arg_index = arg_posn++;
- if (dp->arg_index == ARG_NONE)
- /* arg_posn wrapped around. */
- goto error;
- }
- REGISTER_ARG (dp->arg_index, type);
- }
- dp->conversion = c;
- dp->dir_end = cp;
- }
-
- d->count++;
- if (d->count >= d_allocated)
- {
- size_t memory_size;
- DIRECTIVE *memory;
-
- d_allocated = xtimes (d_allocated, 2);
- memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
- if (size_overflow_p (memory_size))
- /* Overflow, would lead to out of memory. */
- goto out_of_memory;
- memory = (DIRECTIVE *) realloc (d->dir, memory_size);
- if (memory == NULL)
- /* Out of memory. */
- goto out_of_memory;
- d->dir = memory;
- }
- }
-#if CHAR_T_ONLY_ASCII
- else if (!c_isascii (c))
- {
- /* Non-ASCII character. Not supported. */
- goto error;
- }
-#endif
- }
- d->dir[d->count].dir_start = cp;
-
- d->max_width_length = max_width_length;
- d->max_precision_length = max_precision_length;
- return 0;
-
-error:
- if (a->arg)
- free (a->arg);
- if (d->dir)
- free (d->dir);
- errno = EINVAL;
- return -1;
-
-out_of_memory:
- if (a->arg)
- free (a->arg);
- if (d->dir)
- free (d->dir);
-out_of_memory_1:
- errno = ENOMEM;
- return -1;
-}
-
-#undef PRINTF_PARSE
-#undef DIRECTIVES
-#undef DIRECTIVE
-#undef CHAR_T_ONLY_ASCII
-#undef CHAR_T
diff --git a/intl/printf-parse.h b/intl/printf-parse.h
deleted file mode 100644
index e785338..0000000
--- a/intl/printf-parse.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Parse printf format string.
- Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _PRINTF_PARSE_H
-#define _PRINTF_PARSE_H
-
-#include "printf-args.h"
-
-
-/* Flags */
-#define FLAG_GROUP 1 /* ' flag */
-#define FLAG_LEFT 2 /* - flag */
-#define FLAG_SHOWSIGN 4 /* + flag */
-#define FLAG_SPACE 8 /* space flag */
-#define FLAG_ALT 16 /* # flag */
-#define FLAG_ZERO 32
-
-/* arg_index value indicating that no argument is consumed. */
-#define ARG_NONE (~(size_t)0)
-
-/* A parsed directive. */
-typedef struct
-{
- const char* dir_start;
- const char* dir_end;
- int flags;
- const char* width_start;
- const char* width_end;
- size_t width_arg_index;
- const char* precision_start;
- const char* precision_end;
- size_t precision_arg_index;
- char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
- size_t arg_index;
-}
-char_directive;
-
-/* A parsed format string. */
-typedef struct
-{
- size_t count;
- char_directive *dir;
- size_t max_width_length;
- size_t max_precision_length;
-}
-char_directives;
-
-
-/* Parses the format string. Fills in the number N of directives, and fills
- in directives[0], ..., directives[N-1], and sets directives[N].dir_start
- to the end of the format string. Also fills in the arg_type fields of the
- arguments and the needed count of arguments. */
-#ifdef STATIC
-STATIC
-#else
-extern
-#endif
-int printf_parse (const char *format, char_directives *d, arguments *a);
-
-#endif /* _PRINTF_PARSE_H */
diff --git a/intl/printf.c b/intl/printf.c
deleted file mode 100644
index 0088e51..0000000
--- a/intl/printf.c
+++ /dev/null
@@ -1,427 +0,0 @@
-/* Formatted output to strings, using POSIX/XSI format strings with positions.
- Copyright (C) 2003, 2006-2007 Free Software Foundation, Inc.
- Written by Bruno Haible <bruno at clisp.org>, 2003.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# ifdef _MSC_VER
-# include <malloc.h>
-# define alloca _alloca
-# else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#include <stdio.h>
-
-#if !HAVE_POSIX_PRINTF
-
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */
-#ifndef EOVERFLOW
-# define EOVERFLOW E2BIG
-#endif
-
-/* When building a DLL, we must export some functions. Note that because
- the functions are only defined for binary backward compatibility, we
- don't need to use __declspec(dllimport) in any case. */
-#if defined _MSC_VER && BUILDING_DLL
-# define DLL_EXPORTED __declspec(dllexport)
-#else
-# define DLL_EXPORTED
-#endif
-
-#define STATIC static
-
-/* This needs to be consistent with libgnuintl.h.in. */
-#if defined __NetBSD__ || defined __BEOS__ || defined __CYGWIN__ || defined __MINGW32__
-/* Don't break __attribute__((format(printf,M,N))).
- This redefinition is only possible because the libc in NetBSD, Cygwin,
- mingw does not have a function __printf__. */
-# define libintl_printf __printf__
-#endif
-
-/* Define auxiliary functions declared in "printf-args.h". */
-#include "printf-args.c"
-
-/* Define auxiliary functions declared in "printf-parse.h". */
-#include "printf-parse.c"
-
-/* Define functions declared in "vasnprintf.h". */
-#define vasnprintf libintl_vasnprintf
-#include "vasnprintf.c"
-#if 0 /* not needed */
-#define asnprintf libintl_asnprintf
-#include "asnprintf.c"
-#endif
-
-DLL_EXPORTED
-int
-libintl_vfprintf (FILE *stream, const char *format, va_list args)
-{
- if (strchr (format, '$') == NULL)
- return vfprintf (stream, format, args);
- else
- {
- size_t length;
- char *result = libintl_vasnprintf (NULL, &length, format, args);
- int retval = -1;
- if (result != NULL)
- {
- size_t written = fwrite (result, 1, length, stream);
- free (result);
- if (written == length)
- {
- if (length > INT_MAX)
- errno = EOVERFLOW;
- else
- retval = length;
- }
- }
- return retval;
- }
-}
-
-DLL_EXPORTED
-int
-libintl_fprintf (FILE *stream, const char *format, ...)
-{
- va_list args;
- int retval;
-
- va_start (args, format);
- retval = libintl_vfprintf (stream, format, args);
- va_end (args);
- return retval;
-}
-
-DLL_EXPORTED
-int
-libintl_vprintf (const char *format, va_list args)
-{
- return libintl_vfprintf (stdout, format, args);
-}
-
-DLL_EXPORTED
-int
-libintl_printf (const char *format, ...)
-{
- va_list args;
- int retval;
-
- va_start (args, format);
- retval = libintl_vprintf (format, args);
- va_end (args);
- return retval;
-}
-
-DLL_EXPORTED
-int
-libintl_vsprintf (char *resultbuf, const char *format, va_list args)
-{
- if (strchr (format, '$') == NULL)
- return vsprintf (resultbuf, format, args);
- else
- {
- size_t length = (size_t) ~0 / (4 * sizeof (char));
- char *result = libintl_vasnprintf (resultbuf, &length, format, args);
- if (result != resultbuf)
- {
- free (result);
- return -1;
- }
- if (length > INT_MAX)
- {
- errno = EOVERFLOW;
- return -1;
- }
- else
- return length;
- }
-}
-
-DLL_EXPORTED
-int
-libintl_sprintf (char *resultbuf, const char *format, ...)
-{
- va_list args;
- int retval;
-
- va_start (args, format);
- retval = libintl_vsprintf (resultbuf, format, args);
- va_end (args);
- return retval;
-}
-
-#if HAVE_SNPRINTF
-
-# if HAVE_DECL__SNPRINTF
- /* Windows. */
-# define system_vsnprintf _vsnprintf
-# else
- /* Unix. */
-# define system_vsnprintf vsnprintf
-# endif
-
-DLL_EXPORTED
-int
-libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args)
-{
- if (strchr (format, '$') == NULL)
- return system_vsnprintf (resultbuf, length, format, args);
- else
- {
- size_t maxlength = length;
- char *result = libintl_vasnprintf (resultbuf, &length, format, args);
- if (result != resultbuf)
- {
- if (maxlength > 0)
- {
- size_t pruned_length =
- (length < maxlength ? length : maxlength - 1);
- memcpy (resultbuf, result, pruned_length);
- resultbuf[pruned_length] = '\0';
- }
- free (result);
- }
- if (length > INT_MAX)
- {
- errno = EOVERFLOW;
- return -1;
- }
- else
- return length;
- }
-}
-
-DLL_EXPORTED
-int
-libintl_snprintf (char *resultbuf, size_t length, const char *format, ...)
-{
- va_list args;
- int retval;
-
- va_start (args, format);
- retval = libintl_vsnprintf (resultbuf, length, format, args);
- va_end (args);
- return retval;
-}
-
-#endif
-
-#if HAVE_ASPRINTF
-
-DLL_EXPORTED
-int
-libintl_vasprintf (char **resultp, const char *format, va_list args)
-{
- size_t length;
- char *result = libintl_vasnprintf (NULL, &length, format, args);
- if (result == NULL)
- return -1;
- if (length > INT_MAX)
- {
- free (result);
- errno = EOVERFLOW;
- return -1;
- }
- *resultp = result;
- return length;
-}
-
-DLL_EXPORTED
-int
-libintl_asprintf (char **resultp, const char *format, ...)
-{
- va_list args;
- int retval;
-
- va_start (args, format);
- retval = libintl_vasprintf (resultp, format, args);
- va_end (args);
- return retval;
-}
-
-#endif
-
-#if HAVE_FWPRINTF
-
-#include <wchar.h>
-
-#define WIDE_CHAR_VERSION 1
-
-#include "wprintf-parse.h"
-/* Define auxiliary functions declared in "wprintf-parse.h". */
-#define CHAR_T wchar_t
-#define DIRECTIVE wchar_t_directive
-#define DIRECTIVES wchar_t_directives
-#define PRINTF_PARSE wprintf_parse
-#include "printf-parse.c"
-
-/* Define functions declared in "vasnprintf.h". */
-#define vasnwprintf libintl_vasnwprintf
-#include "vasnprintf.c"
-#if 0 /* not needed */
-#define asnwprintf libintl_asnwprintf
-#include "asnprintf.c"
-#endif
-
-# if HAVE_DECL__SNWPRINTF
- /* Windows. */
-# define system_vswprintf _vsnwprintf
-# else
- /* Unix. */
-# define system_vswprintf vswprintf
-# endif
-
-DLL_EXPORTED
-int
-libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args)
-{
- if (wcschr (format, '$') == NULL)
- return vfwprintf (stream, format, args);
- else
- {
- size_t length;
- wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args);
- int retval = -1;
- if (result != NULL)
- {
- size_t i;
- for (i = 0; i < length; i++)
- if (fputwc (result[i], stream) == WEOF)
- break;
- free (result);
- if (i == length)
- {
- if (length > INT_MAX)
- errno = EOVERFLOW;
- else
- retval = length;
- }
- }
- return retval;
- }
-}
-
-DLL_EXPORTED
-int
-libintl_fwprintf (FILE *stream, const wchar_t *format, ...)
-{
- va_list args;
- int retval;
-
- va_start (args, format);
- retval = libintl_vfwprintf (stream, format, args);
- va_end (args);
- return retval;
-}
-
-DLL_EXPORTED
-int
-libintl_vwprintf (const wchar_t *format, va_list args)
-{
- return libintl_vfwprintf (stdout, format, args);
-}
-
-DLL_EXPORTED
-int
-libintl_wprintf (const wchar_t *format, ...)
-{
- va_list args;
- int retval;
-
- va_start (args, format);
- retval = libintl_vwprintf (format, args);
- va_end (args);
- return retval;
-}
-
-DLL_EXPORTED
-int
-libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args)
-{
- if (wcschr (format, '$') == NULL)
- return system_vswprintf (resultbuf, length, format, args);
- else
- {
- size_t maxlength = length;
- wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
- if (result != resultbuf)
- {
- if (maxlength > 0)
- {
- size_t pruned_length =
- (length < maxlength ? length : maxlength - 1);
- memcpy (resultbuf, result, pruned_length * sizeof (wchar_t));
- resultbuf[pruned_length] = 0;
- }
- free (result);
- /* Unlike vsnprintf, which has to return the number of character that
- would have been produced if the resultbuf had been sufficiently
- large, the vswprintf function has to return a negative value if
- the resultbuf was not sufficiently large. */
- if (length >= maxlength)
- return -1;
- }
- if (length > INT_MAX)
- {
- errno = EOVERFLOW;
- return -1;
- }
- else
- return length;
- }
-}
-
-DLL_EXPORTED
-int
-libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...)
-{
- va_list args;
- int retval;
-
- va_start (args, format);
- retval = libintl_vswprintf (resultbuf, length, format, args);
- va_end (args);
- return retval;
-}
-
-#endif
-
-#endif
diff --git a/intl/ref-add.sin b/intl/ref-add.sin
deleted file mode 100644
index 3678c28..0000000
--- a/intl/ref-add.sin
+++ /dev/null
@@ -1,31 +0,0 @@
-# Add this package to a list of references stored in a text file.
-#
-# Copyright (C) 2000 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-#
-# Written by Bruno Haible <haible at clisp.cons.org>.
-#
-/^# Packages using this file: / {
- s/# Packages using this file://
- ta
- :a
- s/ @PACKAGE@ / @PACKAGE@ /
- tb
- s/ $/ @PACKAGE@ /
- :b
- s/^/# Packages using this file:/
-}
diff --git a/intl/ref-del.sin b/intl/ref-del.sin
deleted file mode 100644
index 0c12d8e..0000000
--- a/intl/ref-del.sin
+++ /dev/null
@@ -1,26 +0,0 @@
-# Remove this package from a list of references stored in a text file.
-#
-# Copyright (C) 2000 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-#
-# Written by Bruno Haible <haible at clisp.cons.org>.
-#
-/^# Packages using this file: / {
- s/# Packages using this file://
- s/ @PACKAGE@ / /
- s/^/# Packages using this file:/
-}
diff --git a/intl/relocatable.c b/intl/relocatable.c
deleted file mode 100644
index 5e1dde6..0000000
--- a/intl/relocatable.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/* Provide relocatable packages.
- Copyright (C) 2003-2006 Free Software Foundation, Inc.
- Written by Bruno Haible <bruno at clisp.org>, 2003.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-
-/* Tell glibc's <stdio.h> to provide a prototype for getline().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#include <config.h>
-
-/* Specification. */
-#include "relocatable.h"
-
-#if ENABLE_RELOCATABLE
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef NO_XMALLOC
-# define xmalloc malloc
-#else
-# include "xalloc.h"
-#endif
-
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-
-#if DEPENDS_ON_LIBCHARSET
-# include <libcharset.h>
-#endif
-#if DEPENDS_ON_LIBICONV && HAVE_ICONV
-# include <iconv.h>
-#endif
-#if DEPENDS_ON_LIBINTL && ENABLE_NLS
-# include <libintl.h>
-#endif
-
-/* Faked cheap 'bool'. */
-#undef bool
-#undef false
-#undef true
-#define bool int
-#define false 0
-#define true 1
-
-/* Pathname support.
- ISSLASH(C) tests whether C is a directory separator character.
- IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
- */
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
- /* Win32, Cygwin, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-# define HAS_DEVICE(P) \
- ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
- && (P)[1] == ':')
-# define IS_PATH_WITH_DIR(P) \
- (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
-# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
-#else
- /* Unix */
-# define ISSLASH(C) ((C) == '/')
-# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
-# define FILE_SYSTEM_PREFIX_LEN(P) 0
-#endif
-
-/* Original installation prefix. */
-static char *orig_prefix;
-static size_t orig_prefix_len;
-/* Current installation prefix. */
-static char *curr_prefix;
-static size_t curr_prefix_len;
-/* These prefixes do not end in a slash. Anything that will be concatenated
- to them must start with a slash. */
-
-/* Sets the original and the current installation prefix of this module.
- Relocation simply replaces a pathname starting with the original prefix
- by the corresponding pathname with the current prefix instead. Both
- prefixes should be directory names without trailing slash (i.e. use ""
- instead of "/"). */
-static void
-set_this_relocation_prefix (const char *orig_prefix_arg,
- const char *curr_prefix_arg)
-{
- if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
- /* Optimization: if orig_prefix and curr_prefix are equal, the
- relocation is a nop. */
- && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
- {
- /* Duplicate the argument strings. */
- char *memory;
-
- orig_prefix_len = strlen (orig_prefix_arg);
- curr_prefix_len = strlen (curr_prefix_arg);
- memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
-#ifdef NO_XMALLOC
- if (memory != NULL)
-#endif
- {
- memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
- orig_prefix = memory;
- memory += orig_prefix_len + 1;
- memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
- curr_prefix = memory;
- return;
- }
- }
- orig_prefix = NULL;
- curr_prefix = NULL;
- /* Don't worry about wasted memory here - this function is usually only
- called once. */
-}
-
-/* Sets the original and the current installation prefix of the package.
- Relocation simply replaces a pathname starting with the original prefix
- by the corresponding pathname with the current prefix instead. Both
- prefixes should be directory names without trailing slash (i.e. use ""
- instead of "/"). */
-void
-set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
-{
- set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
-
- /* Now notify all dependent libraries. */
-#if DEPENDS_ON_LIBCHARSET
- libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
-#endif
-#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
- libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
-#endif
-#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
- libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
-#endif
-}
-
-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
-
-/* Convenience function:
- Computes the current installation prefix, based on the original
- installation prefix, the original installation directory of a particular
- file, and the current pathname of this file. Returns NULL upon failure. */
-#ifdef IN_LIBRARY
-#define compute_curr_prefix local_compute_curr_prefix
-static
-#endif
-const char *
-compute_curr_prefix (const char *orig_installprefix,
- const char *orig_installdir,
- const char *curr_pathname)
-{
- const char *curr_installdir;
- const char *rel_installdir;
-
- if (curr_pathname == NULL)
- return NULL;
-
- /* Determine the relative installation directory, relative to the prefix.
- This is simply the difference between orig_installprefix and
- orig_installdir. */
- if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
- != 0)
- /* Shouldn't happen - nothing should be installed outside $(prefix). */
- return NULL;
- rel_installdir = orig_installdir + strlen (orig_installprefix);
-
- /* Determine the current installation directory. */
- {
- const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname);
- const char *p = curr_pathname + strlen (curr_pathname);
- char *q;
-
- while (p > p_base)
- {
- p--;
- if (ISSLASH (*p))
- break;
- }
-
- q = (char *) xmalloc (p - curr_pathname + 1);
-#ifdef NO_XMALLOC
- if (q == NULL)
- return NULL;
-#endif
- memcpy (q, curr_pathname, p - curr_pathname);
- q[p - curr_pathname] = '\0';
- curr_installdir = q;
- }
-
- /* Compute the current installation prefix by removing the trailing
- rel_installdir from it. */
- {
- const char *rp = rel_installdir + strlen (rel_installdir);
- const char *cp = curr_installdir + strlen (curr_installdir);
- const char *cp_base =
- curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir);
-
- while (rp > rel_installdir && cp > cp_base)
- {
- bool same = false;
- const char *rpi = rp;
- const char *cpi = cp;
-
- while (rpi > rel_installdir && cpi > cp_base)
- {
- rpi--;
- cpi--;
- if (ISSLASH (*rpi) || ISSLASH (*cpi))
- {
- if (ISSLASH (*rpi) && ISSLASH (*cpi))
- same = true;
- break;
- }
- /* Do case-insensitive comparison if the filesystem is always or
- often case-insensitive. It's better to accept the comparison
- if the difference is only in case, rather than to fail. */
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
- /* Win32, Cygwin, OS/2, DOS - case insignificant filesystem */
- if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
- != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
- break;
-#else
- if (*rpi != *cpi)
- break;
-#endif
- }
- if (!same)
- break;
- /* The last pathname component was the same. opi and cpi now point
- to the slash before it. */
- rp = rpi;
- cp = cpi;
- }
-
- if (rp > rel_installdir)
- /* Unexpected: The curr_installdir does not end with rel_installdir. */
- return NULL;
-
- {
- size_t curr_prefix_len = cp - curr_installdir;
- char *curr_prefix;
-
- curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
-#ifdef NO_XMALLOC
- if (curr_prefix == NULL)
- return NULL;
-#endif
- memcpy (curr_prefix, curr_installdir, curr_prefix_len);
- curr_prefix[curr_prefix_len] = '\0';
-
- return curr_prefix;
- }
- }
-}
-
-#endif /* !IN_LIBRARY || PIC */
-
-#if defined PIC && defined INSTALLDIR
-
-/* Full pathname of shared library, or NULL. */
-static char *shared_library_fullname;
-
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
-
-/* Determine the full pathname of the shared library when it is loaded. */
-
-BOOL WINAPI
-DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
-{
- (void) reserved;
-
- if (event == DLL_PROCESS_ATTACH)
- {
- /* The DLL is being loaded into an application's address range. */
- static char location[MAX_PATH];
-
- if (!GetModuleFileName (module_handle, location, sizeof (location)))
- /* Shouldn't happen. */
- return FALSE;
-
- if (!IS_PATH_WITH_DIR (location))
- /* Shouldn't happen. */
- return FALSE;
-
- {
-#if defined __CYGWIN__
- /* On Cygwin, we need to convert paths coming from Win32 system calls
- to the Unix-like slashified notation. */
- static char location_as_posix_path[2 * MAX_PATH];
- /* There's no error return defined for cygwin_conv_to_posix_path.
- See cygwin-api/func-cygwin-conv-to-posix-path.html.
- Does it overflow the buffer of expected size MAX_PATH or does it
- truncate the path? I don't know. Let's catch both. */
- cygwin_conv_to_posix_path (location, location_as_posix_path);
- location_as_posix_path[MAX_PATH - 1] = '\0';
- if (strlen (location_as_posix_path) >= MAX_PATH - 1)
- /* A sign of buffer overflow or path truncation. */
- return FALSE;
- shared_library_fullname = strdup (location_as_posix_path);
-#else
- shared_library_fullname = strdup (location);
-#endif
- }
- }
-
- return TRUE;
-}
-
-#else /* Unix except Cygwin */
-
-static void
-find_shared_library_fullname ()
-{
-#if defined __linux__ && __GLIBC__ >= 2
- /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
- FILE *fp;
-
- /* Open the current process' maps file. It describes one VMA per line. */
- fp = fopen ("/proc/self/maps", "r");
- if (fp)
- {
- unsigned long address = (unsigned long) &find_shared_library_fullname;
- for (;;)
- {
- unsigned long start, end;
- int c;
-
- if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
- break;
- if (address >= start && address <= end - 1)
- {
- /* Found it. Now see if this line contains a filename. */
- while (c = getc (fp), c != EOF && c != '\n' && c != '/')
- continue;
- if (c == '/')
- {
- size_t size;
- int len;
-
- ungetc (c, fp);
- shared_library_fullname = NULL; size = 0;
- len = getline (&shared_library_fullname, &size, fp);
- if (len >= 0)
- {
- /* Success: filled shared_library_fullname. */
- if (len > 0 && shared_library_fullname[len - 1] == '\n')
- shared_library_fullname[len - 1] = '\0';
- }
- }
- break;
- }
- while (c = getc (fp), c != EOF && c != '\n')
- continue;
- }
- fclose (fp);
- }
-#endif
-}
-
-#endif /* (WIN32 or Cygwin) / (Unix except Cygwin) */
-
-/* Return the full pathname of the current shared library.
- Return NULL if unknown.
- Guaranteed to work only on Linux, Cygwin and Woe32. */
-static char *
-get_shared_library_fullname ()
-{
-#if !(defined _WIN32 || defined __WIN32__ || defined __CYGWIN__)
- static bool tried_find_shared_library_fullname;
- if (!tried_find_shared_library_fullname)
- {
- find_shared_library_fullname ();
- tried_find_shared_library_fullname = true;
- }
-#endif
- return shared_library_fullname;
-}
-
-#endif /* PIC */
-
-/* Returns the pathname, relocated according to the current installation
- directory. */
-const char *
-relocate (const char *pathname)
-{
-#if defined PIC && defined INSTALLDIR
- static int initialized;
-
- /* Initialization code for a shared library. */
- if (!initialized)
- {
- /* At this point, orig_prefix and curr_prefix likely have already been
- set through the main program's set_program_name_and_installdir
- function. This is sufficient in the case that the library has
- initially been installed in the same orig_prefix. But we can do
- better, to also cover the cases that 1. it has been installed
- in a different prefix before being moved to orig_prefix and (later)
- to curr_prefix, 2. unlike the program, it has not moved away from
- orig_prefix. */
- const char *orig_installprefix = INSTALLPREFIX;
- const char *orig_installdir = INSTALLDIR;
- const char *curr_prefix_better;
-
- curr_prefix_better =
- compute_curr_prefix (orig_installprefix, orig_installdir,
- get_shared_library_fullname ());
- if (curr_prefix_better == NULL)
- curr_prefix_better = curr_prefix;
-
- set_relocation_prefix (orig_installprefix, curr_prefix_better);
-
- initialized = 1;
- }
-#endif
-
- /* Note: It is not necessary to perform case insensitive comparison here,
- even for DOS-like filesystems, because the pathname argument was
- typically created from the same Makefile variable as orig_prefix came
- from. */
- if (orig_prefix != NULL && curr_prefix != NULL
- && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
- {
- if (pathname[orig_prefix_len] == '\0')
- /* pathname equals orig_prefix. */
- return curr_prefix;
- if (ISSLASH (pathname[orig_prefix_len]))
- {
- /* pathname starts with orig_prefix. */
- const char *pathname_tail = &pathname[orig_prefix_len];
- char *result =
- (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
-
-#ifdef NO_XMALLOC
- if (result != NULL)
-#endif
- {
- memcpy (result, curr_prefix, curr_prefix_len);
- strcpy (result + curr_prefix_len, pathname_tail);
- return result;
- }
- }
- }
- /* Nothing to relocate. */
- return pathname;
-}
-
-#endif
diff --git a/intl/relocatable.h b/intl/relocatable.h
deleted file mode 100644
index f6d3832..0000000
--- a/intl/relocatable.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Provide relocatable packages.
- Copyright (C) 2003, 2005 Free Software Foundation, Inc.
- Written by Bruno Haible <bruno at clisp.org>, 2003.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _RELOCATABLE_H
-#define _RELOCATABLE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* This can be enabled through the configure --enable-relocatable option. */
-#if ENABLE_RELOCATABLE
-
-/* When building a DLL, we must export some functions. Note that because
- this is a private .h file, we don't need to use __declspec(dllimport)
- in any case. */
-#if HAVE_VISIBILITY && BUILDING_DLL
-# define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default")))
-#elif defined _MSC_VER && BUILDING_DLL
-# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
-#else
-# define RELOCATABLE_DLL_EXPORTED
-#endif
-
-/* Sets the original and the current installation prefix of the package.
- Relocation simply replaces a pathname starting with the original prefix
- by the corresponding pathname with the current prefix instead. Both
- prefixes should be directory names without trailing slash (i.e. use ""
- instead of "/"). */
-extern RELOCATABLE_DLL_EXPORTED void
- set_relocation_prefix (const char *orig_prefix,
- const char *curr_prefix);
-
-/* Returns the pathname, relocated according to the current installation
- directory. */
-extern const char * relocate (const char *pathname);
-
-/* Memory management: relocate() leaks memory, because it has to construct
- a fresh pathname. If this is a problem because your program calls
- relocate() frequently, think about caching the result. */
-
-/* Convenience function:
- Computes the current installation prefix, based on the original
- installation prefix, the original installation directory of a particular
- file, and the current pathname of this file. Returns NULL upon failure. */
-extern const char * compute_curr_prefix (const char *orig_installprefix,
- const char *orig_installdir,
- const char *curr_pathname);
-
-#else
-
-/* By default, we use the hardwired pathnames. */
-#define relocate(pathname) (pathname)
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _RELOCATABLE_H */
diff --git a/intl/textdomain.c b/intl/textdomain.c
deleted file mode 100644
index 70131bc..0000000
--- a/intl/textdomain.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Implementation of the textdomain(3) function.
- Copyright (C) 1995-1998, 2000-2003, 2005-2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* Handle multi-threaded applications. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-# define gl_rwlock_define __libc_rwlock_define
-# define gl_rwlock_wrlock __libc_rwlock_wrlock
-# define gl_rwlock_unlock __libc_rwlock_unlock
-#else
-# include "lock.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define TEXTDOMAIN __textdomain
-# ifndef strdup
-# define strdup(str) __strdup (str)
-# endif
-#else
-# define TEXTDOMAIN libintl_textdomain
-#endif
-
-/* Lock variable to protect the global data in the gettext implementation. */
-gl_rwlock_define (extern, _nl_state_lock attribute_hidden)
-
-/* Set the current default message catalog to DOMAINNAME.
- If DOMAINNAME is null, return the current default.
- If DOMAINNAME is "", reset to the default of "messages". */
-char *
-TEXTDOMAIN (const char *domainname)
-{
- char *new_domain;
- char *old_domain;
-
- /* A NULL pointer requests the current setting. */
- if (domainname == NULL)
- return (char *) _nl_current_default_domain;
-
- gl_rwlock_wrlock (_nl_state_lock);
-
- old_domain = (char *) _nl_current_default_domain;
-
- /* If domain name is the null string set to default domain "messages". */
- if (domainname[0] == '\0'
- || strcmp (domainname, _nl_default_default_domain) == 0)
- {
- _nl_current_default_domain = _nl_default_default_domain;
- new_domain = (char *) _nl_current_default_domain;
- }
- else if (strcmp (domainname, old_domain) == 0)
- /* This can happen and people will use it to signal that some
- environment variable changed. */
- new_domain = old_domain;
- else
- {
- /* If the following malloc fails `_nl_current_default_domain'
- will be NULL. This value will be returned and so signals we
- are out of core. */
-#if defined _LIBC || defined HAVE_STRDUP
- new_domain = strdup (domainname);
-#else
- size_t len = strlen (domainname) + 1;
- new_domain = (char *) malloc (len);
- if (new_domain != NULL)
- memcpy (new_domain, domainname, len);
-#endif
-
- if (new_domain != NULL)
- _nl_current_default_domain = new_domain;
- }
-
- /* We use this possibility to signal a change of the loaded catalogs
- since this is most likely the case and there is no other easy we
- to do it. Do it only when the call was successful. */
- if (new_domain != NULL)
- {
- ++_nl_msg_cat_cntr;
-
- if (old_domain != new_domain && old_domain != _nl_default_default_domain)
- free (old_domain);
- }
-
- gl_rwlock_unlock (_nl_state_lock);
-
- return new_domain;
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__textdomain, textdomain);
-#endif
diff --git a/intl/tsearch.c b/intl/tsearch.c
deleted file mode 100644
index d549dd4..0000000
--- a/intl/tsearch.c
+++ /dev/null
@@ -1,684 +0,0 @@
-/* Copyright (C) 1995, 1996, 1997, 2000, 2006 Free Software Foundation, Inc.
- Contributed by Bernd Schmidt <crux at Pool.Informatik.RWTH-Aachen.DE>, 1997.
-
- NOTE: The canonical source of this file is maintained with the GNU C
- Library. Bugs can be reported to bug-glibc at gnu.org.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Tree search for red/black trees.
- The algorithm for adding nodes is taken from one of the many "Algorithms"
- books by Robert Sedgewick, although the implementation differs.
- The algorithm for deleting nodes can probably be found in a book named
- "Introduction to Algorithms" by Cormen/Leiserson/Rivest. At least that's
- the book that my professor took most algorithms from during the "Data
- Structures" course...
-
- Totally public domain. */
-
-/* Red/black trees are binary trees in which the edges are colored either red
- or black. They have the following properties:
- 1. The number of black edges on every path from the root to a leaf is
- constant.
- 2. No two red edges are adjacent.
- Therefore there is an upper bound on the length of every path, it's
- O(log n) where n is the number of nodes in the tree. No path can be longer
- than 1+2*P where P is the length of the shortest path in the tree.
- Useful for the implementation:
- 3. If one of the children of a node is NULL, then the other one is red
- (if it exists).
-
- In the implementation, not the edges are colored, but the nodes. The color
- interpreted as the color of the edge leading to this node. The color is
- meaningless for the root node, but we color the root node black for
- convenience. All added nodes are red initially.
-
- Adding to a red/black tree is rather easy. The right place is searched
- with a usual binary tree search. Additionally, whenever a node N is
- reached that has two red successors, the successors are colored black and
- the node itself colored red. This moves red edges up the tree where they
- pose less of a problem once we get to really insert the new node. Changing
- N's color to red may violate rule 2, however, so rotations may become
- necessary to restore the invariants. Adding a new red leaf may violate
- the same rule, so afterwards an additional check is run and the tree
- possibly rotated.
-
- Deleting is hairy. There are mainly two nodes involved: the node to be
- deleted (n1), and another node that is to be unchained from the tree (n2).
- If n1 has a successor (the node with a smallest key that is larger than
- n1), then the successor becomes n2 and its contents are copied into n1,
- otherwise n1 becomes n2.
- Unchaining a node may violate rule 1: if n2 is black, one subtree is
- missing one black edge afterwards. The algorithm must try to move this
- error upwards towards the root, so that the subtree that does not have
- enough black edges becomes the whole tree. Once that happens, the error
- has disappeared. It may not be necessary to go all the way up, since it
- is possible that rotations and recoloring can fix the error before that.
-
- Although the deletion algorithm must walk upwards through the tree, we
- do not store parent pointers in the nodes. Instead, delete allocates a
- small array of parent pointers and fills it while descending the tree.
- Since we know that the length of a path is O(log n), where n is the number
- of nodes, this is likely to use less memory. */
-
-/* Tree rotations look like this:
- A C
- / \ / \
- B C A G
- / \ / \ --> / \
- D E F G B F
- / \
- D E
-
- In this case, A has been rotated left. This preserves the ordering of the
- binary tree. */
-
-#include <config.h>
-
-/* Specification. */
-#ifdef IN_LIBINTL
-# include "tsearch.h"
-#else
-# include <search.h>
-#endif
-
-#include <stdlib.h>
-
-typedef int (*__compar_fn_t) (const void *, const void *);
-typedef void (*__action_fn_t) (const void *, VISIT, int);
-
-#ifndef weak_alias
-# define __tsearch tsearch
-# define __tfind tfind
-# define __tdelete tdelete
-# define __twalk twalk
-#endif
-
-#ifndef internal_function
-/* Inside GNU libc we mark some function in a special way. In other
- environments simply ignore the marking. */
-# define internal_function
-#endif
-
-typedef struct node_t
-{
- /* Callers expect this to be the first element in the structure - do not
- move! */
- const void *key;
- struct node_t *left;
- struct node_t *right;
- unsigned int red:1;
-} *node;
-typedef const struct node_t *const_node;
-
-#undef DEBUGGING
-
-#ifdef DEBUGGING
-
-/* Routines to check tree invariants. */
-
-#include <assert.h>
-
-#define CHECK_TREE(a) check_tree(a)
-
-static void
-check_tree_recurse (node p, int d_sofar, int d_total)
-{
- if (p == NULL)
- {
- assert (d_sofar == d_total);
- return;
- }
-
- check_tree_recurse (p->left, d_sofar + (p->left && !p->left->red), d_total);
- check_tree_recurse (p->right, d_sofar + (p->right && !p->right->red), d_total);
- if (p->left)
- assert (!(p->left->red && p->red));
- if (p->right)
- assert (!(p->right->red && p->red));
-}
-
-static void
-check_tree (node root)
-{
- int cnt = 0;
- node p;
- if (root == NULL)
- return;
- root->red = 0;
- for(p = root->left; p; p = p->left)
- cnt += !p->red;
- check_tree_recurse (root, 0, cnt);
-}
-
-
-#else
-
-#define CHECK_TREE(a)
-
-#endif
-
-/* Possibly "split" a node with two red successors, and/or fix up two red
- edges in a row. ROOTP is a pointer to the lowest node we visited, PARENTP
- and GPARENTP pointers to its parent/grandparent. P_R and GP_R contain the
- comparison values that determined which way was taken in the tree to reach
- ROOTP. MODE is 1 if we need not do the split, but must check for two red
- edges between GPARENTP and ROOTP. */
-static void
-maybe_split_for_insert (node *rootp, node *parentp, node *gparentp,
- int p_r, int gp_r, int mode)
-{
- node root = *rootp;
- node *rp, *lp;
- rp = &(*rootp)->right;
- lp = &(*rootp)->left;
-
- /* See if we have to split this node (both successors red). */
- if (mode == 1
- || ((*rp) != NULL && (*lp) != NULL && (*rp)->red && (*lp)->red))
- {
- /* This node becomes red, its successors black. */
- root->red = 1;
- if (*rp)
- (*rp)->red = 0;
- if (*lp)
- (*lp)->red = 0;
-
- /* If the parent of this node is also red, we have to do
- rotations. */
- if (parentp != NULL && (*parentp)->red)
- {
- node gp = *gparentp;
- node p = *parentp;
- /* There are two main cases:
- 1. The edge types (left or right) of the two red edges differ.
- 2. Both red edges are of the same type.
- There exist two symmetries of each case, so there is a total of
- 4 cases. */
- if ((p_r > 0) != (gp_r > 0))
- {
- /* Put the child at the top of the tree, with its parent
- and grandparent as successors. */
- p->red = 1;
- gp->red = 1;
- root->red = 0;
- if (p_r < 0)
- {
- /* Child is left of parent. */
- p->left = *rp;
- *rp = p;
- gp->right = *lp;
- *lp = gp;
- }
- else
- {
- /* Child is right of parent. */
- p->right = *lp;
- *lp = p;
- gp->left = *rp;
- *rp = gp;
- }
- *gparentp = root;
- }
- else
- {
- *gparentp = *parentp;
- /* Parent becomes the top of the tree, grandparent and
- child are its successors. */
- p->red = 0;
- gp->red = 1;
- if (p_r < 0)
- {
- /* Left edges. */
- gp->left = p->right;
- p->right = gp;
- }
- else
- {
- /* Right edges. */
- gp->right = p->left;
- p->left = gp;
- }
- }
- }
- }
-}
-
-/* Find or insert datum into search tree.
- KEY is the key to be located, ROOTP is the address of tree root,
- COMPAR the ordering function. */
-void *
-__tsearch (const void *key, void **vrootp, __compar_fn_t compar)
-{
- node q;
- node *parentp = NULL, *gparentp = NULL;
- node *rootp = (node *) vrootp;
- node *nextp;
- int r = 0, p_r = 0, gp_r = 0; /* No they might not, Mr Compiler. */
-
- if (rootp == NULL)
- return NULL;
-
- /* This saves some additional tests below. */
- if (*rootp != NULL)
- (*rootp)->red = 0;
-
- CHECK_TREE (*rootp);
-
- nextp = rootp;
- while (*nextp != NULL)
- {
- node root = *rootp;
- r = (*compar) (key, root->key);
- if (r == 0)
- return root;
-
- maybe_split_for_insert (rootp, parentp, gparentp, p_r, gp_r, 0);
- /* If that did any rotations, parentp and gparentp are now garbage.
- That doesn't matter, because the values they contain are never
- used again in that case. */
-
- nextp = r < 0 ? &root->left : &root->right;
- if (*nextp == NULL)
- break;
-
- gparentp = parentp;
- parentp = rootp;
- rootp = nextp;
-
- gp_r = p_r;
- p_r = r;
- }
-
- q = (struct node_t *) malloc (sizeof (struct node_t));
- if (q != NULL)
- {
- *nextp = q; /* link new node to old */
- q->key = key; /* initialize new node */
- q->red = 1;
- q->left = q->right = NULL;
-
- if (nextp != rootp)
- /* There may be two red edges in a row now, which we must avoid by
- rotating the tree. */
- maybe_split_for_insert (nextp, rootp, parentp, r, p_r, 1);
- }
-
- return q;
-}
-#ifdef weak_alias
-weak_alias (__tsearch, tsearch)
-#endif
-
-
-/* Find datum in search tree.
- KEY is the key to be located, ROOTP is the address of tree root,
- COMPAR the ordering function. */
-void *
-__tfind (key, vrootp, compar)
- const void *key;
- void *const *vrootp;
- __compar_fn_t compar;
-{
- node *rootp = (node *) vrootp;
-
- if (rootp == NULL)
- return NULL;
-
- CHECK_TREE (*rootp);
-
- while (*rootp != NULL)
- {
- node root = *rootp;
- int r;
-
- r = (*compar) (key, root->key);
- if (r == 0)
- return root;
-
- rootp = r < 0 ? &root->left : &root->right;
- }
- return NULL;
-}
-#ifdef weak_alias
-weak_alias (__tfind, tfind)
-#endif
-
-
-/* Delete node with given key.
- KEY is the key to be deleted, ROOTP is the address of the root of tree,
- COMPAR the comparison function. */
-void *
-__tdelete (const void *key, void **vrootp, __compar_fn_t compar)
-{
- node p, q, r, retval;
- int cmp;
- node *rootp = (node *) vrootp;
- node root, unchained;
- /* Stack of nodes so we remember the parents without recursion. It's
- _very_ unlikely that there are paths longer than 40 nodes. The tree
- would need to have around 250.000 nodes. */
- int stacksize = 100;
- int sp = 0;
- node *nodestack[100];
-
- if (rootp == NULL)
- return NULL;
- p = *rootp;
- if (p == NULL)
- return NULL;
-
- CHECK_TREE (p);
-
- while ((cmp = (*compar) (key, (*rootp)->key)) != 0)
- {
- if (sp == stacksize)
- abort ();
-
- nodestack[sp++] = rootp;
- p = *rootp;
- rootp = ((cmp < 0)
- ? &(*rootp)->left
- : &(*rootp)->right);
- if (*rootp == NULL)
- return NULL;
- }
-
- /* This is bogus if the node to be deleted is the root... this routine
- really should return an integer with 0 for success, -1 for failure
- and errno = ESRCH or something. */
- retval = p;
-
- /* We don't unchain the node we want to delete. Instead, we overwrite
- it with its successor and unchain the successor. If there is no
- successor, we really unchain the node to be deleted. */
-
- root = *rootp;
-
- r = root->right;
- q = root->left;
-
- if (q == NULL || r == NULL)
- unchained = root;
- else
- {
- node *parent = rootp, *up = &root->right;
- for (;;)
- {
- if (sp == stacksize)
- abort ();
- nodestack[sp++] = parent;
- parent = up;
- if ((*up)->left == NULL)
- break;
- up = &(*up)->left;
- }
- unchained = *up;
- }
-
- /* We know that either the left or right successor of UNCHAINED is NULL.
- R becomes the other one, it is chained into the parent of UNCHAINED. */
- r = unchained->left;
- if (r == NULL)
- r = unchained->right;
- if (sp == 0)
- *rootp = r;
- else
- {
- q = *nodestack[sp-1];
- if (unchained == q->right)
- q->right = r;
- else
- q->left = r;
- }
-
- if (unchained != root)
- root->key = unchained->key;
- if (!unchained->red)
- {
- /* Now we lost a black edge, which means that the number of black
- edges on every path is no longer constant. We must balance the
- tree. */
- /* NODESTACK now contains all parents of R. R is likely to be NULL
- in the first iteration. */
- /* NULL nodes are considered black throughout - this is necessary for
- correctness. */
- while (sp > 0 && (r == NULL || !r->red))
- {
- node *pp = nodestack[sp - 1];
- p = *pp;
- /* Two symmetric cases. */
- if (r == p->left)
- {
- /* Q is R's brother, P is R's parent. The subtree with root
- R has one black edge less than the subtree with root Q. */
- q = p->right;
- if (q->red)
- {
- /* If Q is red, we know that P is black. We rotate P left
- so that Q becomes the top node in the tree, with P below
- it. P is colored red, Q is colored black.
- This action does not change the black edge count for any
- leaf in the tree, but we will be able to recognize one
- of the following situations, which all require that Q
- is black. */
- q->red = 0;
- p->red = 1;
- /* Left rotate p. */
- p->right = q->left;
- q->left = p;
- *pp = q;
- /* Make sure pp is right if the case below tries to use
- it. */
- nodestack[sp++] = pp = &q->left;
- q = p->right;
- }
- /* We know that Q can't be NULL here. We also know that Q is
- black. */
- if ((q->left == NULL || !q->left->red)
- && (q->right == NULL || !q->right->red))
- {
- /* Q has two black successors. We can simply color Q red.
- The whole subtree with root P is now missing one black
- edge. Note that this action can temporarily make the
- tree invalid (if P is red). But we will exit the loop
- in that case and set P black, which both makes the tree
- valid and also makes the black edge count come out
- right. If P is black, we are at least one step closer
- to the root and we'll try again the next iteration. */
- q->red = 1;
- r = p;
- }
- else
- {
- /* Q is black, one of Q's successors is red. We can
- repair the tree with one operation and will exit the
- loop afterwards. */
- if (q->right == NULL || !q->right->red)
- {
- /* The left one is red. We perform the same action as
- in maybe_split_for_insert where two red edges are
- adjacent but point in different directions:
- Q's left successor (let's call it Q2) becomes the
- top of the subtree we are looking at, its parent (Q)
- and grandparent (P) become its successors. The former
- successors of Q2 are placed below P and Q.
- P becomes black, and Q2 gets the color that P had.
- This changes the black edge count only for node R and
- its successors. */
- node q2 = q->left;
- q2->red = p->red;
- p->right = q2->left;
- q->left = q2->right;
- q2->right = q;
- q2->left = p;
- *pp = q2;
- p->red = 0;
- }
- else
- {
- /* It's the right one. Rotate P left. P becomes black,
- and Q gets the color that P had. Q's right successor
- also becomes black. This changes the black edge
- count only for node R and its successors. */
- q->red = p->red;
- p->red = 0;
-
- q->right->red = 0;
-
- /* left rotate p */
- p->right = q->left;
- q->left = p;
- *pp = q;
- }
-
- /* We're done. */
- sp = 1;
- r = NULL;
- }
- }
- else
- {
- /* Comments: see above. */
- q = p->left;
- if (q->red)
- {
- q->red = 0;
- p->red = 1;
- p->left = q->right;
- q->right = p;
- *pp = q;
- nodestack[sp++] = pp = &q->right;
- q = p->left;
- }
- if ((q->right == NULL || !q->right->red)
- && (q->left == NULL || !q->left->red))
- {
- q->red = 1;
- r = p;
- }
- else
- {
- if (q->left == NULL || !q->left->red)
- {
- node q2 = q->right;
- q2->red = p->red;
- p->left = q2->right;
- q->right = q2->left;
- q2->left = q;
- q2->right = p;
- *pp = q2;
- p->red = 0;
- }
- else
- {
- q->red = p->red;
- p->red = 0;
- q->left->red = 0;
- p->left = q->right;
- q->right = p;
- *pp = q;
- }
- sp = 1;
- r = NULL;
- }
- }
- --sp;
- }
- if (r != NULL)
- r->red = 0;
- }
-
- free (unchained);
- return retval;
-}
-#ifdef weak_alias
-weak_alias (__tdelete, tdelete)
-#endif
-
-
-/* Walk the nodes of a tree.
- ROOT is the root of the tree to be walked, ACTION the function to be
- called at each node. LEVEL is the level of ROOT in the whole tree. */
-static void
-internal_function
-trecurse (const void *vroot, __action_fn_t action, int level)
-{
- const_node root = (const_node) vroot;
-
- if (root->left == NULL && root->right == NULL)
- (*action) (root, leaf, level);
- else
- {
- (*action) (root, preorder, level);
- if (root->left != NULL)
- trecurse (root->left, action, level + 1);
- (*action) (root, postorder, level);
- if (root->right != NULL)
- trecurse (root->right, action, level + 1);
- (*action) (root, endorder, level);
- }
-}
-
-
-/* Walk the nodes of a tree.
- ROOT is the root of the tree to be walked, ACTION the function to be
- called at each node. */
-void
-__twalk (const void *vroot, __action_fn_t action)
-{
- const_node root = (const_node) vroot;
-
- CHECK_TREE (root);
-
- if (root != NULL && action != NULL)
- trecurse (root, action, 0);
-}
-#ifdef weak_alias
-weak_alias (__twalk, twalk)
-#endif
-
-
-#ifdef _LIBC
-
-/* The standardized functions miss an important functionality: the
- tree cannot be removed easily. We provide a function to do this. */
-static void
-internal_function
-tdestroy_recurse (node root, __free_fn_t freefct)
-{
- if (root->left != NULL)
- tdestroy_recurse (root->left, freefct);
- if (root->right != NULL)
- tdestroy_recurse (root->right, freefct);
- (*freefct) ((void *) root->key);
- /* Free the node itself. */
- free (root);
-}
-
-void
-__tdestroy (void *vroot, __free_fn_t freefct)
-{
- node root = (node) vroot;
-
- CHECK_TREE (root);
-
- if (root != NULL)
- tdestroy_recurse (root, freefct);
-}
-weak_alias (__tdestroy, tdestroy)
-
-#endif /* _LIBC */
diff --git a/intl/tsearch.h b/intl/tsearch.h
deleted file mode 100644
index f08e4a9..0000000
--- a/intl/tsearch.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Binary tree data structure.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _TSEARCH_H
-#define _TSEARCH_H
-
-#if HAVE_TSEARCH
-
-/* Get tseach(), tfind(), tdelete(), twalk() declarations. */
-#include <search.h>
-
-#else
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* See <http://www.opengroup.org/susv3xbd/search.h.html>,
- <http://www.opengroup.org/susv3xsh/tsearch.html>
- for details. */
-
-typedef enum
-{
- preorder,
- postorder,
- endorder,
- leaf
-}
-VISIT;
-
-/* Searches an element in the tree *VROOTP that compares equal to KEY.
- If one is found, it is returned. Otherwise, a new element equal to KEY
- is inserted in the tree and is returned. */
-extern void * tsearch (const void *key, void **vrootp,
- int (*compar) (const void *, const void *));
-
-/* Searches an element in the tree *VROOTP that compares equal to KEY.
- If one is found, it is returned. Otherwise, NULL is returned. */
-extern void * tfind (const void *key, void *const *vrootp,
- int (*compar) (const void *, const void *));
-
-/* Searches an element in the tree *VROOTP that compares equal to KEY.
- If one is found, it is removed from the tree, and its parent node is
- returned. Otherwise, NULL is returned. */
-extern void * tdelete (const void *key, void **vrootp,
- int (*compar) (const void *, const void *));
-
-/* Perform a depth-first, left-to-right traversal of the tree VROOT.
- The ACTION function is called:
- - for non-leaf nodes: 3 times, before the left subtree traversal,
- after the left subtree traversal but before the right subtree traversal,
- and after the right subtree traversal,
- - for leaf nodes: once.
- The arguments passed to ACTION are:
- 1. the node; it can be casted to a 'const void * const *', i.e. into a
- pointer to the key,
- 2. an indicator which visit of the node this is,
- 3. the level of the node in the tree (0 for the root). */
-extern void twalk (const void *vroot,
- void (*action) (const void *, VISIT, int));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-#endif /* _TSEARCH_H */
diff --git a/intl/vasnprintf.c b/intl/vasnprintf.c
deleted file mode 100644
index 4a8e7f0..0000000
--- a/intl/vasnprintf.c
+++ /dev/null
@@ -1,4677 +0,0 @@
-/* vsprintf with automatic memory allocation.
- Copyright (C) 1999, 2002-2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* This file can be parametrized with the following macros:
- VASNPRINTF The name of the function being defined.
- FCHAR_T The element type of the format string.
- DCHAR_T The element type of the destination (result) string.
- FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters
- in the format string are ASCII. MUST be set if
- FCHAR_T and DCHAR_T are not the same type.
- DIRECTIVE Structure denoting a format directive.
- Depends on FCHAR_T.
- DIRECTIVES Structure denoting the set of format directives of a
- format string. Depends on FCHAR_T.
- PRINTF_PARSE Function that parses a format string.
- Depends on FCHAR_T.
- DCHAR_CPY memcpy like function for DCHAR_T[] arrays.
- DCHAR_SET memset like function for DCHAR_T[] arrays.
- DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays.
- SNPRINTF The system's snprintf (or similar) function.
- This may be either snprintf or swprintf.
- TCHAR_T The element type of the argument and result string
- of the said SNPRINTF function. This may be either
- char or wchar_t. The code exploits that
- sizeof (TCHAR_T) | sizeof (DCHAR_T) and
- alignof (TCHAR_T) <= alignof (DCHAR_T).
- DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type.
- DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[].
- DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t.
- DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t.
- DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */
-
-/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifndef VASNPRINTF
-# include <config.h>
-#endif
-#ifndef IN_LIBINTL
-# include <alloca.h>
-#endif
-
-/* Specification. */
-#ifndef VASNPRINTF
-# if WIDE_CHAR_VERSION
-# include "vasnwprintf.h"
-# else
-# include "vasnprintf.h"
-# endif
-#endif
-
-#include <locale.h> /* localeconv() */
-#include <stdio.h> /* snprintf(), sprintf() */
-#include <stdlib.h> /* abort(), malloc(), realloc(), free() */
-#include <string.h> /* memcpy(), strlen() */
-#include <errno.h> /* errno */
-#include <limits.h> /* CHAR_BIT */
-#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */
-#if HAVE_NL_LANGINFO
-# include <langinfo.h>
-#endif
-#ifndef VASNPRINTF
-# if WIDE_CHAR_VERSION
-# include "wprintf-parse.h"
-# else
-# include "printf-parse.h"
-# endif
-#endif
-
-/* Checked size_t computations. */
-#include "xsize.h"
-
-#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "float+.h"
-#endif
-
-#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "isnan.h"
-#endif
-
-#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "isnanl-nolibm.h"
-# include "fpucw.h"
-#endif
-
-#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "isnan.h"
-# include "printf-frexp.h"
-#endif
-
-#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "isnanl-nolibm.h"
-# include "printf-frexpl.h"
-# include "fpucw.h"
-#endif
-
-/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */
-#ifndef EOVERFLOW
-# define EOVERFLOW E2BIG
-#endif
-
-#if HAVE_WCHAR_T
-# if HAVE_WCSLEN
-# define local_wcslen wcslen
-# else
- /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
- a dependency towards this library, here is a local substitute.
- Define this substitute only once, even if this file is included
- twice in the same compilation unit. */
-# ifndef local_wcslen_defined
-# define local_wcslen_defined 1
-static size_t
-local_wcslen (const wchar_t *s)
-{
- const wchar_t *ptr;
-
- for (ptr = s; *ptr != (wchar_t) 0; ptr++)
- ;
- return ptr - s;
-}
-# endif
-# endif
-#endif
-
-/* Default parameters. */
-#ifndef VASNPRINTF
-# if WIDE_CHAR_VERSION
-# define VASNPRINTF vasnwprintf
-# define FCHAR_T wchar_t
-# define DCHAR_T wchar_t
-# define TCHAR_T wchar_t
-# define DCHAR_IS_TCHAR 1
-# define DIRECTIVE wchar_t_directive
-# define DIRECTIVES wchar_t_directives
-# define PRINTF_PARSE wprintf_parse
-# define DCHAR_CPY wmemcpy
-# else
-# define VASNPRINTF vasnprintf
-# define FCHAR_T char
-# define DCHAR_T char
-# define TCHAR_T char
-# define DCHAR_IS_TCHAR 1
-# define DIRECTIVE char_directive
-# define DIRECTIVES char_directives
-# define PRINTF_PARSE printf_parse
-# define DCHAR_CPY memcpy
-# endif
-#endif
-#if WIDE_CHAR_VERSION
- /* TCHAR_T is wchar_t. */
-# define USE_SNPRINTF 1
-# if HAVE_DECL__SNWPRINTF
- /* On Windows, the function swprintf() has a different signature than
- on Unix; we use the _snwprintf() function instead. */
-# define SNPRINTF _snwprintf
-# else
- /* Unix. */
-# define SNPRINTF swprintf
-# endif
-#else
- /* TCHAR_T is char. */
-# /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'.
- But don't use it on BeOS, since BeOS snprintf produces no output if the
- size argument is >= 0x3000000. */
-# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__
-# define USE_SNPRINTF 1
-# else
-# define USE_SNPRINTF 0
-# endif
-# if HAVE_DECL__SNPRINTF
- /* Windows. */
-# define SNPRINTF _snprintf
-# else
- /* Unix. */
-# define SNPRINTF snprintf
- /* Here we need to call the native snprintf, not rpl_snprintf. */
-# undef snprintf
-# endif
-#endif
-/* Here we need to call the native sprintf, not rpl_sprintf. */
-#undef sprintf
-
-#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
-/* Determine the decimal-point character according to the current locale. */
-# ifndef decimal_point_char_defined
-# define decimal_point_char_defined 1
-static char
-decimal_point_char ()
-{
- const char *point;
- /* Determine it in a multithread-safe way. We know nl_langinfo is
- multithread-safe on glibc systems, but is not required to be multithread-
- safe by POSIX. sprintf(), however, is multithread-safe. localeconv()
- is rarely multithread-safe. */
-# if HAVE_NL_LANGINFO && __GLIBC__
- point = nl_langinfo (RADIXCHAR);
-# elif 1
- char pointbuf[5];
- sprintf (pointbuf, "%#.0f", 1.0);
- point = &pointbuf[1];
-# else
- point = localeconv () -> decimal_point;
-# endif
- /* The decimal point is always a single byte: either '.' or ','. */
- return (point[0] != '\0' ? point[0] : '.');
-}
-# endif
-#endif
-
-#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL
-
-/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */
-static int
-is_infinite_or_zero (double x)
-{
- return isnan (x) || x + x == x;
-}
-
-#endif
-
-#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL
-
-/* Equivalent to !isfinite(x), but does not require libm. */
-static int
-is_infinitel (long double x)
-{
- return isnanl (x) || (x + x == x && x != 0.0L);
-}
-
-#endif
-
-#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
-
-/* Converting 'long double' to decimal without rare rounding bugs requires
- real bignums. We use the naming conventions of GNU gmp, but vastly simpler
- (and slower) algorithms. */
-
-typedef unsigned int mp_limb_t;
-# define GMP_LIMB_BITS 32
-typedef int mp_limb_verify[2 * (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS) - 1];
-
-typedef unsigned long long mp_twolimb_t;
-# define GMP_TWOLIMB_BITS 64
-typedef int mp_twolimb_verify[2 * (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS) - 1];
-
-/* Representation of a bignum >= 0. */
-typedef struct
-{
- size_t nlimbs;
- mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */
-} mpn_t;
-
-/* Compute the product of two bignums >= 0.
- Return the allocated memory in case of success, NULL in case of memory
- allocation failure. */
-static void *
-multiply (mpn_t src1, mpn_t src2, mpn_t *dest)
-{
- const mp_limb_t *p1;
- const mp_limb_t *p2;
- size_t len1;
- size_t len2;
-
- if (src1.nlimbs <= src2.nlimbs)
- {
- len1 = src1.nlimbs;
- p1 = src1.limbs;
- len2 = src2.nlimbs;
- p2 = src2.limbs;
- }
- else
- {
- len1 = src2.nlimbs;
- p1 = src2.limbs;
- len2 = src1.nlimbs;
- p2 = src1.limbs;
- }
- /* Now 0 <= len1 <= len2. */
- if (len1 == 0)
- {
- /* src1 or src2 is zero. */
- dest->nlimbs = 0;
- dest->limbs = (mp_limb_t *) malloc (1);
- }
- else
- {
- /* Here 1 <= len1 <= len2. */
- size_t dlen;
- mp_limb_t *dp;
- size_t k, i, j;
-
- dlen = len1 + len2;
- dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t));
- if (dp == NULL)
- return NULL;
- for (k = len2; k > 0; )
- dp[--k] = 0;
- for (i = 0; i < len1; i++)
- {
- mp_limb_t digit1 = p1[i];
- mp_twolimb_t carry = 0;
- for (j = 0; j < len2; j++)
- {
- mp_limb_t digit2 = p2[j];
- carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
- carry += dp[i + j];
- dp[i + j] = (mp_limb_t) carry;
- carry = carry >> GMP_LIMB_BITS;
- }
- dp[i + len2] = (mp_limb_t) carry;
- }
- /* Normalise. */
- while (dlen > 0 && dp[dlen - 1] == 0)
- dlen--;
- dest->nlimbs = dlen;
- dest->limbs = dp;
- }
- return dest->limbs;
-}
-
-/* Compute the quotient of a bignum a >= 0 and a bignum b > 0.
- a is written as a = q * b + r with 0 <= r < b. q is the quotient, r
- the remainder.
- Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd,
- q is incremented.
- Return the allocated memory in case of success, NULL in case of memory
- allocation failure. */
-static void *
-divide (mpn_t a, mpn_t b, mpn_t *q)
-{
- /* Algorithm:
- First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]]
- with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS).
- If m<n, then q:=0 and r:=a.
- If m>=n=1, perform a single-precision division:
- r:=0, j:=m,
- while j>0 do
- {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j =
- = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta}
- j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j].
- Normalise [q[m-1],...,q[0]], yields q.
- If m>=n>1, perform a multiple-precision division:
- We have a/b < beta^(m-n+1).
- s:=intDsize-1-(hightest bit in b[n-1]), 0<=s<intDsize.
- Shift a and b left by s bits, copying them. r:=a.
- r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2.
- For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).}
- Compute q* :
- q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]).
- In case of overflow (q* >= beta) set q* := beta-1.
- Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2]
- and c3 := b[n-2] * q*.
- {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow
- occurred. Furthermore 0 <= c3 < beta^2.
- If there was overflow and
- r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2,
- the next test can be skipped.}
- While c3 > c2, {Here 0 <= c2 < c3 < beta^2}
- Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2].
- If q* > 0:
- Put r := r - b * q* * beta^j. In detail:
- [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]].
- hence: u:=0, for i:=0 to n-1 do
- u := u + q* * b[i],
- r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry),
- u:=u div beta (+ 1, if carry in subtraction)
- r[n+j]:=r[n+j]-u.
- {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1
- < q* + 1 <= beta,
- the carry u does not overflow.}
- If a negative carry occurs, put q* := q* - 1
- and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]].
- Set q[j] := q*.
- Normalise [q[m-n],..,q[0]]; this yields the quotient q.
- Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the
- rest r.
- The room for q[j] can be allocated at the memory location of r[n+j].
- Finally, round-to-even:
- Shift r left by 1 bit.
- If r > b or if r = b and q[0] is odd, q := q+1.
- */
- const mp_limb_t *a_ptr = a.limbs;
- size_t a_len = a.nlimbs;
- const mp_limb_t *b_ptr = b.limbs;
- size_t b_len = b.nlimbs;
- mp_limb_t *roomptr;
- mp_limb_t *tmp_roomptr = NULL;
- mp_limb_t *q_ptr;
- size_t q_len;
- mp_limb_t *r_ptr;
- size_t r_len;
-
- /* Allocate room for a_len+2 digits.
- (Need a_len+1 digits for the real division and 1 more digit for the
- final rounding of q.) */
- roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t));
- if (roomptr == NULL)
- return NULL;
-
- /* Normalise a. */
- while (a_len > 0 && a_ptr[a_len - 1] == 0)
- a_len--;
-
- /* Normalise b. */
- for (;;)
- {
- if (b_len == 0)
- /* Division by zero. */
- abort ();
- if (b_ptr[b_len - 1] == 0)
- b_len--;
- else
- break;
- }
-
- /* Here m = a_len >= 0 and n = b_len > 0. */
-
- if (a_len < b_len)
- {
- /* m<n: trivial case. q=0, r := copy of a. */
- r_ptr = roomptr;
- r_len = a_len;
- memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
- q_ptr = roomptr + a_len;
- q_len = 0;
- }
- else if (b_len == 1)
- {
- /* n=1: single precision division.
- beta^(m-1) <= a < beta^m ==> beta^(m-2) <= a/b < beta^m */
- r_ptr = roomptr;
- q_ptr = roomptr + 1;
- {
- mp_limb_t den = b_ptr[0];
- mp_limb_t remainder = 0;
- const mp_limb_t *sourceptr = a_ptr + a_len;
- mp_limb_t *destptr = q_ptr + a_len;
- size_t count;
- for (count = a_len; count > 0; count--)
- {
- mp_twolimb_t num =
- ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr;
- *--destptr = num / den;
- remainder = num % den;
- }
- /* Normalise and store r. */
- if (remainder > 0)
- {
- r_ptr[0] = remainder;
- r_len = 1;
- }
- else
- r_len = 0;
- /* Normalise q. */
- q_len = a_len;
- if (q_ptr[q_len - 1] == 0)
- q_len--;
- }
- }
- else
- {
- /* n>1: multiple precision division.
- beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==>
- beta^(m-n-1) <= a/b < beta^(m-n+1). */
- /* Determine s. */
- size_t s;
- {
- mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */
- s = 31;
- if (msd >= 0x10000)
- {
- msd = msd >> 16;
- s -= 16;
- }
- if (msd >= 0x100)
- {
- msd = msd >> 8;
- s -= 8;
- }
- if (msd >= 0x10)
- {
- msd = msd >> 4;
- s -= 4;
- }
- if (msd >= 0x4)
- {
- msd = msd >> 2;
- s -= 2;
- }
- if (msd >= 0x2)
- {
- msd = msd >> 1;
- s -= 1;
- }
- }
- /* 0 <= s < GMP_LIMB_BITS.
- Copy b, shifting it left by s bits. */
- if (s > 0)
- {
- tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t));
- if (tmp_roomptr == NULL)
- {
- free (roomptr);
- return NULL;
- }
- {
- const mp_limb_t *sourceptr = b_ptr;
- mp_limb_t *destptr = tmp_roomptr;
- mp_twolimb_t accu = 0;
- size_t count;
- for (count = b_len; count > 0; count--)
- {
- accu += (mp_twolimb_t) *sourceptr++ << s;
- *destptr++ = (mp_limb_t) accu;
- accu = accu >> GMP_LIMB_BITS;
- }
- /* accu must be zero, since that was how s was determined. */
- if (accu != 0)
- abort ();
- }
- b_ptr = tmp_roomptr;
- }
- /* Copy a, shifting it left by s bits, yields r.
- Memory layout:
- At the beginning: r = roomptr[0..a_len],
- at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */
- r_ptr = roomptr;
- if (s == 0)
- {
- memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
- r_ptr[a_len] = 0;
- }
- else
- {
- const mp_limb_t *sourceptr = a_ptr;
- mp_limb_t *destptr = r_ptr;
- mp_twolimb_t accu = 0;
- size_t count;
- for (count = a_len; count > 0; count--)
- {
- accu += (mp_twolimb_t) *sourceptr++ << s;
- *destptr++ = (mp_limb_t) accu;
- accu = accu >> GMP_LIMB_BITS;
- }
- *destptr++ = (mp_limb_t) accu;
- }
- q_ptr = roomptr + b_len;
- q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */
- {
- size_t j = a_len - b_len; /* m-n */
- mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */
- mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */
- mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */
- ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd;
- /* Division loop, traversed m-n+1 times.
- j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */
- for (;;)
- {
- mp_limb_t q_star;
- mp_limb_t c1;
- if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */
- {
- /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */
- mp_twolimb_t num =
- ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS)
- | r_ptr[j + b_len - 1];
- q_star = num / b_msd;
- c1 = num % b_msd;
- }
- else
- {
- /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */
- q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */
- /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta
- <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta
- <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta)
- {<= beta !}.
- If yes, jump directly to the subtraction loop.
- (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta
- <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */
- if (r_ptr[j + b_len] > b_msd
- || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd)
- /* r[j+n] >= b[n-1]+1 or
- r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a
- carry. */
- goto subtract;
- }
- /* q_star = q*,
- c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta). */
- {
- mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */
- ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2];
- mp_twolimb_t c3 = /* b[n-2] * q* */
- (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star;
- /* While c2 < c3, increase c2 and decrease c3.
- Consider c3-c2. While it is > 0, decrease it by
- b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2
- this can happen only twice. */
- if (c3 > c2)
- {
- q_star = q_star - 1; /* q* := q* - 1 */
- if (c3 - c2 > b_msdd)
- q_star = q_star - 1; /* q* := q* - 1 */
- }
- }
- if (q_star > 0)
- subtract:
- {
- /* Subtract r := r - b * q* * beta^j. */
- mp_limb_t cr;
- {
- const mp_limb_t *sourceptr = b_ptr;
- mp_limb_t *destptr = r_ptr + j;
- mp_twolimb_t carry = 0;
- size_t count;
- for (count = b_len; count > 0; count--)
- {
- /* Here 0 <= carry <= q*. */
- carry =
- carry
- + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++
- + (mp_limb_t) ~(*destptr);
- /* Here 0 <= carry <= beta*q* + beta-1. */
- *destptr++ = ~(mp_limb_t) carry;
- carry = carry >> GMP_LIMB_BITS; /* <= q* */
- }
- cr = (mp_limb_t) carry;
- }
- /* Subtract cr from r_ptr[j + b_len], then forget about
- r_ptr[j + b_len]. */
- if (cr > r_ptr[j + b_len])
- {
- /* Subtraction gave a carry. */
- q_star = q_star - 1; /* q* := q* - 1 */
- /* Add b back. */
- {
- const mp_limb_t *sourceptr = b_ptr;
- mp_limb_t *destptr = r_ptr + j;
- mp_limb_t carry = 0;
- size_t count;
- for (count = b_len; count > 0; count--)
- {
- mp_limb_t source1 = *sourceptr++;
- mp_limb_t source2 = *destptr;
- *destptr++ = source1 + source2 + carry;
- carry =
- (carry
- ? source1 >= (mp_limb_t) ~source2
- : source1 > (mp_limb_t) ~source2);
- }
- }
- /* Forget about the carry and about r[j+n]. */
- }
- }
- /* q* is determined. Store it as q[j]. */
- q_ptr[j] = q_star;
- if (j == 0)
- break;
- j--;
- }
- }
- r_len = b_len;
- /* Normalise q. */
- if (q_ptr[q_len - 1] == 0)
- q_len--;
-# if 0 /* Not needed here, since we need r only to compare it with b/2, and
- b is shifted left by s bits. */
- /* Shift r right by s bits. */
- if (s > 0)
- {
- mp_limb_t ptr = r_ptr + r_len;
- mp_twolimb_t accu = 0;
- size_t count;
- for (count = r_len; count > 0; count--)
- {
- accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS;
- accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s);
- *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS);
- }
- }
-# endif
- /* Normalise r. */
- while (r_len > 0 && r_ptr[r_len - 1] == 0)
- r_len--;
- }
- /* Compare r << 1 with b. */
- if (r_len > b_len)
- goto increment_q;
- {
- size_t i;
- for (i = b_len;;)
- {
- mp_limb_t r_i =
- (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0)
- | (i < r_len ? r_ptr[i] << 1 : 0);
- mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0);
- if (r_i > b_i)
- goto increment_q;
- if (r_i < b_i)
- goto keep_q;
- if (i == 0)
- break;
- i--;
- }
- }
- if (q_len > 0 && ((q_ptr[0] & 1) != 0))
- /* q is odd. */
- increment_q:
- {
- size_t i;
- for (i = 0; i < q_len; i++)
- if (++(q_ptr[i]) != 0)
- goto keep_q;
- q_ptr[q_len++] = 1;
- }
- keep_q:
- if (tmp_roomptr != NULL)
- free (tmp_roomptr);
- q->limbs = q_ptr;
- q->nlimbs = q_len;
- return roomptr;
-}
-
-/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal
- representation.
- Destroys the contents of a.
- Return the allocated memory - containing the decimal digits in low-to-high
- order, terminated with a NUL character - in case of success, NULL in case
- of memory allocation failure. */
-static char *
-convert_to_decimal (mpn_t a, size_t extra_zeroes)
-{
- mp_limb_t *a_ptr = a.limbs;
- size_t a_len = a.nlimbs;
- /* 0.03345 is slightly larger than log(2)/(9*log(10)). */
- size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1);
- char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes));
- if (c_ptr != NULL)
- {
- char *d_ptr = c_ptr;
- for (; extra_zeroes > 0; extra_zeroes--)
- *d_ptr++ = '0';
- while (a_len > 0)
- {
- /* Divide a by 10^9, in-place. */
- mp_limb_t remainder = 0;
- mp_limb_t *ptr = a_ptr + a_len;
- size_t count;
- for (count = a_len; count > 0; count--)
- {
- mp_twolimb_t num =
- ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr;
- *ptr = num / 1000000000;
- remainder = num % 1000000000;
- }
- /* Store the remainder as 9 decimal digits. */
- for (count = 9; count > 0; count--)
- {
- *d_ptr++ = '0' + (remainder % 10);
- remainder = remainder / 10;
- }
- /* Normalize a. */
- if (a_ptr[a_len - 1] == 0)
- a_len--;
- }
- /* Remove leading zeroes. */
- while (d_ptr > c_ptr && d_ptr[-1] == '0')
- d_ptr--;
- /* But keep at least one zero. */
- if (d_ptr == c_ptr)
- *d_ptr++ = '0';
- /* Terminate the string. */
- *d_ptr = '\0';
- }
- return c_ptr;
-}
-
-# if NEED_PRINTF_LONG_DOUBLE
-
-/* Assuming x is finite and >= 0:
- write x as x = 2^e * m, where m is a bignum.
- Return the allocated memory in case of success, NULL in case of memory
- allocation failure. */
-static void *
-decode_long_double (long double x, int *ep, mpn_t *mp)
-{
- mpn_t m;
- int exp;
- long double y;
- size_t i;
-
- /* Allocate memory for result. */
- m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
- m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
- if (m.limbs == NULL)
- return NULL;
- /* Split into exponential part and mantissa. */
- y = frexpl (x, &exp);
- if (!(y >= 0.0L && y < 1.0L))
- abort ();
- /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * LDBL_MANT_BIT), and the
- latter is an integer. */
- /* Convert the mantissa (y * LDBL_MANT_BIT) to a sequence of limbs.
- I'm not sure whether it's safe to cast a 'long double' value between
- 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
- 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int',
- doesn't matter). */
-# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0
-# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
- {
- mp_limb_t hi, lo;
- y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2));
- hi = (int) y;
- y -= hi;
- if (!(y >= 0.0L && y < 1.0L))
- abort ();
- y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
- lo = (int) y;
- y -= lo;
- if (!(y >= 0.0L && y < 1.0L))
- abort ();
- m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
- }
-# else
- {
- mp_limb_t d;
- y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS);
- d = (int) y;
- y -= d;
- if (!(y >= 0.0L && y < 1.0L))
- abort ();
- m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d;
- }
-# endif
-# endif
- for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
- {
- mp_limb_t hi, lo;
- y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
- hi = (int) y;
- y -= hi;
- if (!(y >= 0.0L && y < 1.0L))
- abort ();
- y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
- lo = (int) y;
- y -= lo;
- if (!(y >= 0.0L && y < 1.0L))
- abort ();
- m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
- }
- if (!(y == 0.0L))
- abort ();
- /* Normalise. */
- while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
- m.nlimbs--;
- *mp = m;
- *ep = exp - LDBL_MANT_BIT;
- return m.limbs;
-}
-
-# endif
-
-# if NEED_PRINTF_DOUBLE
-
-/* Assuming x is finite and >= 0:
- write x as x = 2^e * m, where m is a bignum.
- Return the allocated memory in case of success, NULL in case of memory
- allocation failure. */
-static void *
-decode_double (double x, int *ep, mpn_t *mp)
-{
- mpn_t m;
- int exp;
- double y;
- size_t i;
-
- /* Allocate memory for result. */
- m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
- m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
- if (m.limbs == NULL)
- return NULL;
- /* Split into exponential part and mantissa. */
- y = frexp (x, &exp);
- if (!(y >= 0.0 && y < 1.0))
- abort ();
- /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * DBL_MANT_BIT), and the
- latter is an integer. */
- /* Convert the mantissa (y * DBL_MANT_BIT) to a sequence of limbs.
- I'm not sure whether it's safe to cast a 'double' value between
- 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
- 'double' values between 0 and 2^16 (to 'unsigned int' or 'int',
- doesn't matter). */
-# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0
-# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
- {
- mp_limb_t hi, lo;
- y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2));
- hi = (int) y;
- y -= hi;
- if (!(y >= 0.0 && y < 1.0))
- abort ();
- y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
- lo = (int) y;
- y -= lo;
- if (!(y >= 0.0 && y < 1.0))
- abort ();
- m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
- }
-# else
- {
- mp_limb_t d;
- y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS);
- d = (int) y;
- y -= d;
- if (!(y >= 0.0 && y < 1.0))
- abort ();
- m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d;
- }
-# endif
-# endif
- for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
- {
- mp_limb_t hi, lo;
- y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
- hi = (int) y;
- y -= hi;
- if (!(y >= 0.0 && y < 1.0))
- abort ();
- y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
- lo = (int) y;
- y -= lo;
- if (!(y >= 0.0 && y < 1.0))
- abort ();
- m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
- }
- if (!(y == 0.0))
- abort ();
- /* Normalise. */
- while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
- m.nlimbs--;
- *mp = m;
- *ep = exp - DBL_MANT_BIT;
- return m.limbs;
-}
-
-# endif
-
-/* Assuming x = 2^e * m is finite and >= 0, and n is an integer:
- Returns the decimal representation of round (x * 10^n).
- Return the allocated memory - containing the decimal digits in low-to-high
- order, terminated with a NUL character - in case of success, NULL in case
- of memory allocation failure. */
-static char *
-scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n)
-{
- int s;
- size_t extra_zeroes;
- unsigned int abs_n;
- unsigned int abs_s;
- mp_limb_t *pow5_ptr;
- size_t pow5_len;
- unsigned int s_limbs;
- unsigned int s_bits;
- mpn_t pow5;
- mpn_t z;
- void *z_memory;
- char *digits;
-
- if (memory == NULL)
- return NULL;
- /* x = 2^e * m, hence
- y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m)
- = round (2^s * 5^n * m). */
- s = e + n;
- extra_zeroes = 0;
- /* Factor out a common power of 10 if possible. */
- if (s > 0 && n > 0)
- {
- extra_zeroes = (s < n ? s : n);
- s -= extra_zeroes;
- n -= extra_zeroes;
- }
- /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes.
- Before converting to decimal, we need to compute
- z = round (2^s * 5^n * m). */
- /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same
- sign. 2.322 is slightly larger than log(5)/log(2). */
- abs_n = (n >= 0 ? n : -n);
- abs_s = (s >= 0 ? s : -s);
- pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1
- + abs_s / GMP_LIMB_BITS + 1)
- * sizeof (mp_limb_t));
- if (pow5_ptr == NULL)
- {
- free (memory);
- return NULL;
- }
- /* Initialize with 1. */
- pow5_ptr[0] = 1;
- pow5_len = 1;
- /* Multiply with 5^|n|. */
- if (abs_n > 0)
- {
- static mp_limb_t const small_pow5[13 + 1] =
- {
- 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625,
- 48828125, 244140625, 1220703125
- };
- unsigned int n13;
- for (n13 = 0; n13 <= abs_n; n13 += 13)
- {
- mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13];
- size_t j;
- mp_twolimb_t carry = 0;
- for (j = 0; j < pow5_len; j++)
- {
- mp_limb_t digit2 = pow5_ptr[j];
- carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
- pow5_ptr[j] = (mp_limb_t) carry;
- carry = carry >> GMP_LIMB_BITS;
- }
- if (carry > 0)
- pow5_ptr[pow5_len++] = (mp_limb_t) carry;
- }
- }
- s_limbs = abs_s / GMP_LIMB_BITS;
- s_bits = abs_s % GMP_LIMB_BITS;
- if (n >= 0 ? s >= 0 : s <= 0)
- {
- /* Multiply with 2^|s|. */
- if (s_bits > 0)
- {
- mp_limb_t *ptr = pow5_ptr;
- mp_twolimb_t accu = 0;
- size_t count;
- for (count = pow5_len; count > 0; count--)
- {
- accu += (mp_twolimb_t) *ptr << s_bits;
- *ptr++ = (mp_limb_t) accu;
- accu = accu >> GMP_LIMB_BITS;
- }
- if (accu > 0)
- {
- *ptr = (mp_limb_t) accu;
- pow5_len++;
- }
- }
- if (s_limbs > 0)
- {
- size_t count;
- for (count = pow5_len; count > 0;)
- {
- count--;
- pow5_ptr[s_limbs + count] = pow5_ptr[count];
- }
- for (count = s_limbs; count > 0;)
- {
- count--;
- pow5_ptr[count] = 0;
- }
- pow5_len += s_limbs;
- }
- pow5.limbs = pow5_ptr;
- pow5.nlimbs = pow5_len;
- if (n >= 0)
- {
- /* Multiply m with pow5. No division needed. */
- z_memory = multiply (m, pow5, &z);
- }
- else
- {
- /* Divide m by pow5 and round. */
- z_memory = divide (m, pow5, &z);
- }
- }
- else
- {
- pow5.limbs = pow5_ptr;
- pow5.nlimbs = pow5_len;
- if (n >= 0)
- {
- /* n >= 0, s < 0.
- Multiply m with pow5, then divide by 2^|s|. */
- mpn_t numerator;
- mpn_t denominator;
- void *tmp_memory;
- tmp_memory = multiply (m, pow5, &numerator);
- if (tmp_memory == NULL)
- {
- free (pow5_ptr);
- free (memory);
- return NULL;
- }
- /* Construct 2^|s|. */
- {
- mp_limb_t *ptr = pow5_ptr + pow5_len;
- size_t i;
- for (i = 0; i < s_limbs; i++)
- ptr[i] = 0;
- ptr[s_limbs] = (mp_limb_t) 1 << s_bits;
- denominator.limbs = ptr;
- denominator.nlimbs = s_limbs + 1;
- }
- z_memory = divide (numerator, denominator, &z);
- free (tmp_memory);
- }
- else
- {
- /* n < 0, s > 0.
- Multiply m with 2^s, then divide by pow5. */
- mpn_t numerator;
- mp_limb_t *num_ptr;
- num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1)
- * sizeof (mp_limb_t));
- if (num_ptr == NULL)
- {
- free (pow5_ptr);
- free (memory);
- return NULL;
- }
- {
- mp_limb_t *destptr = num_ptr;
- {
- size_t i;
- for (i = 0; i < s_limbs; i++)
- *destptr++ = 0;
- }
- if (s_bits > 0)
- {
- const mp_limb_t *sourceptr = m.limbs;
- mp_twolimb_t accu = 0;
- size_t count;
- for (count = m.nlimbs; count > 0; count--)
- {
- accu += (mp_twolimb_t) *sourceptr++ << s_bits;
- *destptr++ = (mp_limb_t) accu;
- accu = accu >> GMP_LIMB_BITS;
- }
- if (accu > 0)
- *destptr++ = (mp_limb_t) accu;
- }
- else
- {
- const mp_limb_t *sourceptr = m.limbs;
- size_t count;
- for (count = m.nlimbs; count > 0; count--)
- *destptr++ = *sourceptr++;
- }
- numerator.limbs = num_ptr;
- numerator.nlimbs = destptr - num_ptr;
- }
- z_memory = divide (numerator, pow5, &z);
- free (num_ptr);
- }
- }
- free (pow5_ptr);
- free (memory);
-
- /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */
-
- if (z_memory == NULL)
- return NULL;
- digits = convert_to_decimal (z, extra_zeroes);
- free (z_memory);
- return digits;
-}
-
-# if NEED_PRINTF_LONG_DOUBLE
-
-/* Assuming x is finite and >= 0, and n is an integer:
- Returns the decimal representation of round (x * 10^n).
- Return the allocated memory - containing the decimal digits in low-to-high
- order, terminated with a NUL character - in case of success, NULL in case
- of memory allocation failure. */
-static char *
-scale10_round_decimal_long_double (long double x, int n)
-{
- int e;
- mpn_t m;
- void *memory = decode_long_double (x, &e, &m);
- return scale10_round_decimal_decoded (e, m, memory, n);
-}
-
-# endif
-
-# if NEED_PRINTF_DOUBLE
-
-/* Assuming x is finite and >= 0, and n is an integer:
- Returns the decimal representation of round (x * 10^n).
- Return the allocated memory - containing the decimal digits in low-to-high
- order, terminated with a NUL character - in case of success, NULL in case
- of memory allocation failure. */
-static char *
-scale10_round_decimal_double (double x, int n)
-{
- int e;
- mpn_t m;
- void *memory = decode_double (x, &e, &m);
- return scale10_round_decimal_decoded (e, m, memory, n);
-}
-
-# endif
-
-# if NEED_PRINTF_LONG_DOUBLE
-
-/* Assuming x is finite and > 0:
- Return an approximation for n with 10^n <= x < 10^(n+1).
- The approximation is usually the right n, but may be off by 1 sometimes. */
-static int
-floorlog10l (long double x)
-{
- int exp;
- long double y;
- double z;
- double l;
-
- /* Split into exponential part and mantissa. */
- y = frexpl (x, &exp);
- if (!(y >= 0.0L && y < 1.0L))
- abort ();
- if (y == 0.0L)
- return INT_MIN;
- if (y < 0.5L)
- {
- while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
- {
- y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
- exp -= GMP_LIMB_BITS;
- }
- if (y < (1.0L / (1 << 16)))
- {
- y *= 1.0L * (1 << 16);
- exp -= 16;
- }
- if (y < (1.0L / (1 << 8)))
- {
- y *= 1.0L * (1 << 8);
- exp -= 8;
- }
- if (y < (1.0L / (1 << 4)))
- {
- y *= 1.0L * (1 << 4);
- exp -= 4;
- }
- if (y < (1.0L / (1 << 2)))
- {
- y *= 1.0L * (1 << 2);
- exp -= 2;
- }
- if (y < (1.0L / (1 << 1)))
- {
- y *= 1.0L * (1 << 1);
- exp -= 1;
- }
- }
- if (!(y >= 0.5L && y < 1.0L))
- abort ();
- /* Compute an approximation for l = log2(x) = exp + log2(y). */
- l = exp;
- z = y;
- if (z < 0.70710678118654752444)
- {
- z *= 1.4142135623730950488;
- l -= 0.5;
- }
- if (z < 0.8408964152537145431)
- {
- z *= 1.1892071150027210667;
- l -= 0.25;
- }
- if (z < 0.91700404320467123175)
- {
- z *= 1.0905077326652576592;
- l -= 0.125;
- }
- if (z < 0.9576032806985736469)
- {
- z *= 1.0442737824274138403;
- l -= 0.0625;
- }
- /* Now 0.95 <= z <= 1.01. */
- z = 1 - z;
- /* log(1-z) = - z - z^2/2 - z^3/3 - z^4/4 - ...
- Four terms are enough to get an approximation with error < 10^-7. */
- l -= z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
- /* Finally multiply with log(2)/log(10), yields an approximation for
- log10(x). */
- l *= 0.30102999566398119523;
- /* Round down to the next integer. */
- return (int) l + (l < 0 ? -1 : 0);
-}
-
-# endif
-
-# if NEED_PRINTF_DOUBLE
-
-/* Assuming x is finite and > 0:
- Return an approximation for n with 10^n <= x < 10^(n+1).
- The approximation is usually the right n, but may be off by 1 sometimes. */
-static int
-floorlog10 (double x)
-{
- int exp;
- double y;
- double z;
- double l;
-
- /* Split into exponential part and mantissa. */
- y = frexp (x, &exp);
- if (!(y >= 0.0 && y < 1.0))
- abort ();
- if (y == 0.0)
- return INT_MIN;
- if (y < 0.5)
- {
- while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
- {
- y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
- exp -= GMP_LIMB_BITS;
- }
- if (y < (1.0 / (1 << 16)))
- {
- y *= 1.0 * (1 << 16);
- exp -= 16;
- }
- if (y < (1.0 / (1 << 8)))
- {
- y *= 1.0 * (1 << 8);
- exp -= 8;
- }
- if (y < (1.0 / (1 << 4)))
- {
- y *= 1.0 * (1 << 4);
- exp -= 4;
- }
- if (y < (1.0 / (1 << 2)))
- {
- y *= 1.0 * (1 << 2);
- exp -= 2;
- }
- if (y < (1.0 / (1 << 1)))
- {
- y *= 1.0 * (1 << 1);
- exp -= 1;
- }
- }
- if (!(y >= 0.5 && y < 1.0))
- abort ();
- /* Compute an approximation for l = log2(x) = exp + log2(y). */
- l = exp;
- z = y;
- if (z < 0.70710678118654752444)
- {
- z *= 1.4142135623730950488;
- l -= 0.5;
- }
- if (z < 0.8408964152537145431)
- {
- z *= 1.1892071150027210667;
- l -= 0.25;
- }
- if (z < 0.91700404320467123175)
- {
- z *= 1.0905077326652576592;
- l -= 0.125;
- }
- if (z < 0.9576032806985736469)
- {
- z *= 1.0442737824274138403;
- l -= 0.0625;
- }
- /* Now 0.95 <= z <= 1.01. */
- z = 1 - z;
- /* log(1-z) = - z - z^2/2 - z^3/3 - z^4/4 - ...
- Four terms are enough to get an approximation with error < 10^-7. */
- l -= z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
- /* Finally multiply with log(2)/log(10), yields an approximation for
- log10(x). */
- l *= 0.30102999566398119523;
- /* Round down to the next integer. */
- return (int) l + (l < 0 ? -1 : 0);
-}
-
-# endif
-
-#endif
-
-DCHAR_T *
-VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
- const FCHAR_T *format, va_list args)
-{
- DIRECTIVES d;
- arguments a;
-
- if (PRINTF_PARSE (format, &d, &a) < 0)
- /* errno is already set. */
- return NULL;
-
-#define CLEANUP() \
- free (d.dir); \
- if (a.arg) \
- free (a.arg);
-
- if (PRINTF_FETCHARGS (args, &a) < 0)
- {
- CLEANUP ();
- errno = EINVAL;
- return NULL;
- }
-
- {
- size_t buf_neededlength;
- TCHAR_T *buf;
- TCHAR_T *buf_malloced;
- const FCHAR_T *cp;
- size_t i;
- DIRECTIVE *dp;
- /* Output string accumulator. */
- DCHAR_T *result;
- size_t allocated;
- size_t length;
-
- /* Allocate a small buffer that will hold a directive passed to
- sprintf or snprintf. */
- buf_neededlength =
- xsum4 (7, d.max_width_length, d.max_precision_length, 6);
-#if HAVE_ALLOCA
- if (buf_neededlength < 4000 / sizeof (TCHAR_T))
- {
- buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T));
- buf_malloced = NULL;
- }
- else
-#endif
- {
- size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T));
- if (size_overflow_p (buf_memsize))
- goto out_of_memory_1;
- buf = (TCHAR_T *) malloc (buf_memsize);
- if (buf == NULL)
- goto out_of_memory_1;
- buf_malloced = buf;
- }
-
- if (resultbuf != NULL)
- {
- result = resultbuf;
- allocated = *lengthp;
- }
- else
- {
- result = NULL;
- allocated = 0;
- }
- length = 0;
- /* Invariants:
- result is either == resultbuf or == NULL or malloc-allocated.
- If length > 0, then result != NULL. */
-
- /* Ensures that allocated >= needed. Aborts through a jump to
- out_of_memory if needed is SIZE_MAX or otherwise too big. */
-#define ENSURE_ALLOCATION(needed) \
- if ((needed) > allocated) \
- { \
- size_t memory_size; \
- DCHAR_T *memory; \
- \
- allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \
- if ((needed) > allocated) \
- allocated = (needed); \
- memory_size = xtimes (allocated, sizeof (DCHAR_T)); \
- if (size_overflow_p (memory_size)) \
- goto out_of_memory; \
- if (result == resultbuf || result == NULL) \
- memory = (DCHAR_T *) malloc (memory_size); \
- else \
- memory = (DCHAR_T *) realloc (result, memory_size); \
- if (memory == NULL) \
- goto out_of_memory; \
- if (result == resultbuf && length > 0) \
- DCHAR_CPY (memory, result, length); \
- result = memory; \
- }
-
- for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
- {
- if (cp != dp->dir_start)
- {
- size_t n = dp->dir_start - cp;
- size_t augmented_length = xsum (length, n);
-
- ENSURE_ALLOCATION (augmented_length);
- /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we
- need that the format string contains only ASCII characters
- if FCHAR_T and DCHAR_T are not the same type. */
- if (sizeof (FCHAR_T) == sizeof (DCHAR_T))
- {
- DCHAR_CPY (result + length, (const DCHAR_T *) cp, n);
- length = augmented_length;
- }
- else
- {
- do
- result[length++] = (unsigned char) *cp++;
- while (--n > 0);
- }
- }
- if (i == d.count)
- break;
-
- /* Execute a single directive. */
- if (dp->conversion == '%')
- {
- size_t augmented_length;
-
- if (!(dp->arg_index == ARG_NONE))
- abort ();
- augmented_length = xsum (length, 1);
- ENSURE_ALLOCATION (augmented_length);
- result[length] = '%';
- length = augmented_length;
- }
- else
- {
- if (!(dp->arg_index != ARG_NONE))
- abort ();
-
- if (dp->conversion == 'n')
- {
- switch (a.arg[dp->arg_index].type)
- {
- case TYPE_COUNT_SCHAR_POINTER:
- *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
- break;
- case TYPE_COUNT_SHORT_POINTER:
- *a.arg[dp->arg_index].a.a_count_short_pointer = length;
- break;
- case TYPE_COUNT_INT_POINTER:
- *a.arg[dp->arg_index].a.a_count_int_pointer = length;
- break;
- case TYPE_COUNT_LONGINT_POINTER:
- *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
- break;
-#if HAVE_LONG_LONG_INT
- case TYPE_COUNT_LONGLONGINT_POINTER:
- *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
- break;
-#endif
- default:
- abort ();
- }
- }
-#if ENABLE_UNISTDIO
- /* The unistdio extensions. */
- else if (dp->conversion == 'U')
- {
- arg_type type = a.arg[dp->arg_index].type;
- int flags = dp->flags;
- int has_width;
- size_t width;
- int has_precision;
- size_t precision;
-
- has_width = 0;
- width = 0;
- if (dp->width_start != dp->width_end)
- {
- if (dp->width_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
- abort ();
- arg = a.arg[dp->width_arg_index].a.a_int;
- if (arg < 0)
- {
- /* "A negative field width is taken as a '-' flag
- followed by a positive field width." */
- flags |= FLAG_LEFT;
- width = (unsigned int) (-arg);
- }
- else
- width = arg;
- }
- else
- {
- const FCHAR_T *digitp = dp->width_start;
-
- do
- width = xsum (xtimes (width, 10), *digitp++ - '0');
- while (digitp != dp->width_end);
- }
- has_width = 1;
- }
-
- has_precision = 0;
- precision = 0;
- if (dp->precision_start != dp->precision_end)
- {
- if (dp->precision_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
- abort ();
- arg = a.arg[dp->precision_arg_index].a.a_int;
- /* "A negative precision is taken as if the precision
- were omitted." */
- if (arg >= 0)
- {
- precision = arg;
- has_precision = 1;
- }
- }
- else
- {
- const FCHAR_T *digitp = dp->precision_start + 1;
-
- precision = 0;
- while (digitp != dp->precision_end)
- precision = xsum (xtimes (precision, 10), *digitp++ - '0');
- has_precision = 1;
- }
- }
-
- switch (type)
- {
- case TYPE_U8_STRING:
- {
- const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string;
- const uint8_t *arg_end;
- size_t characters;
-
- if (has_precision)
- {
- /* Use only PRECISION characters, from the left. */
- arg_end = arg;
- characters = 0;
- for (; precision > 0; precision--)
- {
- int count = u8_strmblen (arg_end);
- if (count == 0)
- break;
- if (count < 0)
- {
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = EILSEQ;
- return NULL;
- }
- arg_end += count;
- characters++;
- }
- }
- else if (has_width)
- {
- /* Use the entire string, and count the number of
- characters. */
- arg_end = arg;
- characters = 0;
- for (;;)
- {
- int count = u8_strmblen (arg_end);
- if (count == 0)
- break;
- if (count < 0)
- {
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = EILSEQ;
- return NULL;
- }
- arg_end += count;
- characters++;
- }
- }
- else
- {
- /* Use the entire string. */
- arg_end = arg + u8_strlen (arg);
- /* The number of characters doesn't matter. */
- characters = 0;
- }
-
- if (has_width && width > characters
- && !(dp->flags & FLAG_LEFT))
- {
- size_t n = width - characters;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_SET (result + length, ' ', n);
- length += n;
- }
-
-# if DCHAR_IS_UINT8_T
- {
- size_t n = arg_end - arg;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_CPY (result + length, arg, n);
- length += n;
- }
-# else
- { /* Convert. */
- DCHAR_T *converted = result + length;
- size_t converted_len = allocated - length;
-# if DCHAR_IS_TCHAR
- /* Convert from UTF-8 to locale encoding. */
- if (u8_conv_to_encoding (locale_charset (),
- iconveh_question_mark,
- arg, arg_end - arg, NULL,
- &converted, &converted_len)
- < 0)
-# else
- /* Convert from UTF-8 to UTF-16/UTF-32. */
- converted =
- U8_TO_DCHAR (arg, arg_end - arg,
- converted, &converted_len);
- if (converted == NULL)
-# endif
- {
- int saved_errno = errno;
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = saved_errno;
- return NULL;
- }
- if (converted != result + length)
- {
- ENSURE_ALLOCATION (xsum (length, converted_len));
- DCHAR_CPY (result + length, converted, converted_len);
- free (converted);
- }
- length += converted_len;
- }
-# endif
-
- if (has_width && width > characters
- && (dp->flags & FLAG_LEFT))
- {
- size_t n = width - characters;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_SET (result + length, ' ', n);
- length += n;
- }
- }
- break;
-
- case TYPE_U16_STRING:
- {
- const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string;
- const uint16_t *arg_end;
- size_t characters;
-
- if (has_precision)
- {
- /* Use only PRECISION characters, from the left. */
- arg_end = arg;
- characters = 0;
- for (; precision > 0; precision--)
- {
- int count = u16_strmblen (arg_end);
- if (count == 0)
- break;
- if (count < 0)
- {
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = EILSEQ;
- return NULL;
- }
- arg_end += count;
- characters++;
- }
- }
- else if (has_width)
- {
- /* Use the entire string, and count the number of
- characters. */
- arg_end = arg;
- characters = 0;
- for (;;)
- {
- int count = u16_strmblen (arg_end);
- if (count == 0)
- break;
- if (count < 0)
- {
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = EILSEQ;
- return NULL;
- }
- arg_end += count;
- characters++;
- }
- }
- else
- {
- /* Use the entire string. */
- arg_end = arg + u16_strlen (arg);
- /* The number of characters doesn't matter. */
- characters = 0;
- }
-
- if (has_width && width > characters
- && !(dp->flags & FLAG_LEFT))
- {
- size_t n = width - characters;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_SET (result + length, ' ', n);
- length += n;
- }
-
-# if DCHAR_IS_UINT16_T
- {
- size_t n = arg_end - arg;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_CPY (result + length, arg, n);
- length += n;
- }
-# else
- { /* Convert. */
- DCHAR_T *converted = result + length;
- size_t converted_len = allocated - length;
-# if DCHAR_IS_TCHAR
- /* Convert from UTF-16 to locale encoding. */
- if (u16_conv_to_encoding (locale_charset (),
- iconveh_question_mark,
- arg, arg_end - arg, NULL,
- &converted, &converted_len)
- < 0)
-# else
- /* Convert from UTF-16 to UTF-8/UTF-32. */
- converted =
- U16_TO_DCHAR (arg, arg_end - arg,
- converted, &converted_len);
- if (converted == NULL)
-# endif
- {
- int saved_errno = errno;
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = saved_errno;
- return NULL;
- }
- if (converted != result + length)
- {
- ENSURE_ALLOCATION (xsum (length, converted_len));
- DCHAR_CPY (result + length, converted, converted_len);
- free (converted);
- }
- length += converted_len;
- }
-# endif
-
- if (has_width && width > characters
- && (dp->flags & FLAG_LEFT))
- {
- size_t n = width - characters;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_SET (result + length, ' ', n);
- length += n;
- }
- }
- break;
-
- case TYPE_U32_STRING:
- {
- const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string;
- const uint32_t *arg_end;
- size_t characters;
-
- if (has_precision)
- {
- /* Use only PRECISION characters, from the left. */
- arg_end = arg;
- characters = 0;
- for (; precision > 0; precision--)
- {
- int count = u32_strmblen (arg_end);
- if (count == 0)
- break;
- if (count < 0)
- {
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = EILSEQ;
- return NULL;
- }
- arg_end += count;
- characters++;
- }
- }
- else if (has_width)
- {
- /* Use the entire string, and count the number of
- characters. */
- arg_end = arg;
- characters = 0;
- for (;;)
- {
- int count = u32_strmblen (arg_end);
- if (count == 0)
- break;
- if (count < 0)
- {
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = EILSEQ;
- return NULL;
- }
- arg_end += count;
- characters++;
- }
- }
- else
- {
- /* Use the entire string. */
- arg_end = arg + u32_strlen (arg);
- /* The number of characters doesn't matter. */
- characters = 0;
- }
-
- if (has_width && width > characters
- && !(dp->flags & FLAG_LEFT))
- {
- size_t n = width - characters;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_SET (result + length, ' ', n);
- length += n;
- }
-
-# if DCHAR_IS_UINT32_T
- {
- size_t n = arg_end - arg;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_CPY (result + length, arg, n);
- length += n;
- }
-# else
- { /* Convert. */
- DCHAR_T *converted = result + length;
- size_t converted_len = allocated - length;
-# if DCHAR_IS_TCHAR
- /* Convert from UTF-32 to locale encoding. */
- if (u32_conv_to_encoding (locale_charset (),
- iconveh_question_mark,
- arg, arg_end - arg, NULL,
- &converted, &converted_len)
- < 0)
-# else
- /* Convert from UTF-32 to UTF-8/UTF-16. */
- converted =
- U32_TO_DCHAR (arg, arg_end - arg,
- converted, &converted_len);
- if (converted == NULL)
-# endif
- {
- int saved_errno = errno;
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = saved_errno;
- return NULL;
- }
- if (converted != result + length)
- {
- ENSURE_ALLOCATION (xsum (length, converted_len));
- DCHAR_CPY (result + length, converted, converted_len);
- free (converted);
- }
- length += converted_len;
- }
-# endif
-
- if (has_width && width > characters
- && (dp->flags & FLAG_LEFT))
- {
- size_t n = width - characters;
- ENSURE_ALLOCATION (xsum (length, n));
- DCHAR_SET (result + length, ' ', n);
- length += n;
- }
- }
- break;
-
- default:
- abort ();
- }
- }
-#endif
-#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
- else if ((dp->conversion == 'a' || dp->conversion == 'A')
-# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE))
- && (0
-# if NEED_PRINTF_DOUBLE
- || a.arg[dp->arg_index].type == TYPE_DOUBLE
-# endif
-# if NEED_PRINTF_LONG_DOUBLE
- || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
-# endif
- )
-# endif
- )
- {
- arg_type type = a.arg[dp->arg_index].type;
- int flags = dp->flags;
- int has_width;
- size_t width;
- int has_precision;
- size_t precision;
- size_t tmp_length;
- DCHAR_T tmpbuf[700];
- DCHAR_T *tmp;
- DCHAR_T *pad_ptr;
- DCHAR_T *p;
-
- has_width = 0;
- width = 0;
- if (dp->width_start != dp->width_end)
- {
- if (dp->width_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
- abort ();
- arg = a.arg[dp->width_arg_index].a.a_int;
- if (arg < 0)
- {
- /* "A negative field width is taken as a '-' flag
- followed by a positive field width." */
- flags |= FLAG_LEFT;
- width = (unsigned int) (-arg);
- }
- else
- width = arg;
- }
- else
- {
- const FCHAR_T *digitp = dp->width_start;
-
- do
- width = xsum (xtimes (width, 10), *digitp++ - '0');
- while (digitp != dp->width_end);
- }
- has_width = 1;
- }
-
- has_precision = 0;
- precision = 0;
- if (dp->precision_start != dp->precision_end)
- {
- if (dp->precision_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
- abort ();
- arg = a.arg[dp->precision_arg_index].a.a_int;
- /* "A negative precision is taken as if the precision
- were omitted." */
- if (arg >= 0)
- {
- precision = arg;
- has_precision = 1;
- }
- }
- else
- {
- const FCHAR_T *digitp = dp->precision_start + 1;
-
- precision = 0;
- while (digitp != dp->precision_end)
- precision = xsum (xtimes (precision, 10), *digitp++ - '0');
- has_precision = 1;
- }
- }
-
- /* Allocate a temporary buffer of sufficient size. */
- if (type == TYPE_LONGDOUBLE)
- tmp_length =
- (unsigned int) ((LDBL_DIG + 1)
- * 0.831 /* decimal -> hexadecimal */
- )
- + 1; /* turn floor into ceil */
- else
- tmp_length =
- (unsigned int) ((DBL_DIG + 1)
- * 0.831 /* decimal -> hexadecimal */
- )
- + 1; /* turn floor into ceil */
- if (tmp_length < precision)
- tmp_length = precision;
- /* Account for sign, decimal point etc. */
- tmp_length = xsum (tmp_length, 12);
-
- if (tmp_length < width)
- tmp_length = width;
-
- tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
-
- if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
- tmp = tmpbuf;
- else
- {
- size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
-
- if (size_overflow_p (tmp_memsize))
- /* Overflow, would lead to out of memory. */
- goto out_of_memory;
- tmp = (DCHAR_T *) malloc (tmp_memsize);
- if (tmp == NULL)
- /* Out of memory. */
- goto out_of_memory;
- }
-
- pad_ptr = NULL;
- p = tmp;
- if (type == TYPE_LONGDOUBLE)
- {
-# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE
- long double arg = a.arg[dp->arg_index].a.a_longdouble;
-
- if (isnanl (arg))
- {
- if (dp->conversion == 'A')
- {
- *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
- }
- else
- {
- *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
- }
- }
- else
- {
- int sign = 0;
- DECL_LONG_DOUBLE_ROUNDING
-
- BEGIN_LONG_DOUBLE_ROUNDING ();
-
- if (signbit (arg)) /* arg < 0.0L or negative zero */
- {
- sign = -1;
- arg = -arg;
- }
-
- if (sign < 0)
- *p++ = '-';
- else if (flags & FLAG_SHOWSIGN)
- *p++ = '+';
- else if (flags & FLAG_SPACE)
- *p++ = ' ';
-
- if (arg > 0.0L && arg + arg == arg)
- {
- if (dp->conversion == 'A')
- {
- *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
- }
- else
- {
- *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
- }
- }
- else
- {
- int exponent;
- long double mantissa;
-
- if (arg > 0.0L)
- mantissa = printf_frexpl (arg, &exponent);
- else
- {
- exponent = 0;
- mantissa = 0.0L;
- }
-
- if (has_precision
- && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1)
- {
- /* Round the mantissa. */
- long double tail = mantissa;
- size_t q;
-
- for (q = precision; ; q--)
- {
- int digit = (int) tail;
- tail -= digit;
- if (q == 0)
- {
- if (digit & 1 ? tail >= 0.5L : tail > 0.5L)
- tail = 1 - tail;
- else
- tail = - tail;
- break;
- }
- tail *= 16.0L;
- }
- if (tail != 0.0L)
- for (q = precision; q > 0; q--)
- tail *= 0.0625L;
- mantissa += tail;
- }
-
- *p++ = '0';
- *p++ = dp->conversion - 'A' + 'X';
- pad_ptr = p;
- {
- int digit;
-
- digit = (int) mantissa;
- mantissa -= digit;
- *p++ = '0' + digit;
- if ((flags & FLAG_ALT)
- || mantissa > 0.0L || precision > 0)
- {
- *p++ = decimal_point_char ();
- /* This loop terminates because we assume
- that FLT_RADIX is a power of 2. */
- while (mantissa > 0.0L)
- {
- mantissa *= 16.0L;
- digit = (int) mantissa;
- mantissa -= digit;
- *p++ = digit
- + (digit < 10
- ? '0'
- : dp->conversion - 10);
- if (precision > 0)
- precision--;
- }
- while (precision > 0)
- {
- *p++ = '0';
- precision--;
- }
- }
- }
- *p++ = dp->conversion - 'A' + 'P';
-# if WIDE_CHAR_VERSION
- {
- static const wchar_t decimal_format[] =
- { '%', '+', 'd', '\0' };
- SNPRINTF (p, 6 + 1, decimal_format, exponent);
- }
- while (*p != '\0')
- p++;
-# else
- if (sizeof (DCHAR_T) == 1)
- {
- sprintf ((char *) p, "%+d", exponent);
- while (*p != '\0')
- p++;
- }
- else
- {
- char expbuf[6 + 1];
- const char *ep;
- sprintf (expbuf, "%+d", exponent);
- for (ep = expbuf; (*p = *ep) != '\0'; ep++)
- p++;
- }
-# endif
- }
-
- END_LONG_DOUBLE_ROUNDING ();
- }
-# else
- abort ();
-# endif
- }
- else
- {
-# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE
- double arg = a.arg[dp->arg_index].a.a_double;
-
- if (isnan (arg))
- {
- if (dp->conversion == 'A')
- {
- *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
- }
- else
- {
- *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
- }
- }
- else
- {
- int sign = 0;
-
- if (signbit (arg)) /* arg < 0.0 or negative zero */
- {
- sign = -1;
- arg = -arg;
- }
-
- if (sign < 0)
- *p++ = '-';
- else if (flags & FLAG_SHOWSIGN)
- *p++ = '+';
- else if (flags & FLAG_SPACE)
- *p++ = ' ';
-
- if (arg > 0.0 && arg + arg == arg)
- {
- if (dp->conversion == 'A')
- {
- *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
- }
- else
- {
- *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
- }
- }
- else
- {
- int exponent;
- double mantissa;
-
- if (arg > 0.0)
- mantissa = printf_frexp (arg, &exponent);
- else
- {
- exponent = 0;
- mantissa = 0.0;
- }
-
- if (has_precision
- && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1)
- {
- /* Round the mantissa. */
- double tail = mantissa;
- size_t q;
-
- for (q = precision; ; q--)
- {
- int digit = (int) tail;
- tail -= digit;
- if (q == 0)
- {
- if (digit & 1 ? tail >= 0.5 : tail > 0.5)
- tail = 1 - tail;
- else
- tail = - tail;
- break;
- }
- tail *= 16.0;
- }
- if (tail != 0.0)
- for (q = precision; q > 0; q--)
- tail *= 0.0625;
- mantissa += tail;
- }
-
- *p++ = '0';
- *p++ = dp->conversion - 'A' + 'X';
- pad_ptr = p;
- {
- int digit;
-
- digit = (int) mantissa;
- mantissa -= digit;
- *p++ = '0' + digit;
- if ((flags & FLAG_ALT)
- || mantissa > 0.0 || precision > 0)
- {
- *p++ = decimal_point_char ();
- /* This loop terminates because we assume
- that FLT_RADIX is a power of 2. */
- while (mantissa > 0.0)
- {
- mantissa *= 16.0;
- digit = (int) mantissa;
- mantissa -= digit;
- *p++ = digit
- + (digit < 10
- ? '0'
- : dp->conversion - 10);
- if (precision > 0)
- precision--;
- }
- while (precision > 0)
- {
- *p++ = '0';
- precision--;
- }
- }
- }
- *p++ = dp->conversion - 'A' + 'P';
-# if WIDE_CHAR_VERSION
- {
- static const wchar_t decimal_format[] =
- { '%', '+', 'd', '\0' };
- SNPRINTF (p, 6 + 1, decimal_format, exponent);
- }
- while (*p != '\0')
- p++;
-# else
- if (sizeof (DCHAR_T) == 1)
- {
- sprintf ((char *) p, "%+d", exponent);
- while (*p != '\0')
- p++;
- }
- else
- {
- char expbuf[6 + 1];
- const char *ep;
- sprintf (expbuf, "%+d", exponent);
- for (ep = expbuf; (*p = *ep) != '\0'; ep++)
- p++;
- }
-# endif
- }
- }
-# else
- abort ();
-# endif
- }
- /* The generated string now extends from tmp to p, with the
- zero padding insertion point being at pad_ptr. */
- if (has_width && p - tmp < width)
- {
- size_t pad = width - (p - tmp);
- DCHAR_T *end = p + pad;
-
- if (flags & FLAG_LEFT)
- {
- /* Pad with spaces on the right. */
- for (; pad > 0; pad--)
- *p++ = ' ';
- }
- else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
- {
- /* Pad with zeroes. */
- DCHAR_T *q = end;
-
- while (p > pad_ptr)
- *--q = *--p;
- for (; pad > 0; pad--)
- *p++ = '0';
- }
- else
- {
- /* Pad with spaces on the left. */
- DCHAR_T *q = end;
-
- while (p > tmp)
- *--q = *--p;
- for (; pad > 0; pad--)
- *p++ = ' ';
- }
-
- p = end;
- }
-
- {
- size_t count = p - tmp;
-
- if (count >= tmp_length)
- /* tmp_length was incorrectly calculated - fix the
- code above! */
- abort ();
-
- /* Make room for the result. */
- if (count >= allocated - length)
- {
- size_t n = xsum (length, count);
-
- ENSURE_ALLOCATION (n);
- }
-
- /* Append the result. */
- memcpy (result + length, tmp, count * sizeof (DCHAR_T));
- if (tmp != tmpbuf)
- free (tmp);
- length += count;
- }
- }
-#endif
-#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
- else if ((dp->conversion == 'f' || dp->conversion == 'F'
- || dp->conversion == 'e' || dp->conversion == 'E'
- || dp->conversion == 'g' || dp->conversion == 'G'
- || dp->conversion == 'a' || dp->conversion == 'A')
- && (0
-# if NEED_PRINTF_DOUBLE
- || a.arg[dp->arg_index].type == TYPE_DOUBLE
-# elif NEED_PRINTF_INFINITE_DOUBLE
- || (a.arg[dp->arg_index].type == TYPE_DOUBLE
- /* The systems (mingw) which produce wrong output
- for Inf, -Inf, and NaN also do so for -0.0.
- Therefore we treat this case here as well. */
- && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double))
-# endif
-# if NEED_PRINTF_LONG_DOUBLE
- || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
-# elif NEED_PRINTF_INFINITE_LONG_DOUBLE
- || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
- /* Some systems produce wrong output for Inf,
- -Inf, and NaN. */
- && is_infinitel (a.arg[dp->arg_index].a.a_longdouble))
-# endif
- ))
- {
-# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE)
- arg_type type = a.arg[dp->arg_index].type;
-# endif
- int flags = dp->flags;
- int has_width;
- size_t width;
- int has_precision;
- size_t precision;
- size_t tmp_length;
- DCHAR_T tmpbuf[700];
- DCHAR_T *tmp;
- DCHAR_T *pad_ptr;
- DCHAR_T *p;
-
- has_width = 0;
- width = 0;
- if (dp->width_start != dp->width_end)
- {
- if (dp->width_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
- abort ();
- arg = a.arg[dp->width_arg_index].a.a_int;
- if (arg < 0)
- {
- /* "A negative field width is taken as a '-' flag
- followed by a positive field width." */
- flags |= FLAG_LEFT;
- width = (unsigned int) (-arg);
- }
- else
- width = arg;
- }
- else
- {
- const FCHAR_T *digitp = dp->width_start;
-
- do
- width = xsum (xtimes (width, 10), *digitp++ - '0');
- while (digitp != dp->width_end);
- }
- has_width = 1;
- }
-
- has_precision = 0;
- precision = 0;
- if (dp->precision_start != dp->precision_end)
- {
- if (dp->precision_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
- abort ();
- arg = a.arg[dp->precision_arg_index].a.a_int;
- /* "A negative precision is taken as if the precision
- were omitted." */
- if (arg >= 0)
- {
- precision = arg;
- has_precision = 1;
- }
- }
- else
- {
- const FCHAR_T *digitp = dp->precision_start + 1;
-
- precision = 0;
- while (digitp != dp->precision_end)
- precision = xsum (xtimes (precision, 10), *digitp++ - '0');
- has_precision = 1;
- }
- }
-
- /* POSIX specifies the default precision to be 6 for %f, %F,
- %e, %E, but not for %g, %G. Implementations appear to use
- the same default precision also for %g, %G. */
- if (!has_precision)
- precision = 6;
-
- /* Allocate a temporary buffer of sufficient size. */
-# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE
- tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1);
-# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE
- tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0);
-# elif NEED_PRINTF_LONG_DOUBLE
- tmp_length = LDBL_DIG + 1;
-# elif NEED_PRINTF_DOUBLE
- tmp_length = DBL_DIG + 1;
-# else
- tmp_length = 0;
-# endif
- if (tmp_length < precision)
- tmp_length = precision;
-# if NEED_PRINTF_LONG_DOUBLE
-# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
- if (type == TYPE_LONGDOUBLE)
-# endif
- if (dp->conversion == 'f' || dp->conversion == 'F')
- {
- long double arg = a.arg[dp->arg_index].a.a_longdouble;
- if (!(isnanl (arg) || arg + arg == arg))
- {
- /* arg is finite and nonzero. */
- int exponent = floorlog10l (arg < 0 ? -arg : arg);
- if (exponent >= 0 && tmp_length < exponent + precision)
- tmp_length = exponent + precision;
- }
- }
-# endif
-# if NEED_PRINTF_DOUBLE
-# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
- if (type == TYPE_DOUBLE)
-# endif
- if (dp->conversion == 'f' || dp->conversion == 'F')
- {
- double arg = a.arg[dp->arg_index].a.a_double;
- if (!(isnan (arg) || arg + arg == arg))
- {
- /* arg is finite and nonzero. */
- int exponent = floorlog10 (arg < 0 ? -arg : arg);
- if (exponent >= 0 && tmp_length < exponent + precision)
- tmp_length = exponent + precision;
- }
- }
-# endif
- /* Account for sign, decimal point etc. */
- tmp_length = xsum (tmp_length, 12);
-
- if (tmp_length < width)
- tmp_length = width;
-
- tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
-
- if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
- tmp = tmpbuf;
- else
- {
- size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
-
- if (size_overflow_p (tmp_memsize))
- /* Overflow, would lead to out of memory. */
- goto out_of_memory;
- tmp = (DCHAR_T *) malloc (tmp_memsize);
- if (tmp == NULL)
- /* Out of memory. */
- goto out_of_memory;
- }
-
- pad_ptr = NULL;
- p = tmp;
-
-# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
-# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
- if (type == TYPE_LONGDOUBLE)
-# endif
- {
- long double arg = a.arg[dp->arg_index].a.a_longdouble;
-
- if (isnanl (arg))
- {
- if (dp->conversion >= 'A' && dp->conversion <= 'Z')
- {
- *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
- }
- else
- {
- *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
- }
- }
- else
- {
- int sign = 0;
- DECL_LONG_DOUBLE_ROUNDING
-
- BEGIN_LONG_DOUBLE_ROUNDING ();
-
- if (signbit (arg)) /* arg < 0.0L or negative zero */
- {
- sign = -1;
- arg = -arg;
- }
-
- if (sign < 0)
- *p++ = '-';
- else if (flags & FLAG_SHOWSIGN)
- *p++ = '+';
- else if (flags & FLAG_SPACE)
- *p++ = ' ';
-
- if (arg > 0.0L && arg + arg == arg)
- {
- if (dp->conversion >= 'A' && dp->conversion <= 'Z')
- {
- *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
- }
- else
- {
- *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
- }
- }
- else
- {
-# if NEED_PRINTF_LONG_DOUBLE
- pad_ptr = p;
-
- if (dp->conversion == 'f' || dp->conversion == 'F')
- {
- char *digits;
- size_t ndigits;
-
- digits =
- scale10_round_decimal_long_double (arg, precision);
- if (digits == NULL)
- {
- END_LONG_DOUBLE_ROUNDING ();
- goto out_of_memory;
- }
- ndigits = strlen (digits);
-
- if (ndigits > precision)
- do
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- while (ndigits > precision);
- else
- *p++ = '0';
- /* Here ndigits <= precision. */
- if ((flags & FLAG_ALT) || precision > 0)
- {
- *p++ = decimal_point_char ();
- for (; precision > ndigits; precision--)
- *p++ = '0';
- while (ndigits > 0)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
-
- free (digits);
- }
- else if (dp->conversion == 'e' || dp->conversion == 'E')
- {
- int exponent;
-
- if (arg == 0.0L)
- {
- exponent = 0;
- *p++ = '0';
- if ((flags & FLAG_ALT) || precision > 0)
- {
- *p++ = decimal_point_char ();
- for (; precision > 0; precision--)
- *p++ = '0';
- }
- }
- else
- {
- /* arg > 0.0L. */
- int adjusted;
- char *digits;
- size_t ndigits;
-
- exponent = floorlog10l (arg);
- adjusted = 0;
- for (;;)
- {
- digits =
- scale10_round_decimal_long_double (arg,
- (int)precision - exponent);
- if (digits == NULL)
- {
- END_LONG_DOUBLE_ROUNDING ();
- goto out_of_memory;
- }
- ndigits = strlen (digits);
-
- if (ndigits == precision + 1)
- break;
- if (ndigits < precision
- || ndigits > precision + 2)
- /* The exponent was not guessed
- precisely enough. */
- abort ();
- if (adjusted)
- /* None of two values of exponent is
- the right one. Prevent an endless
- loop. */
- abort ();
- free (digits);
- if (ndigits == precision)
- exponent -= 1;
- else
- exponent += 1;
- adjusted = 1;
- }
-
- /* Here ndigits = precision+1. */
- *p++ = digits[--ndigits];
- if ((flags & FLAG_ALT) || precision > 0)
- {
- *p++ = decimal_point_char ();
- while (ndigits > 0)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
-
- free (digits);
- }
-
- *p++ = dp->conversion; /* 'e' or 'E' */
-# if WIDE_CHAR_VERSION
- {
- static const wchar_t decimal_format[] =
- { '%', '+', '.', '2', 'd', '\0' };
- SNPRINTF (p, 6 + 1, decimal_format, exponent);
- }
- while (*p != '\0')
- p++;
-# else
- if (sizeof (DCHAR_T) == 1)
- {
- sprintf ((char *) p, "%+.2d", exponent);
- while (*p != '\0')
- p++;
- }
- else
- {
- char expbuf[6 + 1];
- const char *ep;
- sprintf (expbuf, "%+.2d", exponent);
- for (ep = expbuf; (*p = *ep) != '\0'; ep++)
- p++;
- }
-# endif
- }
- else if (dp->conversion == 'g' || dp->conversion == 'G')
- {
- if (precision == 0)
- precision = 1;
- /* precision >= 1. */
-
- if (arg == 0.0L)
- /* The exponent is 0, >= -4, < precision.
- Use fixed-point notation. */
- {
- size_t ndigits = precision;
- /* Number of trailing zeroes that have to be
- dropped. */
- size_t nzeroes =
- (flags & FLAG_ALT ? 0 : precision - 1);
-
- --ndigits;
- *p++ = '0';
- if ((flags & FLAG_ALT) || ndigits > nzeroes)
- {
- *p++ = decimal_point_char ();
- while (ndigits > nzeroes)
- {
- --ndigits;
- *p++ = '0';
- }
- }
- }
- else
- {
- /* arg > 0.0L. */
- int exponent;
- int adjusted;
- char *digits;
- size_t ndigits;
- size_t nzeroes;
-
- exponent = floorlog10l (arg);
- adjusted = 0;
- for (;;)
- {
- digits =
- scale10_round_decimal_long_double (arg,
- (int)(precision - 1) - exponent);
- if (digits == NULL)
- {
- END_LONG_DOUBLE_ROUNDING ();
- goto out_of_memory;
- }
- ndigits = strlen (digits);
-
- if (ndigits == precision)
- break;
- if (ndigits < precision - 1
- || ndigits > precision + 1)
- /* The exponent was not guessed
- precisely enough. */
- abort ();
- if (adjusted)
- /* None of two values of exponent is
- the right one. Prevent an endless
- loop. */
- abort ();
- free (digits);
- if (ndigits < precision)
- exponent -= 1;
- else
- exponent += 1;
- adjusted = 1;
- }
- /* Here ndigits = precision. */
-
- /* Determine the number of trailing zeroes
- that have to be dropped. */
- nzeroes = 0;
- if ((flags & FLAG_ALT) == 0)
- while (nzeroes < ndigits
- && digits[nzeroes] == '0')
- nzeroes++;
-
- /* The exponent is now determined. */
- if (exponent >= -4
- && exponent < (long)precision)
- {
- /* Fixed-point notation:
- max(exponent,0)+1 digits, then the
- decimal point, then the remaining
- digits without trailing zeroes. */
- if (exponent >= 0)
- {
- size_t count = exponent + 1;
- /* Note: count <= precision = ndigits. */
- for (; count > 0; count--)
- *p++ = digits[--ndigits];
- if ((flags & FLAG_ALT) || ndigits > nzeroes)
- {
- *p++ = decimal_point_char ();
- while (ndigits > nzeroes)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
- }
- else
- {
- size_t count = -exponent - 1;
- *p++ = '0';
- *p++ = decimal_point_char ();
- for (; count > 0; count--)
- *p++ = '0';
- while (ndigits > nzeroes)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
- }
- else
- {
- /* Exponential notation. */
- *p++ = digits[--ndigits];
- if ((flags & FLAG_ALT) || ndigits > nzeroes)
- {
- *p++ = decimal_point_char ();
- while (ndigits > nzeroes)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
- *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
-# if WIDE_CHAR_VERSION
- {
- static const wchar_t decimal_format[] =
- { '%', '+', '.', '2', 'd', '\0' };
- SNPRINTF (p, 6 + 1, decimal_format, exponent);
- }
- while (*p != '\0')
- p++;
-# else
- if (sizeof (DCHAR_T) == 1)
- {
- sprintf ((char *) p, "%+.2d", exponent);
- while (*p != '\0')
- p++;
- }
- else
- {
- char expbuf[6 + 1];
- const char *ep;
- sprintf (expbuf, "%+.2d", exponent);
- for (ep = expbuf; (*p = *ep) != '\0'; ep++)
- p++;
- }
-# endif
- }
-
- free (digits);
- }
- }
- else
- abort ();
-# else
- /* arg is finite. */
- abort ();
-# endif
- }
-
- END_LONG_DOUBLE_ROUNDING ();
- }
- }
-# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
- else
-# endif
-# endif
-# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
- {
- double arg = a.arg[dp->arg_index].a.a_double;
-
- if (isnan (arg))
- {
- if (dp->conversion >= 'A' && dp->conversion <= 'Z')
- {
- *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
- }
- else
- {
- *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
- }
- }
- else
- {
- int sign = 0;
-
- if (signbit (arg)) /* arg < 0.0 or negative zero */
- {
- sign = -1;
- arg = -arg;
- }
-
- if (sign < 0)
- *p++ = '-';
- else if (flags & FLAG_SHOWSIGN)
- *p++ = '+';
- else if (flags & FLAG_SPACE)
- *p++ = ' ';
-
- if (arg > 0.0 && arg + arg == arg)
- {
- if (dp->conversion >= 'A' && dp->conversion <= 'Z')
- {
- *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
- }
- else
- {
- *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
- }
- }
- else
- {
-# if NEED_PRINTF_DOUBLE
- pad_ptr = p;
-
- if (dp->conversion == 'f' || dp->conversion == 'F')
- {
- char *digits;
- size_t ndigits;
-
- digits =
- scale10_round_decimal_double (arg, precision);
- if (digits == NULL)
- goto out_of_memory;
- ndigits = strlen (digits);
-
- if (ndigits > precision)
- do
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- while (ndigits > precision);
- else
- *p++ = '0';
- /* Here ndigits <= precision. */
- if ((flags & FLAG_ALT) || precision > 0)
- {
- *p++ = decimal_point_char ();
- for (; precision > ndigits; precision--)
- *p++ = '0';
- while (ndigits > 0)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
-
- free (digits);
- }
- else if (dp->conversion == 'e' || dp->conversion == 'E')
- {
- int exponent;
-
- if (arg == 0.0)
- {
- exponent = 0;
- *p++ = '0';
- if ((flags & FLAG_ALT) || precision > 0)
- {
- *p++ = decimal_point_char ();
- for (; precision > 0; precision--)
- *p++ = '0';
- }
- }
- else
- {
- /* arg > 0.0. */
- int adjusted;
- char *digits;
- size_t ndigits;
-
- exponent = floorlog10 (arg);
- adjusted = 0;
- for (;;)
- {
- digits =
- scale10_round_decimal_double (arg,
- (int)precision - exponent);
- if (digits == NULL)
- goto out_of_memory;
- ndigits = strlen (digits);
-
- if (ndigits == precision + 1)
- break;
- if (ndigits < precision
- || ndigits > precision + 2)
- /* The exponent was not guessed
- precisely enough. */
- abort ();
- if (adjusted)
- /* None of two values of exponent is
- the right one. Prevent an endless
- loop. */
- abort ();
- free (digits);
- if (ndigits == precision)
- exponent -= 1;
- else
- exponent += 1;
- adjusted = 1;
- }
-
- /* Here ndigits = precision+1. */
- *p++ = digits[--ndigits];
- if ((flags & FLAG_ALT) || precision > 0)
- {
- *p++ = decimal_point_char ();
- while (ndigits > 0)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
-
- free (digits);
- }
-
- *p++ = dp->conversion; /* 'e' or 'E' */
-# if WIDE_CHAR_VERSION
- {
- static const wchar_t decimal_format[] =
- /* Produce the same number of exponent digits
- as the native printf implementation. */
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
- { '%', '+', '.', '3', 'd', '\0' };
-# else
- { '%', '+', '.', '2', 'd', '\0' };
-# endif
- SNPRINTF (p, 6 + 1, decimal_format, exponent);
- }
- while (*p != '\0')
- p++;
-# else
- {
- static const char decimal_format[] =
- /* Produce the same number of exponent digits
- as the native printf implementation. */
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
- "%+.3d";
-# else
- "%+.2d";
-# endif
- if (sizeof (DCHAR_T) == 1)
- {
- sprintf ((char *) p, decimal_format, exponent);
- while (*p != '\0')
- p++;
- }
- else
- {
- char expbuf[6 + 1];
- const char *ep;
- sprintf (expbuf, decimal_format, exponent);
- for (ep = expbuf; (*p = *ep) != '\0'; ep++)
- p++;
- }
- }
-# endif
- }
- else if (dp->conversion == 'g' || dp->conversion == 'G')
- {
- if (precision == 0)
- precision = 1;
- /* precision >= 1. */
-
- if (arg == 0.0)
- /* The exponent is 0, >= -4, < precision.
- Use fixed-point notation. */
- {
- size_t ndigits = precision;
- /* Number of trailing zeroes that have to be
- dropped. */
- size_t nzeroes =
- (flags & FLAG_ALT ? 0 : precision - 1);
-
- --ndigits;
- *p++ = '0';
- if ((flags & FLAG_ALT) || ndigits > nzeroes)
- {
- *p++ = decimal_point_char ();
- while (ndigits > nzeroes)
- {
- --ndigits;
- *p++ = '0';
- }
- }
- }
- else
- {
- /* arg > 0.0. */
- int exponent;
- int adjusted;
- char *digits;
- size_t ndigits;
- size_t nzeroes;
-
- exponent = floorlog10 (arg);
- adjusted = 0;
- for (;;)
- {
- digits =
- scale10_round_decimal_double (arg,
- (int)(precision - 1) - exponent);
- if (digits == NULL)
- goto out_of_memory;
- ndigits = strlen (digits);
-
- if (ndigits == precision)
- break;
- if (ndigits < precision - 1
- || ndigits > precision + 1)
- /* The exponent was not guessed
- precisely enough. */
- abort ();
- if (adjusted)
- /* None of two values of exponent is
- the right one. Prevent an endless
- loop. */
- abort ();
- free (digits);
- if (ndigits < precision)
- exponent -= 1;
- else
- exponent += 1;
- adjusted = 1;
- }
- /* Here ndigits = precision. */
-
- /* Determine the number of trailing zeroes
- that have to be dropped. */
- nzeroes = 0;
- if ((flags & FLAG_ALT) == 0)
- while (nzeroes < ndigits
- && digits[nzeroes] == '0')
- nzeroes++;
-
- /* The exponent is now determined. */
- if (exponent >= -4
- && exponent < (long)precision)
- {
- /* Fixed-point notation:
- max(exponent,0)+1 digits, then the
- decimal point, then the remaining
- digits without trailing zeroes. */
- if (exponent >= 0)
- {
- size_t count = exponent + 1;
- /* Note: count <= precision = ndigits. */
- for (; count > 0; count--)
- *p++ = digits[--ndigits];
- if ((flags & FLAG_ALT) || ndigits > nzeroes)
- {
- *p++ = decimal_point_char ();
- while (ndigits > nzeroes)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
- }
- else
- {
- size_t count = -exponent - 1;
- *p++ = '0';
- *p++ = decimal_point_char ();
- for (; count > 0; count--)
- *p++ = '0';
- while (ndigits > nzeroes)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
- }
- else
- {
- /* Exponential notation. */
- *p++ = digits[--ndigits];
- if ((flags & FLAG_ALT) || ndigits > nzeroes)
- {
- *p++ = decimal_point_char ();
- while (ndigits > nzeroes)
- {
- --ndigits;
- *p++ = digits[ndigits];
- }
- }
- *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
-# if WIDE_CHAR_VERSION
- {
- static const wchar_t decimal_format[] =
- /* Produce the same number of exponent digits
- as the native printf implementation. */
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
- { '%', '+', '.', '3', 'd', '\0' };
-# else
- { '%', '+', '.', '2', 'd', '\0' };
-# endif
- SNPRINTF (p, 6 + 1, decimal_format, exponent);
- }
- while (*p != '\0')
- p++;
-# else
- {
- static const char decimal_format[] =
- /* Produce the same number of exponent digits
- as the native printf implementation. */
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
- "%+.3d";
-# else
- "%+.2d";
-# endif
- if (sizeof (DCHAR_T) == 1)
- {
- sprintf ((char *) p, decimal_format, exponent);
- while (*p != '\0')
- p++;
- }
- else
- {
- char expbuf[6 + 1];
- const char *ep;
- sprintf (expbuf, decimal_format, exponent);
- for (ep = expbuf; (*p = *ep) != '\0'; ep++)
- p++;
- }
- }
-# endif
- }
-
- free (digits);
- }
- }
- else
- abort ();
-# else
- /* arg is finite. */
- if (!(arg == 0.0))
- abort ();
-
- pad_ptr = p;
-
- if (dp->conversion == 'f' || dp->conversion == 'F')
- {
- *p++ = '0';
- if ((flags & FLAG_ALT) || precision > 0)
- {
- *p++ = decimal_point_char ();
- for (; precision > 0; precision--)
- *p++ = '0';
- }
- }
- else if (dp->conversion == 'e' || dp->conversion == 'E')
- {
- *p++ = '0';
- if ((flags & FLAG_ALT) || precision > 0)
- {
- *p++ = decimal_point_char ();
- for (; precision > 0; precision--)
- *p++ = '0';
- }
- *p++ = dp->conversion; /* 'e' or 'E' */
- *p++ = '+';
- /* Produce the same number of exponent digits as
- the native printf implementation. */
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
- *p++ = '0';
-# endif
- *p++ = '0';
- *p++ = '0';
- }
- else if (dp->conversion == 'g' || dp->conversion == 'G')
- {
- *p++ = '0';
- if (flags & FLAG_ALT)
- {
- size_t ndigits =
- (precision > 0 ? precision - 1 : 0);
- *p++ = decimal_point_char ();
- for (; ndigits > 0; --ndigits)
- *p++ = '0';
- }
- }
- else
- abort ();
-# endif
- }
- }
- }
-# endif
-
- /* The generated string now extends from tmp to p, with the
- zero padding insertion point being at pad_ptr. */
- if (has_width && p - tmp < width)
- {
- size_t pad = width - (p - tmp);
- DCHAR_T *end = p + pad;
-
- if (flags & FLAG_LEFT)
- {
- /* Pad with spaces on the right. */
- for (; pad > 0; pad--)
- *p++ = ' ';
- }
- else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
- {
- /* Pad with zeroes. */
- DCHAR_T *q = end;
-
- while (p > pad_ptr)
- *--q = *--p;
- for (; pad > 0; pad--)
- *p++ = '0';
- }
- else
- {
- /* Pad with spaces on the left. */
- DCHAR_T *q = end;
-
- while (p > tmp)
- *--q = *--p;
- for (; pad > 0; pad--)
- *p++ = ' ';
- }
-
- p = end;
- }
-
- {
- size_t count = p - tmp;
-
- if (count >= tmp_length)
- /* tmp_length was incorrectly calculated - fix the
- code above! */
- abort ();
-
- /* Make room for the result. */
- if (count >= allocated - length)
- {
- size_t n = xsum (length, count);
-
- ENSURE_ALLOCATION (n);
- }
-
- /* Append the result. */
- memcpy (result + length, tmp, count * sizeof (DCHAR_T));
- if (tmp != tmpbuf)
- free (tmp);
- length += count;
- }
- }
-#endif
- else
- {
- arg_type type = a.arg[dp->arg_index].type;
- int flags = dp->flags;
-#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
- int has_width;
- size_t width;
-#endif
-#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
- int has_precision;
- size_t precision;
-#endif
-#if NEED_PRINTF_UNBOUNDED_PRECISION
- int prec_ourselves;
-#else
-# define prec_ourselves 0
-#endif
-#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
- int pad_ourselves;
-#else
-# define pad_ourselves 0
-#endif
- TCHAR_T *fbp;
- unsigned int prefix_count;
- int prefixes[2];
-#if !USE_SNPRINTF
- size_t tmp_length;
- TCHAR_T tmpbuf[700];
- TCHAR_T *tmp;
-#endif
-
-#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
- has_width = 0;
- width = 0;
- if (dp->width_start != dp->width_end)
- {
- if (dp->width_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
- abort ();
- arg = a.arg[dp->width_arg_index].a.a_int;
- if (arg < 0)
- {
- /* "A negative field width is taken as a '-' flag
- followed by a positive field width." */
- flags |= FLAG_LEFT;
- width = (unsigned int) (-arg);
- }
- else
- width = arg;
- }
- else
- {
- const FCHAR_T *digitp = dp->width_start;
-
- do
- width = xsum (xtimes (width, 10), *digitp++ - '0');
- while (digitp != dp->width_end);
- }
- has_width = 1;
- }
-#endif
-
-#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
- has_precision = 0;
- precision = 6;
- if (dp->precision_start != dp->precision_end)
- {
- if (dp->precision_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
- abort ();
- arg = a.arg[dp->precision_arg_index].a.a_int;
- /* "A negative precision is taken as if the precision
- were omitted." */
- if (arg >= 0)
- {
- precision = arg;
- has_precision = 1;
- }
- }
- else
- {
- const FCHAR_T *digitp = dp->precision_start + 1;
-
- precision = 0;
- while (digitp != dp->precision_end)
- precision = xsum (xtimes (precision, 10), *digitp++ - '0');
- has_precision = 1;
- }
- }
-#endif
-
-#if !USE_SNPRINTF
- /* Allocate a temporary buffer of sufficient size for calling
- sprintf. */
- {
- switch (dp->conversion)
- {
-
- case 'd': case 'i': case 'u':
-# if HAVE_LONG_LONG_INT
- if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
- tmp_length =
- (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
- * 0.30103 /* binary -> decimal */
- )
- + 1; /* turn floor into ceil */
- else
-# endif
- if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
- tmp_length =
- (unsigned int) (sizeof (unsigned long) * CHAR_BIT
- * 0.30103 /* binary -> decimal */
- )
- + 1; /* turn floor into ceil */
- else
- tmp_length =
- (unsigned int) (sizeof (unsigned int) * CHAR_BIT
- * 0.30103 /* binary -> decimal */
- )
- + 1; /* turn floor into ceil */
- if (tmp_length < precision)
- tmp_length = precision;
- /* Multiply by 2, as an estimate for FLAG_GROUP. */
- tmp_length = xsum (tmp_length, tmp_length);
- /* Add 1, to account for a leading sign. */
- tmp_length = xsum (tmp_length, 1);
- break;
-
- case 'o':
-# if HAVE_LONG_LONG_INT
- if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
- tmp_length =
- (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
- * 0.333334 /* binary -> octal */
- )
- + 1; /* turn floor into ceil */
- else
-# endif
- if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
- tmp_length =
- (unsigned int) (sizeof (unsigned long) * CHAR_BIT
- * 0.333334 /* binary -> octal */
- )
- + 1; /* turn floor into ceil */
- else
- tmp_length =
- (unsigned int) (sizeof (unsigned int) * CHAR_BIT
- * 0.333334 /* binary -> octal */
- )
- + 1; /* turn floor into ceil */
- if (tmp_length < precision)
- tmp_length = precision;
- /* Add 1, to account for a leading sign. */
- tmp_length = xsum (tmp_length, 1);
- break;
-
- case 'x': case 'X':
-# if HAVE_LONG_LONG_INT
- if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
- tmp_length =
- (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
- * 0.25 /* binary -> hexadecimal */
- )
- + 1; /* turn floor into ceil */
- else
-# endif
- if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
- tmp_length =
- (unsigned int) (sizeof (unsigned long) * CHAR_BIT
- * 0.25 /* binary -> hexadecimal */
- )
- + 1; /* turn floor into ceil */
- else
- tmp_length =
- (unsigned int) (sizeof (unsigned int) * CHAR_BIT
- * 0.25 /* binary -> hexadecimal */
- )
- + 1; /* turn floor into ceil */
- if (tmp_length < precision)
- tmp_length = precision;
- /* Add 2, to account for a leading sign or alternate form. */
- tmp_length = xsum (tmp_length, 2);
- break;
-
- case 'f': case 'F':
- if (type == TYPE_LONGDOUBLE)
- tmp_length =
- (unsigned int) (LDBL_MAX_EXP
- * 0.30103 /* binary -> decimal */
- * 2 /* estimate for FLAG_GROUP */
- )
- + 1 /* turn floor into ceil */
- + 10; /* sign, decimal point etc. */
- else
- tmp_length =
- (unsigned int) (DBL_MAX_EXP
- * 0.30103 /* binary -> decimal */
- * 2 /* estimate for FLAG_GROUP */
- )
- + 1 /* turn floor into ceil */
- + 10; /* sign, decimal point etc. */
- tmp_length = xsum (tmp_length, precision);
- break;
-
- case 'e': case 'E': case 'g': case 'G':
- tmp_length =
- 12; /* sign, decimal point, exponent etc. */
- tmp_length = xsum (tmp_length, precision);
- break;
-
- case 'a': case 'A':
- if (type == TYPE_LONGDOUBLE)
- tmp_length =
- (unsigned int) (LDBL_DIG
- * 0.831 /* decimal -> hexadecimal */
- )
- + 1; /* turn floor into ceil */
- else
- tmp_length =
- (unsigned int) (DBL_DIG
- * 0.831 /* decimal -> hexadecimal */
- )
- + 1; /* turn floor into ceil */
- if (tmp_length < precision)
- tmp_length = precision;
- /* Account for sign, decimal point etc. */
- tmp_length = xsum (tmp_length, 12);
- break;
-
- case 'c':
-# if HAVE_WINT_T && !WIDE_CHAR_VERSION
- if (type == TYPE_WIDE_CHAR)
- tmp_length = MB_CUR_MAX;
- else
-# endif
- tmp_length = 1;
- break;
-
- case 's':
-# if HAVE_WCHAR_T
- if (type == TYPE_WIDE_STRING)
- {
- tmp_length =
- local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
-
-# if !WIDE_CHAR_VERSION
- tmp_length = xtimes (tmp_length, MB_CUR_MAX);
-# endif
- }
- else
-# endif
- tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
- break;
-
- case 'p':
- tmp_length =
- (unsigned int) (sizeof (void *) * CHAR_BIT
- * 0.25 /* binary -> hexadecimal */
- )
- + 1 /* turn floor into ceil */
- + 2; /* account for leading 0x */
- break;
-
- default:
- abort ();
- }
-
-# if ENABLE_UNISTDIO
- /* Padding considers the number of characters, therefore the
- number of elements after padding may be
- > max (tmp_length, width)
- but is certainly
- <= tmp_length + width. */
- tmp_length = xsum (tmp_length, width);
-# else
- /* Padding considers the number of elements, says POSIX. */
- if (tmp_length < width)
- tmp_length = width;
-# endif
-
- tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
- }
-
- if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T))
- tmp = tmpbuf;
- else
- {
- size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T));
-
- if (size_overflow_p (tmp_memsize))
- /* Overflow, would lead to out of memory. */
- goto out_of_memory;
- tmp = (TCHAR_T *) malloc (tmp_memsize);
- if (tmp == NULL)
- /* Out of memory. */
- goto out_of_memory;
- }
-#endif
-
- /* Decide whether to handle the precision ourselves. */
-#if NEED_PRINTF_UNBOUNDED_PRECISION
- switch (dp->conversion)
- {
- case 'd': case 'i': case 'u':
- case 'o':
- case 'x': case 'X': case 'p':
- prec_ourselves = has_precision && (precision > 0);
- break;
- default:
- prec_ourselves = 0;
- break;
- }
-#endif
-
- /* Decide whether to perform the padding ourselves. */
-#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
- switch (dp->conversion)
- {
-# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
- /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need
- to perform the padding after this conversion. Functions
- with unistdio extensions perform the padding based on
- character count rather than element count. */
- case 'c': case 's':
-# endif
-# if NEED_PRINTF_FLAG_ZERO
- case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
- case 'a': case 'A':
-# endif
- pad_ourselves = 1;
- break;
- default:
- pad_ourselves = prec_ourselves;
- break;
- }
-#endif
-
- /* Construct the format string for calling snprintf or
- sprintf. */
- fbp = buf;
- *fbp++ = '%';
-#if NEED_PRINTF_FLAG_GROUPING
- /* The underlying implementation doesn't support the ' flag.
- Produce no grouping characters in this case; this is
- acceptable because the grouping is locale dependent. */
-#else
- if (flags & FLAG_GROUP)
- *fbp++ = '\'';
-#endif
- if (flags & FLAG_LEFT)
- *fbp++ = '-';
- if (flags & FLAG_SHOWSIGN)
- *fbp++ = '+';
- if (flags & FLAG_SPACE)
- *fbp++ = ' ';
- if (flags & FLAG_ALT)
- *fbp++ = '#';
- if (!pad_ourselves)
- {
- if (flags & FLAG_ZERO)
- *fbp++ = '0';
- if (dp->width_start != dp->width_end)
- {
- size_t n = dp->width_end - dp->width_start;
- /* The width specification is known to consist only
- of standard ASCII characters. */
- if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
- {
- memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T));
- fbp += n;
- }
- else
- {
- const FCHAR_T *mp = dp->width_start;
- do
- *fbp++ = (unsigned char) *mp++;
- while (--n > 0);
- }
- }
- }
- if (!prec_ourselves)
- {
- if (dp->precision_start != dp->precision_end)
- {
- size_t n = dp->precision_end - dp->precision_start;
- /* The precision specification is known to consist only
- of standard ASCII characters. */
- if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
- {
- memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T));
- fbp += n;
- }
- else
- {
- const FCHAR_T *mp = dp->precision_start;
- do
- *fbp++ = (unsigned char) *mp++;
- while (--n > 0);
- }
- }
- }
-
- switch (type)
- {
-#if HAVE_LONG_LONG_INT
- case TYPE_LONGLONGINT:
- case TYPE_ULONGLONGINT:
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
- *fbp++ = 'I';
- *fbp++ = '6';
- *fbp++ = '4';
- break;
-# else
- *fbp++ = 'l';
- /*FALLTHROUGH*/
-# endif
-#endif
- case TYPE_LONGINT:
- case TYPE_ULONGINT:
-#if HAVE_WINT_T
- case TYPE_WIDE_CHAR:
-#endif
-#if HAVE_WCHAR_T
- case TYPE_WIDE_STRING:
-#endif
- *fbp++ = 'l';
- break;
- case TYPE_LONGDOUBLE:
- *fbp++ = 'L';
- break;
- default:
- break;
- }
-#if NEED_PRINTF_DIRECTIVE_F
- if (dp->conversion == 'F')
- *fbp = 'f';
- else
-#endif
- *fbp = dp->conversion;
-#if USE_SNPRINTF
-# if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3))
- fbp[1] = '%';
- fbp[2] = 'n';
- fbp[3] = '\0';
-# else
- /* On glibc2 systems from glibc >= 2.3 - probably also older
- ones - we know that snprintf's returns value conforms to
- ISO C 99: the gl_SNPRINTF_DIRECTIVE_N test passes.
- Therefore we can avoid using %n in this situation.
- On glibc2 systems from 2004-10-18 or newer, the use of %n
- in format strings in writable memory may crash the program
- (if compiled with _FORTIFY_SOURCE=2), so we should avoid it
- in this situation. */
- fbp[1] = '\0';
-# endif
-#else
- fbp[1] = '\0';
-#endif
-
- /* Construct the arguments for calling snprintf or sprintf. */
- prefix_count = 0;
- if (!pad_ourselves && dp->width_arg_index != ARG_NONE)
- {
- if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
- abort ();
- prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
- }
- if (dp->precision_arg_index != ARG_NONE)
- {
- if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
- abort ();
- prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
- }
-
-#if USE_SNPRINTF
- /* The SNPRINTF result is appended after result[0..length].
- The latter is an array of DCHAR_T; SNPRINTF appends an
- array of TCHAR_T to it. This is possible because
- sizeof (TCHAR_T) divides sizeof (DCHAR_T) and
- alignof (TCHAR_T) <= alignof (DCHAR_T). */
-# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T))
- /* Prepare checking whether snprintf returns the count
- via %n. */
- ENSURE_ALLOCATION (xsum (length, 1));
- *(TCHAR_T *) (result + length) = '\0';
-#endif
-
- for (;;)
- {
- int count = -1;
-
-#if USE_SNPRINTF
- int retcount = 0;
- size_t maxlen = allocated - length;
- /* SNPRINTF can fail if its second argument is
- > INT_MAX. */
- if (maxlen > INT_MAX / TCHARS_PER_DCHAR)
- maxlen = INT_MAX / TCHARS_PER_DCHAR;
- maxlen = maxlen * TCHARS_PER_DCHAR;
-# define SNPRINTF_BUF(arg) \
- switch (prefix_count) \
- { \
- case 0: \
- retcount = SNPRINTF ((TCHAR_T *) (result + length), \
- maxlen, buf, \
- arg, &count); \
- break; \
- case 1: \
- retcount = SNPRINTF ((TCHAR_T *) (result + length), \
- maxlen, buf, \
- prefixes[0], arg, &count); \
- break; \
- case 2: \
- retcount = SNPRINTF ((TCHAR_T *) (result + length), \
- maxlen, buf, \
- prefixes[0], prefixes[1], arg, \
- &count); \
- break; \
- default: \
- abort (); \
- }
-#else
-# define SNPRINTF_BUF(arg) \
- switch (prefix_count) \
- { \
- case 0: \
- count = sprintf (tmp, buf, arg); \
- break; \
- case 1: \
- count = sprintf (tmp, buf, prefixes[0], arg); \
- break; \
- case 2: \
- count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
- arg); \
- break; \
- default: \
- abort (); \
- }
-#endif
-
- switch (type)
- {
- case TYPE_SCHAR:
- {
- int arg = a.arg[dp->arg_index].a.a_schar;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_UCHAR:
- {
- unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_SHORT:
- {
- int arg = a.arg[dp->arg_index].a.a_short;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_USHORT:
- {
- unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_INT:
- {
- int arg = a.arg[dp->arg_index].a.a_int;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_UINT:
- {
- unsigned int arg = a.arg[dp->arg_index].a.a_uint;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_LONGINT:
- {
- long int arg = a.arg[dp->arg_index].a.a_longint;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_ULONGINT:
- {
- unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
- SNPRINTF_BUF (arg);
- }
- break;
-#if HAVE_LONG_LONG_INT
- case TYPE_LONGLONGINT:
- {
- long long int arg = a.arg[dp->arg_index].a.a_longlongint;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_ULONGLONGINT:
- {
- unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
- SNPRINTF_BUF (arg);
- }
- break;
-#endif
- case TYPE_DOUBLE:
- {
- double arg = a.arg[dp->arg_index].a.a_double;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_LONGDOUBLE:
- {
- long double arg = a.arg[dp->arg_index].a.a_longdouble;
- SNPRINTF_BUF (arg);
- }
- break;
- case TYPE_CHAR:
- {
- int arg = a.arg[dp->arg_index].a.a_char;
- SNPRINTF_BUF (arg);
- }
- break;
-#if HAVE_WINT_T
- case TYPE_WIDE_CHAR:
- {
- wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
- SNPRINTF_BUF (arg);
- }
- break;
-#endif
- case TYPE_STRING:
- {
- const char *arg = a.arg[dp->arg_index].a.a_string;
- SNPRINTF_BUF (arg);
- }
- break;
-#if HAVE_WCHAR_T
- case TYPE_WIDE_STRING:
- {
- const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
- SNPRINTF_BUF (arg);
- }
- break;
-#endif
- case TYPE_POINTER:
- {
- void *arg = a.arg[dp->arg_index].a.a_pointer;
- SNPRINTF_BUF (arg);
- }
- break;
- default:
- abort ();
- }
-
-#if USE_SNPRINTF
- /* Portability: Not all implementations of snprintf()
- are ISO C 99 compliant. Determine the number of
- bytes that snprintf() has produced or would have
- produced. */
- if (count >= 0)
- {
- /* Verify that snprintf() has NUL-terminated its
- result. */
- if (count < maxlen
- && ((TCHAR_T *) (result + length)) [count] != '\0')
- abort ();
- /* Portability hack. */
- if (retcount > count)
- count = retcount;
- }
- else
- {
- /* snprintf() doesn't understand the '%n'
- directive. */
- if (fbp[1] != '\0')
- {
- /* Don't use the '%n' directive; instead, look
- at the snprintf() return value. */
- fbp[1] = '\0';
- continue;
- }
- else
- {
- /* Look at the snprintf() return value. */
- if (retcount < 0)
- {
- /* HP-UX 10.20 snprintf() is doubly deficient:
- It doesn't understand the '%n' directive,
- *and* it returns -1 (rather than the length
- that would have been required) when the
- buffer is too small. */
- size_t bigger_need =
- xsum (xtimes (allocated, 2), 12);
- ENSURE_ALLOCATION (bigger_need);
- continue;
- }
- else
- count = retcount;
- }
- }
-#endif
-
- /* Attempt to handle failure. */
- if (count < 0)
- {
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = EINVAL;
- return NULL;
- }
-
-#if USE_SNPRINTF
- /* Handle overflow of the allocated buffer.
- If such an overflow occurs, a C99 compliant snprintf()
- returns a count >= maxlen. However, a non-compliant
- snprintf() function returns only count = maxlen - 1. To
- cover both cases, test whether count >= maxlen - 1. */
- if ((unsigned int) count + 1 >= maxlen)
- {
- /* If maxlen already has attained its allowed maximum,
- allocating more memory will not increase maxlen.
- Instead of looping, bail out. */
- if (maxlen == INT_MAX / TCHARS_PER_DCHAR)
- goto overflow;
- else
- {
- /* Need at least count * sizeof (TCHAR_T) bytes.
- But allocate proportionally, to avoid looping
- eternally if snprintf() reports a too small
- count. */
- size_t n =
- xmax (xsum (length,
- (count + TCHARS_PER_DCHAR - 1)
- / TCHARS_PER_DCHAR),
- xtimes (allocated, 2));
-
- ENSURE_ALLOCATION (n);
- continue;
- }
- }
-#endif
-
-#if NEED_PRINTF_UNBOUNDED_PRECISION
- if (prec_ourselves)
- {
- /* Handle the precision. */
- TCHAR_T *prec_ptr =
-# if USE_SNPRINTF
- (TCHAR_T *) (result + length);
-# else
- tmp;
-# endif
- size_t prefix_count;
- size_t move;
-
- prefix_count = 0;
- /* Put the additional zeroes after the sign. */
- if (count >= 1
- && (*prec_ptr == '-' || *prec_ptr == '+'
- || *prec_ptr == ' '))
- prefix_count = 1;
- /* Put the additional zeroes after the 0x prefix if
- (flags & FLAG_ALT) || (dp->conversion == 'p'). */
- else if (count >= 2
- && prec_ptr[0] == '0'
- && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X'))
- prefix_count = 2;
-
- move = count - prefix_count;
- if (precision > move)
- {
- /* Insert zeroes. */
- size_t insert = precision - move;
- TCHAR_T *prec_end;
-
-# if USE_SNPRINTF
- size_t n =
- xsum (length,
- (count + insert + TCHARS_PER_DCHAR - 1)
- / TCHARS_PER_DCHAR);
- length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
- ENSURE_ALLOCATION (n);
- length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
- prec_ptr = (TCHAR_T *) (result + length);
-# endif
-
- prec_end = prec_ptr + count;
- prec_ptr += prefix_count;
-
- while (prec_end > prec_ptr)
- {
- prec_end--;
- prec_end[insert] = prec_end[0];
- }
-
- prec_end += insert;
- do
- *--prec_end = '0';
- while (prec_end > prec_ptr);
-
- count += insert;
- }
- }
-#endif
-
-#if !DCHAR_IS_TCHAR
-# if !USE_SNPRINTF
- if (count >= tmp_length)
- /* tmp_length was incorrectly calculated - fix the
- code above! */
- abort ();
-# endif
-
- /* Convert from TCHAR_T[] to DCHAR_T[]. */
- if (dp->conversion == 'c' || dp->conversion == 's')
- {
- /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING
- TYPE_WIDE_STRING.
- The result string is not certainly ASCII. */
- const TCHAR_T *tmpsrc;
- DCHAR_T *tmpdst;
- size_t tmpdst_len;
- /* This code assumes that TCHAR_T is 'char'. */
- typedef int TCHAR_T_verify
- [2 * (sizeof (TCHAR_T) == 1) - 1];
-# if USE_SNPRINTF
- tmpsrc = (TCHAR_T *) (result + length);
-# else
- tmpsrc = tmp;
-# endif
- tmpdst = NULL;
- tmpdst_len = 0;
- if (DCHAR_CONV_FROM_ENCODING (locale_charset (),
- iconveh_question_mark,
- tmpsrc, count,
- NULL,
- &tmpdst, &tmpdst_len)
- < 0)
- {
- int saved_errno = errno;
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = saved_errno;
- return NULL;
- }
- ENSURE_ALLOCATION (xsum (length, tmpdst_len));
- DCHAR_CPY (result + length, tmpdst, tmpdst_len);
- free (tmpdst);
- count = tmpdst_len;
- }
- else
- {
- /* The result string is ASCII.
- Simple 1:1 conversion. */
-# if USE_SNPRINTF
- /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a
- no-op conversion, in-place on the array starting
- at (result + length). */
- if (sizeof (DCHAR_T) != sizeof (TCHAR_T))
-# endif
- {
- const TCHAR_T *tmpsrc;
- DCHAR_T *tmpdst;
- size_t n;
-
-# if USE_SNPRINTF
- if (result == resultbuf)
- {
- tmpsrc = (TCHAR_T *) (result + length);
- /* ENSURE_ALLOCATION will not move tmpsrc
- (because it's part of resultbuf). */
- ENSURE_ALLOCATION (xsum (length, count));
- }
- else
- {
- /* ENSURE_ALLOCATION will move the array
- (because it uses realloc(). */
- ENSURE_ALLOCATION (xsum (length, count));
- tmpsrc = (TCHAR_T *) (result + length);
- }
-# else
- tmpsrc = tmp;
- ENSURE_ALLOCATION (xsum (length, count));
-# endif
- tmpdst = result + length;
- /* Copy backwards, because of overlapping. */
- tmpsrc += count;
- tmpdst += count;
- for (n = count; n > 0; n--)
- *--tmpdst = (unsigned char) *--tmpsrc;
- }
- }
-#endif
-
-#if DCHAR_IS_TCHAR && !USE_SNPRINTF
- /* Make room for the result. */
- if (count > allocated - length)
- {
- /* Need at least count elements. But allocate
- proportionally. */
- size_t n =
- xmax (xsum (length, count), xtimes (allocated, 2));
-
- ENSURE_ALLOCATION (n);
- }
-#endif
-
- /* Here count <= allocated - length. */
-
- /* Perform padding. */
-#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
- if (pad_ourselves && has_width)
- {
- size_t w;
-# if ENABLE_UNISTDIO
- /* Outside POSIX, it's preferrable to compare the width
- against the number of _characters_ of the converted
- value. */
- w = DCHAR_MBSNLEN (result + length, count);
-# else
- /* The width is compared against the number of _bytes_
- of the converted value, says POSIX. */
- w = count;
-# endif
- if (w < width)
- {
- size_t pad = width - w;
-# if USE_SNPRINTF
- /* Make room for the result. */
- if (xsum (count, pad) > allocated - length)
- {
- /* Need at least count + pad elements. But
- allocate proportionally. */
- size_t n =
- xmax (xsum3 (length, count, pad),
- xtimes (allocated, 2));
-
- length += count;
- ENSURE_ALLOCATION (n);
- length -= count;
- }
- /* Here count + pad <= allocated - length. */
-# endif
- {
-# if !DCHAR_IS_TCHAR || USE_SNPRINTF
- DCHAR_T * const rp = result + length;
-# else
- DCHAR_T * const rp = tmp;
-# endif
- DCHAR_T *p = rp + count;
- DCHAR_T *end = p + pad;
-# if NEED_PRINTF_FLAG_ZERO
- DCHAR_T *pad_ptr;
-# if !DCHAR_IS_TCHAR
- if (dp->conversion == 'c'
- || dp->conversion == 's')
- /* No zero-padding for string directives. */
- pad_ptr = NULL;
- else
-# endif
- {
- pad_ptr = (*rp == '-' ? rp + 1 : rp);
- /* No zero-padding of "inf" and "nan". */
- if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z')
- || (*pad_ptr >= 'a' && *pad_ptr <= 'z'))
- pad_ptr = NULL;
- }
-# endif
- /* The generated string now extends from rp to p,
- with the zero padding insertion point being at
- pad_ptr. */
-
- count = count + pad; /* = end - rp */
-
- if (flags & FLAG_LEFT)
- {
- /* Pad with spaces on the right. */
- for (; pad > 0; pad--)
- *p++ = ' ';
- }
-# if NEED_PRINTF_FLAG_ZERO
- else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
- {
- /* Pad with zeroes. */
- DCHAR_T *q = end;
-
- while (p > pad_ptr)
- *--q = *--p;
- for (; pad > 0; pad--)
- *p++ = '0';
- }
-# endif
- else
- {
- /* Pad with spaces on the left. */
- DCHAR_T *q = end;
-
- while (p > rp)
- *--q = *--p;
- for (; pad > 0; pad--)
- *p++ = ' ';
- }
- }
- }
- }
-#endif
-
-#if DCHAR_IS_TCHAR && !USE_SNPRINTF
- if (count >= tmp_length)
- /* tmp_length was incorrectly calculated - fix the
- code above! */
- abort ();
-#endif
-
- /* Here still count <= allocated - length. */
-
-#if !DCHAR_IS_TCHAR || USE_SNPRINTF
- /* The snprintf() result did fit. */
-#else
- /* Append the sprintf() result. */
- memcpy (result + length, tmp, count * sizeof (DCHAR_T));
-#endif
-#if !USE_SNPRINTF
- if (tmp != tmpbuf)
- free (tmp);
-#endif
-
-#if NEED_PRINTF_DIRECTIVE_F
- if (dp->conversion == 'F')
- {
- /* Convert the %f result to upper case for %F. */
- DCHAR_T *rp = result + length;
- size_t rc;
- for (rc = count; rc > 0; rc--, rp++)
- if (*rp >= 'a' && *rp <= 'z')
- *rp = *rp - 'a' + 'A';
- }
-#endif
-
- length += count;
- break;
- }
- }
- }
- }
-
- /* Add the final NUL. */
- ENSURE_ALLOCATION (xsum (length, 1));
- result[length] = '\0';
-
- if (result != resultbuf && length + 1 < allocated)
- {
- /* Shrink the allocated memory if possible. */
- DCHAR_T *memory;
-
- memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T));
- if (memory != NULL)
- result = memory;
- }
-
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- *lengthp = length;
- /* Note that we can produce a big string of a length > INT_MAX. POSIX
- says that snprintf() fails with errno = EOVERFLOW in this case, but
- that's only because snprintf() returns an 'int'. This function does
- not have this limitation. */
- return result;
-
- overflow:
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- CLEANUP ();
- errno = EOVERFLOW;
- return NULL;
-
- out_of_memory:
- if (!(result == resultbuf || result == NULL))
- free (result);
- if (buf_malloced != NULL)
- free (buf_malloced);
- out_of_memory_1:
- CLEANUP ();
- errno = ENOMEM;
- return NULL;
- }
-}
-
-#undef TCHARS_PER_DCHAR
-#undef SNPRINTF
-#undef USE_SNPRINTF
-#undef DCHAR_CPY
-#undef PRINTF_PARSE
-#undef DIRECTIVES
-#undef DIRECTIVE
-#undef DCHAR_IS_TCHAR
-#undef TCHAR_T
-#undef DCHAR_T
-#undef FCHAR_T
-#undef VASNPRINTF
diff --git a/intl/vasnprintf.h b/intl/vasnprintf.h
deleted file mode 100644
index ff1d183..0000000
--- a/intl/vasnprintf.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* vsprintf with automatic memory allocation.
- Copyright (C) 2002-2004 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _VASNPRINTF_H
-#define _VASNPRINTF_H
-
-/* Get va_list. */
-#include <stdarg.h>
-
-/* Get size_t. */
-#include <stddef.h>
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
-# define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
- are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __format__ format
-# define __printf__ printf
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Write formatted output to a string dynamically allocated with malloc().
- You can pass a preallocated buffer for the result in RESULTBUF and its
- size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
- If successful, return the address of the string (this may be = RESULTBUF
- if no dynamic memory allocation was necessary) and set *LENGTHP to the
- number of resulting bytes, excluding the trailing NUL. Upon error, set
- errno and return NULL.
-
- When dynamic memory allocation occurs, the preallocated buffer is left
- alone (with possibly modified contents). This makes it possible to use
- a statically allocated or stack-allocated buffer, like this:
-
- char buf[100];
- size_t len = sizeof (buf);
- char *output = vasnprintf (buf, &len, format, args);
- if (output == NULL)
- ... error handling ...;
- else
- {
- ... use the output string ...;
- if (output != buf)
- free (output);
- }
- */
-extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
- __attribute__ ((__format__ (__printf__, 3, 4)));
-extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
- __attribute__ ((__format__ (__printf__, 3, 0)));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _VASNPRINTF_H */
diff --git a/intl/vasnwprintf.h b/intl/vasnwprintf.h
deleted file mode 100644
index 6ff03ce..0000000
--- a/intl/vasnwprintf.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* vswprintf with automatic memory allocation.
- Copyright (C) 2002-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _VASNWPRINTF_H
-#define _VASNWPRINTF_H
-
-/* Get va_list. */
-#include <stdarg.h>
-
-/* Get wchar_t, size_t. */
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Write formatted output to a string dynamically allocated with malloc().
- You can pass a preallocated buffer for the result in RESULTBUF and its
- size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
- If successful, return the address of the string (this may be = RESULTBUF
- if no dynamic memory allocation was necessary) and set *LENGTHP to the
- number of resulting bytes, excluding the trailing NUL. Upon error, set
- errno and return NULL. */
-extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...);
-extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _VASNWPRINTF_H */
diff --git a/intl/version.c b/intl/version.c
deleted file mode 100644
index a968cf7..0000000
--- a/intl/version.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* libintl library version.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libgnuintl.h"
-
-/* Version number: (major<<16) + (minor<<8) + subminor */
-int libintl_version = LIBINTL_VERSION;
diff --git a/intl/wprintf-parse.h b/intl/wprintf-parse.h
deleted file mode 100644
index 600b89a..0000000
--- a/intl/wprintf-parse.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Parse printf format string.
- Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _WPRINTF_PARSE_H
-#define _WPRINTF_PARSE_H
-
-#include "printf-args.h"
-
-
-/* Flags */
-#define FLAG_GROUP 1 /* ' flag */
-#define FLAG_LEFT 2 /* - flag */
-#define FLAG_SHOWSIGN 4 /* + flag */
-#define FLAG_SPACE 8 /* space flag */
-#define FLAG_ALT 16 /* # flag */
-#define FLAG_ZERO 32
-
-/* arg_index value indicating that no argument is consumed. */
-#define ARG_NONE (~(size_t)0)
-
-/* A parsed directive. */
-typedef struct
-{
- const wchar_t* dir_start;
- const wchar_t* dir_end;
- int flags;
- const wchar_t* width_start;
- const wchar_t* width_end;
- size_t width_arg_index;
- const wchar_t* precision_start;
- const wchar_t* precision_end;
- size_t precision_arg_index;
- wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */
- size_t arg_index;
-}
-wchar_t_directive;
-
-/* A parsed format string. */
-typedef struct
-{
- size_t count;
- wchar_t_directive *dir;
- size_t max_width_length;
- size_t max_precision_length;
-}
-wchar_t_directives;
-
-
-/* Parses the format string. Fills in the number N of directives, and fills
- in directives[0], ..., directives[N-1], and sets directives[N].dir_start
- to the end of the format string. Also fills in the arg_type fields of the
- arguments and the needed count of arguments. */
-#ifdef STATIC
-STATIC
-#else
-extern
-#endif
-int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a);
-
-#endif /* _WPRINTF_PARSE_H */
diff --git a/intl/xsize.h b/intl/xsize.h
deleted file mode 100644
index b3023a7..0000000
--- a/intl/xsize.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* xsize.h -- Checked size_t computations.
-
- Copyright (C) 2003 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _XSIZE_H
-#define _XSIZE_H
-
-/* Get size_t. */
-#include <stddef.h>
-
-/* Get SIZE_MAX. */
-#include <limits.h>
-#if HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-/* The size of memory objects is often computed through expressions of
- type size_t. Example:
- void* p = malloc (header_size + n * element_size).
- These computations can lead to overflow. When this happens, malloc()
- returns a piece of memory that is way too small, and the program then
- crashes while attempting to fill the memory.
- To avoid this, the functions and macros in this file check for overflow.
- The convention is that SIZE_MAX represents overflow.
- malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
- implementation that uses mmap --, it's recommended to use size_overflow_p()
- or size_in_bounds_p() before invoking malloc().
- The example thus becomes:
- size_t size = xsum (header_size, xtimes (n, element_size));
- void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
-*/
-
-/* Convert an arbitrary value >= 0 to type size_t. */
-#define xcast_size_t(N) \
- ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
-
-/* Sum of two sizes, with overflow check. */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum (size_t size1, size_t size2)
-{
- size_t sum = size1 + size2;
- return (sum >= size1 ? sum : SIZE_MAX);
-}
-
-/* Sum of three sizes, with overflow check. */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum3 (size_t size1, size_t size2, size_t size3)
-{
- return xsum (xsum (size1, size2), size3);
-}
-
-/* Sum of four sizes, with overflow check. */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
-{
- return xsum (xsum (xsum (size1, size2), size3), size4);
-}
-
-/* Maximum of two sizes, with overflow check. */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xmax (size_t size1, size_t size2)
-{
- /* No explicit check is needed here, because for any n:
- max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */
- return (size1 >= size2 ? size1 : size2);
-}
-
-/* Multiplication of a count with an element size, with overflow check.
- The count must be >= 0 and the element size must be > 0.
- This is a macro, not an inline function, so that it works correctly even
- when N is of a wider tupe and N > SIZE_MAX. */
-#define xtimes(N, ELSIZE) \
- ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
-
-/* Check for overflow. */
-#define size_overflow_p(SIZE) \
- ((SIZE) == SIZE_MAX)
-/* Check against overflow. */
-#define size_in_bounds_p(SIZE) \
- ((SIZE) != SIZE_MAX)
-
-#endif /* _XSIZE_H */
diff --git a/macros/ChangeLog b/macros/ChangeLog
deleted file mode 100644
index ad13458..0000000
--- a/macros/ChangeLog
+++ /dev/null
@@ -1,1174 +0,0 @@
-2010-05-17 gettextize <bug-gnu-gettext at gnu.org>
-
- * gettext.m4: New file, from gettext-0.17.
- * iconv.m4: New file, from gettext-0.17.
- * lib-ld.m4: New file, from gettext-0.17.
- * lib-link.m4: New file, from gettext-0.17.
- * lib-prefix.m4: New file, from gettext-0.17.
- * nls.m4: New file, from gettext-0.17.
- * po.m4: New file, from gettext-0.17.
- * progtest.m4: New file, from gettext-0.17.
- * Makefile.am (EXTRA_DIST): Add the new files.
-
-2001-08-20 Pavel Roskin <proski at gnu.org>
-
- * gnome-undelfs.m4 (GNOME_UNDELFS_CHECKS): Specify additional
- includes when testing for ext2fs/ext2fs.h.
-
- * gnome-vfs.m4 (GNOME_WITH_VFS): Specify additional includes
- when testing for rpc/pmap_clnt.h. Needed for Autoconf 2.50+
- only - older versions don't try to compile headers and ignore
- this argument.
-
-2001-08-04 Darin Adler <darin at bentspoon.com>
-
- * .cvsignore: Ignore generated .dep file.
-
-2001-08-02 J.H.M. Dassen (Ray) <jdassen at debian.org>
-
- * gnome-guile-checks.m4: Made "--without-guile" work. Added $guile_msg
- for reporting back.
-
-2001-07-24 Jody Goldberg <jgoldberg at home.com>
-
- * psiconv.m4 : Add psion macros from Frodo Looijaard <frodol at dds.nl>
-
-2001-07-24 Frederic Crozat <fcrozat at mandrakesoft.com>
-
- * gnome-print-check.m4 (AM_PATH_GNOME_PRINT):
- Correct minimal version test
-
-2001-06-22 Eskil Heyn Olsen <eskil at eskil.dk>
-
- * gnome-pilot.m4:
- Fixed the cat of pi-version.h
-
-2001-06-20 Havoc Pennington <hp at redhat.com>
-
- * gnome.m4: fix to include the CFLAGS for extra libraries
-
-2001-06-13 Pavel Roskin <proski at gnu.org>
-
- * gnome-fileutils.m4: Always explicitly declare main() with the
- return type `int'. Don't use exit() since it may be undeclared.
- Use `return' instead.
- * gnome-pilot.m4: Likewise.
- * gperf-check.m4: Likewise.
- * linger.m4: Likewise.
-
-2001-06-01 Peter Williams <peterw at ximian.com>
-
- * autogen.sh: s,Gnome,$PKG_NAME,g
-
-2001-05-24 Arturo Espinosa Aldama <arturo at ximian.com>
-
- * 0.5 RELEASE
-
-2001-05-24 jacob berkman <jacob at ximian.com>
-
- * gnome-pthread-check.m4 (GNOME_PTHREAD_CHECK): add hp-ux specific
- check from glib
-
-2001-05-19 Jody Goldberg <jgoldberg at home.com>
-
- * gnome-gettext.m4 : Add BUILD_INCLUDED_LIBINTL so that newer versions
- work.
-
-2001-04-16 Jaka Mocnik <jaka at gnu.org>
-
- * gnome-print-check.m4: change $(cmd) to `cmd` in order to make it
- usable in non-bash bourne shells.
-
-2001-03-01 JP Rosevear <jpr at ximian.com>
-
- * gnome-pilot.m4: quote a test and make sure incdir is always set
- so 'cat' works
-
-2001-02-21 Lauris Kaplinski <lauris at ximian.com>
-
- * gnome-print-check.m4: Replaced the awk alchemy with sed alchemy.
- I seems to work now as long as gnome-config is working - but that is
- the whole point of gnome-config, isn't it?
-
-2001-02-19 JP Rosevear <jpr at ximian.com>
-
- * gnome-pilot.m4: Revert my previous patch now that gnome-pim and
- evolution are fixed to accomodate the change
-
-2001-02-19 JP Rosevear <jpr at ximian.com>
-
- * gnome-pilot.m4: AC_SUBST the PISOCK_LIBDIR var
-
-2001-02-17 Lauris Kaplinski <lauris at ximian.com>
-
- * gnome-print-check.m4: Remove most of stuff here, but now
- it at least WORKS
-
-2001-02-07 Kenneth Christiansen <kenneth at gnu.org>
-
- * autogen.sh: Added test for xml-i18n-tools if
- AM_PROG_XML_I18N_TOOLS is found.
-
-2001-01-05 Maciej Stachowiak <mjs at eazel.com>
-
- * autogen.sh: Added missing PROG.
-
-2001-01-05 Maciej Stachowiak <mjs at eazel.com>
-
- * autogen.sh: xml-i18n-toolize if AM_PROG_XML_I18N_TOOLS is found
- in configure.in.
-
-2000-11-05 Martin Baulig <baulig at suse.de>
-
- * gnome-bonobo-check.m4 (BONOBO_CFLAGS, BONOBO_LIBS): Added
- stuff for `bonobox'.
-
-2000-08-01 Pavel Roskin <proski at gnu.org>
-
- * curses.m4: AC_WARN replaced with AC_MSG_WARN in comments
-
-2000-06-23 Stanislav Brabec <utx at penguin.cz>
-
- * gnome-pilot.m4: Use 'PISOCK_INCLUDEDIR' in pisock version check.
-
-2000-06-17 Dan Winship <danw at helixcode.com>
-
- * autogen.sh: exit immediately if aclocal, autoheader, automake,
- or autoconf fails, rather than continuing on with broken state.
- (In the aclocal case, print a hopefully-useful explanatory
- message.)
-
-2000-06-13 Martin Baulig <baulig at suse.de>
-
- * gnome-bonobo-check.am (AM_BONOBO_USES_OAF): New macro.
- Checks whether Bonobo uses OAF and defines `BONOBO_USES_OAF'
- if appropriate. Also provides `BONOBO_USES_OAF' automake
- conditional.
-
-2000-06-13 Martin Baulig <baulig at suse.de>
-
- * Makefile.am (EXTRA_DIST): Added `gnome-gettext.m4'.
- (gnome_aclocal_DATA): Added `gnome-gettext.m4'.
-
-2000-05-29 Martin Baulig <baulig at suse.de>
-
- * gnome-autogen.sh: Moved to the `bin/' directory.
-
-2000-05-29 Martin Baulig <baulig at suse.de>
-
- * gnome-autogen.sh: If `USE_GNOME_2_MACROS' is set, use the
- GNOME 2.0 macros from the `macros2' directory.
-
-2000-05-29 Martin Baulig <baulig at suse.de>
-
- * gnome-common.m4, Makefile.am: Install macros to
- `$(datadir)/aclocal/gnome-macros' when INSIDE_GNOME_COMMON.
-
- * gnome-autogen.sh: New file. When using gnome-common instead
- of the macros/ directory, use this in your autogen.sh.
-
-2000-05-15 Russell Steinthal <rms39 at columbia.edu>
-
- * gnome-pilot.m4 (PILOT_LIBS): An attempt to fix the gnome-pilot
- check on Solaris (`$GNOME_CONFIG ...` returns more than one word,
- so we need quotes around it to keep test from bombing out)
-
-2000-05-01 Dan Winship <danw at helixcode.com>
-
- * gnome-pilot.m4 (PILOT_LIBS): "But that trick NEVER works!"
- "This time for sure!"
-
-Sun Apr 23 12:15:14 2000 George Lebl <jirka at 5z.com>
-
- * gnome.m4: add an extra lib of docklets. These checks are
- braindamaged though, they don't fail and thus gnome-core for
- example compiles without gnomecc. There need to be separate .m4
- files or checks
-
-2000-04-19 Eskil Heyn Olsen <deity at eskil.dk>
-
- * gnome-pilot.m4 (PILOT_LIBS): Changed the error string for gnome-pilot
- (PILOT_LIBS): Fixes the gnome-config check
-
-2000-04-10 Dan Winship <danw at helixcode.com>
-
- * gnome-pilot.m4 (PILOT_LIBS): Fix a bug introduced in the
- gnome-pilot-config to "gnome-config gpilot" change that caused not
- having pilot-link installed to become a fatal error.
-
-2000-02-26 James Henstridge <james at daa.com.au>
-
- * gnome-gettext.m4: fix up check of LINGUAS variable so that we don't
- get problems when LINGUAS contains `en' and ALL_LINGUAS contains
- `en_GB' for instance.
-
-2000-02-22 Martin Baulig <martin at home-of-linux.org>
-
- * autogen.sh: Don't run libtoolize when `NO_LIBTOOLIZE' is set.
-
-2000-02-09 Raja R Harinath <harinath at cs.umn.edu>
-
- * autogen.sh: Fix GNUism introduced in the previous fix.
-
-2000-02-08 Miguel de Icaza <miguel at gnu.org>
-
- * autogen.sh: Handle non GNU find programs.
-
-2000-02-05 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-types.m4 (AC_LIBGTOP_CHECK_TYPE): New macro. This
- is an improved version of AC_CHECK_TYPE which takes into account
- that we need to #include some other header files on some systems
- to get some types.
- (GNOME_LIBGTOP_TYPES): Check for <sys/bitypes.h> for Tru64 and
- use AC_LIBGTOP_CHECK_TYPE rather than AC_CHECK_TYPE.
-
-2000-01-26 Dave Camp <campd at oit.edu>
-
- * gnome-bonobo-check.m4 Include <bonobo.h> rather than
- <bonobo/gnome-object.h>
-
-2000-01-26 Dave Camp <campd at oit.edu>
-
- * gnome-bonobo-check.m4: Check for bonobo_object_get_type() rather
- than gnome_object_get_type().
-
-2000-01-23 Peter Teichman <peter at helixcode.com>
-
- * gnome-pilot.m4: i broke the version-checking macro for other
- distribs in my last commit. fixing that now.
-
-2000-01-22 Peter Teichman <peter at helixcode.com>
-
- * gnome-pilot.m4 (PILOT_LIBS): fix the version-checking macro for
- debian
-
-2000-01-20 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-objc-checks.m4: Look for sched_yield in -lrt, too.
- Suggested by Drazen Kazar <dave at srce.hr>.
-
-2000-01-16 Vadim Strizhevsky <vadim at optonline.net>
-
- * gnome-pilot.m4: Fix typo in PILOT_LINK_HOOK.
-
-2000-01-15 Eskil Heyn Olsen <deity at eskil.dk>
-
- * gnome-pilot.m4: PILOT_LINK_HOOK now check pilot-link version.
- GNOME_PILOT_CHECK defaults to requiring 0.9.3.
-
-2000-01-09 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: Applied patch from R. Bernstein
- <rocky at panix.com> - print a better error message when
- LibGTop's major version number mismatches.
-
-1999-12-25 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-pilot.m4: Applied patch from Colin Walters to make
- it compile under Debian GNU/Linux.
-
-1999-12-05 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-checks.m4: Removed all guile variables.
-
-1999-11-18 Jeff Garzik <jgarzik at mandrakesoft.com>
-
- * gnome-xml-check.m4: Better scoping of below fix.
-
-1999-11-16 Jeff Garzik <jgarzik at mandrakesoft.com>
-
- * gnome-xml-check.m4: always AC_SUBST GNOME_XML_LIB, so that
- output variable will always be present.
-
-1999-11-09 Eskil Heyn Olsen <deity at eskil.dk>
-
- * gnome-pilot.m4: uses test -r instead of test -e, was reported as
- a portability bug wrt solaris.
-
-1999-10-31 Eskil Heyn Olsen <deity at eskil.dk>
-
- * gnome-pilot.m4: added PILOT_LINK_CHECK, used by
- GNOME_PILOT_CHECK. Adds --with-pisock=$dir_for_pilot_link.
-
-1999-10-24 Jacob Berkman <jberkman at andrew.cmu.edu>
-
- * gnome-ghttp-check.m4: this should be a better fix
-
-1999-10-21 Jacob Berkman <jberkman at andrew.cmu.edu>
-
- * gnome-ghttp-check.m4: use a temp value until we know that
- ghttp exists. This will hopefully fix building on Solaris
- machines
-
-1999-09-26 Jody Goldberg <jgoldberg at home.com>
-
- * compiler-flags.m4 : Remove -Wpointer-arith. It generates large
- numbers of warnings under glibc2.1.2 with a recent egcs release.
- The glibc maintainers have suggested removing this flag because it
- is useless.
-
-1999-09-01 Havoc Pennington <hp at pobox.com>
-
- * gnome-xml-check.m4: If you're going to AC_PATH_PROG then use the
- prog you find :-)
-
-1999-08-02 Peter Teichman <pat4 at acpub.duke.edu>
-
- * removed gnome-conduit-check.m4 - it should be distributed with
- gnome-pilot
-
-1999-07-30 Peter Teichman <pat4 at acpub.duke.edu>
-
- * gnome-conduit-check.m4: added new file of checks. anything that
- provides a pilot conduit is going to want this
-
-1999-07-07 Tuomas J. Lukka <lukka at iki.fi>
- * gnome-x-checks.m4: add a comment on how to get gtk-1.3 and
- glib 1.3 from CVS
-
-1999-07-06 Tuomas J. Lukka <lukka at iki.fi>
-
- * gnome-x-checks.m4: forbid compiling with Gtk-1.3 for now.
- gnome only works with 1.2 so far.
-
-1999-07-05 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome.m4: Make "extra library" message slightly easier to read.
-
-Sat Jun 26 01:47:53 1999 Tim Janik <timj at gtk.org>
-
- * compiler-flags.m4: give -Wunused to gcc instead of -Wno-unused.
-
-1999-06-11 Tuomas J. Lukka <lukka at iki.fi>
-
- * gnome-guile-checks.m4: Debian has qt_null in -lqthreads but
- no main. Changed both checks for 'main' to qt_null.
- I hope this is correct - it shouldn't break anything.
-
-1999-05-11 Raja R Harinath <harinath at cs.umn.edu>
-
- * Makefile.am (MACROS): Add `gnome-bonobo-check.m4'.
-
-1999-05-09 Jacob Berkman <jberk+ at cmu.edu>
-
- * gnome-bonobo-check.m4: made test program return 0,
- changed BONOBO_CHECK to not return "failure" on success
-
-1999-04-16 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-print-check.m4 (GNOME_PRINT_CHECK): Fix invocation of
- AM_PATH_GNOME_PRINT.
- * Makefile.am (MACROS): Sort lines.
-
-Sun Mar 28 23:39:48 1999 Norbert Warmuth <nwarmuth at privat.circular.de>
-
- * gnome-vfs.m4: Add --with-vfs option. GNOME_VFS_LIBS still needs
- to be fixed but that's not a problem because there's no libvfs, yet.
-
-1999-03-10 Tomislav Vujec <tvujec at carnet.hr>
-
- * aclocal-include.m4 (AM_ACLOCAL_INCLUDE): Add ACLOCAL_FLAGS in
- ACLOCAL. This allows maintainer rules to work if any of the macros
- change.
-
-1999-03-10 Tomislav Vujec <tvujec at carnet.hr>
-
- * gnome.m4 (GNOME_INIT_HOOK): Wrapped position parameter in
- testing for additional inits. It gets expanded while generating
- configure, resulting in an empty parameter list - syntax error in
- for statement.
-
-1999-03-09 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome.m4 (GNOME_INIT): Add a new paramater, which is passed to
- GNOME_INIT_HOOK.
- (GNOME_INIT_HOOK): New parameter "additional inits". This is a
- list like "applets capplet", and the corresponding
- GNOME_APPLETS_LIBS and GNOME_CAPPLETS_LIBS are defined.
-
-1998-03-01 Mark Crichton <crichton at gimp.org>
-
- * gnome-objc-checks : Added HAVE_GNOME_OBJC conditional
-
-1998-02-27 Gregory McLean <gregm at comstar.net>
-
- * gnome-x-checks.m4 : Require at least gtk+ 1.2 (pointless getting
- bug reports with an old glib/gtk/gdk set..)
-
-1999-02-25 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-checks.m4: Require LibGTop >= 1.0.0.
-
-1999-02-22 Miguel de Icaza <miguel at nuclecu.unam.mx>
-
- * compiler-flags.m4: Only add the compilation warnings if the
- compiler is GCC.
-
-1999-02-20 Timur Bakeyev <mc at bat.ru>
-
- * gnome.m4: Added and exported ZVT_LIBS.
-
-Tue Feb 16 19:35:42 1999 Owen Taylor <otaylor at redhat.com>
-
- * gnome-x-checks.m4: Require GTK+-1.1.16.
-
-1999-02-15 Timur Bakeyev <mc at bat.ru>
-
- * gnome-gettext.m4: Work around a bug in BSDI's native sh, which in-
- correctly expands ${LINGUAS=$ALL_LINGUAS}. Switched to if/fi variant.
-
-1999-02-15 Chris Lahey <clahey at umich.edu>
-
- * gnome-print-check.m4: Copied this from libhnj/libhnj.m4. Almost
- completely replaced the old version. The only usage difference is
- that it defines GNOME_PRINT_LIBS instead of GNOME_PRINT_LIB and
- defines GNOME_PRINT_CFLAGS as well.
-
-1999-02-10 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-objc-checks.m4: Applied a patch from Kenneth Stailey;
- use $CFLAGS when invoking $OBJC so the user can add additional
- include paths.
-
-1999-02-05 Martin Baulig <martin at home-of-linux.org>
-
- * compiler-flags.m4: Don't add warning and compiler flags to
- the CFLAGS and CXXFLAGS when they're cached. This fixes the
- problem that CFLAGS and CXXFLAGS get longer and longer each
- time you run a `config.status --recheck'.
-
-1999-02-04 Martin Baulig <martin at home-of-linux.org>
-
- * aclocal-include.m4 (INSIDE_GNOME_COMMON): New automake
- conditional that's always false.
-
- * gnome-common.m4: New file. This defines a `GNOME_COMMON_INIT'
- macro that should be used in all GNOME Applications outside
- the CVS tree.
-
- * Makefile.am: If we are `INSIDE_GNOME_COMMON', install all
- $(MACROS), autogen.sh, gnome-common.m4 and a newly created
- gnome-macros.dep in `$(datadir)/aclocal/gnome'.
-
-1999-01-24 Timur Bakeyev <mc at bat.ru>
-
- * gnome-pthread-check.m4: Add recognition of 2 more libraries -
- pthreads and pthread-support build in libc (as on BSDI).
-
-1999-01-23 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-checks.m4 (GNOME_LIBGTOP_DOCU): New macro. This
- checks whether you have the LibGTop documentation installed and
- defines `HAVE_LIBGTOP_DOCU' if appropriate. Also provides automake
- conditional.
-
-1999-01-20 Martin Baulig <martin at home-of-linux.org>
-
- * acinclude.m4 (ac_result): Unset CATOBJEXT so
- that the macros and Makefiles correctly handle
- disabling NLS when no gettext is found.
-
-1999-01-19 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-cxx-check.m4 (GNOME_CHECK_CXX): Rewrite to be saner.
- Don't limit yourself to a fixed set of names for the compiler.
-
-1999-01-06 Nat Friedman <nat at nat.org>
-
- * Makefile.am (MACROS): Added gnome-print-check.m4 to MACROS
-
-1999-01-05 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4: Include dirent.h before checking whether
- `scandir' needs to be declared.
- * need-declaration.m4: Revert change.
-
-1999-01-05 Miguel de Icaza <miguel at nuclecu.unam.mx>
-
- * need-declaration.m4, gnome-support.m4: Fixed the scandir detection.
-
-1998-12-22 Jeff Garzik <jgarzik at pobox.com>
-
- * gnome.m4: Added and exported GNOME_APPLET_LIBS.
-
-1998-12-16 Sebastian Wilhelmi <wilhelmi at ira.uka.de>
-
- * gnome-support.m4: Removed all the stuff for argp, that was
- causing gnomesupport not to build.
-
-1998-12-15 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-gettext.m4: Add the hacked version of the gettext
- macros that is used in Gtk+ here.
-
- * autogen.sh: Accept both AM_GNU_GETTEXT and AM_GNOME_GETTEXT.
-
-1998-12-15 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: All parts of GNOME will now require
- LibGTop >= 0.99.0 which is the latest version from CVS and
- already feature-freezed for GNOME 1.0.
-
-1998-12-09 Martin Baulig <martin at home-of-linux.org>
-
- * aclocal-include.m4 (AM_ACLOCAL_INCLUDE): Make this work
- with more than one directory.
-
-1998-12-08 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4: Moved into the LibGTop module.
- This file contains too much stuff that should only be used
- internally in LibGTop, so it's better to have it there.
-
-1998-12-06 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4: Recognice OpenBSD as a valid
- system and use the `freebsd' sysdeps directory for it.
-
-Sat Dec 5 23:30:01 PST 1998 Manish Singh <yosh at gimp.org>
-
- * gnome-guile-checks.m4: clear GUILE_LIBS and GUILE_INCS if
- guile isn't there (quick fix)
-
-1998-12-05 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4: Recognice NetBSD as a valid
- system and use the `freebsd' sysdeps directory for it.
-
-1998-12-03 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4 (GLIBTOP_LINUX_VERSION_CODE):
- Define this to be the same as LINUX_VERSION_CODE either from
- <linux/version.h> or from the running kernel.
-
-1998-12-02 Raja R Harinath <harinath at cs.umn.edu>
-
- * autogen.sh: "Improve" indentation and messages somewhat.
-
-1998-12-01 Jeff Garzik <jgarzik at pobox.com>
-
- * autogen.sh:
- Platform fixes. grep -q is not portable, do not use.
-
-1998-12-01 Changwoo Ryu <cwryu at adam.kaist.ac.kr>
-
- * autogen.sh: Run gettextize if needed.
- : Run libtoolize only if configure.in has "^AM_PROG_LIBTOOL".
-
-1998-11-30 Jeff Garzik <jgarzik at pobox.com>
-
- * gnome.m4: Re-arranged tests such that "--without-gnome" is
- fully supported. Not only is the logic now correct, programs
- can test "want_gnome=yes/no" for the results of this arg.
-
-1998-11-27 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: All parts of GNOME will now require
- LibGTop >= 0.29.0 which is the latest version from CVS.
-
-1998-11-20 James Henstridge <james at daa.com.au>
-
- * gnome.m4(GNOME_INIT_HOOK): Changed the call to GNOME_GNORBA_CHECK
- to GNOME_GNORBA_HOOK([],$2). Before if you specified that the
- macro should not exit on errors, and you didn't have ORBit, the
- script would fail anyway.
-
-1998-11-17 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4: We need to check for <net/if_var.h>
- and conditionally include it before <net/if_isppp.h> in the code
- that check for I4B to make it work on FreeBSD 3.0.
-
-1998-10-25 Marius Vollmer <mvo at zagadka.ping.de>
-
- * gnome-guile-checks.m4: Add GUILE_LIBS to LIBS when checking
- whether guile works. Adding them to LDFLAGS does not work on all
- systems. (Thanks to Rusty Chris Holleman)
-
-1998-11-12 Andrew T. Veliath <andrewtv at usa.net>
-
- * gnome-orbit-check.m4: Remove AC_DEFINE(HAVE_ORBIT). Add
- AM_CONDITIONAL for HAVE_ORBIT. gnome-gnorba-check.m4: Same with
- HAVE_GNORBA. Change GNOME_ORBIT_HOOK and GNOME_GNORBA_HOOK to use
- AC_CACHE_CHECK, setting both gnome_cv_orbit_found and
- gnome_cv_gnorba_found.
-
- * gnome.m4: (GNOME_INIT_HOOK): Add GNOME_GNORBA_CHECK if
- gnome-config is found. New GNOMEGNORBA_LIBS library variable
- (GNOMEGNORBA_LIBS is a superset of GNOMEUI_LIBS). Update
- GNOME_LIBDIR and GNOME_INCLUDEDIR to to include the required
- Gnorba info, if it is in a different location.
-
- * Makefile.am (MACROS): Add gnome-gnorba-check.m4 to Makefile.
-
- * gnome-gnorba-check.m4: New file.
-
-1998-11-12 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4 (vsnprintf): Remove easy-vsnprintf hack -- it
- doesn't work for Solaris 2.5 binaries running on Solaris 2.6.
- From Frederic Devernay <devernay at istar.fr>.
-
-1998-11-06 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4: Fix stupid type (sterror_r -> strerror_r).
-
-1998-11-04 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4 (need_gnome_support): Set this unconditionally
- to `yes'. We'll soon be losing this variable.
-
-1998-10-20 Andrew Veliath <andrewtv at usa.net>
-
- * gnome-orbit-check.m4 (GNOME_ORBIT_HOOK): Add ORBIT_IDL
- detection; fix failure flag.
-
-1998-10-12 Martin Baulig <martin at home-of-linux.org>
-
- * compiler-flags.m4 (warnCFLAGS): Added `-Wno-unused'.
-
-1998-10-11 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4 (libgtop_postinstall): Use `:' instead
- of the empty string if there is nothing to do since the empty string
- is no valid shell sytax.
-
-1998-10-11 Marius Vollmer <mvo at zagadka.ping.de>
-
- * gnome-guile-checks.m4: Check for "guile-config" and then for
- "build-guile", if guile-config couldn't be found. Do not
- explicitely include output from "info libdir", it is already
- included in "link". Use "compile" instead of "info includedir". Do
- not include "1.2" in error message when Guile can't be found at
- all.
-
-1998-10-11 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4 (GNOME_INIT_LIBGTOP): Added optional
- third parameter which is the `script-if-enabled' parameter of
- the GNOME_LIBGTOP_HOOOK.
-
-1998-10-05 Karl Eichwalder <ke at suse.de>
-
- * gnome-xml-check.m4: Fix typo while signaling the error.
-
-1998-10-05 Raja R Harinath <harinath at cs.umn.edu>
-
- * compiler-flags.m4 (warnCFLAGS): Remove `-W'.
- (warn-unused): Remove.
-
-1998-10-01 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4 (libgtop_postinstall):
- Added `AC_SUBST(libgtop_postinstall)'. This is used in
- `src/daemon/Makefile.am' to make the server suid root or
- sgid kmem if required.
-
-1998-09-28 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: Make it accept libgtop >= 0.25.0 again.
-
- * gnome-libgtop-sysdeps.m4: Make the default not to build the
- LibGTop examples.
-
- * compiler-flags.m4 (--enable-warn-unused): New configure parameter
- to add `-Wunused' to the warning flags.
-
-1998-09-27 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: Make it require libgtop >= 0.26.2.
-
-1998-09-24 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-ghttp-check.m4: Add checks for -lsocket -lnsl.
-
-1998-09-18 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4: Remove commented out code.
-
-1998-09-12 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4: Added (AC_SUBST): `libgtop_have_sysinfo'.
-
-1998-09-09 Martin Baulig <baulig at merkur.uni-trier.de>
-
- * gnome-libgtop-sysdeps.m4: Added check for SMP support.
- (--with-libgtop-smp): New parameter, default is to enable
- it only if you're running configure on a SMP system.
- Added (AC_DEFINE): `HAVE_LIBGTOP_SMP' if enabled.
- (LIBGTOP_SMP): New automake conditional.
-
-1998-09-02 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4: Remove check for `canonicalize_file_name'.
-
-1998-09-02 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-support.m4: Check for canonicalize_file_name () and
- realpath () and add `canonicalize.o' to LIBOBJS if required.
-
-1998-08-30 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: Added (AC_SUBST): `LIBGTOP_VERSION_CODE'.
- Added (AC_DEFINE_UNQUOTED): `LIBGTOP_VERSION', `LIBGTOP_VERSION_CODE',
- `LIBGTOP_{MAJOR,MINOR,MICRO,SERVER}_VERSION'.
-
-1998-08-29 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: Make it require libgtop >= 0.26.0.
- Added (AC_SUBST): `LIBGTOP_INTERFACE_AGE' and `LIBGTOP_BINARY_AGE'.
-
-1998-08-27 Christopher Blizzard <blizzard at appliedtheory.com>
-
- * gnome-ghttp-check.m4: Umm...I think this works better. Doesn't
- break anything anyway.
- Oooo...it actually works now. Forgot a ,
-
-1998-08-26 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4 (GNOME_INIT_LIBGTOP): Make it work
- with a brain-dead /bin/sh and a brain-dead /bin/test.
-
- * gnome-libgtop-check.m4 (GNOME_INIT_LIBGTOP): Use `AC_MSG_WARN'
- if LibGTop cannot be found and the `fail' argument is not given.
-
-1998-08-24 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-support.m4 (GCC_NEED_DECLARATIONS): Added `setreuid',
- `setregid' and `getpagesize'.
- (AC_TYPE_UID_T): New check.
-
-1998-08-24 Christopher Blizzard <blizzard at appliedtheory.com>
-
- * Makefile.am (MACROS): Add gnome-ghttp-check.m4 to the Makefile.
-
-1998-08-23 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4 (GNOME_INIT_LIBGTOP): You can give
- this macro two parameters: the required version number and
- an optional `fail' argument to make it fail if LibGTop is
- not found.
-
-1998-08-22 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-guile-checks.m4: Added check for `-lnsl' and `-lsocket'
- if `build-guile' cannot be found.
-
-1998-08-20 Raja R Harinath <harinath at cs.umn.edu>
-
- * compiler-flags.m4: New file. Defines the
- GNOME_COMPILER_WARNINGS macro.
- * autogen.sh (conf_flags): Add `--enable-compile-warnings' to list
- of flags passed to `configure'.
- * Makefile.am (MACROS): Add compiler-flags.m4.
-
-1998-08-18 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: make it require libgtop >= 0.25.0.
- Added (AC_SUBST): `LIBGTOP_MICRO_VERSION' and `LIBGTOP_EXTRA_LIBS'.
-
-1998-08-17 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: Completely rewrote this file. It
- uses now the `libgtop-config' script and also checks for
- correct libgtop version.
-
-1998-08-06 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4: Added `freebsd' directory.
-
-1998-08-04 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-x-checks.m4: Define USE_DEVGTK unconditionally to `true'.
-
-1998-08-04 Stuart Parmenter <pavlov at innerx.net>
-
- * gnome-x-checks.m4: (AM_PATH_GTK) make it require GTK >= 1.1.1
- dnl'd the dev_gtk since they will have to anyways.
-
-1998-08-04 Sebastian Wilhelmi <wilhelmi at ira.uka.de>
-
- * gnome.m4: (GNOME_INIT_HOOK): Call $1 also, if `gnome-config' is
- found and used
-
-1998-08-02 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome.m4 (GNOME_CONFIG): Use the `gnome-config' program if it
- exists.
-
-1998-08-01 Raja R Harinath <harinath at cs.umn.edu>
-
- * Makefile.am (EXTRA_DIST): Remove `macros.dep'.
-
-1998-07-30 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4 (GNOME_LIBGTOP_TYPES): New macro.
- Checks for `u_int64_t' and `int64_t'.
-
-1998-07-29 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: Added (AC_SUBST):
- `LIBGTOP_NAMES_LIBS', `LIBGTOP_NAMES_INCS',
- `LIBGTOP_GUILE_LIBS', `LIBGTOP_GUILE_NAMES_LIBS',
- `LIBGTOP_MAJOR_VERSION', `LIBGTOP_MINOR_VERSION',
- `LIBGTOP_VERSION'.
-
- * gnome-libgtop-sysdeps.m4 (libgtop_sysdeps_dir):
- Added `AC_SUBST(libgtop_sysdeps_dir)'.
-
-1998-07-29 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4: Check for functions that `error.c' looks for.
-
-1998-07-29 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-fileutils.m4 (AM_FUNC_ERROR_AT_LINE): Removed.
-
- * gnome-support.m4 (AM_FUNC_ERROR_AT_LINE): New check.
-
-1998-07-27 Federico Mena Quintero <federico at nuclecu.unam.mx>
-
- * gnome-x-checks.m4: Changed Gtk version test to use
- GTK_HAVE_FEATURES_1_1_0.
-
-Sun Jul 26 13:59:53 EDT 1998 Daniel Veillard <Daniel.Veillard at w3.org>
-
- * Makefile.am (MACROS): Added gnome-xml-check.m4
- * gnome-xml-check.m4: New file.
-
-1998-07-24 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4: No longer requiring
- `GNOME_LIBGTOP_SYSDEPS'.
-
-Fri Jul 24 00:45:38 1998 Tom Tromey <tromey at cygnus.com>
-
- * Makefile.am (MACROS): Added linger.m4.
- * linger.m4: New file.
-
-Thu Jul 23 22:41:23 1998 Tom Tromey <tromey at cygnus.com>
-
- * Makefile.am (MACROS): Added gnome-undelfs.m4, gnome-vfs.m4.
- * gnome-undelfs.m4: New file.
- * gnome-vfs.m4: New file.
-
-1998-07-22 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-fileutils.m4: Added some reasonable defaults to allow
- cross compiling; removed `mountlist.o' and `fsusage.o' from
- LIBOBJS.
-
-Tue Jul 21 23:44:53 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome-guile-checks.m4: If no build-guile, link against readline
- before termcap.
-
-1998-07-15 Raja R Harinath <harinath at cs.umn.edu>
-
- * Makefile.am (MACROS): Add `need-declaration.m4'.
-
- * gnome-support.m4 (AC_REPLACE_FUNCS): Add memmove, strtod,
- strtol, strtoul.
- (GCC_NEED_DECLARATIONS): New check. Check whether `gethostname'
- needs to be declared.
-
- * need-declaration.m4: New file. Stolen from EGCS.
-
-1998-07-13 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4 (AC_REPLACE_FUNCS): Add check for `mkstemp'.
-
-Wed Jul 1 13:50:39 1998 Scott D. Heavner <sdh at po.cwru.edu>
-
- * curses.m4: add some docs and start using with tcd
-
-1998-06-29 Raja R Harinath <harinath at cs.umn.edu>
-
- * Makefile.am (MACROS): Add all the `.m4' files here.
-
-Mon Jun 29 11:12:04 1998 Scott D. Heavner <sdh at po.cwru.edu>
-
- * curses.m4: Need AC_SUBST(CURSES_INCLUDEDIR) not CURSES_INCLUDES
-
-Mon Jun 29 10:35:22 1998 Scott D. Heavner <sdh at po.cwru.edu>
-
- * curses.m4: rm conftext* should read rm conftest*, was leaving
- conftest.c files around.
-
-1998-06-27 Christopher Blizzard <blizzard at foo.appliedtheory.com>
-
- * gnome-objc-checks.m4: Use egcs if it's available. The gcc that
- ships with RedHat 5.1 doesn't do objc, egcs does.
-
-Fri Jun 26 14:36:08 1998 Scott D. Heavner <sdh at po.cwru.edu>
-
- * curses.m4 (AC_CHECK_CURSES): New check. mangled out of mc's
- configure.in
-
-1998-06-24 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-fileutils.m4 (AM_FUNC_ERROR_AT_LINE): New check.
- (vprintf): New check.
- (ftruncate.c): Remove check.
- This needs to be further cleaned up to only list what is
- needed for gdiskfree.
- * Makefile.am (MACROS): Add gnome-fileutils.m4.
-
-1998-06-14 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4 (LINUX_TABLE): New automake conditional;
- also defines HAVE_LINUX_TABLE.
-
-1998-06-13 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4: Added check for the table ()
- system call in the linux kernel.
-
-1998-06-11 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-x-checks.m4 (USE_DEVGTK): Use AC_EGREP_CPP rather than
- AC_CHECK_HEADER. AC_CHECK_HEADER is fooled by warnings.
-
- * gnome-support.m4 (AC_PROG_AWK): Look for awk.
- (CROSS_COMPILING): Remove conditional.
-
-Wed Jun 10 14:19:39 EDT 1998 Gregory McLean <gregm at comstar.net>
-
- * gnome-x-checks.m4: More tweeks to make building against gtk 1.0
- and gtk1.1 less painful.
-
-1998-06-08 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-support.m4 (CROSS_COMPILING): New automake conditional;
- (need_gnome_support): added `AC_SUBST(need_gnome_support)'.
-
-1998-06-07 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-guile-checks.m4 (GNOME_CHECK_GUILE): When
- cross-compiling, we now check for `$host_alias-buile-guile'.
-
-1998-06-03 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-guile-checks.m4 (GNOME_CHECK_GUILE): Looks also
- in $GNOME_LIBDIR; added failflag: GNOME_CHECK_GUILE(fail)
- will abort if guile cannot be found.
-
-1998-05-23 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4 (GNOME_LIBGTOP_HOOK):
- (libgtop_use_machine_h): Set this to true on SunOS.
-
-1998-05-22 Martin Baulig <baulig at merkur.uni-trier.de>
-
- * gnome-fileutils.m4 (GNOME_FILEUTILS_CHECKS): New file.
- Imported from `configure.in' in GNU fileutils 3.16. It does
- all the checks that are needed for the diskusage applet.
-
-1998-05-22 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-check.m4 (GNOME_LIBGTOP_HOOK): New file.
- Checks whether libgtop is installed and reads its `libgtopConf.sh'
- file if it can be found. Defines HAVE_LIBGTOP on success and
- provides HAVE_LIBGTOP automake conditional.
-
-1998-05-21 Martin Baulig <martin at home-of-linux.org>
-
- * gnome-libgtop-sysdeps.m4 (GNOME_LIBGTOP_SYSDEPS): New file.
- (libgtop_sysdeps_dir): sysdeps directory libgtop uses.
- (libgtop_use_machine_h): define HAVE_GLIBTOP_MACHINE_H if this
- is `yes'.
- (libgtop_need_server): we only need the libgtop server, when
- this has a value of `yes'. Defines NEED_LIBGTOP and NEED_LIBGTOP
- automake conditional.
-
-1998-05-19 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4 (strerror): New check.
- (sys_errlist): Check for this variable, needed for `strerror'.
- (program_invocation_name, program_invocation_short_name): Change
- method used to check for these.
-
-1998-05-09 Raja R Harinath <harinath at cs.umn.edu>
-
- * autogen.sh: Remove simple-minded check for `gtk+'.
-
-Fri Apr 24 16:43:38 1998 Owen Taylor <otaylor at gtk.org>
-
- * autogen.sh: Pass the results of the environment variable
- ACLOCAL_FLAGS to aclocal. This allows, for instance,
-
- ACLOCAL_FLAGS="-I /home/owen/share/aclocal/" autogen.sh
-
-Sun Apr 19 01:35:53 EDT 1998 Gregory McLean <gregm at comstar.net>
-
- * gnome-x-checks.m4: Updated the gtk check to check for 1.0.0.
-
-1998-04-08 Raja R Harinath <harinath at cs.umn.edu>
-
- * autogen.sh: Update to list newer versions of packages.
- * gnome-support.m4: Add `scandir' to AC_REPLACE_FUNCS.
- Also run AC_HEADER_DIRENT.
-
-1998-03-31 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4 (AC_REPLACE_FUNCS): Look for vasprintf.
-
-Thu Mar 19 23:23:30 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome.m4: An empty true branch of an `if' statement is not valid
- sh syntax. If GNOME_INIT_HOOK argument $1 is empty, use ":"
- instead.
-
-1998-03-19 Miguel de Icaza <miguel at nuclecu.unam.mx>
-
- * gnome.m4 (GNOME_INIT_HOOK): Provide a way to hook some code to
- execute; Accept a probe mode.
-
- (GNOME_INIT): Define in terms of GNOME_INIT_HOOK.
-
-Thu Mar 19 00:17:46 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome-support.m4: Cache results of check for
- program_invocation_short_name, program_invocation_name. Check to
- make sure argp functions are in a library.
-
- * gnome-support.m4: Cache results of argp check.
-
-Sun Mar 15 15:54:43 1998 Owen Taylor <owt1 at cornell.edu>
-
- * gnome-x-checks.m4: Replaced checks for X and GTK
- with AM_PATH_GTK. x_include, X_LIBS, etc, variables no longer
- defined.
-
-1998-03-12 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4: Add a check for <linewrap.h> -- this enables
- some optimizations when compiling `argp'.
-
-Mon Mar 9 19:32:42 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome-support.m4: Build vsnprintf.o, not vsnprint.o.
-
-1998-03-09 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4: Add check for `vsnprintf'.
-
-Sun Mar 8 17:04:28 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome-support.m4: Set need_gnome_support shell variable. Define
- BUILD_GNOME_SUPPORT automake conditional. Define LTLIBOBJS. Look
- for argp_domain element in struct argp.
-
-Sat Mar 7 00:04:22 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome-support.m4 (GNOME_SUPPORT_CHECKS): Add argp-pvh.o to
- LIBOBJS.
-
- * gnome-support.m4 (GNOME_SUPPORT_CHECKS): Check for strnlen().
-
-Wed Mar 4 01:02:55 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome-support.m4 (GNOME_SUPPORT_CHECKS): Check for argp code,
- strndup, program_invocation_name, program_invocation_short_name.
-
-Mon Mar 2 15:27:44 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome-x-checks.m4 (GNOME_X_CHECKS): Also check for SMlib.h; some
- Solaris systems have -lSM but not SMlib.h.
-
-Sun Mar 1 17:49:42 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome.m4 (GNOME_INIT): Changed spacing so --help output looks
- right.
-
-Fri Feb 27 10:05:34 1998 Tom Tromey <tromey at cygnus.com>
-
- * gnome-objc-checks.m4 (GNOME_CHECK_OBJC): Set OBJECTIVE_C shell
- variable.
-
-1998-02-26 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-x-checks.m4 (CPPFLAGS): Put $X_CFLAGS here, not in
- $CFLAGS.
- (GNOME_HAVE_SM): New var. `true' if we have libSM, `false'
- otherwise.
-
-1998-02-19 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome.m4: Remove `GNOME_CHECK_GNOME'.
-
-1998-02-18 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4 (GNOME_SUPPORT_CHECKS): Replace `strcasecmp' if
- necessary.
-
-1998-02-15 Raja R Harinath <harinath at cs.umn.edu>
-
- * Makefile.am (MACROS): Add `gnome-pthread-check.m4'.
- * gnome-pthread-check.m4: New file. Moved pthread check from
- gnome-x-checks.m4 to here.
- * gnome-objc-checks.m4: Use `gnome-pthread-check'.
- (OBJC_LIBS): New config var.
- * gnome-x-checks.m4: Add `AC_DEFINE(HAVE_LIBSM)' if `-lSM' is
- already part of `$x_libs'.
- Move pthread check to new file.
-
-Sat Feb 14 12:45:35 1998 Tom Tromey <tromey at cygnus.com>
-
- * Makefile.am (macros.dep): Use single quotes, not double quotes.
- Otherwise bash will interpret `$(...)' incorrectly.
- (EXTRA_DIST): Include macros.dep in distribution.
-
-1998-02-14 Raja R Harinath <harinath at cs.umn.edu>
-
- * Makefile.am (macros.dep): Put back doubled `$'. We want the
- expansion to occur in the including Makefile, not here.
- Otherwise, there will be an extra `../' in the rule.
-
-Sat Feb 14 17:41:28 KST 1998 Changwoo Ryu <cwryu at adam.kaist.ac.kr>
-
- * autogen.sh: multilple aclocal -I directories.
-
-Sat Feb 14 01:09:37 1998 Tom Tromey <tromey at cygnus.com>
-
- * Makefile.am (macros.dep): Removed extra `$' from rule.
-
- * gnome-x-checks.m4: Only check for -lSM if not already in
- x_libs.
-
-1998-02-13 Raja R Harinath <harinath at cs.umn.edu>
-
- * Makefile.am (EXTRA_DIST): Add `autogen.sh'.
-
- * gnome-objc-checks.m4 (GNOME_INIT_OBJC): Solaris /bin/sh doesn't
- understand `test -e'.
-
- * autogen.sh: New file.
-
- * gnome.m4 (GNOME_INIT): Look for gnomeConf.sh in $libdir, where
- the installation actually installs it.
-
- * Makefile.am (macros.dep): New mainta
iner rule for handling
- automatic rebuilding of aclocal.m4 if any of the macros change.
- (MACROS): New variable. List of all `m4' macros in this
- directory.
-
-1998-02-12 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome-support.m4: New file. Defines GNOME_SUPPORT_CHECKS for
- libsupport.a support.
-
-1998-02-10 Raja R Harinath <harinath at cs.umn.edu>
-
- * gnome.m4: New file. Moved AC_CHECK_GNOME from `configure.in' to
- here, and renamed macro to GNOME_CHECK_GNOME.
- * gnome-x-checks.m4: Likewise, move and renaming AC_GNOME_X_CHECKS
- to GNOME_X_CHECKS.
-
- * aclocal-include.m4: New file. Defines AM_ACLOCAL_INCLUDE macro
- to provide extra search directories to `aclocal'.
-
-*Local Variables:
-*backup-inhibited: t
-*End:
diff --git a/macros/Makefile.am b/macros/Makefile.am
deleted file mode 100644
index 84688e9..0000000
--- a/macros/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-## Please update this variable if any new macros are created
-
-MACROS= \
- aclocal-include.m4 \
- compiler-flags.m4 \
- curses.m4 \
- gperf-check.m4 \
- linger.m4 \
- need-declaration.m4
-
-EXTRA_DIST=$(MACROS) autogen.sh
-MAINTAINERCLEANFILES=macros.dep
-
- at MAINT@macros.dep: Makefile.am
- at MAINT@ @echo '$$(top_srcdir)/aclocal.m4: $(MACROS:%=macros/%)' > $@
diff --git a/macros/aclocal-include.m4 b/macros/aclocal-include.m4
deleted file mode 100644
index abf6533..0000000
--- a/macros/aclocal-include.m4
+++ /dev/null
@@ -1,16 +0,0 @@
-# aclocal-include.m4
-#
-# This macro adds the name macrodir to the set of directories
-# that `aclocal' searches for macros.
-
-# serial 1
-
-dnl AM_ACLOCAL_INCLUDE(macrodir)
-AC_DEFUN([AM_ACLOCAL_INCLUDE],
-[
- AM_CONDITIONAL(INSIDE_GNOME_COMMON, test x = y)
-
- test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
-
- for k in $1 ; do ACLOCAL="$ACLOCAL -I $k" ; done
-])
diff --git a/macros/autogen.sh b/macros/autogen.sh
deleted file mode 100644
index bcf985f..0000000
--- a/macros/autogen.sh
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-
-DIE=0
-
-if [ -n "$GNOME2_PATH" ]; then
- ACLOCAL_FLAGS="-I $GNOME2_PATH/share/aclocal $ACLOCAL_FLAGS"
- PATH="$GNOME2_PATH/bin:$PATH"
- export PATH
-fi
-
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "**Error**: You must have \`autoconf' installed to compile $PKG_NAME."
- echo "Download the appropriate package for your distribution,"
- echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
- DIE=1
-}
-
-(grep "^AM_PROG_XML_I18N_TOOLS" $srcdir/configure.in >/dev/null) && {
- (xml-i18n-toolize --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "**Error**: You must have \`xml-i18n-toolize' installed to compile $PKG_NAME."
- echo "Get ftp://ftp.gnome.org/pub/GNOME/stable/sources/xml-i18n-tools/xml-i18n-tools-0.6.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
- }
-}
-
-(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && {
- (libtool --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "**Error**: You must have \`libtool' installed to compile $PKG_NAME."
- echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
- }
-}
-
-#grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && {
-# grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
-# (gettext --version) < /dev/null > /dev/null 2>&1 || {
-# echo
-# echo "**Error**: You must have \`gettext' installed to compile $PKG_NAME."
-# echo "Get ftp://ftp.gnu.org/pub/gnu/gettext/gettext-0.10.39.tar.gz"
-# echo "(or a newer version if it is available)"
-# DIE=1
-# }
-#}
-
-#grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && {
-# grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
-# (gettext --version) < /dev/null > /dev/null 2>&1 || {
-# echo
-# echo "**Error**: You must have \`gettext' installed to compile $PKG_NAME."
-# echo "Get ftp://ftp.gnu.org/pub/gnu/gettext/gettext-0.10.39.tar.gz"
-# echo "(or a newer version if it is available)"
-# DIE=1
-# }
-#}
-
-(automake --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "**Error**: You must have \`automake' installed to compile $PKG_NAME."
- echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
- NO_AUTOMAKE=yes
-}
-
-
-# if no automake, don't bother testing for aclocal
-test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "**Error**: Missing \`aclocal'. The version of \`automake'"
- echo "installed doesn't appear recent enough."
- echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
-}
-
-if test "$DIE" -eq 1; then
- exit 1
-fi
-
-if test -z "$*"; then
- echo "**Warning**: I am going to run \`configure' with no arguments."
- echo "If you wish to pass any to it, please specify them on the"
- echo \`$0\'" command line."
- echo
-fi
-
-case $CC in
-xlc )
- am_opt=--include-deps;;
-esac
-
-for coin in `find $srcdir -name configure.in -print`
-do
- dr=`dirname $coin`
- if test -f $dr/NO-AUTO-GEN; then
- echo skipping $dr -- flagged as no auto-gen
- else
- echo processing $dr
- macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin`
- ( cd $dr
- macrosdir=`find . -name macros -print`
- for i in $macrodirs; do
- if test -f $i/gnome-gettext.m4; then
- DELETEFILES="$DELETEFILES $i/gnome-gettext.m4"
- fi
- done
-
- echo "deletefiles is $DELETEFILES"
- aclocalinclude="$ACLOCAL_FLAGS"
- for k in $aclocalinclude; do
- if test -d $k; then
- if [ -f $k/gnome.m4 -a "$GNOME_INTERFACE_VERSION" = "1" ]; then
- rm -f $DELETEFILES
- fi
- fi
- done
- for k in $macrodirs; do
- if test -d $k; then
- aclocalinclude="$aclocalinclude -I $k"
- if [ -f $k/gnome.m4 -a "$GNOME_INTERFACE_VERSION" = "1" ]; then
- rm -f $DELETEFILES
- fi
- fi
- done
- if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then
- if grep "sed.*POTFILES" configure.in >/dev/null; then
- : do nothing -- we still have an old unmodified configure.in
- else
- echo "Creating $dr/aclocal.m4 ..."
- test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
- echo "Running gettextize... Ignore non-fatal messages."
- echo "no" | gettextize --force --copy
- echo "Making $dr/aclocal.m4 writable ..."
- test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
- fi
- fi
- if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then
- echo "Creating $dr/aclocal.m4 ..."
- test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
- echo "Running gettextize... Ignore non-fatal messages."
- echo "no" | gettextize --force --copy
- echo "Making $dr/aclocal.m4 writable ..."
- test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
- fi
- if grep "^AM_PROG_XML_I18N_TOOLS" configure.in >/dev/null; then
- echo "Running xml-i18n-toolize... Ignore non-fatal messages."
- xml-i18n-toolize --copy --force --automake
- fi
- if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then
- if test -z "$NO_LIBTOOLIZE" ; then
- echo "Running libtoolize..."
- libtoolize --force --copy
- fi
- fi
- echo "Running aclocal $aclocalinclude ..."
- aclocal $aclocalinclude || {
- echo
- echo "**Error**: aclocal failed. This may mean that you have not"
- echo "installed all of the packages you need, or you may need to"
- echo "set ACLOCAL_FLAGS to include \"-I \$prefix/share/aclocal\""
- echo "for the prefix where you installed the packages whose"
- echo "macros were not found"
- exit 1
- }
-
- if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then
- echo "Running autoheader..."
- autoheader || { echo "**Error**: autoheader failed."; exit 1; }
- fi
- echo "Running automake --gnu $am_opt ..."
- automake --add-missing --gnu $am_opt ||
- { echo "**Error**: automake failed."; exit 1; }
- echo "Running autoconf ..."
- autoconf || { echo "**Error**: autoconf failed."; exit 1; }
- ) || exit 1
- fi
-done
-
-conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
-
-if test x$NOCONFIGURE = x; then
- echo Running $srcdir/configure $conf_flags "$@" ...
- $srcdir/configure $conf_flags "$@" \
- && echo Now type \`make\' to compile $PKG_NAME || exit 1
-else
- echo Skipping configure process.
-fi
diff --git a/macros/compiler-flags.m4 b/macros/compiler-flags.m4
deleted file mode 100644
index 63f8e2e..0000000
--- a/macros/compiler-flags.m4
+++ /dev/null
@@ -1,109 +0,0 @@
-dnl GNOME_COMPILE_WARNINGS
-dnl Turn on many useful compiler warnings
-dnl For now, only works on GCC
-AC_DEFUN([GNOME_COMPILE_WARNINGS],[
- AC_ARG_ENABLE(compile-warnings,
- [ --enable-compile-warnings=[no/minimum/yes] Turn on compiler warnings.],,enable_compile_warnings=minimum)
-
- AC_MSG_CHECKING(what warning flags to pass to the C compiler)
- warnCFLAGS=
- if test "x$GCC" != xyes; then
- enable_compile_warnings=no
- fi
-
- if test "x$enable_compile_warnings" != "xno"; then
- if test "x$GCC" = "xyes"; then
- case " $CFLAGS " in
- *[\ \ ]-Wall[\ \ ]*) ;;
- *) warnCFLAGS="-Wall -Wunused" ;;
- esac
-
- ## -W is not all that useful. And it cannot be controlled
- ## with individual -Wno-xxx flags, unlike -Wall
- if test "x$enable_compile_warnings" = "xyes"; then
- warnCFLAGS="$warnCFLAGS -Wmissing-prototypes -Wmissing-declarations"
- fi
- fi
- fi
- AC_MSG_RESULT($warnCFLAGS)
-
- AC_ARG_ENABLE(iso-c,
- [ --enable-iso-c Try to warn if code is not ISO C ],,
- enable_iso_c=no)
-
- AC_MSG_CHECKING(what language compliance flags to pass to the C compiler)
- complCFLAGS=
- if test "x$enable_iso_c" != "xno"; then
- if test "x$GCC" = "xyes"; then
- case " $CFLAGS " in
- *[\ \ ]-ansi[\ \ ]*) ;;
- *) complCFLAGS="$complCFLAGS -ansi" ;;
- esac
-
- case " $CFLAGS " in
- *[\ \ ]-pedantic[\ \ ]*) ;;
- *) complCFLAGS="$complCFLAGS -pedantic" ;;
- esac
- fi
- fi
- AC_MSG_RESULT($complCFLAGS)
- if test "x$cflags_set" != "xyes"; then
- CFLAGS="$CFLAGS $warnCFLAGS $complCFLAGS"
- cflags_set=yes
- AC_SUBST(cflags_set)
- fi
-])
-
-dnl For C++, do basically the same thing.
-
-AC_DEFUN([GNOME_CXX_WARNINGS],[
- AC_ARG_ENABLE(cxx-warnings,
- [ --enable-cxx-warnings=[no/minimum/yes] Turn on compiler warnings.],,enable_cxx_warnings=minimum)
-
- AC_MSG_CHECKING(what warning flags to pass to the C++ compiler)
- warnCXXFLAGS=
- if test "x$GCC" != xyes; then
- enable_compile_warnings=no
- fi
- if test "x$enable_cxx_warnings" != "xno"; then
- if test "x$GCC" = "xyes"; then
- case " $CXXFLAGS " in
- *[\ \ ]-Wall[\ \ ]*) ;;
- *) warnCXXFLAGS="-Wall -Wno-unused" ;;
- esac
-
- ## -W is not all that useful. And it cannot be controlled
- ## with individual -Wno-xxx flags, unlike -Wall
- if test "x$enable_cxx_warnings" = "xyes"; then
- warnCXXFLAGS="$warnCXXFLAGS -Wmissing-prototypes -Wmissing-declarations -Wshadow -Woverloaded-virtual"
- fi
- fi
- fi
- AC_MSG_RESULT($warnCXXFLAGS)
-
- AC_ARG_ENABLE(iso-cxx,
- [ --enable-iso-cxx Try to warn if code is not ISO C++ ],,
- enable_iso_cxx=no)
-
- AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler)
- complCXXFLAGS=
- if test "x$enable_iso_cxx" != "xno"; then
- if test "x$GCC" = "xyes"; then
- case " $CXXFLAGS " in
- *[\ \ ]-ansi[\ \ ]*) ;;
- *) complCXXFLAGS="$complCXXFLAGS -ansi" ;;
- esac
-
- case " $CXXFLAGS " in
- *[\ \ ]-pedantic[\ \ ]*) ;;
- *) complCXXFLAGS="$complCXXFLAGS -pedantic" ;;
- esac
- fi
- fi
- AC_MSG_RESULT($complCXXFLAGS)
- if test "x$cxxflags_set" != "xyes"; then
- CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS"
- cxxflags_set=yes
- AC_SUBST(cxxflags_set)
- fi
-])
diff --git a/macros/curses.m4 b/macros/curses.m4
deleted file mode 100644
index 5307e13..0000000
--- a/macros/curses.m4
+++ /dev/null
@@ -1,318 +0,0 @@
-dnl Curses detection: Munged from Midnight Commander's configure.in
-dnl
-dnl What it does:
-dnl =============
-dnl
-dnl - Determine which version of curses is installed on your system
-dnl and set the -I/-L/-l compiler entries and add a few preprocessor
-dnl symbols
-dnl - Do an AC_SUBST on the CURSES_INCLUDEDIR and CURSES_LIBS so that
-dnl @CURSES_INCLUDEDIR@ and @CURSES_LIBS@ will be available in
-dnl Makefile.in's
-dnl - Modify the following configure variables (these are the only
-dnl curses.m4 variables you can access from within configure.in)
-dnl CURSES_INCLUDEDIR - contains -I's and possibly -DRENAMED_CURSES if
-dnl an ncurses.h that's been renamed to curses.h
-dnl is found.
-dnl CURSES_LIBS - sets -L and -l's appropriately
-dnl CFLAGS - if --with-sco, add -D_SVID3
-dnl has_curses - exports result of tests to rest of configure
-dnl
-dnl Usage:
-dnl ======
-dnl 1) Add lines indicated below to acconfig.h
-dnl 2) call AC_CHECK_CURSES after AC_PROG_CC in your configure.in
-dnl 3) Instead of #include <curses.h> you should use the following to
-dnl properly locate ncurses or curses header file
-dnl
-dnl #if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
-dnl #include <ncurses.h>
-dnl #else
-dnl #include <curses.h>
-dnl #endif
-dnl
-dnl 4) Make sure to add @CURSES_INCLUDEDIR@ to your preprocessor flags
-dnl 5) Make sure to add @CURSES_LIBS@ to your linker flags or LIBS
-dnl
-dnl Notes with automake:
-dnl - call AM_CONDITIONAL(HAS_CURSES, test "$has_curses" = true) from
-dnl configure.in
-dnl - your Makefile.am can look something like this
-dnl -----------------------------------------------
-dnl INCLUDES= blah blah blah $(CURSES_INCLUDEDIR)
-dnl if HAS_CURSES
-dnl CURSES_TARGETS=name_of_curses_prog
-dnl endif
-dnl bin_PROGRAMS = other_programs $(CURSES_TARGETS)
-dnl other_programs_SOURCES = blah blah blah
-dnl name_of_curses_prog_SOURCES = blah blah blah
-dnl other_programs_LDADD = blah
-dnl name_of_curses_prog_LDADD = blah $(CURSES_LIBS)
-dnl -----------------------------------------------
-dnl
-dnl
-dnl The following lines should be added to acconfig.h:
-dnl ==================================================
-dnl
-dnl /*=== Curses version detection defines ===*/
-dnl /* Found some version of curses that we're going to use */
-dnl #undef HAS_CURSES
-dnl
-dnl /* Use SunOS SysV curses? */
-dnl #undef USE_SUNOS_CURSES
-dnl
-dnl /* Use old BSD curses - not used right now */
-dnl #undef USE_BSD_CURSES
-dnl
-dnl /* Use SystemV curses? */
-dnl #undef USE_SYSV_CURSES
-dnl
-dnl /* Use Ncurses? */
-dnl #undef USE_NCURSES
-dnl
-dnl /* If you Curses does not have color define this one */
-dnl #undef NO_COLOR_CURSES
-dnl
-dnl /* Define if you want to turn on SCO-specific code */
-dnl #undef SCO_FLAVOR
-dnl
-dnl /* Set to reflect version of ncurses *
-dnl * 0 = version 1.*
-dnl * 1 = version 1.9.9g
-dnl * 2 = version 4.0/4.1 */
-dnl #undef NCURSES_970530
-dnl
-dnl /*=== End new stuff for acconfig.h ===*/
-dnl
-
-
-AC_DEFUN([AC_CHECK_CURSES],[
- search_ncurses=true
- screen_manager=""
- has_curses=false
-
- CFLAGS=${CFLAGS--O}
-
- AC_SUBST(CURSES_LIBS)
- AC_SUBST(CURSES_INCLUDEDIR)
-
- AC_ARG_WITH(sco,
- [ --with-sco Use this to turn on SCO-specific code],[
- if test x$withval = xyes; then
- AC_DEFINE(SCO_FLAVOR)
- CFLAGS="$CFLAGS -D_SVID3"
- fi
- ])
-
- AC_ARG_WITH(sunos-curses,
- [ --with-sunos-curses Used to force SunOS 4.x curses],[
- if test x$withval = xyes; then
- AC_USE_SUNOS_CURSES
- fi
- ])
-
- AC_ARG_WITH(osf1-curses,
- [ --with-osf1-curses Used to force OSF/1 curses],[
- if test x$withval = xyes; then
- AC_USE_OSF1_CURSES
- fi
- ])
-
- AC_ARG_WITH(vcurses,
- [ --with-vcurses[=incdir] Used to force SysV curses],
- if test x$withval != xyes; then
- CURSES_INCLUDEDIR="-I$withval"
- fi
- AC_USE_SYSV_CURSES
- )
-
- AC_ARG_WITH(ncurses,
- [ --with-ncurses[=dir] Compile with ncurses/locate base dir],
- if test x$withval = xno ; then
- search_ncurses=false
- elif test x$withval != xyes ; then
- CURSES_LIBS="$LIBS -L$withval/lib -lncurses"
- CURSES_INCLUDEDIR="-I$withval/include"
- search_ncurses=false
- screen_manager="ncurses"
- AC_DEFINE(USE_NCURSES)
- AC_DEFINE(HAS_CURSES)
- has_curses=true
- fi
- )
-
- if $search_ncurses
- then
- AC_SEARCH_NCURSES()
- fi
-
-
-])
-
-
-AC_DEFUN([AC_USE_SUNOS_CURSES], [
- search_ncurses=false
- screen_manager="SunOS 4.x /usr/5include curses"
- AC_MSG_RESULT(Using SunOS 4.x /usr/5include curses)
- AC_DEFINE(USE_SUNOS_CURSES)
- AC_DEFINE(HAS_CURSES)
- has_curses=true
- AC_DEFINE(NO_COLOR_CURSES)
- AC_DEFINE(USE_SYSV_CURSES)
- CURSES_INCLUDEDIR="-I/usr/5include"
- CURSES_LIBS="/usr/5lib/libcurses.a /usr/5lib/libtermcap.a"
- AC_MSG_RESULT(Please note that some screen refreshs may fail)
-])
-
-AC_DEFUN([AC_USE_OSF1_CURSES], [
- AC_MSG_RESULT(Using OSF1 curses)
- search_ncurses=false
- screen_manager="OSF1 curses"
- AC_DEFINE(HAS_CURSES)
- has_curses=true
- AC_DEFINE(NO_COLOR_CURSES)
- AC_DEFINE(USE_SYSV_CURSES)
- CURSES_LIBS="-lcurses"
-])
-
-AC_DEFUN([AC_USE_SYSV_CURSES], [
- AC_MSG_RESULT(Using SysV curses)
- AC_DEFINE(HAS_CURSES)
- has_curses=true
- AC_DEFINE(USE_SYSV_CURSES)
- search_ncurses=false
- screen_manager="SysV/curses"
- CURSES_LIBS="-lcurses"
-])
-
-dnl AC_ARG_WITH(bsd-curses,
-dnl [--with-bsd-curses Used to compile with bsd curses, not very fancy],
-dnl search_ncurses=false
-dnl screen_manager="Ultrix/cursesX"
-dnl if test $system = ULTRIX
-dnl then
-dnl THIS_CURSES=cursesX
-dnl else
-dnl THIS_CURSES=curses
-dnl fi
-dnl
-dnl CURSES_LIBS="-l$THIS_CURSES -ltermcap"
-dnl AC_DEFINE(HAS_CURSES)
-dnl has_curses=true
-dnl AC_DEFINE(USE_BSD_CURSES)
-dnl AC_MSG_RESULT(Please note that some screen refreshs may fail)
-dnl AC_MSG_WARN(Use of the bsdcurses extension has some)
-dnl AC_MSG_WARN(display/input problems.)
-dnl AC_MSG_WARN(Reconsider using xcurses)
-dnl)
-
-
-dnl
-dnl Parameters: directory filename cureses_LIBS curses_INCLUDEDIR nicename
-dnl
-AC_DEFUN([AC_NCURSES], [
- if $search_ncurses
- then
- if test -f $1/$2
- then
- AC_MSG_RESULT(Found ncurses on $1/$2)
- CURSES_LIBS="$3"
- CURSES_INCLUDEDIR="$4"
- search_ncurses=false
- screen_manager=$5
- AC_DEFINE(HAS_CURSES)
- has_curses=true
- AC_DEFINE(USE_NCURSES)
- fi
- fi
-])
-
-AC_DEFUN([AC_SEARCH_NCURSES], [
- AC_CHECKING("location of ncurses.h file")
-
- AC_NCURSES(/usr/include, ncurses.h, -lncurses,, "ncurses on /usr/include")
- AC_NCURSES(/usr/include/ncurses, ncurses.h, -lncurses, -I/usr/include/ncurses, "ncurses on /usr/include/ncurses")
- AC_NCURSES(/usr/local/include, ncurses.h, -L/usr/local/lib -lncurses, -I/usr/local/include, "ncurses on /usr/local")
- AC_NCURSES(/usr/local/include/ncurses, ncurses.h, -L/usr/local/lib -L/usr/local/lib/ncurses -lncurses, -I/usr/local/include/ncurses, "ncurses on /usr/local/include/ncurses")
-
- AC_NCURSES(/usr/local/include/ncurses, curses.h, -L/usr/local/lib -lncurses, -I/usr/local/include/ncurses -DRENAMED_NCURSES, "renamed ncurses on /usr/local/.../ncurses")
-
- AC_NCURSES(/usr/include/ncurses, curses.h, -lncurses, -I/usr/include/ncurses -DRENAMED_NCURSES, "renamed ncurses on /usr/include/ncurses")
-
- dnl
- dnl We couldn't find ncurses, try SysV curses
- dnl
- if $search_ncurses
- then
- AC_EGREP_HEADER(init_color, /usr/include/curses.h,
- AC_USE_SYSV_CURSES)
- AC_EGREP_CPP(USE_NCURSES,[
-#include <curses.h>
-#ifdef __NCURSES_H
-#undef USE_NCURSES
-USE_NCURSES
-#endif
-],[
- CURSES_INCLUDEDIR="$CURSES_INCLUDEDIR -DRENAMED_NCURSES"
- AC_DEFINE(HAS_CURSES)
- has_curses=true
- AC_DEFINE(USE_NCURSES)
- search_ncurses=false
- screen_manager="ncurses installed as curses"
-])
- fi
-
- dnl
- dnl Try SunOS 4.x /usr/5{lib,include} ncurses
- dnl The flags USE_SUNOS_CURSES, USE_BSD_CURSES and BUGGY_CURSES
- dnl should be replaced by a more fine grained selection routine
- dnl
- if $search_ncurses
- then
- if test -f /usr/5include/curses.h
- then
- AC_USE_SUNOS_CURSES
- fi
- else
- # check for ncurses version, to properly ifdef mouse-fix
- AC_MSG_CHECKING(for ncurses version)
- ncurses_version=unknown
-cat > conftest.$ac_ext <<EOF
-[#]line __oline__ "configure"
-#include "confdefs.h"
-#ifdef RENAMED_NCURSES
-#include <curses.h>
-#else
-#include <ncurses.h>
-#endif
-#undef VERSION
-VERSION:NCURSES_VERSION
-EOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC |
- egrep "VERSION:" >conftest.out 2>&1; then
-changequote(,)dnl
- ncurses_version=`cat conftest.out|sed -e 's/^[^"]*"//' -e 's/".*//'`
-changequote([,])dnl
- fi
- rm -rf conftest*
- AC_MSG_RESULT($ncurses_version)
- case "$ncurses_version" in
-changequote(,)dnl
- 4.[01])
-changequote([,])dnl
- AC_DEFINE(NCURSES_970530,2)
- ;;
- 1.9.9g)
- AC_DEFINE(NCURSES_970530,1)
- ;;
- 1*)
- AC_DEFINE(NCURSES_970530,0)
- ;;
- esac
- fi
-])
-
-
-
-
-
diff --git a/macros/gperf-check.m4 b/macros/gperf-check.m4
deleted file mode 100644
index 3869459..0000000
--- a/macros/gperf-check.m4
+++ /dev/null
@@ -1,79 +0,0 @@
-dnl
-dnl AC_PROG_GPERF (MINIMUM-VERSION)
-dnl
-dnl Check for availability of gperf.
-dnl Abort if not found or if current version is not up to par.
-dnl
-
-AC_DEFUN([AC_PROG_GPERF],[
- AC_PATH_PROG(GPERF, gperf, no)
- if test "$GPERF" = no; then
- AC_MSG_ERROR(Could not find gperf)
- fi
- min_gperf_version=ifelse([$1], ,2.7,$1)
- AC_MSG_CHECKING(for gperf - version >= $min_gperf_version)
- gperf_major_version=`$GPERF --version | \
- sed 's/GNU gperf \([[0-9]]*\).\([[0-9]]*\)/\1/'`
- gperf_minor_version=`$GPERF --version | \
- sed 's/GNU gperf \([[0-9]]*\).\([[0-9]]*\)/\2/'`
- no_gperf=""
-dnl
-dnl Now check if the installed gperf is sufficiently new.
-dnl
- AC_TRY_RUN([
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-static char*
-my_strdup (char *str)
-{
- char *new_str;
-
- if (str)
- {
- new_str = malloc ((strlen (str) + 1) * sizeof(char));
- strcpy (new_str, str);
- }
- else
- new_str = NULL;
-
- return new_str;
-}
-
-int
-main ()
-{
- char *tmp_version;
-
- int major;
- int minor;
-
- /* HP/UX 9 (%@#!) writes to sscanf strings */
- tmp_version = my_strdup("$min_gperf_version");
- if (sscanf(tmp_version, "%d.%d", &major, &minor) != 2) {
- printf ("%s, bad version string\n", "$min_gperf_version");
- return 1;
- }
-
- if (($gperf_major_version > major) ||
- (($gperf_major_version == major) && ($gperf_minor_version >= minor))) {
- return 0;
- } else {
- printf ("\n");
- printf ("*** An old version of gperf ($gperf_major_version.$gperf_minor_version) was found.\n");
- printf ("*** You need a version of gperf newer than %d.%d.%d. The latest version of\n",
- major, minor);
- printf ("*** gperf is always available from ftp://ftp.gnu.org.\n");
- printf ("***\n");
- return 1;
- }
-}
-],,no_gperf=yes,[/bin/true])
- if test "x$no_gperf" = x ; then
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-
-])
diff --git a/macros/linger.m4 b/macros/linger.m4
deleted file mode 100644
index f1c7060..0000000
--- a/macros/linger.m4
+++ /dev/null
@@ -1,28 +0,0 @@
-dnl
-dnl Check for struct linger
-dnl
-AC_DEFUN([AC_STRUCT_LINGER], [
-av_struct_linger=no
-AC_MSG_CHECKING(struct linger is available)
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <sys/socket.h>
-
-struct linger li;
-
-int main ()
-{
- li.l_onoff = 1;
- li.l_linger = 120;
- return 0;
-}
-],[
-AC_DEFINE(HAVE_STRUCT_LINGER)
-av_struct_linger=yes
-],[
-av_struct_linger=no
-],[
-av_struct_linger=no
-])
-AC_MSG_RESULT($av_struct_linger)
-])
diff --git a/macros/need-declaration.m4 b/macros/need-declaration.m4
deleted file mode 100644
index 8a217b8..0000000
--- a/macros/need-declaration.m4
+++ /dev/null
@@ -1,42 +0,0 @@
-dnl See whether we need a declaration for a function.
-dnl GCC_NEED_DECLARATION(FUNCTION [, EXTRA-HEADER-FILES])
-AC_DEFUN([GCC_NEED_DECLARATION],
-[AC_MSG_CHECKING([whether $1 must be declared])
-AC_CACHE_VAL(gcc_cv_decl_needed_$1,
-[AC_TRY_COMPILE([
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-$2],
-[char *(*pfn) = (char *(*)) $1],
-eval "gcc_cv_decl_needed_$1=no", eval "gcc_cv_decl_needed_$1=yes")])
-if eval "test \"`echo '$gcc_cv_decl_needed_'$1`\" = yes"; then
- AC_MSG_RESULT(yes)
- gcc_need_declarations="$gcc_need_declarations $1"
- gcc_tr_decl=NEED_DECLARATION_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- AC_DEFINE_UNQUOTED($gcc_tr_decl)
-else
- AC_MSG_RESULT(no)
-fi
-])dnl
-
-dnl Check multiple functions to see whether each needs a declaration.
-dnl GCC_NEED_DECLARATIONS(FUNCTION... [, EXTRA-HEADER-FILES])
-AC_DEFUN([GCC_NEED_DECLARATIONS],
-[for ac_func in $1
-do
-GCC_NEED_DECLARATION($ac_func, $2)
-done
-]
-)
diff --git a/po/ChangeLog b/po/ChangeLog
deleted file mode 100644
index 2bfb26f..0000000
--- a/po/ChangeLog
+++ /dev/null
@@ -1,4 +0,0 @@
-2002-09-04 gettextize <bug-gnu-utils at gnu.org>
-
- * Makefile.in.in: Upgrade to gettext-0.10.40.
-
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..b0091ab
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,17 @@
+# please keep this list sorted alphabetically
+cs
+da
+de
+el
+eo
+es
+fa
+fr
+he
+it
+nl
+pl
+pt_BR
+ro
+ru
+zh_CN
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
deleted file mode 100644
index 50d8af9..0000000
--- a/po/Makefile.in.in
+++ /dev/null
@@ -1,195 +0,0 @@
-# Makefile for program source directory in GNU NLS utilities package.
-# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper <drepper at 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 General 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@
-
-# These two variables depend on the location of this directory.
-subdir = po
-top_builddir = ..
-
-SHELL = /bin/sh
- at SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-datadir = @datadir@
-localedir = $(datadir)/locale
-gettextsrcdir = $(datadir)/gettext/po
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-
-CC = @CC@
-GMSGFMT = @GMSGFMT@
-MSGFMT = @MSGFMT@
-XGETTEXT = @XGETTEXT@
-MSGMERGE = msgmerge
-
-DEFS = @DEFS@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-
-INCLUDES = -I.. -I$(top_srcdir)/intl
-
-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
-
-POFILES = @POFILES@
-GMOFILES = @GMOFILES@
-DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
-$(POFILES)
-
-POTFILES = \
-
-CATALOGS = @CATALOGS@
-
-.SUFFIXES:
-.SUFFIXES: .c .o .po .pox .gmo .mo
-
-.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) --statistics -o $$file $<
-
-
-all: all- at USE_NLS@
-
-all-yes: $(CATALOGS)
-all-no:
-
-# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot',
-# otherwise packages like GCC can not be built if only parts of the source
-# have been downloaded.
-
-$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in
- $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
- --add-comments --keyword=_ --keyword=N_ --from-code=iso-8859-1 \
- --files-from=$(srcdir)/POTFILES.in \
- && test ! -f $(PACKAGE).po \
- || ( rm -f $(srcdir)/$(PACKAGE).pot \
- && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
-
-
-install: install-exec install-data
-install-exec:
-install-data: install-data- at USE_NLS@
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
- $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
- else \
- : ; \
- fi
-install-data-no: all
-install-data-yes: all
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- if test -r $$cat; then \
- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
- echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \
- else \
- $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
- echo "installing $(srcdir)/$$cat as" \
- "$(DESTDIR)$$dir/$(PACKAGE).mo"; \
- fi; \
- done
-
-# 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/\.gmo$$//'`; \
- rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
- done
- if test "$(PACKAGE)" = "gettext"; then \
- rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
- else \
- : ; \
- fi
-
-check: all
-
-dvi info tags TAGS ID:
-
-mostlyclean:
- rm -f core core.* *.pox $(PACKAGE).po *.new.po
- rm -fr *.gmo
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile Makefile.in POTFILES *.mo
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- rm -f $(GMOFILES)
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir:
- $(MAKE) update-po
- @$(MAKE) dist2
-# This is a separate target because 'update-po' must be executed before.
-dist2: $(DISTFILES)
- dists="$(DISTFILES)"; \
- for file in $$dists; do \
- if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
- cp -p $$dir/$$file $(distdir); \
- done
-
-update-po: Makefile
- $(MAKE) $(PACKAGE).pot
- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
- cd $(srcdir); \
- catalogs='$(GMOFILES)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
- echo "$$lang:"; \
- if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \
- mv -f $$lang.new.po $$lang.po; \
- else \
- echo "msgmerge for $$cat failed!"; \
- rm -f $$lang.new.po; \
- fi; \
- done
- $(MAKE) update-gmo
-
-update-gmo: Makefile $(GMOFILES)
- @:
-
-Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
- $(SHELL) ./config.status
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
index bb3302b..8cae295 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -138,3 +138,4 @@ src/utils_file_selection.c
src/utils_font.c
src/utils_operations.c
src/utils_str.c
+share/grisbi.desktop.in
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
new file mode 100644
index 0000000..5c1e079
--- /dev/null
+++ b/po/POTFILES.skip
@@ -0,0 +1,2 @@
+win32
+win32-msvc
diff --git a/po/de.po b/po/de.po
index f69a826..95229d9 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,120 +9,122 @@ msgid ""
msgstr ""
"Project-Id-Version: de\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-20 10:52+0200\n"
+"POT-Creation-Date: 2010-06-20 22:57+0200\n"
"PO-Revision-Date: 2010-05-16 14:55+0200\n"
"Last-Translator: Martin Stromberger <mstromberger at aon.at>\n"
"Language-Team: deutsch <de at li.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#: src/accueil.c:213
+#: ../src/accueil.c:213
msgid "Closed liabilities accounts"
msgstr "Geschlossene Kreditkonten"
-#: src/accueil.c:224
+#: ../src/accueil.c:224
msgid "Run out manual scheduled transactions"
msgstr "Geplante Buchung manuell ausführen"
-#: src/accueil.c:240
+#: ../src/accueil.c:240
msgid "Automatic scheduled transactions entered"
msgstr "Geplante Buchung automatisch ausgeführt"
-#: src/accueil.c:251
+#: ../src/accueil.c:251
msgid "Closed scheduled transactions"
msgstr "Geschlossene geplante Buchungen"
-#: src/accueil.c:262
+#: ../src/accueil.c:262
msgid "Accounts under authorized balance"
msgstr "Konten unter dem zulässigen Saldo"
-#: src/accueil.c:273
+#: ../src/accueil.c:273
msgid "Accounts under desired balance"
msgstr "Konten unter dem festgelegten Saldo"
#. Create the dialog
-#: src/accueil.c:321
+#: ../src/accueil.c:321
msgid "Enter a scheduled transaction"
msgstr "Geplante Buchung ausführen - Grisbi"
#. Creating the table which will store accounts with their balances.
-#: src/accueil.c:479
+#: ../src/accueil.c:479
#, c-format
msgid "Account balances in %s"
msgstr "Salden der Konten in %s"
-#: src/accueil.c:482 src/accueil.c:560 src/accueil.c:637 src/accueil.c:706
+#: ../src/accueil.c:482 ../src/accueil.c:560 ../src/accueil.c:637
+#: ../src/accueil.c:706
msgid " at "
msgstr " am "
#. Creating the table which will store accounts with their balances
-#: src/accueil.c:557
+#: ../src/accueil.c:557
#, c-format
msgid "Liabilities accounts balances in %s"
msgstr "Salden der Kreditkonten in %s"
#. Creating the table which will store accounts with their balances
-#: src/accueil.c:634
+#: ../src/accueil.c:634
#, c-format
msgid "Assets accounts balances in %s"
msgstr "Salden der Anlagekonten in %s"
-#: src/accueil.c:702 src/gsb_data_partial_balance.c:210
+#: ../src/accueil.c:702 ../src/gsb_data_partial_balance.c:210
msgid "Additional balance"
msgstr "Zusätzlicher Saldo"
-#: src/accueil.c:704
+#: ../src/accueil.c:704
msgid "Additional balances"
msgstr "Zusätzliche Salden"
-#: src/accueil.c:796 src/accueil.c:1016
+#: ../src/accueil.c:796 ../src/accueil.c:1016
msgid "Reconciled balance"
msgstr "abgestimmter Saldo"
-#: src/accueil.c:800 src/accueil.c:1020
+#: ../src/accueil.c:800 ../src/accueil.c:1020
msgid "Current balance"
msgstr "aktueller Saldo"
-#: src/accueil.c:1009 src/balance_estimate_future.c:2116
+#: ../src/accueil.c:1009 ../src/balance_estimate_future.c:2116
msgid "Partial balance"
msgstr "Partieller Saldo"
-#: src/accueil.c:1011
+#: ../src/accueil.c:1011
msgid "Partial balances"
msgstr "Partielle Salden"
-#: src/accueil.c:1090
+#: ../src/accueil.c:1090
msgid "Global balance"
msgstr "Alle Salden"
-#: src/accueil.c:1094
+#: ../src/accueil.c:1094
msgid "Global balances"
msgstr "Alle Salden"
-#: src/accueil.c:1150
+#: ../src/accueil.c:1150
#, c-format
msgid " in %s"
msgstr " in %s"
-#: src/accueil.c:1320 src/accueil.c:1445 src/accueil.c:1904
+#: ../src/accueil.c:1320 ../src/accueil.c:1445 ../src/accueil.c:1904
#, c-format
msgid "%s credited on %s"
msgstr "%s Einnahme in %s"
-#: src/accueil.c:1330 src/accueil.c:1455 src/accueil.c:1913
+#: ../src/accueil.c:1330 ../src/accueil.c:1455 ../src/accueil.c:1913
#, c-format
msgid "%s debited on %s"
msgstr "%s Ausgabe in %s"
-#: src/accueil.c:1678
+#: ../src/accueil.c:1678
#, c-format
msgid "balance of account %s is under desired and authorised minima!"
msgstr ""
"Der Saldo vom Konto %s ist unter dem festgelegten und zulässigen Minimum!"
-#: src/accueil.c:1682
+#: ../src/accueil.c:1682
msgid ""
"accounts with the balance under desired and authorised minimal :\n"
"\n"
@@ -130,12 +132,12 @@ msgstr ""
"Konten mit Salden unter dem festgelegten und zulässigen Minimum:\n"
"\n"
-#: src/accueil.c:1711
+#: ../src/accueil.c:1711
#, c-format
msgid "balance of account %s is under authorised minimum!"
msgstr "Der Saldo vom Konto %s ist unter dem zulässigen Minimum!"
-#: src/accueil.c:1721
+#: ../src/accueil.c:1721
msgid ""
"accounts with the balance under authorised minimal :\n"
"\n"
@@ -143,12 +145,12 @@ msgstr ""
"Konten mit Salden unter dem zulässigen Minimum:\n"
"\n"
-#: src/accueil.c:1753
+#: ../src/accueil.c:1753
#, c-format
msgid "balance of account %s is under desired minimum!"
msgstr "Der Saldo vom Konto %s ist unter dem festegelegten Minimum!"
-#: src/accueil.c:1763
+#: ../src/accueil.c:1763
msgid ""
"accounts with the balance under desired minimal :\n"
"\n"
@@ -156,11 +158,11 @@ msgstr ""
"Konten mit Salden unter dem festgelegten Minimum:\n"
"\n"
-#: src/accueil.c:1955
+#: ../src/accueil.c:1955
msgid "Configuration of the main page"
msgstr "Konfiguration Startseite"
-#: src/accueil.c:1976
+#: ../src/accueil.c:1976
msgid "Balances partials of the list of accounts"
msgstr "Partielle Salden der Konten"
@@ -173,429 +175,433 @@ msgstr "Partielle Salden der Konten"
#. Financial year name
#. set the name
#. Name entry
-#: src/accueil.c:2067 src/balance_estimate_future.c:2139
-#: src/categories_onglet.c:666 src/gsb_archive_config.c:98
-#: src/gsb_archive_config.c:186 src/gsb_assistant_archive_export.c:150
-#: src/gsb_assistant_reconcile_config.c:388
-#: src/gsb_assistant_reconcile_config.c:1227 src/gsb_bank.c:732
-#: src/gsb_bank.c:855 src/gsb_currency_config.c:353
-#: src/gsb_data_partial_balance.c:1553 src/gsb_fyear_config.c:191
-#: src/gsb_fyear_config.c:278 src/gsb_payment_method_config.c:239
-#: src/gsb_reconcile_config.c:180 src/gsb_transactions_list.c:1785
-#: src/imputation_budgetaire.c:703 src/tiers_onglet.c:625
+#: ../src/accueil.c:2067 ../src/balance_estimate_future.c:2139
+#: ../src/categories_onglet.c:666 ../src/gsb_archive_config.c:98
+#: ../src/gsb_archive_config.c:186 ../src/gsb_assistant_archive_export.c:150
+#: ../src/gsb_assistant_reconcile_config.c:388
+#: ../src/gsb_assistant_reconcile_config.c:1227 ../src/gsb_bank.c:732
+#: ../src/gsb_bank.c:855 ../src/gsb_currency_config.c:353
+#: ../src/gsb_data_partial_balance.c:1553 ../src/gsb_fyear_config.c:191
+#: ../src/gsb_fyear_config.c:278 ../src/gsb_payment_method_config.c:239
+#: ../src/gsb_reconcile_config.c:180 ../src/gsb_transactions_list.c:1785
+#: ../src/imputation_budgetaire.c:703 ../src/tiers_onglet.c:625
msgid "Name"
msgstr "Name"
#. List of the accounts
-#: src/accueil.c:2076 src/gsb_data_partial_balance.c:1564
+#: ../src/accueil.c:2076 ../src/gsb_data_partial_balance.c:1564
msgid "Accounts list"
msgstr "Kontoliste"
-#: src/accueil.c:2092
+#: ../src/accueil.c:2092
msgid "Colorize"
msgstr "Farben"
-#: src/accueil.c:2100
+#: ../src/accueil.c:2100
msgid "Account kind"
msgstr "Kontoart"
-#: src/accueil.c:2109 src/gsb_form_widget.c:458 src/import_csv.c:78
+#: ../src/accueil.c:2109 ../src/gsb_form_widget.c:458 ../src/import_csv.c:78
msgid "Currency"
msgstr "Währung"
#. initialization of titles
-#: src/accueil.c:2151 src/affichage.c:993 src/affichage.c:994
-#: src/gsb_assistant_file.c:564 src/navigation.c:1133 src/navigation.c:1134
-#: src/traitement_variables.c:305
+#: ../src/accueil.c:2151 ../src/affichage.c:993 ../src/affichage.c:994
+#: ../src/gsb_assistant_file.c:564 ../src/navigation.c:1133
+#: ../src/navigation.c:1134 ../src/traitement_variables.c:305
msgid "My accounts"
msgstr "Meine Konten"
-#: src/affichage.c:141 src/parametres.c:347
+#: ../src/affichage.c:141 ../src/parametres.c:347
msgid "Fonts & logo"
msgstr "Schrift & Farben"
#. Change Grisbi Logo
-#: src/affichage.c:144
+#: ../src/affichage.c:144
msgid "Grisbi logo"
msgstr "Logo"
-#: src/affichage.c:149
+#: ../src/affichage.c:149
msgid "Display a logo"
msgstr "Das Logo anzeigen"
-#: src/affichage.c:198
+#: ../src/affichage.c:198
msgid "Click on preview to change logo"
msgstr "Auswahl mit Klick auf Logo"
#. Change fonts
-#: src/affichage.c:202 src/print_report.c:105 src/print_report.c:405
-#: src/print_transactions_list.c:261
+#: ../src/affichage.c:202 ../src/print_report.c:105 ../src/print_report.c:405
+#: ../src/print_transactions_list.c:261
msgid "Fonts"
msgstr "Schriften"
-#: src/affichage.c:208
+#: ../src/affichage.c:208
msgid "Use a custom font for the transactions"
msgstr "Eine benutzerdefinierte Schrift für Buchungen verwenden"
#. change colors
-#: src/affichage.c:233
+#: ../src/affichage.c:233
msgid "Colors"
msgstr "Farben"
-#: src/affichage.c:247
+#: ../src/affichage.c:247
msgid "Choosing color"
msgstr "Farbe auswählen - Grisbi"
-#: src/affichage.c:262
+#: ../src/affichage.c:262
msgid "Back to default"
msgstr "Voreinstellung"
-#: src/affichage.c:370 src/parametres.c:365
+#: ../src/affichage.c:370 ../src/parametres.c:365
msgid "Addresses & titles"
msgstr "Bezeichnung & Adressen"
#. Account file title
-#: src/affichage.c:374 src/etats_config.c:624 src/etats_config.c:627
-#: src/etats_config.c:6988
+#: ../src/affichage.c:374 ../src/etats_config.c:624 ../src/etats_config.c:627
+#: ../src/etats_config.c:6988
msgid "Titles"
msgstr "Bezeichnungen"
#. label account name
-#: src/affichage.c:385 src/affichage.c:429 src/gsb_assistant_file.c:283
+#: ../src/affichage.c:385 ../src/affichage.c:429
+#: ../src/gsb_assistant_file.c:283
msgid "Accounts file title"
msgstr "Bezeichnung"
-#: src/affichage.c:400
+#: ../src/affichage.c:400
msgid "Account owner name"
msgstr "Kontoinhaber"
#. filename
-#: src/affichage.c:414 src/gsb_assistant_file.c:305
+#: ../src/affichage.c:414 ../src/gsb_assistant_file.c:305
msgid "Filename"
msgstr "Dateiname"
-#: src/affichage.c:442
+#: ../src/affichage.c:442
msgid "Addresses"
msgstr "Adressen"
#. Common address
-#: src/affichage.c:445
+#: ../src/affichage.c:445
msgid "Common address"
msgstr "Hauptadresse"
#. Secondary address
#. * \note This is not implemented yet
-#: src/affichage.c:464
+#: ../src/affichage.c:464
msgid "Secondary address"
msgstr "Zusatzadresse"
-#: src/affichage.c:558
+#: ../src/affichage.c:558
msgid "Select a new logo"
msgstr "Logo auswählen - Grisbi"
-#: src/affichage.c:697 src/parametres.c:383
+#: ../src/affichage.c:697 ../src/parametres.c:383
msgid "Toolbars"
msgstr "Werkzeugleisten"
-#: src/affichage.c:700
+#: ../src/affichage.c:700
msgid "Display toolbar buttons as"
msgstr "Werkzeugleisten Darstellung"
-#: src/affichage.c:702
+#: ../src/affichage.c:702
msgid "Text"
msgstr "Text"
-#: src/affichage.c:711
+#: ../src/affichage.c:711
msgid "Icons"
msgstr "Symbole"
-#: src/affichage.c:720
+#: ../src/affichage.c:720
msgid "Both"
msgstr "Text und Symbole"
-#: src/affichage.c:742
+#: ../src/affichage.c:742
msgid "Display headings bar"
msgstr "Kopfzeile anzeigen"
-#: src/affichage.c:790
+#: ../src/affichage.c:790
msgid "Transaction list background 1"
msgstr "Hintergrund gerade Zeilen"
-#: src/affichage.c:791
+#: ../src/affichage.c:791
msgid "Transaction list background 2"
msgstr "Hintergrund ungerade Zeilen"
-#: src/affichage.c:792
+#: ../src/affichage.c:792
msgid "Color for the operation that gives the balance today"
msgstr "Hintergrund aktueller Saldo"
-#: src/affichage.c:793
+#: ../src/affichage.c:793
msgid "Color of transaction's text"
msgstr "Text Buchungen"
-#: src/affichage.c:794
+#: ../src/affichage.c:794
msgid "Text of unfinished split transaction"
msgstr "Text unvollständige Splittbuchungen"
-#: src/affichage.c:795
+#: ../src/affichage.c:795
msgid "Children of split transaction"
msgstr "Teilbuchungen von Splittbuchungen"
-#: src/affichage.c:796
+#: ../src/affichage.c:796
msgid "Selection color"
msgstr "Selektierte Buchung"
-#: src/affichage.c:797
+#: ../src/affichage.c:797
msgid "Background of non selectable scheduled transactions"
msgstr "Hintergrund nicht auswählbarer geplanter Buchungen"
-#: src/affichage.c:798
+#: ../src/affichage.c:798
msgid "Archive color"
msgstr "Archivierte Buchungen"
-#: src/affichage.c:799
+#: ../src/affichage.c:799
msgid "Background of invalid date entry"
msgstr "Hintergrund ungültiger Datumswert"
-#: src/affichage.c:800
+#: ../src/affichage.c:800
msgid "Background of bet division"
msgstr "Hintergrund geschätzte Teilung"
-#: src/affichage.c:801
+#: ../src/affichage.c:801
msgid "Background of bet futur"
msgstr "Hintergrund geschätzte Prognose"
-#: src/affichage.c:802
+#: ../src/affichage.c:802
msgid "Background of bet transfer"
msgstr "Hintergrund geschätzte Prognose"
-#: src/affichage_liste.c:99
+#: ../src/affichage_liste.c:99
msgid "In one line visible, show the lines"
msgstr "Einzeilig - Zeile"
-#: src/affichage_liste.c:100
+#: ../src/affichage_liste.c:100
msgid "In two lines visibles, show the lines"
msgstr "Zweizeilig - Zeilen"
-#: src/affichage_liste.c:101
+#: ../src/affichage_liste.c:101
msgid "In three lines visibles, show the lines"
msgstr "Dreizeilig - Zeilen"
-#: src/affichage_liste.c:114
+#: ../src/affichage_liste.c:114
msgid "Transaction list behavior"
msgstr "Buchungsübersicht Einstellungen"
#. heading and boxes for layout
-#: src/affichage_liste.c:118
+#: ../src/affichage_liste.c:118
msgid "Display modes"
msgstr "Anzeigeoptionen"
-#: src/affichage_liste.c:180
+#: ../src/affichage_liste.c:180
msgid "Use simple click to select transactions"
msgstr "Buchungen mit Einfachklick bearbeiten"
-#: src/affichage_liste.c:187
+#: ../src/affichage_liste.c:187
msgid "Highlights the transaction that gives the balance today"
msgstr "Aktuellen Saldo hervorheben"
-#: src/affichage_liste.c:193
+#: ../src/affichage_liste.c:193
msgid "Options for sorting by date"
msgstr "Einstellungen für Sortierung nach Datum"
-#: src/affichage_liste.c:194
+#: ../src/affichage_liste.c:194
msgid "Sort by date and transaction number"
msgstr "Sortierung nach Datum und Buchungsnummer"
-#: src/affichage_liste.c:195
+#: ../src/affichage_liste.c:195
msgid "Sort by date and transaction amount"
msgstr "Sortierung nach Datum und Betrag"
-#: src/affichage_liste.c:202
+#: ../src/affichage_liste.c:202
msgid "Options for sorting by value date"
msgstr "Buchungen Sortierung"
-#: src/affichage_liste.c:203
+#: ../src/affichage_liste.c:203
msgid "Sort by value date (if fail, try with the date)"
msgstr "nach Buchungsdatum - im Fehlerfall nach Datum"
-#: src/affichage_liste.c:204
+#: ../src/affichage_liste.c:204
msgid "Sort by value date and then by date"
msgstr "zuerst nach Buchungsdatum - danach nach Datum"
-#: src/affichage_liste.c:211
+#: ../src/affichage_liste.c:211
msgid "Account differentiation"
msgstr "Kontospezifische Einstellungen"
-#: src/affichage_liste.c:215
+#: ../src/affichage_liste.c:215
msgid "Remember display settings for each account separately"
msgstr "Die Anzeigeoptionen für jedes Konto gesondert speichern"
-#: src/affichage_liste.c:449
+#: ../src/affichage_liste.c:449
msgid "Form behavior"
msgstr "Buchungsformular"
-#: src/affichage_liste.c:454
+#: ../src/affichage_liste.c:454
msgid "Pressing RETURN in transaction form"
msgstr "Eingabetaste im Buchungsformular"
-#: src/affichage_liste.c:455
+#: ../src/affichage_liste.c:455
msgid "selects next field"
msgstr "selektiert das nächste Feld"
-#: src/affichage_liste.c:456
+#: ../src/affichage_liste.c:456
msgid "terminates transaction"
msgstr "schlieÃt Buchung ab"
-#: src/affichage_liste.c:461
+#: ../src/affichage_liste.c:461
msgid "Automatic financial year is set"
msgstr "Geschäftsjahr Zuordnung"
-#: src/affichage_liste.c:462
+#: ../src/affichage_liste.c:462
msgid "according to transaction date"
msgstr "entsprechend Datum der Buchung"
-#: src/affichage_liste.c:463
+#: ../src/affichage_liste.c:463
msgid "according to transaction value date"
msgstr "entsprechend Datum der Durchführung"
-#: src/affichage_liste.c:469
+#: ../src/affichage_liste.c:469
msgid "Automatic amount separator"
msgstr "Darstellung von Beträgen"
-#: src/affichage_liste.c:472
+#: ../src/affichage_liste.c:472
msgid "Automagically add separator in amounts fields if unspecified"
msgstr "Trennzeichen an Tausender-Stelle"
-#: src/affichage_liste.c:497
+#: ../src/affichage_liste.c:497
msgid "Form completion"
msgstr "Eingabe Vervollständigung"
-#: src/affichage_liste.c:500
+#: ../src/affichage_liste.c:500
msgid "Limit the filling with payees belonging to the current account"
msgstr ""
"Die Vervollständigung von Empfängern auf das aktuelle Konto beschränken"
-#: src/affichage_liste.c:507
+#: ../src/affichage_liste.c:507
msgid "Automatic filling transactions from payee"
msgstr "Geplante Buchung automatisch ausgeführt"
-#: src/affichage_liste.c:516
+#: ../src/affichage_liste.c:516
msgid "Mix credit/debit categories"
msgstr "Eingabe und Ausgabenkategorien berücksichtigen"
-#: src/affichage_liste.c:522
+#: ../src/affichage_liste.c:522
msgid "Case sensitive completion"
msgstr "Beim Vervollständigen Groà und Kleinschreibung berücksichtigen"
-#: src/affichage_liste.c:534
+#: ../src/affichage_liste.c:534
msgid "Don't allow new payee creation"
msgstr "Neue Empfänger dürfen nicht erstellt werden"
-#: src/affichage_liste.c:540
+#: ../src/affichage_liste.c:540
msgid "Don't allow new category/budget creation"
msgstr "Neue Kategorien dürfen nicht erstellt werden"
-#: src/affichage_liste.c:549
+#: ../src/affichage_liste.c:549
msgid "Maximum items showed in drop down lists (0 for no limit)"
msgstr "Maximale Einträge in der Auswahlliste [0 für kein Limit]"
-#: src/balance_estimate_config.c:82 src/etats_config.c:6371
+#: ../src/balance_estimate_config.c:82 ../src/etats_config.c:6371
msgid "Month"
msgstr "Monat"
-#: src/balance_estimate_config.c:83 src/etats_config.c:6375
+#: ../src/balance_estimate_config.c:83 ../src/etats_config.c:6375
msgid "Year"
msgstr "Jahr"
-#: src/balance_estimate_config.c:103 src/parametres.c:543
+#: ../src/balance_estimate_config.c:103 ../src/parametres.c:543
msgid "General Options"
msgstr "Allgemein"
#. Calculation of period
-#: src/balance_estimate_config.c:107
+#: ../src/balance_estimate_config.c:107
msgid "Common data"
msgstr "Allgemeine Daten"
-#: src/balance_estimate_config.c:141
+#: ../src/balance_estimate_config.c:141
msgid "Beginning of period"
msgstr "Zeitspanne Anfang"
-#: src/balance_estimate_config.c:150
+#: ../src/balance_estimate_config.c:150
msgid "1st day of month"
msgstr "erster Tag vom Monat"
-#: src/balance_estimate_config.c:156
+#: ../src/balance_estimate_config.c:156
msgid "date today"
msgstr "aktuelles Datum"
-#: src/balance_estimate_config.c:176
+#: ../src/balance_estimate_config.c:176
msgid "Note: This option is used if no starting date for forecasts."
msgstr ""
"Bemerkung: Diese Einstellung wird herangezogen wenn kein Beginndatum für die "
"Prognose vorhanden ist"
-#: src/balance_estimate_config.c:204 src/parametres.c:552
+#: ../src/balance_estimate_config.c:204 ../src/parametres.c:552
msgid "Accounts data"
msgstr "Konten Einstellungen"
#. set the choice of account
-#: src/balance_estimate_config.c:270 src/categories_onglet.c:152
-#: src/etats_config.c:681 src/gsb_assistant_reconcile_config.c:399
-#: src/gsb_assistant_reconcile_config.c:594
-#: src/gsb_payment_method_config.c:159 src/gsb_reconcile_config.c:96
-#: src/gsb_scheduler_list.c:339 src/imputation_budgetaire.c:164
-#: src/navigation.c:1154 src/tiers_onglet.c:231
+#: ../src/balance_estimate_config.c:270 ../src/categories_onglet.c:152
+#: ../src/etats_config.c:681 ../src/gsb_assistant_reconcile_config.c:399
+#: ../src/gsb_assistant_reconcile_config.c:594
+#: ../src/gsb_payment_method_config.c:159 ../src/gsb_reconcile_config.c:96
+#: ../src/gsb_scheduler_list.c:339 ../src/imputation_budgetaire.c:164
+#: ../src/navigation.c:1154 ../src/tiers_onglet.c:231
msgid "Account"
msgstr "Konto"
-#: src/balance_estimate_config.c:284
+#: ../src/balance_estimate_config.c:284
msgid "Use the budget module"
msgstr "Budgeteintrag eingeben"
#. partie mensuelle
-#: src/balance_estimate_config.c:353
+#: ../src/balance_estimate_config.c:353
msgid "Duration estimation"
msgstr "Daten Zusammenstellung"
-#: src/balance_estimate_config.c:516
+#: ../src/balance_estimate_config.c:516
msgid "Labels for transactions"
msgstr "Bezeichnungen für Buchungen"
-#: src/balance_estimate_config.c:521 src/balance_estimate_config.c:539
-#: src/balance_estimate_config.c:556
+#: ../src/balance_estimate_config.c:521 ../src/balance_estimate_config.c:539
+#: ../src/balance_estimate_config.c:556
msgid "By default"
msgstr "Voreinstellung"
-#. mise en place de la paddingbox des catégories
+#. mise en place de la paddingbox des catégories
#. set the title
-#: src/balance_estimate_config.c:522 src/balance_estimate_config.c:540
-#: src/balance_estimate_config.c:557 src/balance_estimate_config.c:620
-#: src/balance_estimate_hist.c:157 src/etats_config.c:526
-#: src/etats_config.c:529 src/etats_config.c:2991 src/etats_config.c:7057
-#: src/fenetre_principale.c:273 src/navigation.c:303 src/navigation.c:1212
+#: ../src/balance_estimate_config.c:522 ../src/balance_estimate_config.c:540
+#: ../src/balance_estimate_config.c:557 ../src/balance_estimate_config.c:620
+#: ../src/balance_estimate_hist.c:157 ../src/etats_config.c:526
+#: ../src/etats_config.c:529 ../src/etats_config.c:2991
+#: ../src/etats_config.c:7057 ../src/fenetre_principale.c:273
+#: ../src/navigation.c:303 ../src/navigation.c:1212
msgid "Categories"
msgstr "Kategorien"
#. mise en place de la paddingbox des ib
#. set the title
-#: src/balance_estimate_config.c:523 src/balance_estimate_config.c:541
-#: src/balance_estimate_config.c:558 src/balance_estimate_config.c:629
-#: src/balance_estimate_hist.c:166 src/etats_config.c:535
-#: src/etats_config.c:538 src/etats_config.c:3797 src/etats_config.c:7134
-#: src/export_csv.c:799 src/fenetre_principale.c:278 src/import_csv.c:86
-#: src/navigation.c:320 src/navigation.c:1223 src/traitement_variables.c:81
+#: ../src/balance_estimate_config.c:523 ../src/balance_estimate_config.c:541
+#: ../src/balance_estimate_config.c:558 ../src/balance_estimate_config.c:629
+#: ../src/balance_estimate_hist.c:166 ../src/etats_config.c:535
+#: ../src/etats_config.c:538 ../src/etats_config.c:3797
+#: ../src/etats_config.c:7134 ../src/export_csv.c:799
+#: ../src/fenetre_principale.c:278 ../src/import_csv.c:86
+#: ../src/navigation.c:320 ../src/navigation.c:1223
+#: ../src/traitement_variables.c:81
msgid "Budgetary lines"
msgstr "Budgeteinträge"
-#: src/balance_estimate_config.c:534
+#: ../src/balance_estimate_config.c:534
msgid "Labels for scheduled transactions"
msgstr "Bezeichnungen für geplante Buchungen"
-#: src/balance_estimate_config.c:551
+#: ../src/balance_estimate_config.c:551
msgid "Labels for futur data"
msgstr "Bezeichnungen für zukünftige Daten"
-#: src/balance_estimate_config.c:564
+#: ../src/balance_estimate_config.c:564
msgid ""
"Order by default if the data are not zero: notes, payee, category and "
"budgetary line."
@@ -603,273 +609,282 @@ msgstr ""
"Standardsortierung wenn Daten vorhanden sind: Notizen, Empfänger, Kategorie "
"und Budgeteintrag."
-#: src/balance_estimate_config.c:644 src/balance_estimate_hist.c:186
+#: ../src/balance_estimate_config.c:644 ../src/balance_estimate_hist.c:186
msgid "Choose the financial year or 12 months rolling"
msgstr "Geschäftsjahr oder Zeitraum von 12 Monaten"
#. name of the div sous-div column
-#: src/balance_estimate_config.c:850 src/balance_estimate_hist.c:531
-#: src/categories_onglet.c:143 src/etats_affiche.c:2433 src/etats_config.c:673
-#: src/export_csv.c:790 src/gsb_transactions_list.c:156 src/import_csv.c:84
-#: src/meta_categories.c:65 src/traitement_variables.c:89
+#: ../src/balance_estimate_config.c:850 ../src/balance_estimate_hist.c:531
+#: ../src/categories_onglet.c:143 ../src/etats_affiche.c:2433
+#: ../src/etats_config.c:673 ../src/export_csv.c:790
+#: ../src/gsb_transactions_list.c:156 ../src/import_csv.c:84
+#: ../src/meta_categories.c:65 ../src/traitement_variables.c:89
msgid "Category"
msgstr "Kategorie"
-#: src/balance_estimate_config.c:856 src/balance_estimate_future.c:820
-#: src/balance_estimate_future.c:2028 src/balance_estimate_future.c:2505
-#: src/etats_affiche.c:2440 src/etats_config.c:677 src/gsb_form.c:1340
-#: src/gsb_form_widget.c:442 src/gsb_transactions_list.c:148
-#: src/imputation_budgetaire.c:155 src/meta_budgetary.c:62
+#: ../src/balance_estimate_config.c:856 ../src/balance_estimate_future.c:820
+#: ../src/balance_estimate_future.c:2028 ../src/balance_estimate_future.c:2505
+#: ../src/etats_affiche.c:2440 ../src/etats_config.c:677
+#: ../src/gsb_form.c:1340 ../src/gsb_form_widget.c:442
+#: ../src/gsb_transactions_list.c:148 ../src/imputation_budgetaire.c:155
+#: ../src/meta_budgetary.c:62
msgid "Budgetary line"
msgstr "Budgeteintrag"
-#: src/balance_estimate_future.c:228 src/balance_estimate_future.c:1777
-#: src/balance_estimate_future.c:1876 src/balance_estimate_future.c:2423
+#: ../src/balance_estimate_future.c:228 ../src/balance_estimate_future.c:1777
+#: ../src/balance_estimate_future.c:1876 ../src/balance_estimate_future.c:2423
msgid ""
"Error: the frequency defined by the user or the amount is not specified or "
"the date is invalid."
msgstr "Fehler: Die Frequenz ist nicht festgelegt oder das Datum ist ungültig."
-#: src/balance_estimate_future.c:230 src/balance_estimate_future.c:1779
-#: src/balance_estimate_future.c:1878 src/balance_estimate_future.c:2425
-#: src/gsb_currency.c:740
+#: ../src/balance_estimate_future.c:230 ../src/balance_estimate_future.c:1779
+#: ../src/balance_estimate_future.c:1878 ../src/balance_estimate_future.c:2425
+#: ../src/gsb_currency.c:740
msgid "One field is not filled in"
msgstr "Es wurden nicht alle Eingabefelder befüllt"
#. Create the dialog
-#: src/balance_estimate_future.c:260
+#: ../src/balance_estimate_future.c:260
msgid "Enter a budget line"
msgstr "Budgeteintrag eingeben"
-#: src/balance_estimate_future.c:314 src/balance_estimate_future.c:859
-#: src/gsb_form_scheduler.c:152 src/gsb_form_scheduler.c:874
-#: src/gsb_scheduler_list.c:998
+#: ../src/balance_estimate_future.c:314 ../src/balance_estimate_future.c:859
+#: ../src/gsb_form_scheduler.c:152 ../src/gsb_form_scheduler.c:874
+#: ../src/gsb_scheduler_list.c:998
msgid "Once"
msgstr "einmal"
-#: src/balance_estimate_future.c:314 src/gsb_form_scheduler.c:152
-#: src/gsb_scheduler_list.c:998
+#: ../src/balance_estimate_future.c:314 ../src/gsb_form_scheduler.c:152
+#: ../src/gsb_scheduler_list.c:998
msgid "Weekly"
msgstr "wöchentlich"
-#: src/balance_estimate_future.c:314 src/gsb_form_scheduler.c:152
+#: ../src/balance_estimate_future.c:314 ../src/gsb_form_scheduler.c:152
msgid "Monthly"
msgstr "monatlich"
-#: src/balance_estimate_future.c:314 src/gsb_form_scheduler.c:152
-#: src/gsb_scheduler_list.c:999
+#: ../src/balance_estimate_future.c:314 ../src/gsb_form_scheduler.c:152
+#: ../src/gsb_scheduler_list.c:999
msgid "Bimonthly"
msgstr "zweimonatlich"
-#: src/balance_estimate_future.c:315 src/gsb_form_scheduler.c:153
-#: src/gsb_scheduler_list.c:999
+#: ../src/balance_estimate_future.c:315 ../src/gsb_form_scheduler.c:153
+#: ../src/gsb_scheduler_list.c:999
msgid "Quarterly"
msgstr "vierteljährlich"
-#: src/balance_estimate_future.c:315 src/gsb_form_scheduler.c:153
-#: src/gsb_scheduler_list.c:999
+#: ../src/balance_estimate_future.c:315 ../src/gsb_form_scheduler.c:153
+#: ../src/gsb_scheduler_list.c:999
msgid "Yearly"
msgstr "jährlich"
-#: src/balance_estimate_future.c:315 src/balance_estimate_future.c:873
-#: src/etats_config.c:179 src/gsb_form_scheduler.c:153
-#: src/gsb_form_scheduler.c:884
+#: ../src/balance_estimate_future.c:315 ../src/balance_estimate_future.c:873
+#: ../src/etats_config.c:179 ../src/gsb_form_scheduler.c:153
+#: ../src/gsb_form_scheduler.c:884
msgid "Custom"
msgstr "benutzerdefiniert"
-#: src/balance_estimate_future.c:316 src/gsb_form_scheduler.c:154
+#: ../src/balance_estimate_future.c:316 ../src/gsb_form_scheduler.c:154
msgid "Days"
msgstr "Tage"
-#: src/balance_estimate_future.c:316 src/gsb_form_scheduler.c:154
+#: ../src/balance_estimate_future.c:316 ../src/gsb_form_scheduler.c:154
msgid "Weeks"
msgstr "Wochen"
-#: src/balance_estimate_future.c:316 src/gsb_form_scheduler.c:154
+#: ../src/balance_estimate_future.c:316 ../src/gsb_form_scheduler.c:154
msgid "Months"
msgstr "Monate"
-#: src/balance_estimate_future.c:316 src/gsb_form_scheduler.c:154
+#: ../src/balance_estimate_future.c:316 ../src/gsb_form_scheduler.c:154
msgid "Years"
msgstr "Jahre"
-#: src/balance_estimate_future.c:329 src/gsb_form_scheduler.c:175
-#: src/gsb_form_scheduler.c:192 src/gsb_scheduler_list.c:339
+#: ../src/balance_estimate_future.c:329 ../src/gsb_form_scheduler.c:175
+#: ../src/gsb_form_scheduler.c:192 ../src/gsb_scheduler_list.c:339
msgid "Frequency"
msgstr "Frequenz"
-#: src/balance_estimate_future.c:337 src/balance_estimate_future.c:735
-#: src/gsb_form_scheduler.c:640 src/gsb_form_scheduler.c:833
-#: src/gsb_form_scheduler.c:1095
+#: ../src/balance_estimate_future.c:337 ../src/balance_estimate_future.c:735
+#: ../src/gsb_form_scheduler.c:640 ../src/gsb_form_scheduler.c:833
+#: ../src/gsb_form_scheduler.c:1095
msgid "Limit date"
msgstr "Fälligkeitstermin"
#. set the final date
-#: src/balance_estimate_future.c:350 src/etats_config.c:2329
-#: src/gsb_archive_config.c:98 src/gsb_assistant_archive.c:242
-#: src/gsb_assistant_archive_export.c:150
-#: src/gsb_assistant_reconcile_config.c:422
-#: src/gsb_assistant_reconcile_config.c:1227 src/gsb_reconcile_config.c:96
-#: src/gsb_reconcile_config.c:208 src/gsb_transactions_list.c:1785
+#: ../src/balance_estimate_future.c:350 ../src/etats_config.c:2329
+#: ../src/gsb_archive_config.c:98 ../src/gsb_assistant_archive.c:242
+#: ../src/gsb_assistant_archive_export.c:150
+#: ../src/gsb_assistant_reconcile_config.c:422
+#: ../src/gsb_assistant_reconcile_config.c:1227
+#: ../src/gsb_reconcile_config.c:96 ../src/gsb_reconcile_config.c:208
+#: ../src/gsb_transactions_list.c:1785
msgid "Final date"
msgstr "Datum Ende"
-#: src/balance_estimate_future.c:357 src/balance_estimate_future.c:739
-#: src/gsb_form_scheduler.c:205 src/gsb_form_scheduler.c:647
-#: src/gsb_form_scheduler.c:839
+#: ../src/balance_estimate_future.c:357 ../src/balance_estimate_future.c:739
+#: ../src/gsb_form_scheduler.c:205 ../src/gsb_form_scheduler.c:647
+#: ../src/gsb_form_scheduler.c:839
msgid "Own frequency"
msgstr "Eigene Frequenz"
-#: src/balance_estimate_future.c:367 src/balance_estimate_future.c:373
-#: src/gsb_form_scheduler.c:211
+#: ../src/balance_estimate_future.c:367 ../src/balance_estimate_future.c:373
+#: ../src/gsb_form_scheduler.c:211
msgid "Custom frequency"
msgstr "benutzerdefinierte Frequenz"
-#: src/balance_estimate_future.c:529 src/gsb_form_widget.c:208
+#: ../src/balance_estimate_future.c:529 ../src/gsb_form_widget.c:208
msgid "Choose the financial year"
msgstr "Geschäftsjahr auswählen"
-#: src/balance_estimate_future.c:577 src/gsb_form_widget.c:263
+#: ../src/balance_estimate_future.c:577 ../src/gsb_form_widget.c:263
msgid "Choose the method of payment"
msgstr "Zahlungsweise auswählen"
-#: src/balance_estimate_future.c:774 src/balance_estimate_tab.c:616
-#: src/etats_affiche.c:2405 src/export_csv.c:760
-#: src/gsb_assistant_reconcile_config.c:594 src/gsb_form.c:1282
-#: src/gsb_form_widget.c:410 src/gsb_reconcile.c:155
-#: src/gsb_scheduler_list.c:339 src/gsb_transactions_list.c:145
-#: src/import.c:3190 src/import_csv.c:79 src/traitement_variables.c:78
+#: ../src/balance_estimate_future.c:774 ../src/balance_estimate_tab.c:616
+#: ../src/etats_affiche.c:2405 ../src/export_csv.c:760
+#: ../src/gsb_assistant_reconcile_config.c:594 ../src/gsb_form.c:1282
+#: ../src/gsb_form_widget.c:410 ../src/gsb_reconcile.c:155
+#: ../src/gsb_scheduler_list.c:339 ../src/gsb_transactions_list.c:145
+#: ../src/import.c:3190 ../src/import_csv.c:79
+#: ../src/traitement_variables.c:78
msgid "Date"
msgstr "Datum"
#. mise en place de la paddingbox des tiers
-#: src/balance_estimate_future.c:792 src/etats_affiche.c:2426
-#: src/etats_config.c:517 src/etats_config.c:520 src/etats_config.c:685
-#: src/etats_config.c:7022 src/export_csv.c:775 src/fenetre_principale.c:268
-#: src/gsb_assistant_reconcile_config.c:594 src/gsb_form.c:1309
-#: src/gsb_form_widget.c:430 src/gsb_scheduler_list.c:339
-#: src/gsb_transactions_list.c:147 src/import.c:3197 src/import_csv.c:81
-#: src/meta_payee.c:77 src/traitement_variables.c:80
+#: ../src/balance_estimate_future.c:792 ../src/etats_affiche.c:2426
+#: ../src/etats_config.c:517 ../src/etats_config.c:520
+#: ../src/etats_config.c:685 ../src/etats_config.c:7022
+#: ../src/export_csv.c:775 ../src/fenetre_principale.c:268
+#: ../src/gsb_assistant_reconcile_config.c:594 ../src/gsb_form.c:1309
+#: ../src/gsb_form_widget.c:430 ../src/gsb_scheduler_list.c:339
+#: ../src/gsb_transactions_list.c:147 ../src/import.c:3197
+#: ../src/import_csv.c:81 ../src/meta_payee.c:77
+#: ../src/traitement_variables.c:80
msgid "Payee"
msgstr "Empfänger"
#. Debit method_ptr
-#: src/balance_estimate_future.c:799 src/balance_estimate_tab.c:642
-#: src/categories_onglet.c:696 src/export_csv.c:781 src/gsb_form.c:1316
-#: src/gsb_form_widget.c:414 src/gsb_payment_method_config.c:316
-#: src/gsb_payment_method_config.c:387 src/gsb_payment_method_config.c:1082
-#: src/gsb_transactions_list.c:149 src/import_csv.c:90
-#: src/imputation_budgetaire.c:733 src/traitement_variables.c:82
+#: ../src/balance_estimate_future.c:799 ../src/balance_estimate_tab.c:642
+#: ../src/categories_onglet.c:696 ../src/export_csv.c:781
+#: ../src/gsb_form.c:1316 ../src/gsb_form_widget.c:414
+#: ../src/gsb_payment_method_config.c:316
+#: ../src/gsb_payment_method_config.c:387
+#: ../src/gsb_payment_method_config.c:1082 ../src/gsb_transactions_list.c:149
+#: ../src/import_csv.c:90 ../src/imputation_budgetaire.c:733
+#: ../src/traitement_variables.c:82
msgid "Debit"
msgstr "Ausgaben"
#. Credit method_ptr
-#: src/balance_estimate_future.c:806 src/balance_estimate_tab.c:657
-#: src/categories_onglet.c:696 src/export_csv.c:778 src/gsb_form.c:1323
-#: src/gsb_form_widget.c:418 src/gsb_payment_method_config.c:323
-#: src/gsb_payment_method_config.c:400 src/gsb_payment_method_config.c:1078
-#: src/gsb_transactions_list.c:150 src/imputation_budgetaire.c:733
-#: src/traitement_variables.c:83
+#: ../src/balance_estimate_future.c:806 ../src/balance_estimate_tab.c:657
+#: ../src/categories_onglet.c:696 ../src/export_csv.c:778
+#: ../src/gsb_form.c:1323 ../src/gsb_form_widget.c:418
+#: ../src/gsb_payment_method_config.c:323
+#: ../src/gsb_payment_method_config.c:400
+#: ../src/gsb_payment_method_config.c:1078 ../src/gsb_transactions_list.c:150
+#: ../src/imputation_budgetaire.c:733 ../src/traitement_variables.c:83
msgid "Credit"
msgstr "Einnahmen"
-#: src/balance_estimate_future.c:813 src/balance_estimate_future.c:2001
-#: src/balance_estimate_future.c:2487 src/gsb_form.c:1330
-#: src/gsb_form_widget.c:434
+#: ../src/balance_estimate_future.c:813 ../src/balance_estimate_future.c:2001
+#: ../src/balance_estimate_future.c:2487 ../src/gsb_form.c:1330
+#: ../src/gsb_form_widget.c:434
msgid "Categories : Sub-categories"
msgstr "Kategorien : Unterkategorien"
#. Notes
-#: src/balance_estimate_future.c:827 src/etats_affiche.c:2447
-#: src/export_csv.c:796 src/gsb_bank.c:915 src/gsb_form.c:1347
-#: src/gsb_form_widget.c:446 src/gsb_transactions_list.c:159
-#: src/import_csv.c:82 src/traitement_variables.c:92
+#: ../src/balance_estimate_future.c:827 ../src/etats_affiche.c:2447
+#: ../src/export_csv.c:796 ../src/gsb_bank.c:915 ../src/gsb_form.c:1347
+#: ../src/gsb_form_widget.c:446 ../src/gsb_transactions_list.c:159
+#: ../src/import_csv.c:82 ../src/traitement_variables.c:92
msgid "Notes"
msgstr "Notizen"
#. create the method of payment for a bank account
#. create the method of payment for a liabilities account
#. Transfer = Virement
-#. Direct deposit remplacé par Transfert = Virement
-#: src/balance_estimate_future.c:1426 src/balance_estimate_future.c:1673
-#: src/etats_affiche.c:1844 src/export_csv.c:601 src/export_csv.c:713
-#: src/export_csv.c:725 src/gsb_data_category.c:1045
-#: src/gsb_data_payment.c:633 src/gsb_data_payment.c:714
-#: src/gsb_data_payment.c:753 src/gsb_form.c:2267 src/import.c:2637
-#: src/import.c:2655 src/plugins/ofx/ofx.c:464
+#. Direct deposit remplacé par Transfert = Virement
+#: ../src/balance_estimate_future.c:1426 ../src/balance_estimate_future.c:1673
+#: ../src/etats_affiche.c:1844 ../src/export_csv.c:601 ../src/export_csv.c:713
+#: ../src/export_csv.c:725 ../src/gsb_data_category.c:1045
+#: ../src/gsb_data_payment.c:633 ../src/gsb_data_payment.c:714
+#: ../src/gsb_data_payment.c:753 ../src/gsb_form.c:2267 ../src/import.c:2637
+#: ../src/import.c:2655 ../src/plugins/ofx/ofx.c:464
msgid "Transfer"
msgstr "Umbuchung"
-#: src/balance_estimate_future.c:1867 src/balance_estimate_future.c:2414
+#: ../src/balance_estimate_future.c:1867 ../src/balance_estimate_future.c:2414
msgid "Error: You must select an account."
msgstr "Es müssen mindestens 1 Konto ausgewählt werden"
-#: src/balance_estimate_future.c:1868 src/balance_estimate_future.c:2415
+#: ../src/balance_estimate_future.c:1868 ../src/balance_estimate_future.c:2415
msgid "Missing data"
msgstr "Fehlende Daten"
#. Create the dialog
-#: src/balance_estimate_future.c:1915
+#: ../src/balance_estimate_future.c:1915
msgid "Select an account"
msgstr "Ein Konto auswählen"
#. list of accounts
-#: src/balance_estimate_future.c:1931
+#: ../src/balance_estimate_future.c:1931
msgid "List of accounts"
msgstr "Auflistung von Konten"
-#: src/balance_estimate_future.c:1951
+#: ../src/balance_estimate_future.c:1951
msgid "Effective date and data for the replacement of a planned operation"
msgstr "Effektives Datum und Daten für Ersetzung durch eine geplante Buchung"
-#: src/balance_estimate_future.c:1957
+#: ../src/balance_estimate_future.c:1957
msgid "Effective date"
msgstr "Effektives Datum"
-#: src/balance_estimate_future.c:1964
+#: ../src/balance_estimate_future.c:1964
msgid "Monthly auto-increment"
msgstr "Automatische Erhöhung pro Monat"
-#: src/balance_estimate_future.c:1975
+#: ../src/balance_estimate_future.c:1975
msgid "Check the box to replace a planned operation"
msgstr "Die 'Checkbox' auswählen um die geplante Buchung zu ersetzen"
-#: src/balance_estimate_future.c:2090 src/gsb_account_property.c:692
-#: src/gsb_data_partial_balance.c:214
+#: ../src/balance_estimate_future.c:2090 ../src/gsb_account_property.c:692
+#: ../src/gsb_data_partial_balance.c:214
msgid "Cash account"
msgstr "Bargeldkonto"
#. Description entry
#. Payment method method_ptr
#. Description entry
-#: src/balance_estimate_future.c:2148 src/categories_onglet.c:691
-#: src/gsb_payment_method_config.c:297 src/import.c:437
-#: src/imputation_budgetaire.c:728
+#: ../src/balance_estimate_future.c:2148 ../src/categories_onglet.c:691
+#: ../src/gsb_payment_method_config.c:297 ../src/import.c:437
+#: ../src/imputation_budgetaire.c:728
msgid "Type"
msgstr "Art"
-#: src/balance_estimate_hist.c:521 src/tiers_onglet.c:1111
+#: ../src/balance_estimate_hist.c:521 ../src/tiers_onglet.c:1111
msgid "Select"
msgstr "Auswählen"
-#: src/balance_estimate_hist.c:548
+#: ../src/balance_estimate_hist.c:548
msgid "Period"
msgstr "Zeitspanne"
-#: src/balance_estimate_hist.c:563 src/categories_onglet.c:161
-#: src/etats_config.c:5239 src/export_csv.c:784
-#: src/gsb_assistant_reconcile_config.c:594 src/gsb_scheduler_list.c:340
-#: src/gsb_transactions_list.c:152 src/import.c:3204
-#: src/imputation_budgetaire.c:173 src/tiers_onglet.c:240
-#: src/traitement_variables.c:85
+#: ../src/balance_estimate_hist.c:563 ../src/categories_onglet.c:161
+#: ../src/etats_config.c:5239 ../src/export_csv.c:784
+#: ../src/gsb_assistant_reconcile_config.c:594 ../src/gsb_scheduler_list.c:340
+#: ../src/gsb_transactions_list.c:152 ../src/import.c:3204
+#: ../src/imputation_budgetaire.c:173 ../src/tiers_onglet.c:240
+#: ../src/traitement_variables.c:85
msgid "Amount"
msgstr "Betrag"
-#: src/balance_estimate_hist.c:579
+#: ../src/balance_estimate_hist.c:579
msgid "Average"
msgstr "Durchschnitt"
-#: src/balance_estimate_hist.c:596
+#: ../src/balance_estimate_hist.c:596
msgid "Amount retained"
msgstr "einbehaltener Betrag"
@@ -878,318 +893,320 @@ msgstr "einbehaltener Betrag"
#. * FYEAR_COL_NAME : the name of the fyear
#. * FYEAR_COL_NUMBER : the number of the fyear
#. * FYEAR_COL_VIEW : it tha fyear should be showed
-#: src/balance_estimate_hist.c:671 src/balance_estimate_hist.c:973
+#: ../src/balance_estimate_hist.c:671 ../src/balance_estimate_hist.c:973
msgid "12 months rolling"
msgstr "Zeitraum von 12 Monaten"
#. Add last amount menu
-#: src/balance_estimate_hist.c:1373
+#: ../src/balance_estimate_hist.c:1373
msgid "Assign the amount of the last operation"
msgstr "Den Betrag von der letzten Aktion zuordnen"
#. Add average amount menu
-#: src/balance_estimate_hist.c:1396
+#: ../src/balance_estimate_hist.c:1396
msgid "Copy the average amount"
msgstr "Den durchschnittlichen Betrag kopieren"
-#: src/balance_estimate_hist.c:1657
+#: ../src/balance_estimate_hist.c:1657
#, c-format
msgid "Please select the data source for the account: \"%s\""
msgstr "Eine Datenquelle für das Konto: \"%s\" auswählen"
-#: src/balance_estimate_tab.c:410
+#: ../src/balance_estimate_tab.c:410
#, c-format
msgid "Balance estimate of the account \"%s\" from %s to %s"
msgstr "Voraussichtlicher Saldo für das Konto \"%s\" von %s bis %s"
-#: src/balance_estimate_tab.c:427
+#: ../src/balance_estimate_tab.c:427
msgid "balance beginning of period"
msgstr "Saldo Anfangsperiode"
#. set the start date and the automatic change of month
-#: src/balance_estimate_tab.c:522
+#: ../src/balance_estimate_tab.c:522
msgid "Start date"
msgstr "Beginndatum"
-#: src/balance_estimate_tab.c:541
+#: ../src/balance_estimate_tab.c:541
msgid "Check the box to automatically change start date"
msgstr ""
"Für eine automatische Ãnderung vom Beginndatum bitte die 'Checkbox' auswählen"
#. Description entry
-#: src/balance_estimate_tab.c:630 src/etats_onglet.c:260
-#: src/tiers_onglet.c:638
+#: ../src/balance_estimate_tab.c:630 ../src/etats_onglet.c:260
+#: ../src/tiers_onglet.c:638
msgid "Description"
msgstr "Beschreibung"
-#: src/balance_estimate_tab.c:671 src/export_csv.c:787 src/gsb_reconcile.c:158
-#: src/gsb_scheduler_list.c:340 src/gsb_transactions_list.c:151
-#: src/gsb_transactions_list.c:2992 src/import_csv.c:88
-#: src/traitement_variables.c:84
+#: ../src/balance_estimate_tab.c:671 ../src/export_csv.c:787
+#: ../src/gsb_reconcile.c:158 ../src/gsb_scheduler_list.c:340
+#: ../src/gsb_transactions_list.c:151 ../src/gsb_transactions_list.c:2992
+#: ../src/import_csv.c:88 ../src/traitement_variables.c:84
msgid "Balance"
msgstr "Saldo"
-#: src/balance_estimate_tab.c:754 src/balance_estimate_tab.c:764
-#: src/balance_estimate_tab.c:951 src/balance_estimate_tab.c:2337
-#: src/balance_estimate_tab.c:2342
+#: ../src/balance_estimate_tab.c:754 ../src/balance_estimate_tab.c:764
+#: ../src/balance_estimate_tab.c:951 ../src/balance_estimate_tab.c:2337
+#: ../src/balance_estimate_tab.c:2342
#, c-format
msgid ""
"Transfer between account: %s\n"
"and account: %s"
msgstr "Umbuchung: %s <-> %s"
-#: src/balance_estimate_tab.c:1273
+#: ../src/balance_estimate_tab.c:1273
msgid "Subtract to the balance"
msgstr "Vom Saldo abziehen"
-#: src/balance_estimate_tab.c:1280
+#: ../src/balance_estimate_tab.c:1280
msgid "Adding to the balance"
msgstr "Zum Saldo hinzufügen"
#. Insert Row
-#: src/balance_estimate_tab.c:1297
+#: ../src/balance_estimate_tab.c:1297
msgid "Insert Row"
msgstr "Zeile einfügen"
-#: src/balance_estimate_tab.c:1314 src/balance_estimate_tab.c:1326
-#: src/balance_estimate_tab.c:1347 src/balance_estimate_tab.c:1404
+#: ../src/balance_estimate_tab.c:1314 ../src/balance_estimate_tab.c:1326
+#: ../src/balance_estimate_tab.c:1347 ../src/balance_estimate_tab.c:1404
msgid "Delete selection"
msgstr "Auswahl löschen"
-#: src/balance_estimate_tab.c:1337
+#: ../src/balance_estimate_tab.c:1337
msgid "Change selection"
msgstr "Auswahl ändern"
-#: src/balance_estimate_tab.c:1358
+#: ../src/balance_estimate_tab.c:1358
msgid "Delete all occurences of the selection"
msgstr "Ein oder alle Vorkommen von der Auswahl löschen"
-#: src/balance_estimate_tab.c:1373
+#: ../src/balance_estimate_tab.c:1373
msgid "Convert selection to scheduled transaction"
msgstr "Buchung regelmäÃig ausführen"
-#: src/balance_estimate_tab.c:1394
+#: ../src/balance_estimate_tab.c:1394
msgid "Insert the balance of a cash account"
msgstr "Den Saldo von einem Bargeldkonto eingeben"
#. redo item
-#: src/balance_estimate_tab.c:1420
+#: ../src/balance_estimate_tab.c:1420
msgid "Reset data"
msgstr "Daten zurücksetzen"
-#: src/balance_estimate_tab.c:1741
+#: ../src/balance_estimate_tab.c:1741
msgid " (still available)"
msgstr " (weiterhin verfügbar)"
-#: src/balance_estimate_tab.c:1749
+#: ../src/balance_estimate_tab.c:1749
msgid " (yet to receive)"
msgstr " (noch nicht verfügbar)"
-#: src/balance_estimate_tab.c:1760 src/balance_estimate_tab.c:1771
+#: ../src/balance_estimate_tab.c:1760 ../src/balance_estimate_tab.c:1771
msgid " (budget exceeded)"
msgstr " (Budget überschritten)"
-#: src/balance_estimate_tab.c:2260 src/balance_estimate_tab.c:2310
-#: src/balance_estimate_tab.c:2370
+#: ../src/balance_estimate_tab.c:2260 ../src/balance_estimate_tab.c:2310
+#: ../src/balance_estimate_tab.c:2370
msgid "No data by default"
msgstr "Keine Daten per Voreinstellung"
-#: src/balance_estimate_tab.c:2268 src/balance_estimate_tab.c:2318
-#: src/balance_estimate_tab.c:2376 src/etats_affiche.c:1860
-#: src/gsb_data_category.c:155 src/meta_categories.c:66
+#: ../src/balance_estimate_tab.c:2268 ../src/balance_estimate_tab.c:2318
+#: ../src/balance_estimate_tab.c:2376 ../src/etats_affiche.c:1860
+#: ../src/gsb_data_category.c:155 ../src/meta_categories.c:66
msgid "No category"
msgstr "Keine Kategorie"
-#: src/balance_estimate_tab.c:2276 src/balance_estimate_tab.c:2326
-#: src/balance_estimate_tab.c:2382 src/etats_affiche.c:2030
-#: src/meta_budgetary.c:63
+#: ../src/balance_estimate_tab.c:2276 ../src/balance_estimate_tab.c:2326
+#: ../src/balance_estimate_tab.c:2382 ../src/etats_affiche.c:2030
+#: ../src/meta_budgetary.c:63
msgid "No budgetary line"
msgstr "Kein Budgeteintrag"
#. New transaction
-#: src/barre_outils.c:92 src/gsb_scheduler_list.c:2006
-#: src/gsb_transactions_list.c:2166
+#: ../src/barre_outils.c:92 ../src/gsb_scheduler_list.c:2006
+#: ../src/gsb_transactions_list.c:2166
msgid "New transaction"
msgstr "Neue Buchung"
-#: src/barre_outils.c:98
+#: ../src/barre_outils.c:98
msgid "Blank the form to create a new transaction"
msgstr "Eine neue Buchung erstellen"
-#: src/barre_outils.c:104 src/barre_outils.c:513 src/categories_onglet.c:526
-#: src/etats_onglet.c:158 src/imputation_budgetaire.c:562
-#: src/tiers_onglet.c:321
+#: ../src/barre_outils.c:104 ../src/barre_outils.c:513
+#: ../src/categories_onglet.c:526 ../src/etats_onglet.c:158
+#: ../src/imputation_budgetaire.c:562 ../src/tiers_onglet.c:321
msgid "Delete"
msgstr "Löschen"
-#: src/barre_outils.c:109
+#: ../src/barre_outils.c:109
msgid "Delete selected transaction"
msgstr "Die selektierte Buchung löschen"
-#: src/barre_outils.c:115 src/barre_outils.c:525
+#: ../src/barre_outils.c:115 ../src/barre_outils.c:525
msgid "Edit"
msgstr "Bearbeiten"
-#: src/barre_outils.c:120
+#: ../src/barre_outils.c:120
msgid "Edit current transaction"
msgstr "Die selektierte Buchung bearbeiten"
-#: src/barre_outils.c:125
+#: ../src/barre_outils.c:125
msgid "Reconcile"
msgstr "Abstimmen"
-#: src/barre_outils.c:131
+#: ../src/barre_outils.c:131
msgid "Start account reconciliation"
msgstr "Das Konto abstimmen"
#. Set up dialog
-#: src/barre_outils.c:139 src/etats_onglet.c:148 src/print_config.c:80
+#: ../src/barre_outils.c:139 ../src/etats_onglet.c:148
+#: ../src/print_config.c:80
msgid "Print"
msgstr "Drucken"
-#: src/barre_outils.c:144
+#: ../src/barre_outils.c:144
msgid "Print the transactions list"
msgstr "Buchungen drucken"
-#: src/barre_outils.c:150 src/barre_outils.c:562 src/categories_onglet.c:545
-#: src/imputation_budgetaire.c:583 src/tiers_onglet.c:340
+#: ../src/barre_outils.c:150 ../src/barre_outils.c:562
+#: ../src/categories_onglet.c:545 ../src/imputation_budgetaire.c:583
+#: ../src/tiers_onglet.c:340
msgid "View"
msgstr "Ansicht"
-#: src/barre_outils.c:155
+#: ../src/barre_outils.c:155
msgid "Change display mode of the list"
msgstr "Die Darstellung ändern"
-#: src/barre_outils.c:165
+#: ../src/barre_outils.c:165
msgid "Import rules"
msgstr "Import Regeln"
-#: src/barre_outils.c:170
+#: ../src/barre_outils.c:170
msgid "Quick file import by rules"
msgstr "Import basierend auf Regeln"
-#: src/barre_outils.c:220
+#: ../src/barre_outils.c:220
msgid "Simple view"
msgstr "Einzeilig"
-#: src/barre_outils.c:225
+#: ../src/barre_outils.c:225
msgid "Two lines view"
msgstr "Zweizeilig"
-#: src/barre_outils.c:230
+#: ../src/barre_outils.c:230
msgid "Three lines view"
msgstr "Dreizeilig"
-#: src/barre_outils.c:235 src/categories_onglet.c:589
-#: src/imputation_budgetaire.c:627 src/tiers_onglet.c:437
+#: ../src/barre_outils.c:235 ../src/categories_onglet.c:589
+#: ../src/imputation_budgetaire.c:627 ../src/tiers_onglet.c:437
msgid "Complete view"
msgstr "Vollständig"
-#: src/barre_outils.c:244
+#: ../src/barre_outils.c:244
msgid "Show reconciled transactions"
msgstr "Abgestimmte Buchungen"
-#: src/barre_outils.c:255
+#: ../src/barre_outils.c:255
msgid "Show lines archives"
msgstr "Erstellte Archive"
-#: src/barre_outils.c:306
+#: ../src/barre_outils.c:306
msgid "Remove the rule"
msgstr "Regel entfernen"
-#: src/barre_outils.c:456 src/gsb_scheduler_list.c:1789
+#: ../src/barre_outils.c:456 ../src/gsb_scheduler_list.c:1789
msgid "Unique view"
msgstr "Einfache Ansicht"
-#: src/barre_outils.c:456 src/gsb_scheduler_list.c:1789
+#: ../src/barre_outils.c:456 ../src/gsb_scheduler_list.c:1789
msgid "Week view"
msgstr "Ansicht nach Wochen"
-#: src/barre_outils.c:456 src/gsb_scheduler_list.c:1789
+#: ../src/barre_outils.c:456 ../src/gsb_scheduler_list.c:1789
msgid "Month view"
msgstr "Ansicht nach Monaten"
-#: src/barre_outils.c:457 src/gsb_scheduler_list.c:1790
+#: ../src/barre_outils.c:457 ../src/gsb_scheduler_list.c:1790
msgid "Two months view"
msgstr "Ansicht nach 2 Monaten"
-#: src/barre_outils.c:457 src/gsb_scheduler_list.c:1790
+#: ../src/barre_outils.c:457 ../src/gsb_scheduler_list.c:1790
msgid "Quarter view"
msgstr "Ansicht Vierteljährlich"
-#: src/barre_outils.c:458 src/gsb_scheduler_list.c:1791
+#: ../src/barre_outils.c:458 ../src/gsb_scheduler_list.c:1791
msgid "Year view"
msgstr "Ansicht Jährlich"
-#: src/barre_outils.c:458 src/gsb_scheduler_list.c:1791
+#: ../src/barre_outils.c:458 ../src/gsb_scheduler_list.c:1791
msgid "Custom view"
msgstr "Ansicht benutzerdefiniert"
-#: src/barre_outils.c:501
+#: ../src/barre_outils.c:501
msgid "_New scheduled"
msgstr "Neue geplante Buchung"
-#: src/barre_outils.c:507
+#: ../src/barre_outils.c:507
msgid "Prepare form to create a new scheduled transaction"
msgstr "Eine neue Buchung erstellen"
-#: src/barre_outils.c:519
+#: ../src/barre_outils.c:519
msgid "Delete selected scheduled transaction"
msgstr "Die selektiere Buchung löschen"
-#: src/barre_outils.c:531
+#: ../src/barre_outils.c:531
msgid "Edit selected transaction"
msgstr "Die selektierte Buchung bearbeiten"
#. comments line
-#: src/barre_outils.c:537 src/gsb_account_property.c:564
-#: src/gsb_scheduler_list.c:340
+#: ../src/barre_outils.c:537 ../src/gsb_account_property.c:564
+#: ../src/gsb_scheduler_list.c:340
msgid "Comments"
msgstr "Notizen"
-#: src/barre_outils.c:543
+#: ../src/barre_outils.c:543
msgid "Display scheduled transactions comments"
msgstr "Notizen in der Buchungsübersicht anzeigen"
-#: src/barre_outils.c:551
+#: ../src/barre_outils.c:551
msgid "Execute"
msgstr "Ausführen"
-#: src/barre_outils.c:557
+#: ../src/barre_outils.c:557
msgid "Execute current scheduled transaction"
msgstr "Die selektierte Buchung ausführen"
-#: src/barre_outils.c:567
+#: ../src/barre_outils.c:567
msgid "Change display mode of scheduled transaction list"
msgstr "Die Darstellung ändern"
-#: src/categories_onglet.c:337
+#: ../src/categories_onglet.c:337
msgid "Export categories"
msgstr "Kategorien exportieren - Grisbi"
-#: src/categories_onglet.c:344
+#: ../src/categories_onglet.c:344
msgid "Categories.cgsb"
msgstr "Kategorien.cgsb"
-#: src/categories_onglet.c:380
+#: ../src/categories_onglet.c:380
msgid "Import categories"
msgstr "Kategorien importieren - Grisbi"
-#: src/categories_onglet.c:391 src/imputation_budgetaire.c:431
+#: ../src/categories_onglet.c:391 ../src/imputation_budgetaire.c:431
msgid "Grisbi category files (*.cgsb)"
msgstr "Grisbi Kategorien (*.cgsb)"
-#: src/categories_onglet.c:397 src/etats_onglet.c:1229
-#: src/file_obfuscate_qif.c:105 src/gsb_file.c:268 src/import.c:812
-#: src/imputation_budgetaire.c:436
+#: ../src/categories_onglet.c:397 ../src/etats_onglet.c:1229
+#: ../src/file_obfuscate_qif.c:105 ../src/gsb_file.c:268 ../src/import.c:812
+#: ../src/imputation_budgetaire.c:436
msgid "All files"
msgstr "Alle Dateien"
-#: src/categories_onglet.c:418
+#: ../src/categories_onglet.c:418
msgid "Merge imported categories with existing?"
msgstr "Importierte und vorhandene Kategorien zusammenführen?"
-#: src/categories_onglet.c:420
+#: ../src/categories_onglet.c:420
msgid ""
"File already contains categories. If you decide to continue, existing "
"categories will be merged with imported ones."
@@ -1198,7 +1215,7 @@ msgstr ""
"fortsetzen werden die importierten Kategorien mit den Vorhandenen "
"zusammengeführt."
-#: src/categories_onglet.c:421
+#: ../src/categories_onglet.c:421
msgid ""
"File does not contain categories. If you decide to continue, existing "
"categories will be merged with imported ones. Once performed, there is no "
@@ -1211,11 +1228,11 @@ msgstr ""
"Es besteht auch die Möglichkeit die vorhandenen Kategorien durch die "
"Importierten zu ersetzen."
-#: src/categories_onglet.c:428 src/imputation_budgetaire.c:467
+#: ../src/categories_onglet.c:428 ../src/imputation_budgetaire.c:467
msgid "Replace existing"
msgstr "Bestehende ersetzen"
-#: src/categories_onglet.c:482
+#: ../src/categories_onglet.c:482
msgid ""
"New\n"
"category"
@@ -1223,11 +1240,11 @@ msgstr ""
"Neue\n"
"Kategorie"
-#: src/categories_onglet.c:487
+#: ../src/categories_onglet.c:487
msgid "Create a new category"
msgstr "Eine neue Kategorie erstellen"
-#: src/categories_onglet.c:493
+#: ../src/categories_onglet.c:493
msgid ""
"New sub\n"
"category"
@@ -1235,72 +1252,72 @@ msgstr ""
"Neue\n"
"Unterkategorie"
-#: src/categories_onglet.c:500
+#: ../src/categories_onglet.c:500
msgid "Create a new sub-category"
msgstr "Eine neue Unterkategorie erstellen"
-#: src/categories_onglet.c:507 src/etats_onglet.c:129 src/import.c:404
-#: src/import.c:3505 src/imputation_budgetaire.c:542 src/parametres.c:292
-#: src/utils_files.c:671
+#: ../src/categories_onglet.c:507 ../src/etats_onglet.c:129
+#: ../src/import.c:404 ../src/import.c:3505 ../src/imputation_budgetaire.c:542
+#: ../src/parametres.c:292 ../src/utils_files.c:671
msgid "Import"
msgstr "Import"
-#: src/categories_onglet.c:511
+#: ../src/categories_onglet.c:511
msgid "Import a Grisbi category file (.cgsb)"
msgstr "Kategorien (*.cgsb) importieren"
-#: src/categories_onglet.c:517 src/etats_onglet.c:138 src/export.c:161
-#: src/imputation_budgetaire.c:553
+#: ../src/categories_onglet.c:517 ../src/etats_onglet.c:138
+#: ../src/export.c:161 ../src/imputation_budgetaire.c:553
msgid "Export"
msgstr "Export"
-#: src/categories_onglet.c:521
+#: ../src/categories_onglet.c:521
msgid "Export a Grisbi category file (.cgsb)"
msgstr "Kategorien (*.cgsb) exportieren"
-#: src/categories_onglet.c:530
+#: ../src/categories_onglet.c:530
msgid "Delete selected category"
msgstr "Die selektiere Kategorie löschen"
-#: src/categories_onglet.c:535 src/etats_onglet.c:167
-#: src/fenetre_principale.c:253 src/imputation_budgetaire.c:572
-#: src/tiers_onglet.c:330
+#: ../src/categories_onglet.c:535 ../src/etats_onglet.c:167
+#: ../src/fenetre_principale.c:253 ../src/imputation_budgetaire.c:572
+#: ../src/tiers_onglet.c:330
msgid "Properties"
msgstr "Eigenschaften"
-#: src/categories_onglet.c:539
+#: ../src/categories_onglet.c:539
msgid "Edit selected category"
msgstr "Die selektierte Kategorie bearbeiten"
-#: src/categories_onglet.c:549 src/tiers_onglet.c:344
+#: ../src/categories_onglet.c:549 ../src/tiers_onglet.c:344
msgid "Change view mode"
msgstr "Die Darstellung ändern"
#. Edit transaction
-#: src/categories_onglet.c:577
+#: ../src/categories_onglet.c:577
msgid "Category view"
msgstr "Einfach"
-#: src/categories_onglet.c:583
+#: ../src/categories_onglet.c:583
msgid "Subcategory view"
msgstr "Unterkategorien"
-#: src/categories_onglet.c:634 src/categories_onglet.c:638
-#: src/imputation_budgetaire.c:670 src/imputation_budgetaire.c:675
-#: src/tiers_onglet.c:600
+#: ../src/categories_onglet.c:634 ../src/categories_onglet.c:638
+#: ../src/imputation_budgetaire.c:670 ../src/imputation_budgetaire.c:675
+#: ../src/tiers_onglet.c:600
#, c-format
msgid "Properties for %s"
msgstr "Eigenschaften von %s"
-#: src/categories_onglet.c:636
+#: ../src/categories_onglet.c:636
msgid "No sub-category defined"
msgstr "Keine Unterkategorie definiert"
-#: src/categories_onglet.c:640 src/qif.c:1152 src/qif.c:1159
+#: ../src/categories_onglet.c:640 ../src/qif.c:1152 ../src/qif.c:1159
msgid "No category defined"
msgstr "Keine Kategorie definiert"
-#: src/categories_onglet.c:731
+#: ../src/categories_onglet.c:731
#, c-format
msgid ""
"You tried to rename current sub-category to '%s' but this sub-category "
@@ -1310,7 +1327,7 @@ msgstr ""
"bereits eine Unterkategorie mit diesem Namen vorhanden. Bitte wählen Sie "
"einen anderen Namen aus."
-#: src/categories_onglet.c:738
+#: ../src/categories_onglet.c:738
#, c-format
msgid ""
"You tried to rename current category to '%s' but this category already "
@@ -1320,29 +1337,20 @@ msgstr ""
"eine Kategorie mit diesem Namen vorhanden. Bitte wählen Sie einen anderen "
"Namen aus."
-#: src/categories_onglet.c:743
+#: ../src/categories_onglet.c:743
msgid "Category already exists"
msgstr "Die Kategorie ist bereits vorhanden"
#. * Find a unique name for category
-#: src/categories_onglet.c:849 src/meta_categories.c:307
+#: ../src/categories_onglet.c:849 ../src/meta_categories.c:307
msgid "New sub-category"
msgstr "Neue Unterkategorie"
-#: src/dialog.c:52
-msgid "No tip of the day available"
-msgstr "Kein Tipp des Tages verfügbar"
-
-#: src/dialog.c:53
-msgid ""
-"Make sure that grisbi was correctly installed and that tips file is readable."
-msgstr "Bitte die Installation von Grisbi überprüfen."
-
-#: src/dialog.c:56
+#: ../src/dialog.c:52
msgid "Security feature not implemented"
msgstr "Die Verschlüsselung ist nicht verfügbar"
-#: src/dialog.c:57
+#: ../src/dialog.c:53
msgid ""
"This file contains security information, which processing is not implemented "
"at this moment."
@@ -1350,11 +1358,11 @@ msgstr ""
"Die Datei enthält sicherheitsrelevante Informationen. Die Verarbeitung "
"dieser Informationen ist derzeit nicht realisiert."
-#: src/dialog.c:61
+#: ../src/dialog.c:57
msgid "Encryption is irreversible."
msgstr "Die Verschlüsselung ist nicht reversibel"
-#: src/dialog.c:62
+#: ../src/dialog.c:58
msgid ""
"Grisbi encrypts files in a very secure way that does not allow recovery "
"without original password. It means that if you forget your password, you "
@@ -1370,11 +1378,11 @@ msgstr ""
"Bitte beachten Sie, ohne Passwort ist ein Zugriff auf die Daten nicht mehr "
"möglich."
-#: src/dialog.c:68
+#: ../src/dialog.c:64
msgid "Account file is world readable."
msgstr "Die Datei ist für alle Benutzer lesbar"
-#: src/dialog.c:69
+#: ../src/dialog.c:65
msgid ""
"Your account file should not be readable by anybody else, but it is. You "
"should change its permissions.\n"
@@ -1384,12 +1392,12 @@ msgstr ""
"Berechtigungen sollten geändert werden.\n"
"Soll diese Ãnderung durchgeführt werden?"
-#: src/dialog.c:73
+#: ../src/dialog.c:69
#, c-format
msgid "File \"%s\" is already opened"
msgstr "Die Datei %s ist bereits geöffnet"
-#: src/dialog.c:74
+#: ../src/dialog.c:70
msgid ""
"Either this file is already opened by another user or it wasn't closed "
"correctly (maybe Grisbi crashed?).\n"
@@ -1401,20 +1409,20 @@ msgstr ""
"Grisbi kann die Datei solange nicht speichern bis in den Optionen "
"\"Speichern von gesperrten Dateien erzwingen\" gesetzt ist."
-#: src/dialog.c:79
+#: ../src/dialog.c:75
msgid "Account under desired balance."
msgstr "Das Konto ist unter dem festgelegten Saldo"
-#: src/dialog.c:80
+#: ../src/dialog.c:76
#, c-format
msgid "Grisbi detected that an account is under a desired balance: %s"
msgstr "Das Konto ist unter dem festgelegten Saldo: %s"
-#: src/dialog.c:83
+#: ../src/dialog.c:79
msgid "No budgetary line was entered"
msgstr "Es wurde kein Budgeteintrag eingegeben"
-#: src/dialog.c:84
+#: ../src/dialog.c:80
msgid ""
"This transaction has no budgetary line entered. You should use them to "
"easily produce budgets and make reports on them."
@@ -1422,11 +1430,11 @@ msgstr ""
"Bei der Buchung wurde kein Budgeteintrag eingeben. Sie sollten einen "
"Budgeteintrag erfassen, damit Budgets und Berichte erstellt werden können."
-#: src/dialog.c:88
+#: ../src/dialog.c:84
msgid "Recover split?"
msgstr "Splittbuchung wiederherstellen"
-#: src/dialog.c:89
+#: ../src/dialog.c:85
msgid ""
"This is a split of transaction, associated transactions can be recovered as "
"in last transaction with this payee. Do you want to recover them?"
@@ -1434,19 +1442,19 @@ msgstr ""
"Bei dieser Splittbuchung können die dazugehörigen Teilbuchungen "
"wiederhergestellt werden. Sollen die Teilbuchungen wiederhergestellt werden?"
-#: src/dialog.c:93
+#: ../src/dialog.c:89
msgid "No inconsistency found."
msgstr "Keine Inkonsistenzen gefunden"
-#: src/dialog.c:94
+#: ../src/dialog.c:90
msgid "Grisbi found no known inconsistency in accounts processed."
msgstr "Es wurden keine Inkonsistenzen in den geprüften Konten gefunden."
-#: src/dialog.c:97
+#: ../src/dialog.c:93
msgid "Confirmation of manual (un)reconciliation"
msgstr "Die manuelle (Un)Abstimmung bestätigen"
-#: src/dialog.c:98
+#: ../src/dialog.c:94
msgid ""
"You are trying to reconcile or unreconcile a transaction manually, which is "
"not a recommended action.\n"
@@ -1456,11 +1464,11 @@ msgstr ""
"kennzeichnen. Dies ist grundsätzlich möglich, jedoch nicht die empfohlene "
"Vorgehensweise. Soll der Vorgang fortgesetzt werden?"
-#: src/dialog.c:103
+#: ../src/dialog.c:99
msgid "Reconcile start and end dates."
msgstr "Abstimmung Beginn und Enddatum"
-#: src/dialog.c:104
+#: ../src/dialog.c:100
msgid ""
"In previous versions, Grisbi did not save start date, end date and balance "
"for reconciliation. This is now done, so Grisbi will try to guess values "
@@ -1473,12 +1481,12 @@ msgstr ""
"Vorgang beeinträchtigt die Datenkonsistenz nicht. Im Einstellungsdialog sind "
"dazu mehr Informationen ersichtlich."
-#: src/dialog.c:110
+#: ../src/dialog.c:106
#, c-format
msgid "You are running Grisbi version %s"
msgstr "Sie führen Grisbi mit der Version %s aus"
-#: src/dialog.c:111 src/dialog.c:117
+#: ../src/dialog.c:107 ../src/dialog.c:113
msgid ""
"Warning, please be aware that the version you run is a DEVELOPMENT version. "
"In any case do not work with this version on your original accounting files. "
@@ -1490,26 +1498,26 @@ msgstr ""
"Dateiformat kann sich ändern, dadurch kann diese Datei inkompatibel zu "
"Vorversionen von Grisbi werden)."
-#: src/dialog.c:116 src/main.c:217
+#: ../src/dialog.c:112 ../src/main.c:214
#, c-format
msgid "You are running Grisbi with GTK version %s"
msgstr "Sie führen Grisbi mit GTK-Version %s aus"
-#: src/dialog.c:333 src/dialog.c:532 src/gsb_scheduler_list.c:1733
+#: ../src/dialog.c:329 ../src/dialog.c:528 ../src/gsb_scheduler_list.c:1733
msgid "Do not show this message again"
msgstr "Diese Meldung nicht mehr anzeigen"
-#: src/dialog.c:661
+#: ../src/dialog.c:657
msgid ""
"Hi, you are in the middle of nowhere, between two lines of code. Grisbi is "
"expected to crash very soon. Have a nice day."
msgstr "Im Programm ist ein interner Fehler aufgetreten."
-#: src/dialog.c:663
+#: ../src/dialog.c:659
msgid "Serious brain damage expected."
msgstr "Im Programm ist ein interner Fehler aufgetreten."
-#: src/dialog.c:674
+#: ../src/dialog.c:670
msgid ""
"Bad things will happen soon. Be sure to save any modification in a separate "
"file in case Grisbi would corrupt files."
@@ -1517,565 +1525,580 @@ msgstr ""
"Es ist ein interner Fehler aufgetreten, Speichern Sie alle Ãnderungen in "
"einer neuen Datei."
-#: src/dialog.c:676
+#: ../src/dialog.c:672
msgid "Cannot allocate memory"
msgstr "Der Speicher kann nicht zugeteilt werden"
-#: src/erreur.c:91
+#: ../src/erreur.c:91
msgid "File is corrupted."
msgstr "Die Datei ist beschädigt."
-#: src/erreur.c:98
+#: ../src/erreur.c:98
msgid "Error occured saving file."
msgstr "Fehler beim Speichern der Datei."
-#: src/erreur.c:119
+#: ../src/erreur.c:119
msgid "Save file"
msgstr "Datei speichern"
-#: src/erreur.c:129
+#: ../src/erreur.c:129
#, c-format
msgid "Grisbi made a backup file at '%s'."
msgstr "Grisbi hat eine Sicherung im Verzeichnis '%s' erstellt."
-#: src/erreur.c:138
+#: ../src/erreur.c:138
msgid ""
"Please report this problem to <tt>http://www.grisbi.org/bugtracking/</tt>. "
msgstr ""
"Bitte den Fehler unter <tt>http://www.grisbi.org/bugtracking/</tt> melden. "
-#: src/erreur.c:144
+#: ../src/erreur.c:144
msgid "Copy and paste the following backtrace with your bug report."
msgstr ""
"Die Ausgabe vom \"Backtrace\" mitKopieren und Einfügen zum Fehlerbericht "
"hinzufügen."
-#: src/erreur.c:151
+#: ../src/erreur.c:151
msgid "Grisbi terminated due to a segmentation fault."
msgstr "Speicherzugriffsverletzung."
-#: src/erreur.c:156
+#: ../src/erreur.c:156
msgid "Backtrace"
msgstr "Backtrace"
#. on affiche un message de debug pour indiquer que le debug est actif
-#: src/erreur.c:208 src/erreur.c:220
+#: ../src/erreur.c:208 ../src/erreur.c:220
#, c-format
msgid "GRISBI %s Debug"
msgstr "Grisbi %s Debug"
-#: src/erreur.c:209
+#: ../src/erreur.c:209
#, c-format
msgid "Debug enabled, level is '%s'"
msgstr "Debug aktiviert, Level ist '%s'"
-#: src/erreur.c:223
+#: ../src/erreur.c:223
msgid "Wrong debug level, please check DEBUG_GRISBI environnement variable"
msgstr ""
"Falscher \"Debug-Level\", bitte \"DEBUG_GRISBI\" in der Umgebungsvariable "
"prüfen"
-#: src/erreur.c:283
+#: ../src/erreur.c:283
#, fuzzy, c-format
msgid "%s, %2f : %s - %s:%d:%s - %s\n"
msgstr "%s : %s - %s:%d:%s - %s\n"
-#: src/erreur.c:287
+#: ../src/erreur.c:287
#, fuzzy, c-format
msgid "%s, %2f : %s - %s:%d:%s\n"
msgstr "%s : %s - %s:%d:%s\n"
#. on affiche dans la console le message
-#: src/erreur.c:325
+#: ../src/erreur.c:325
#, fuzzy, c-format
msgid "%s, %2f : %s - %s:%d:%s - %d\n"
msgstr "%s : %s - %s:%d:%s - %d\n"
#. on affiche dans la console le message
-#: src/erreur.c:363
+#: ../src/erreur.c:363
#, fuzzy, c-format
msgid "%s, %2f : %s - %s:%d:%s - %ld E %d\n"
msgstr "%s : %s - %s:%d:%s - %ld E %d\n"
-#: src/erreur.c:449
+#: ../src/erreur.c:449
#, c-format
msgid ""
"The debug-mode is starting. Grisbi will write a log into %s. Please send "
"that file with the obfuscated file into the bug report."
msgstr ""
-"Der Debug-Modus wird gestartet. Grisbi wird die Debug-Ausgabe in die Datei %"
-"s schreiben. Ergänzen Sie bitte den Fehlerbericht mit dieser und der "
+"Der Debug-Modus wird gestartet. Grisbi wird die Debug-Ausgabe in die Datei "
+"%s schreiben. Ergänzen Sie bitte den Fehlerbericht mit dieser und der "
"anonymisierten Datei."
-#: src/erreur.c:467
+#: ../src/erreur.c:467
msgid "Grisbi failed to create the log file..."
msgstr "Die Logdatei konnte nicht erstellt werden..."
-#: src/etats_affiche.c:179 src/etats_affiche.c:414 src/etats_affiche.c:639
-#: src/etats_affiche.c:747
+#: ../src/etats_affiche.c:179 ../src/etats_affiche.c:414
+#: ../src/etats_affiche.c:639 ../src/etats_affiche.c:747
#, c-format
msgid "Total %s (%d transaction)"
msgstr "Gesamt %s (%d Buchung)"
-#: src/etats_affiche.c:181 src/etats_affiche.c:416 src/etats_affiche.c:641
-#: src/etats_affiche.c:749
+#: ../src/etats_affiche.c:181 ../src/etats_affiche.c:416
+#: ../src/etats_affiche.c:641 ../src/etats_affiche.c:749
#, c-format
msgid "Total %s (%d transactions)"
msgstr "Gesamt %s (%d Buchungen)"
-#: src/etats_affiche.c:185 src/etats_affiche.c:420 src/etats_affiche.c:645
+#: ../src/etats_affiche.c:185 ../src/etats_affiche.c:420
+#: ../src/etats_affiche.c:645
msgid "Total"
msgstr "Gesamt"
-#: src/etats_affiche.c:193
+#: ../src/etats_affiche.c:193
#, c-format
msgid "Category total (%d transaction)"
msgstr "Kategorien gesamt (%d Buchung)"
-#: src/etats_affiche.c:195
+#: ../src/etats_affiche.c:195
#, c-format
msgid "Category total (%d transactions)"
msgstr "Kategorien gesamt (%d Buchungen)"
-#: src/etats_affiche.c:199
+#: ../src/etats_affiche.c:199
msgid "Category total"
msgstr "Kategorien gesamt"
-#: src/etats_affiche.c:223 src/etats_affiche.c:343 src/etats_affiche.c:456
-#: src/etats_affiche.c:572 src/etats_affiche.c:681 src/etats_affiche.c:789
+#: ../src/etats_affiche.c:223 ../src/etats_affiche.c:343
+#: ../src/etats_affiche.c:456 ../src/etats_affiche.c:572
+#: ../src/etats_affiche.c:681 ../src/etats_affiche.c:789
#, c-format
msgid "%s (%d transaction)"
msgstr "%s (%d Buchung)"
-#: src/etats_affiche.c:225 src/etats_affiche.c:345 src/etats_affiche.c:458
-#: src/etats_affiche.c:574 src/etats_affiche.c:683 src/etats_affiche.c:791
-#: src/transaction_list.c:330
+#: ../src/etats_affiche.c:225 ../src/etats_affiche.c:345
+#: ../src/etats_affiche.c:458 ../src/etats_affiche.c:574
+#: ../src/etats_affiche.c:683 ../src/etats_affiche.c:791
+#: ../src/transaction_list.c:330
#, c-format
msgid "%s (%d transactions)"
msgstr "%s (%d Buchungen)"
-#: src/etats_affiche.c:301 src/etats_affiche.c:527
+#: ../src/etats_affiche.c:301 ../src/etats_affiche.c:527
#, c-format
msgid "Total %s: %s (%d transaction)"
msgstr "Gesamt %s: %s (%d Buchung)"
-#: src/etats_affiche.c:303 src/etats_affiche.c:529
+#: ../src/etats_affiche.c:303 ../src/etats_affiche.c:529
#, c-format
msgid "Total %s: %s (%d transactions)"
msgstr "Gesamt %s: %s (%d Buchungen)"
-#: src/etats_affiche.c:308 src/etats_affiche.c:534
+#: ../src/etats_affiche.c:308 ../src/etats_affiche.c:534
#, c-format
msgid "Total %s: %s"
msgstr "Gesamt %s: %s"
-#: src/etats_affiche.c:316
+#: ../src/etats_affiche.c:316
#, c-format
msgid "Sub-categories total (%d transaction)"
msgstr "Unterkategorien gesamt (%d Buchung)"
-#: src/etats_affiche.c:318
+#: ../src/etats_affiche.c:318
#, c-format
msgid "Sub-categories total (%d transactions)"
msgstr "Unterkategorien gesamt (%d Buchungen)"
-#: src/etats_affiche.c:322
+#: ../src/etats_affiche.c:322
msgid "Sub-categories total"
msgstr "Unterkategorien gesamt"
-#: src/etats_affiche.c:428
+#: ../src/etats_affiche.c:428
#, c-format
msgid "Budgetary lines total: (%d transaction)"
msgstr "Budgeteinträge gesamt: (%d Buchung)"
-#: src/etats_affiche.c:430
+#: ../src/etats_affiche.c:430
#, c-format
msgid "Budgetary lines total: (%d transactions)"
msgstr "Budgeteinträge gesamt: (%d Buchungen)"
-#: src/etats_affiche.c:434
+#: ../src/etats_affiche.c:434
msgid "Budgetary lines total"
msgstr "Budgeteinträge gesamt"
-#: src/etats_affiche.c:542
+#: ../src/etats_affiche.c:542
#, c-format
msgid "Sub-budgetary lines total: (%d transaction)"
msgstr "Teil-Budgeteinträge gesamt: (%d Buchung)"
-#: src/etats_affiche.c:544
+#: ../src/etats_affiche.c:544
#, c-format
msgid "Sub-budgetary lines total: (%d transactions)"
msgstr "Teil-Budgeteinträge gesamt: (%d Buchungen)"
-#: src/etats_affiche.c:548
+#: ../src/etats_affiche.c:548
msgid "Sub-budgetary lines total"
msgstr "Teil-Budgeteinträge gesamt"
-#: src/etats_affiche.c:653
+#: ../src/etats_affiche.c:653
#, c-format
msgid "Account total: (%d transaction)"
msgstr "Konto gesamt: (%d Buchung)"
-#: src/etats_affiche.c:655
+#: ../src/etats_affiche.c:655
#, c-format
msgid "Account total: (%d transactions)"
msgstr "Konto gesamt: (%d Buchungen)"
-#: src/etats_affiche.c:659
+#: ../src/etats_affiche.c:659
msgid "Account total"
msgstr "Konto gesamt"
-#: src/etats_affiche.c:753
+#: ../src/etats_affiche.c:753
#, c-format
msgid "Total %s"
msgstr "Gesamt %s"
-#: src/etats_affiche.c:761
+#: ../src/etats_affiche.c:761
#, c-format
msgid "Payee total: (%d transaction)"
msgstr "Empfänger gesamt: (%d Buchungen)"
-#: src/etats_affiche.c:763
+#: ../src/etats_affiche.c:763
#, c-format
msgid "Payee total: (%d transactions)"
msgstr "Empfänger gesamt: (%d Buchungen)"
-#: src/etats_affiche.c:767
+#: ../src/etats_affiche.c:767
msgid "Payee total"
msgstr "Empfänger gesamt"
-#: src/etats_affiche.c:926 src/etats_affiche.c:1025 src/etats_affiche.c:1188
+#: ../src/etats_affiche.c:926 ../src/etats_affiche.c:1025
+#: ../src/etats_affiche.c:1188
#, c-format
msgid "Result of %s (%d transaction)"
msgstr "Ergebnis von %s (%d Buchung)"
-#: src/etats_affiche.c:928 src/etats_affiche.c:1027 src/etats_affiche.c:1190
+#: ../src/etats_affiche.c:928 ../src/etats_affiche.c:1027
+#: ../src/etats_affiche.c:1190
#, c-format
msgid "Result of %s (%d transactions)"
msgstr "Ergebnis von %s (%d Buchungen)"
-#: src/etats_affiche.c:932 src/etats_affiche.c:1031 src/etats_affiche.c:1196
+#: ../src/etats_affiche.c:932 ../src/etats_affiche.c:1031
+#: ../src/etats_affiche.c:1196
#, c-format
msgid "Result of %s"
msgstr "Ergebnis von %s"
-#: src/etats_affiche.c:988
+#: ../src/etats_affiche.c:988
#, c-format
msgid "Result from %s to %s (%d transaction):"
msgstr "Ergebnis von %s bis %s (%d Buchung):"
-#: src/etats_affiche.c:990
+#: ../src/etats_affiche.c:990
#, c-format
msgid "Result from %s to %s (%d transactions):"
msgstr "Ergebnis von %s bis %s (%d Buchungen):"
-#: src/etats_affiche.c:1001
+#: ../src/etats_affiche.c:1001
#, c-format
msgid "Result from %s to %s:"
msgstr "Ergebnis von %s bis %s:"
-#: src/etats_affiche.c:1053
+#: ../src/etats_affiche.c:1053
#, c-format
msgid "Result for %s (%d transaction)"
msgstr "Ergebnis für %s (%d Buchung)"
-#: src/etats_affiche.c:1055
+#: ../src/etats_affiche.c:1055
#, c-format
msgid "Result for %s (%d transactions)"
msgstr "Ergebnis für %s (%d Buchungen)"
-#: src/etats_affiche.c:1059
+#: ../src/etats_affiche.c:1059
#, c-format
msgid "Result for %s"
msgstr "Ergebnis für %s"
-#: src/etats_affiche.c:1206
+#: ../src/etats_affiche.c:1206
#, c-format
msgid "Result without financial year (%d transaction)"
msgstr "Ergebnis ohne Geschäftsjahr (%d Buchung)"
-#: src/etats_affiche.c:1208
+#: ../src/etats_affiche.c:1208
#, c-format
msgid "Result without financial year (%d transactions)"
msgstr "Ergebnis ohne Geschäftsjahr (%d Buchungen)"
-#: src/etats_affiche.c:1212
+#: ../src/etats_affiche.c:1212
msgid "Result without financial year"
msgstr "Ergebnis ohne Geschäftsjahr"
-#: src/etats_affiche.c:1399 src/gsb_scheduler_list.c:950
-#: src/gsb_transactions_list.c:3419
+#: ../src/etats_affiche.c:1399 ../src/gsb_scheduler_list.c:950
+#: ../src/gsb_transactions_list.c:3419
#, c-format
msgid "Transfer to %s"
msgstr "Umbuchen nach %s"
-#: src/etats_affiche.c:1401 src/gsb_scheduler_list.c:953
-#: src/gsb_transactions_list.c:3422
+#: ../src/etats_affiche.c:1401 ../src/gsb_scheduler_list.c:953
+#: ../src/gsb_transactions_list.c:3422
#, c-format
msgid "Transfer from %s"
msgstr "Umbuchen von %s"
-#: src/etats_affiche.c:1674
+#: ../src/etats_affiche.c:1674
#, c-format
msgid "Total expenses (%d transaction)"
msgstr "Gesamtausgaben (%d Buchung)"
-#: src/etats_affiche.c:1676
+#: ../src/etats_affiche.c:1676
#, c-format
msgid "Total expenses (%d transactions)"
msgstr "Gesamtausgaben (%d Buchungen)"
-#: src/etats_affiche.c:1680
+#: ../src/etats_affiche.c:1680
msgid "Total expenses"
msgstr "Gesamtausgaben"
-#: src/etats_affiche.c:1688
+#: ../src/etats_affiche.c:1688
#, c-format
msgid "Total income (%d transaction)"
msgstr "Gesamteinnahmen (%d Buchung)"
-#: src/etats_affiche.c:1690
+#: ../src/etats_affiche.c:1690
#, c-format
msgid "Total income (%d transactions)"
msgstr "Gesamteinnahmen (%d Buchungen)"
-#: src/etats_affiche.c:1694
+#: ../src/etats_affiche.c:1694
msgid "Total income"
msgstr "Gesamteinnahmen"
-#: src/etats_affiche.c:1743
+#: ../src/etats_affiche.c:1743
#, c-format
msgid "General total (%d transaction)"
msgstr "Gesamtsumme (%d Buchung)"
-#: src/etats_affiche.c:1745
+#: ../src/etats_affiche.c:1745
#, c-format
msgid "General total (%d transactions)"
msgstr "Gesamtsumme (%d Buchungen)"
-#: src/etats_affiche.c:1749
+#: ../src/etats_affiche.c:1749
msgid "General total"
msgstr "Gesamtsumme"
-#: src/etats_affiche.c:1853 src/export_csv.c:571 src/gsb_data_category.c:1043
-#: src/gsb_form.c:724 src/gsb_form.c:2760 src/gsb_form.c:3163
-#: src/gsb_form_scheduler.c:316 src/gsb_transactions_list.c:3397
+#: ../src/etats_affiche.c:1853 ../src/export_csv.c:571
+#: ../src/gsb_data_category.c:1043 ../src/gsb_form.c:724
+#: ../src/gsb_form.c:2760 ../src/gsb_form.c:3163
+#: ../src/gsb_form_scheduler.c:316 ../src/gsb_transactions_list.c:3397
msgid "Split of transaction"
msgstr "Buchung splitten"
-#: src/etats_affiche.c:1946
+#: ../src/etats_affiche.c:1946
msgid "No subcategory"
msgstr "Keine Unterkategorie"
-#: src/etats_affiche.c:2115 src/meta_budgetary.c:64
+#: ../src/etats_affiche.c:2115 ../src/meta_budgetary.c:64
msgid "No sub-budgetary line"
msgstr "Kein Teil-Budgeteintrag"
-#: src/etats_affiche.c:2266 src/gsb_data_payee.c:118 src/meta_payee.c:78
+#: ../src/etats_affiche.c:2266 ../src/gsb_data_payee.c:118
+#: ../src/meta_payee.c:78
msgid "No payee"
msgstr "Kein Empfänger"
-#: src/etats_affiche.c:2295
+#: ../src/etats_affiche.c:2295
msgid "Incomes"
msgstr "Einnahmen"
-#: src/etats_affiche.c:2315
+#: ../src/etats_affiche.c:2315
msgid "Outgoings"
msgstr "Ausgaben"
-#: src/etats_affiche.c:2398 src/traitement_variables.c:95
+#: ../src/etats_affiche.c:2398 ../src/traitement_variables.c:95
msgid "Number"
msgstr "Nr."
-#: src/etats_affiche.c:2412 src/export_csv.c:763 src/gsb_form.c:1289
-#: src/gsb_form.c:2117 src/gsb_form.c:2140 src/gsb_form_widget.c:422
-#: src/gsb_transactions_list.c:146 src/import_csv.c:80
-#: src/traitement_variables.c:79
+#: ../src/etats_affiche.c:2412 ../src/export_csv.c:763 ../src/gsb_form.c:1289
+#: ../src/gsb_form.c:2117 ../src/gsb_form.c:2140 ../src/gsb_form_widget.c:422
+#: ../src/gsb_transactions_list.c:146 ../src/import_csv.c:80
+#: ../src/traitement_variables.c:79
msgid "Value date"
msgstr "Buchungsdatum"
-#: src/etats_affiche.c:2419 src/export_csv.c:769 src/gsb_archive_config.c:98
-#: src/gsb_assistant_archive_export.c:150 src/gsb_form_widget.c:426
-#: src/gsb_transactions_list.c:155 src/traitement_variables.c:88
+#: ../src/etats_affiche.c:2419 ../src/export_csv.c:769
+#: ../src/gsb_archive_config.c:98 ../src/gsb_assistant_archive_export.c:150
+#: ../src/gsb_form_widget.c:426 ../src/gsb_transactions_list.c:155
+#: ../src/traitement_variables.c:88
msgid "Financial year"
msgstr "Geschäftsjahr"
#. Now we have a model, create view
-#: src/etats_affiche.c:2454 src/etats_config.c:562 src/etats_config.c:565
-#: src/etats_config.c:7221 src/gsb_payment_method_config.c:117
-#: src/parametres.c:519
+#: ../src/etats_affiche.c:2454 ../src/etats_config.c:562
+#: ../src/etats_config.c:565 ../src/etats_config.c:7221
+#: ../src/gsb_payment_method_config.c:117 ../src/parametres.c:519
msgid "Payment methods"
msgstr "Zahlungsweisen"
-#: src/etats_affiche.c:2461 src/gsb_data_payment.c:742
+#: ../src/etats_affiche.c:2461 ../src/gsb_data_payment.c:742
msgid "Cheque"
msgstr "Scheck"
-#: src/etats_affiche.c:2468 src/export_csv.c:805 src/gsb_form.c:1390
-#: src/gsb_form_widget.c:466 src/gsb_transactions_list.c:158
-#: src/traitement_variables.c:91
+#: ../src/etats_affiche.c:2468 ../src/export_csv.c:805 ../src/gsb_form.c:1390
+#: ../src/gsb_form_widget.c:466 ../src/gsb_transactions_list.c:158
+#: ../src/traitement_variables.c:91
msgid "Voucher"
msgstr "Beleg"
-#: src/etats_affiche.c:2475 src/export_csv.c:811 src/gsb_form.c:1383
-#: src/gsb_form_widget.c:470 src/gsb_transactions_list.c:160
-#: src/traitement_variables.c:93
+#: ../src/etats_affiche.c:2475 ../src/export_csv.c:811 ../src/gsb_form.c:1383
+#: ../src/gsb_form_widget.c:470 ../src/gsb_transactions_list.c:160
+#: ../src/traitement_variables.c:93
msgid "Bank references"
msgstr "Bankreferenzen"
-#: src/etats_affiche.c:2482
+#: ../src/etats_affiche.c:2482
msgid "Statement"
msgstr "Abstimmung"
-#: src/etats_config.c:178
+#: ../src/etats_config.c:178
msgid "All"
msgstr "alle"
-#: src/etats_config.c:180
+#: ../src/etats_config.c:180
msgid "Total to now"
msgstr "alle bis jetzt"
-#: src/etats_config.c:181
+#: ../src/etats_config.c:181
msgid "Current month"
msgstr "aktueller Monat"
-#: src/etats_config.c:182
+#: ../src/etats_config.c:182
msgid "Current year"
msgstr "aktuelles Jahr"
-#: src/etats_config.c:183
+#: ../src/etats_config.c:183
msgid "Current month to now"
msgstr "aktueller Monat bis jetzt"
-#: src/etats_config.c:184
+#: ../src/etats_config.c:184
msgid "Current year to now"
msgstr "aktuelles Jahr bis jetzt"
-#: src/etats_config.c:185
+#: ../src/etats_config.c:185
msgid "Previous month"
msgstr "letzter Monat"
-#: src/etats_config.c:186
+#: ../src/etats_config.c:186
msgid "Previous year"
msgstr "letztes Jahr"
-#: src/etats_config.c:187
+#: ../src/etats_config.c:187
msgid "Last 30 days"
msgstr "die letzten 30 Tage"
-#: src/etats_config.c:188
+#: ../src/etats_config.c:188
msgid "Last 3 months"
msgstr "die letzten 3 Monate"
-#: src/etats_config.c:189
+#: ../src/etats_config.c:189
msgid "Last 6 months"
msgstr "die letzten 6 Monate"
-#: src/etats_config.c:190
+#: ../src/etats_config.c:190
msgid "Last 12 months"
msgstr "die letzten 12 Monate"
-#: src/etats_config.c:194
+#: ../src/etats_config.c:194
msgid "Monday"
msgstr "Montag"
-#: src/etats_config.c:195
+#: ../src/etats_config.c:195
msgid "Tuesday"
msgstr "Dienstag"
-#: src/etats_config.c:196
+#: ../src/etats_config.c:196
msgid "Wednesday"
msgstr "Mittwoch"
-#: src/etats_config.c:197
+#: ../src/etats_config.c:197
msgid "Thursday"
msgstr "Donnerstag"
-#: src/etats_config.c:198
+#: ../src/etats_config.c:198
msgid "Friday"
msgstr "Freitag"
-#: src/etats_config.c:199
+#: ../src/etats_config.c:199
msgid "Saturday"
msgstr "Samstag"
-#: src/etats_config.c:200
+#: ../src/etats_config.c:200
msgid "Sunday"
msgstr "Sonntag"
-#: src/etats_config.c:399
+#: ../src/etats_config.c:399
msgid "Report properties"
msgstr "Bericht bearbeiten - Grisbi"
-#: src/etats_config.c:483
+#: ../src/etats_config.c:483
msgid "Data selection"
msgstr "Datenauswahl"
-#: src/etats_config.c:490 src/etats_config.c:493
+#: ../src/etats_config.c:490 ../src/etats_config.c:493
msgid "Dates"
msgstr "Datum"
-#: src/etats_config.c:499 src/etats_config.c:502 src/etats_config.c:2706
+#: ../src/etats_config.c:499 ../src/etats_config.c:502
+#: ../src/etats_config.c:2706
msgid "Transfers"
msgstr "Umbuchungen"
#. mise en place de la paddingbox des comptes
-#: src/etats_config.c:508 src/etats_config.c:511 src/etats_config.c:6992
-#: src/fenetre_principale.c:233 src/navigation.c:251
+#: ../src/etats_config.c:508 ../src/etats_config.c:511
+#: ../src/etats_config.c:6992 ../src/fenetre_principale.c:233
+#: ../src/navigation.c:251
msgid "Accounts"
msgstr "Konten"
-#: src/etats_config.c:544 src/etats_config.c:547
+#: ../src/etats_config.c:544 ../src/etats_config.c:547
msgid "Texts"
msgstr "Texte"
#. amount line
-#: src/etats_config.c:553 src/etats_config.c:556 src/gsb_currency.c:588
+#: ../src/etats_config.c:553 ../src/etats_config.c:556
+#: ../src/gsb_currency.c:588
msgid "Amounts"
msgstr "Beträge"
-#: src/etats_config.c:571
+#: ../src/etats_config.c:571
msgid "Misc."
msgstr "Verschiedenes"
-#: src/etats_config.c:574 src/etats_config.c:6138
+#: ../src/etats_config.c:574 ../src/etats_config.c:6138
msgid "Miscellaneous"
msgstr "Verschiedenes"
-#: src/etats_config.c:582
+#: ../src/etats_config.c:582
msgid "Data organization"
msgstr "Daten Zusammenstellung"
-#: src/etats_config.c:589 src/etats_config.c:594 src/etats_config.c:6209
+#: ../src/etats_config.c:589 ../src/etats_config.c:594
+#: ../src/etats_config.c:6209
msgid "Data grouping"
msgstr "Daten Gruppierung"
#. choix de ce qu'on utilise dans le classement
-#: src/etats_config.c:599 src/etats_config.c:604 src/etats_config.c:6317
-#: src/etats_config.c:6321
+#: ../src/etats_config.c:599 ../src/etats_config.c:604
+#: ../src/etats_config.c:6317 ../src/etats_config.c:6321
msgid "Data separation"
msgstr "Daten Trennung"
-#: src/etats_config.c:609
+#: ../src/etats_config.c:609
msgid "Data display"
msgstr "Daten Anzeige"
-#: src/etats_config.c:615 src/etats_config.c:618 src/etats_config.c:6524
+#: ../src/etats_config.c:615 ../src/etats_config.c:618
+#: ../src/etats_config.c:6524
msgid "Generalities"
msgstr "Allgemein"
-#: src/etats_config.c:633 src/etats_config.c:636 src/export_csv.c:751
-#: src/fenetre_principale.c:237 src/parametres.c:393
+#: ../src/etats_config.c:633 ../src/etats_config.c:636 ../src/export_csv.c:751
+#: ../src/fenetre_principale.c:237 ../src/parametres.c:393
msgid "Transactions"
msgstr "Buchungen"
#. echange line label
-#: src/etats_config.c:642 src/etats_config.c:645 src/gsb_currency.c:551
-#: src/gsb_currency_config.c:294 src/parametres.c:483
+#: ../src/etats_config.c:642 ../src/etats_config.c:645
+#: ../src/gsb_currency.c:551 ../src/gsb_currency_config.c:294
+#: ../src/parametres.c:483
msgid "Currencies"
msgstr "Währungen"
-#: src/etats_config.c:1317 src/etats_config.c:1326
+#: ../src/etats_config.c:1317 ../src/etats_config.c:1326
msgid ""
"Grisbi can't parse date. For a list of date formats that Grisbi can use, "
"refer to Grisbi manual."
@@ -2083,22 +2106,23 @@ msgstr ""
"Grisbi kann das Datum nicht auswerten. Die gültigen Datumsformate sind im "
"Grisbi Handbuch beschrieben."
-#: src/etats_config.c:1318
+#: ../src/etats_config.c:1318
#, c-format
msgid "Invalid initial date '%s'"
msgstr "Ungültiges Beginndatum '%s'"
-#: src/etats_config.c:1327
+#: ../src/etats_config.c:1327
#, c-format
msgid "Invalid final date '%s'"
msgstr "Ungültiges Enddatum '%s'"
-#: src/etats_config.c:1503 src/etats_config.c:1562 src/etats_config.c:1711
-#: src/etats_config.c