mirror of https://github.com/vitalif/e2fsprogs
Update to gettext 0.11.5. We now enable NLS support by default.
Fixed up support for using the internal intl library.bitmap-optimize
parent
05a27b1d34
commit
a04eba3f88
443
ABOUT-NLS
443
ABOUT-NLS
|
@ -1,22 +1,3 @@
|
||||||
E2fsprogs-specific notes
|
|
||||||
************************
|
|
||||||
|
|
||||||
1) NLS support is not enabled by default. In order to get NLS
|
|
||||||
support, use the --enable-nls option when running configure.
|
|
||||||
|
|
||||||
2) The intl and po directories aren't linked into the main makefile
|
|
||||||
subdirectories.
|
|
||||||
|
|
||||||
3) The documentation for gettext is abysmal. I hope everything is
|
|
||||||
right, but I make no guarantees; the NLS integration is still in
|
|
||||||
testing. (This is why it's disabled by default.)
|
|
||||||
|
|
||||||
4) This ABOUT-NLS file was obtained from ftp.gnu.org in February,
|
|
||||||
2000. Apparently this is the most recent version as of this writing,
|
|
||||||
even though it was apparently last modified in August, 1998.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Notes on the Free Translation Project
|
Notes on the Free Translation Project
|
||||||
*************************************
|
*************************************
|
||||||
|
|
||||||
|
@ -27,7 +8,7 @@ A few packages already provide translations for their messages.
|
||||||
|
|
||||||
If you found this `ABOUT-NLS' file inside a distribution, you may
|
If you found this `ABOUT-NLS' file inside a distribution, you may
|
||||||
assume that the distributed package does use GNU `gettext' internally,
|
assume that the distributed package does use GNU `gettext' internally,
|
||||||
itself available at your nearest GNU archive site. But you do *not*
|
itself available at your nearest GNU archive site. But you do _not_
|
||||||
need to install GNU `gettext' prior to configuring, installing or using
|
need to install GNU `gettext' prior to configuring, installing or using
|
||||||
this package with messages translated.
|
this package with messages translated.
|
||||||
|
|
||||||
|
@ -41,8 +22,8 @@ related to internationalization, you should tell about the version of
|
||||||
`gettext' which is used. The information can be found in the
|
`gettext' which is used. The information can be found in the
|
||||||
`intl/VERSION' file, in internationalized packages.
|
`intl/VERSION' file, in internationalized packages.
|
||||||
|
|
||||||
One piece of advise in advance
|
Quick configuration advice
|
||||||
==============================
|
==========================
|
||||||
|
|
||||||
If you want to exploit the full power of internationalization, you
|
If you want to exploit the full power of internationalization, you
|
||||||
should configure it using
|
should configure it using
|
||||||
|
@ -53,13 +34,14 @@ to force usage of internationalizing routines provided within this
|
||||||
package, despite the existence of internationalizing capabilities in the
|
package, despite the existence of internationalizing capabilities in the
|
||||||
operating system where this package is being installed. So far, only
|
operating system where this package is being installed. So far, only
|
||||||
the `gettext' implementation in the GNU C library version 2 provides as
|
the `gettext' implementation in the GNU C library version 2 provides as
|
||||||
many features (such as locale alias or message inheritance) as the
|
many features (such as locale alias, message inheritance, automatic
|
||||||
implementation here. It is also not possible to offer this additional
|
charset conversion or plural form handling) as the implementation here.
|
||||||
functionality on top of a `catgets' implementation. Future versions of
|
It is also not possible to offer this additional functionality on top
|
||||||
GNU `gettext' will very likely convey even more functionality. So it
|
of a `catgets' implementation. Future versions of GNU `gettext' will
|
||||||
might be a good idea to change to GNU `gettext' as soon as possible.
|
very likely convey even more functionality. So it might be a good idea
|
||||||
|
to change to GNU `gettext' as soon as possible.
|
||||||
|
|
||||||
So you need not provide this option if you are using GNU libc 2 or
|
So you need _not_ provide this option if you are using GNU libc 2 or
|
||||||
you have installed a recent copy of the GNU gettext package with the
|
you have installed a recent copy of the GNU gettext package with the
|
||||||
included `libintl'.
|
included `libintl'.
|
||||||
|
|
||||||
|
@ -72,23 +54,20 @@ Most such packages use GNU `gettext'. Other packages have their own
|
||||||
ways to internationalization, predating GNU `gettext'.
|
ways to internationalization, predating GNU `gettext'.
|
||||||
|
|
||||||
By default, this package will be installed to allow translation of
|
By default, this package will be installed to allow translation of
|
||||||
messages. It will automatically detect whether the system provides
|
messages. It will automatically detect whether the system already
|
||||||
usable `catgets' (if using this is selected by the installer) or
|
provides the GNU `gettext' functions. If not, the GNU `gettext' own
|
||||||
`gettext' functions. If neither is available, the GNU `gettext' own
|
|
||||||
library will be used. This library is wholly contained within this
|
library will be used. This library is wholly contained within this
|
||||||
package, usually in the `intl/' subdirectory, so prior installation of
|
package, usually in the `intl/' subdirectory, so prior installation of
|
||||||
the GNU `gettext' package is *not* required. Installers may use
|
the GNU `gettext' package is _not_ required. Installers may use
|
||||||
special options at configuration time for changing the default
|
special options at configuration time for changing the default
|
||||||
behaviour. The commands:
|
behaviour. The commands:
|
||||||
|
|
||||||
./configure --with-included-gettext
|
./configure --with-included-gettext
|
||||||
./configure --with-catgets
|
|
||||||
./configure --disable-nls
|
./configure --disable-nls
|
||||||
|
|
||||||
will respectively bypass any pre-existing `catgets' or `gettext' to use
|
will respectively bypass any pre-existing `gettext' to use the
|
||||||
the internationalizing routines provided within this package, enable
|
internationalizing routines provided within this package, or else,
|
||||||
the use of the `catgets' functions (if found on the locale system), or
|
_totally_ disable translation of messages.
|
||||||
else, *totally* disable translation of messages.
|
|
||||||
|
|
||||||
When you already have GNU `gettext' installed on your system and run
|
When you already have GNU `gettext' installed on your system and run
|
||||||
configure without an option for your new package, `configure' will
|
configure without an option for your new package, `configure' will
|
||||||
|
@ -102,18 +81,10 @@ package is more recent, you should use
|
||||||
|
|
||||||
to prevent auto-detection.
|
to prevent auto-detection.
|
||||||
|
|
||||||
By default the configuration process will not test for the `catgets'
|
The configuration process will not test for the `catgets' function
|
||||||
function and therefore they will not be used. The reasons are already
|
and therefore it will not be used. The reason is that even an
|
||||||
given above: the emulation on top of `catgets' cannot provide all the
|
emulation of `gettext' on top of `catgets' could not provide all the
|
||||||
extensions provided by the GNU `gettext' library. If you nevertheless
|
extensions of the GNU `gettext' library.
|
||||||
want to use the `catgets' functions use
|
|
||||||
|
|
||||||
./configure --with-catgets
|
|
||||||
|
|
||||||
to enable the test for `catgets' (this causes no harm if `catgets' is
|
|
||||||
not available on your system). If you really select this option we
|
|
||||||
would like to hear about the reasons because we cannot think of any
|
|
||||||
good one ourself.
|
|
||||||
|
|
||||||
Internationalized packages have usually many `po/LL.po' files, where
|
Internationalized packages have usually many `po/LL.po' files, where
|
||||||
LL gives an ISO 639 two-letter code identifying the language. Unless
|
LL gives an ISO 639 two-letter code identifying the language. Unless
|
||||||
|
@ -129,22 +100,42 @@ Using This Package
|
||||||
|
|
||||||
As a user, if your language has been installed for this package, you
|
As a user, if your language has been installed for this package, you
|
||||||
only have to set the `LANG' environment variable to the appropriate
|
only have to set the `LANG' environment variable to the appropriate
|
||||||
ISO 639 `LL' two-letter code prior to using the programs in the
|
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
|
||||||
package. For example, let's suppose that you speak German. At the
|
and `CC' is an ISO 3166 two-letter country code. For example, let's
|
||||||
shell prompt, merely execute `setenv LANG de' (in `csh'),
|
suppose that you speak German and live in Germany. At the shell
|
||||||
`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This
|
prompt, merely execute `setenv LANG de_DE' (in `csh'),
|
||||||
can be done from your `.login' or `.profile' file, once and for all.
|
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
|
||||||
|
This can be done from your `.login' or `.profile' file, once and for
|
||||||
|
all.
|
||||||
|
|
||||||
An operating system might already offer message localization for
|
You might think that the country code specification is redundant.
|
||||||
many of its programs, while other programs have been installed locally
|
But in fact, some languages have dialects in different countries. For
|
||||||
with the full capabilities of GNU `gettext'. Just using `gettext'
|
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
|
||||||
extended syntax for `LANG' would break proper localization of already
|
country code serves to distinguish the dialects.
|
||||||
available operating system programs. In this case, users should set
|
|
||||||
both `LANGUAGE' and `LANG' variables in their environment, as programs
|
The locale naming convention of `LL_CC', with `LL' denoting the
|
||||||
using GNU `gettext' give preference to `LANGUAGE'. For example, some
|
language and `CC' denoting the country, is the one use on systems based
|
||||||
Swedish users would rather read translations in German than English for
|
on GNU libc. On other systems, some variations of this scheme are
|
||||||
when Swedish is not available. This is easily accomplished by setting
|
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
|
||||||
`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
|
locales supported by your system for your country by running the command
|
||||||
|
`locale -a | grep '^LL''.
|
||||||
|
|
||||||
|
Not all programs have translations for all languages. By default, an
|
||||||
|
English message is shown in place of a nonexistent translation. If you
|
||||||
|
understand other languages, you can set up a priority list of languages.
|
||||||
|
This is done through a different environment variable, called
|
||||||
|
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
|
||||||
|
for the purpose of message handling, but you still need to have `LANG'
|
||||||
|
set to the primary language; this is required by other parts of the
|
||||||
|
system libraries. For example, some Swedish users who would rather
|
||||||
|
read translations in German than English for when Swedish is not
|
||||||
|
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
|
||||||
|
|
||||||
|
In the `LANGUAGE' environment variable, but not in the `LANG'
|
||||||
|
environment variable, `LL_CC' combinations can be abbreviated as `LL'
|
||||||
|
to denote the language's main dialect. For example, `de' is equivalent
|
||||||
|
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
|
||||||
|
(Portuguese as spoken in Portugal) in this context.
|
||||||
|
|
||||||
Translating Teams
|
Translating Teams
|
||||||
=================
|
=================
|
||||||
|
@ -152,32 +143,21 @@ Translating Teams
|
||||||
For the Free Translation Project to be a success, we need interested
|
For the Free Translation Project to be a success, we need interested
|
||||||
people who like their own language and write it well, and who are also
|
people who like their own language and write it well, and who are also
|
||||||
able to synergize with other translators speaking the same language.
|
able to synergize with other translators speaking the same language.
|
||||||
Each translation team has its own mailing list, courtesy of Linux
|
Each translation team has its own mailing list. The up-to-date list of
|
||||||
International. You may reach your translation team at the address
|
teams can be found at the Free Translation Project's homepage,
|
||||||
`LL@li.org', replacing LL by the two-letter ISO 639 code for your
|
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
|
||||||
language. Language codes are *not* the same as the country codes given
|
area.
|
||||||
in ISO 3166. The following translation teams exist, as of August 1998:
|
|
||||||
|
|
||||||
Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
|
If you'd like to volunteer to _work_ at translating messages, you
|
||||||
Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
|
|
||||||
`hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
|
|
||||||
Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
|
|
||||||
`pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
|
|
||||||
Swedish `sv', and Turkish `tr'.
|
|
||||||
|
|
||||||
For example, you may reach the Chinese translation team by writing to
|
|
||||||
`zh@li.org'.
|
|
||||||
|
|
||||||
If you'd like to volunteer to *work* at translating messages, you
|
|
||||||
should become a member of the translating team for your own language.
|
should become a member of the translating team for your own language.
|
||||||
The subscribing address is *not* the same as the list itself, it has
|
The subscribing address is _not_ the same as the list itself, it has
|
||||||
`-request' appended. For example, speakers of Swedish can send a
|
`-request' appended. For example, speakers of Swedish can send a
|
||||||
message to `sv-request@li.org', having this message body:
|
message to `sv-request@li.org', having this message body:
|
||||||
|
|
||||||
subscribe
|
subscribe
|
||||||
|
|
||||||
Keep in mind that team members are expected to participate
|
Keep in mind that team members are expected to participate
|
||||||
*actively* in translations, or at solving translational difficulties,
|
_actively_ in translations, or at solving translational difficulties,
|
||||||
rather than merely lurking around. If your team does not exist yet and
|
rather than merely lurking around. If your team does not exist yet and
|
||||||
you want to start one, or if you are unsure about what to do or how to
|
you want to start one, or if you are unsure about what to do or how to
|
||||||
get started, please write to `translation@iro.umontreal.ca' to reach the
|
get started, please write to `translation@iro.umontreal.ca' to reach the
|
||||||
|
@ -192,78 +172,231 @@ Available Packages
|
||||||
|
|
||||||
Languages are not equally supported in all packages. The following
|
Languages are not equally supported in all packages. The following
|
||||||
matrix shows the current state of internationalization, as of August
|
matrix shows the current state of internationalization, as of August
|
||||||
1998. The matrix shows, in regard of each package, for which languages
|
2002. The matrix shows, in regard of each package, for which languages
|
||||||
PO files have been submitted to translation coordination.
|
PO files have been submitted to translation coordination, with a
|
||||||
|
translation percentage of at least 50%.
|
||||||
|
|
||||||
Ready PO files cs da de el en es fi fr it
|
Ready PO files be bg ca cs da de el en eo es et fi fr
|
||||||
.----------------------------.
|
+----------------------------------------+
|
||||||
bash | [] [] |
|
a2ps | [] [] [] [] |
|
||||||
bison | [] [] |
|
ap-utils | |
|
||||||
|
bash | [] [] [] [] |
|
||||||
|
bfd | [] [] |
|
||||||
|
binutils | [] [] |
|
||||||
|
bison | [] [] [] [] |
|
||||||
|
clisp | |
|
||||||
clisp | [] [] [] [] |
|
clisp | [] [] [] [] |
|
||||||
cpio | [] [] [] |
|
clisplow | |
|
||||||
diffutils | [] [] [] |
|
cpio | [] [] [] [] |
|
||||||
enscript | [] [] [] [] |
|
darkstat | () |
|
||||||
fileutils | [] [] [] [] |
|
diffutils | [] [] [] [] [] [] |
|
||||||
findutils | [] [] [] [] |
|
enscript | [] [] |
|
||||||
flex | [] [] |
|
error | [] [] [] |
|
||||||
|
fetchmail | [] () [] [] [] () |
|
||||||
|
fileutils | [] [] [] [] [] |
|
||||||
|
findutils | [] [] [] [] [] [] |
|
||||||
|
flex | [] [] [] [] [] |
|
||||||
|
gas | [] [] |
|
||||||
|
gawk | [] [] [] |
|
||||||
gcal | [] [] |
|
gcal | [] [] |
|
||||||
|
gcc | [] [] |
|
||||||
gettext | [] [] [] [] [] |
|
gettext | [] [] [] [] [] |
|
||||||
grep | [] [] [] [] |
|
gnupg | [] [] [] [] [] [] [] |
|
||||||
hello | [] [] [] [] [] |
|
gprof | [] [] |
|
||||||
|
gpsdrive | () () () () () |
|
||||||
|
grep | [] [] [] [] [] [] [] [] |
|
||||||
|
gretl | [] |
|
||||||
|
gthumb | () () () |
|
||||||
|
hello | [] [] [] [] [] [] [] [] [] |
|
||||||
|
id-utils | [] [] [] |
|
||||||
|
indent | [] [] [] [] [] |
|
||||||
|
jpilot | () [] [] [] |
|
||||||
|
jwhois | [] [] |
|
||||||
|
kbd | [] [] [] |
|
||||||
|
ld | [] [] |
|
||||||
|
libc | [] [] [] [] [] [] [] [] |
|
||||||
|
libiconv | [] [] [] [] |
|
||||||
|
lifelines | () () |
|
||||||
|
lilypond | [] [] |
|
||||||
|
lingoteach | [] [] |
|
||||||
|
lingoteach_lessons| () () |
|
||||||
|
lynx | [] [] [] [] [] |
|
||||||
|
m4 | [] [] [] [] [] |
|
||||||
|
make | [] [] [] [] |
|
||||||
|
man-db | [] () () [] () () |
|
||||||
|
mysecretdiary | [] [] [] |
|
||||||
|
nano | [] () [] [] [] [] |
|
||||||
|
nano_1_0 | [] () [] [] [] [] |
|
||||||
|
opcodes | [] [] [] |
|
||||||
|
parted | [] [] [] [] [] |
|
||||||
|
ptx | [] [] [] [] [] [] [] |
|
||||||
|
python | |
|
||||||
|
recode | [] [] [] [] [] [] |
|
||||||
|
sed | [] [] [] [] [] [] [] [] [] [] |
|
||||||
|
sh-utils | [] [] [] [] |
|
||||||
|
sharutils | [] [] [] [] [] [] [] |
|
||||||
|
sketch | () [] () |
|
||||||
|
soundtracker | [] [] [] |
|
||||||
|
sp | [] |
|
||||||
|
tar | [] [] [] [] [] [] |
|
||||||
|
texinfo | [] [] [] [] [] |
|
||||||
|
textutils | [] [] [] [] [] |
|
||||||
|
util-linux | [] [] [] [] [] [] |
|
||||||
|
vorbis-tools | [] |
|
||||||
|
wastesedge | |
|
||||||
|
wdiff | [] [] [] [] [] [] |
|
||||||
|
wget | [] [] [] [] [] [] [] [] [] [] |
|
||||||
|
+----------------------------------------+
|
||||||
|
be bg ca cs da de el en eo es et fi fr
|
||||||
|
0 2 19 10 30 44 9 1 12 44 17 6 53
|
||||||
|
|
||||||
|
gl he hr hu id it ja ko lv nb nl nn
|
||||||
|
+-------------------------------------+
|
||||||
|
a2ps | () () [] |
|
||||||
|
ap-utils | |
|
||||||
|
bash | [] |
|
||||||
|
bfd | [] |
|
||||||
|
binutils | [] |
|
||||||
|
bison | [] [] [] [] |
|
||||||
|
clisp | |
|
||||||
|
clisp | [] |
|
||||||
|
clisplow | |
|
||||||
|
cpio | [] [] [] [] |
|
||||||
|
darkstat | |
|
||||||
|
diffutils | [] [] [] [] [] |
|
||||||
|
enscript | [] [] |
|
||||||
|
error | [] |
|
||||||
|
fetchmail | [] |
|
||||||
|
fileutils | [] [] [] |
|
||||||
|
findutils | [] [] [] [] [] [] [] [] |
|
||||||
|
flex | [] |
|
||||||
|
gas | |
|
||||||
|
gawk | [] |
|
||||||
|
gcal | |
|
||||||
|
gcc | [] |
|
||||||
|
gettext | [] [] |
|
||||||
|
gnupg | [] [] [] [] |
|
||||||
|
gprof | [] |
|
||||||
|
gpsdrive | [] () () |
|
||||||
|
grep | [] [] [] [] [] [] [] |
|
||||||
|
gretl | |
|
||||||
|
gthumb | () () |
|
||||||
|
hello | [] [] [] [] [] [] [] [] [] [] [] [] |
|
||||||
id-utils | [] [] |
|
id-utils | [] [] |
|
||||||
indent | [] [] |
|
indent | [] [] [] [] |
|
||||||
libc | [] [] [] |
|
jpilot | () () |
|
||||||
m4 | [] [] |
|
jwhois | [] [] |
|
||||||
make | [] [] [] |
|
kbd | |
|
||||||
music | [] |
|
ld | |
|
||||||
ptx | [] [] [] |
|
libc | [] [] [] [] |
|
||||||
recode | [] [] [] [] |
|
libiconv | [] [] [] |
|
||||||
sed | |
|
lifelines | |
|
||||||
|
lilypond | [] |
|
||||||
|
lingoteach | [] |
|
||||||
|
lingoteach_lessons| |
|
||||||
|
lynx | [] [] [] [] |
|
||||||
|
m4 | [] [] [] [] |
|
||||||
|
make | [] [] [] [] [] [] |
|
||||||
|
man-db | () () |
|
||||||
|
mysecretdiary | [] |
|
||||||
|
nano | [] [] [] [] |
|
||||||
|
nano_1_0 | [] [] [] [] [] |
|
||||||
|
opcodes | [] [] |
|
||||||
|
parted | [] [] [] |
|
||||||
|
ptx | [] [] [] [] [] |
|
||||||
|
python | |
|
||||||
|
recode | [] [] [] |
|
||||||
|
sed | [] [] [] [] [] [] [] [] |
|
||||||
sh-utils | [] [] [] |
|
sh-utils | [] [] [] |
|
||||||
sharutils | [] [] [] [] [] |
|
sharutils | [] [] [] |
|
||||||
tar | [] [] [] [] |
|
sketch | () |
|
||||||
|
soundtracker | [] [] |
|
||||||
|
sp | |
|
||||||
|
tar | [] [] [] [] [] [] |
|
||||||
texinfo | [] [] [] |
|
texinfo | [] [] [] |
|
||||||
textutils | [] [] [] [] |
|
textutils | [] [] [] [] |
|
||||||
wdiff | [] [] [] [] |
|
util-linux | () [] |
|
||||||
wget | [] [] [] [] |
|
vorbis-tools | [] |
|
||||||
`----------------------------'
|
wastesedge | |
|
||||||
cs da de el en es fi fr it
|
wdiff | [] [] [] |
|
||||||
7 4 26 4 1 18 1 26 4
|
wget | [] [] [] [] [] [] |
|
||||||
|
+-------------------------------------+
|
||||||
|
gl he hr hu id it ja ko lv nb nl nn
|
||||||
|
23 9 12 19 16 13 26 9 1 7 19 3
|
||||||
|
|
||||||
ja ko nl no pl pt ru sl sv
|
no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW
|
||||||
.----------------------------.
|
+----------------------------------------------+
|
||||||
bash | [] | 3
|
a2ps | () () () [] [] [] [] [] | 10
|
||||||
bison | [] | 3
|
ap-utils | () | 0
|
||||||
clisp | | 4
|
bash | [] | 6
|
||||||
cpio | [] [] [] | 6
|
bfd | [] [] | 5
|
||||||
diffutils | [] [] | 5
|
binutils | [] [] | 5
|
||||||
enscript | [] [] | 6
|
bison | [] [] [] [] | 12
|
||||||
fileutils | [] [] [] [] [] [] [] | 11
|
clisp | | 0
|
||||||
findutils | [] [] [] [] [] | 9
|
clisp | | 5
|
||||||
flex | [] [] | 4
|
clisplow | | 0
|
||||||
gcal | [] [] [] | 5
|
cpio | [] [] [] [] | 12
|
||||||
gettext | [] [] [] [] [] [] [] | 13
|
darkstat | [] [] () () | 2
|
||||||
grep | [] [] [] [] [] [] [] | 11
|
diffutils | [] [] [] [] [] [] | 17
|
||||||
hello | [] [] [] [] [] [] [] | 12
|
enscript | [] [] [] [] | 8
|
||||||
id-utils | [] | 3
|
error | [] [] [] | 7
|
||||||
indent | [] [] [] | 5
|
fetchmail | () () [] | 6
|
||||||
libc | [] [] [] [] [] | 8
|
fileutils | [] [] [] [] [] [] | 14
|
||||||
m4 | [] [] [] [] | 6
|
findutils | [] [] [] [] [] [] [] | 21
|
||||||
make | [] [] [] | 6
|
flex | [] [] [] | 9
|
||||||
music | [] | 2
|
gas | [] | 3
|
||||||
ptx | [] [] [] [] [] | 8
|
gawk | [] [] | 6
|
||||||
recode | [] [] [] [] [] | 9
|
gcal | [] [] | 4
|
||||||
sed | | 0
|
gcc | [] | 4
|
||||||
sh-utils | [] [] [] [] [] | 8
|
gettext | [] [] [] [] [] [] | 13
|
||||||
sharutils | [] [] | 7
|
gnupg | [] [] [] | 14
|
||||||
tar | [] [] [] [] [] [] [] | 11
|
gprof | [] [] | 5
|
||||||
texinfo | [] | 4
|
gpsdrive | [] [] | 3
|
||||||
textutils | [] [] [] [] [] | 9
|
grep | [] [] [] [] [] | 20
|
||||||
wdiff | [] [] [] [] | 8
|
gretl | | 1
|
||||||
wget | [] | 5
|
gthumb | () () [] | 1
|
||||||
`----------------------------'
|
hello | [] [] [] [] [] [] [] | 28
|
||||||
18 teams ja ko nl no pl pt ru sl sv
|
id-utils | [] [] [] [] | 9
|
||||||
29 domains 1 12 21 11 19 7 5 7 17 191
|
indent | [] [] [] [] [] | 14
|
||||||
|
jpilot | () () [] [] | 5
|
||||||
|
jwhois | [] () () [] [] | 7
|
||||||
|
kbd | [] [] | 5
|
||||||
|
ld | [] [] | 4
|
||||||
|
libc | [] [] [] [] [] [] | 18
|
||||||
|
libiconv | [] [] [] [] [] | 12
|
||||||
|
lifelines | [] | 1
|
||||||
|
lilypond | [] | 4
|
||||||
|
lingoteach | [] [] | 5
|
||||||
|
lingoteach_lessons| () | 0
|
||||||
|
lynx | [] [] [] [] | 13
|
||||||
|
m4 | [] [] [] [] | 13
|
||||||
|
make | [] [] [] [] [] | 15
|
||||||
|
man-db | | 3
|
||||||
|
mysecretdiary | [] [] [] | 7
|
||||||
|
nano | [] [] [] [] | 13
|
||||||
|
nano_1_0 | [] [] [] [] | 14
|
||||||
|
opcodes | [] [] [] | 8
|
||||||
|
parted | [] [] [] [] | 12
|
||||||
|
ptx | [] [] [] [] [] [] [] | 19
|
||||||
|
python | | 0
|
||||||
|
recode | [] [] [] [] [] [] | 15
|
||||||
|
sed | [] [] [] [] [] [] | 24
|
||||||
|
sh-utils | [] [] | 9
|
||||||
|
sharutils | [] [] [] [] | 14
|
||||||
|
sketch | [] () [] | 4
|
||||||
|
soundtracker | [] | 6
|
||||||
|
sp | | 1
|
||||||
|
tar | [] [] [] [] [] [] [] | 19
|
||||||
|
texinfo | [] [] | 10
|
||||||
|
textutils | [] [] [] [] [] | 14
|
||||||
|
util-linux | [] [] [] | 10
|
||||||
|
vorbis-tools | [] | 3
|
||||||
|
wastesedge | | 0
|
||||||
|
wdiff | [] [] [] [] [] | 14
|
||||||
|
wget | [] [] [] [] [] [] [] [] | 24
|
||||||
|
+----------------------------------------------+
|
||||||
|
37 teams no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW
|
||||||
|
68 domains 4 15 2 28 28 12 10 49 43 4 1 9 609
|
||||||
|
|
||||||
Some counters in the preceding matrix are higher than the number of
|
Some counters in the preceding matrix are higher than the number of
|
||||||
visible blocks let us expect. This is because a few extra PO files are
|
visible blocks let us expect. This is because a few extra PO files are
|
||||||
|
@ -276,21 +409,25 @@ distributed as such by its maintainer. There might be an observable
|
||||||
lag between the mere existence a PO file and its wide availability in a
|
lag between the mere existence a PO file and its wide availability in a
|
||||||
distribution.
|
distribution.
|
||||||
|
|
||||||
If August 1998 seems to be old, you may fetch a more recent copy of
|
If August 2002 seems to be old, you may fetch a more recent copy of
|
||||||
this `ABOUT-NLS' file on most GNU archive sites.
|
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
|
||||||
|
matrix with full percentage details can be found at
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
|
||||||
|
|
||||||
Using `gettext' in new packages
|
Using `gettext' in new packages
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
If you are writing a freely available program and want to
|
If you are writing a freely available program and want to
|
||||||
internationalize it you are welcome to use GNU `gettext' in your
|
internationalize it you are welcome to use GNU `gettext' in your
|
||||||
package. Of course the GNU Public License applies to your sources from
|
package. Of course you have to respect the GNU Library General Public
|
||||||
then if you include `gettext' directly in your distribution on but
|
License which covers the use of the GNU `gettext' library. This means
|
||||||
since you are writing free software anyway this is no restriction.
|
in particular that even non-free programs can use `libintl' as a shared
|
||||||
|
library, whereas only free software can use `libintl' as a static
|
||||||
|
library or use modified versions of `libintl'.
|
||||||
|
|
||||||
Once the sources are change appropriately and the setup can handle to
|
Once the sources are changed appropriately and the setup can handle
|
||||||
use of `gettext' the only thing missing are the translations. The Free
|
to use of `gettext' the only thing missing are the translations. The
|
||||||
Translation Project is also available for packages which are not
|
Free Translation Project is also available for packages which are not
|
||||||
developed inside the GNU project. Therefore the information given above
|
developed inside the GNU project. Therefore the information given above
|
||||||
applies also for every other Free Software Project. Contact
|
applies also for every other Free Software Project. Contact
|
||||||
`translation@iro.umontreal.ca' to make the `.pot' files available to
|
`translation@iro.umontreal.ca' to make the `.pot' files available to
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2003-05-03 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
|
* ABOUT-NLS, MCONFIG.in, Makefile.in, aclocal.m4, configure,
|
||||||
|
configure.in: Update to using version 0.11.5 of the
|
||||||
|
gettext library. We now enable NLS by default.
|
||||||
|
|
||||||
2003-04-21 Theodore Ts'o <tytso@mit.edu>
|
2003-04-21 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
* Release of E2fsprogs 1.33
|
* Release of E2fsprogs 1.33
|
||||||
|
|
|
@ -18,6 +18,7 @@ bindir = @bindir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
datadir= @datadir@
|
datadir= @datadir@
|
||||||
|
localedir = $(datadir)/locale
|
||||||
root_sysconfdir= @root_sysconfdir@
|
root_sysconfdir= @root_sysconfdir@
|
||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
|
@ -33,10 +34,11 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
BUILD_CC = @BUILD_CC@
|
BUILD_CC = @BUILD_CC@
|
||||||
DEFS = @DEFS@
|
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
ALL_CFLAGS = $(CPPFLAGS) $(DEFS) $(USE_WFLAGS) $(CFLAGS) $(XTRA_CFLAGS) \
|
ALL_CFLAGS = $(CPPFLAGS) $(DEFS) $(USE_WFLAGS) $(CFLAGS) $(XTRA_CFLAGS) \
|
||||||
|
-I$(top_builddir)/intl -I$(top_srcdir)/intl \
|
||||||
-I$(top_builddir)/lib -I$(top_srcdir)/lib $(LINUX_INCLUDE)
|
-I$(top_builddir)/lib -I$(top_srcdir)/lib $(LINUX_INCLUDE)
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
ALL_LDFLAGS = $(LDFLAGS)
|
ALL_LDFLAGS = $(LDFLAGS)
|
||||||
|
@ -66,6 +68,7 @@ LIBE2P = $(LIB)/libe2p@LIB_EXT@
|
||||||
LIBEXT2FS = $(LIB)/libext2fs@LIB_EXT@
|
LIBEXT2FS = $(LIB)/libext2fs@LIB_EXT@
|
||||||
LIBUUID = $(LIB)/libuuid@LIB_EXT@ @SOCKET_LIB@
|
LIBUUID = $(LIB)/libuuid@LIB_EXT@ @SOCKET_LIB@
|
||||||
LIBBLKID = $(LIB)/libblkid@LIB_EXT@
|
LIBBLKID = $(LIB)/libblkid@LIB_EXT@
|
||||||
|
LIBINTL = @LIBINTL@
|
||||||
DEPLIBUUID = $(LIB)/libuuid@LIB_EXT@
|
DEPLIBUUID = $(LIB)/libuuid@LIB_EXT@
|
||||||
|
|
||||||
STATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@
|
STATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@
|
||||||
|
|
|
@ -11,7 +11,7 @@ INSTALL = @INSTALL@
|
||||||
@DEBUGFS_CMT@DEBUGFS_DIR= debugfs
|
@DEBUGFS_CMT@DEBUGFS_DIR= debugfs
|
||||||
@LINUX_CMT@EVMS_DIR= lib/evms
|
@LINUX_CMT@EVMS_DIR= lib/evms
|
||||||
|
|
||||||
LIB_SUBDIRS=lib/et lib/ss lib/e2p lib/ext2fs lib/uuid lib/blkid
|
LIB_SUBDIRS=lib/et lib/ss lib/e2p lib/ext2fs lib/uuid lib/blkid intl
|
||||||
PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs $(EVMS_DIR)
|
PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs $(EVMS_DIR)
|
||||||
SUBDIRS=util $(LIB_SUBDIRS) $(PROG_SUBDIRS) tests
|
SUBDIRS=util $(LIB_SUBDIRS) $(PROG_SUBDIRS) tests
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,513 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Output a system dependent set of variables, describing how to set the
|
||||||
|
# run time search path of shared libraries in an executable.
|
||||||
|
#
|
||||||
|
# Copyright 1996-2002 Free Software Foundation, Inc.
|
||||||
|
# Taken from GNU libtool, 2001
|
||||||
|
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
#
|
||||||
|
# The first argument passed to this file is the canonical host specification,
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||||
|
# or
|
||||||
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
|
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
|
||||||
|
# should be set by the caller.
|
||||||
|
#
|
||||||
|
# The set of defined variables is at the end of this script.
|
||||||
|
|
||||||
|
# All known linkers require a `.a' archive for static linking (except M$VC,
|
||||||
|
# which needs '.lib').
|
||||||
|
libext=a
|
||||||
|
shlibext=
|
||||||
|
|
||||||
|
host="$1"
|
||||||
|
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
||||||
|
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
||||||
|
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
||||||
|
|
||||||
|
wl=
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
wl='-Wl,'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix3* | aix4* | aix5*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
irix5* | irix6*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
linux*)
|
||||||
|
echo '__INTEL_COMPILER' > conftest.$ac_ext
|
||||||
|
if $CC -E conftest.$ac_ext >/dev/null | grep __INTEL_COMPILER >/dev/null
|
||||||
|
then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
# Intel icc
|
||||||
|
wl='-Qoption,ld,'
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
wl='-Qoption ld '
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
|
||||||
|
if test "x$host_vendor" = xsni; then
|
||||||
|
wl='-LD'
|
||||||
|
else
|
||||||
|
wl='-Wl,'
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_minus_L=no
|
||||||
|
|
||||||
|
case "$host_os" in
|
||||||
|
cygwin* | mingw* | pw32*)
|
||||||
|
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
if test "$GCC" != yes; then
|
||||||
|
with_gnu_ld=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
with_gnu_ld=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ld_shlibs=yes
|
||||||
|
if test "$with_gnu_ld" = yes; then
|
||||||
|
case "$host_os" in
|
||||||
|
aix3* | aix4* | aix5*)
|
||||||
|
# On AIX, the GNU linker is very broken
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
|
||||||
|
# that the semantics of dynamic libraries on AmigaOS, at least up
|
||||||
|
# to version 4, is to share data among multiple programs linked
|
||||||
|
# with the same dynamic library. Since this doesn't match the
|
||||||
|
# behavior of shared libraries on other platforms, we can use
|
||||||
|
# them.
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32*)
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
solaris* | sysv5*)
|
||||||
|
if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
|
||||||
|
ld_shlibs=no
|
||||||
|
elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if test "$ld_shlibs" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
# Note: this linker hardcodes the directories in LIBPATH if there
|
||||||
|
# are no directories specified by -L.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
# Neither direct hardcoding nor static linking is supported with a
|
||||||
|
# broken collect2.
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
aix4* | aix5*)
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
# On IA64, the linker does run time linking by default, so we don't
|
||||||
|
# have to do anything special.
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
else
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
# Test if we are trying to use run time linking or normal
|
||||||
|
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
|
||||||
|
# need to do runtime linking.
|
||||||
|
case $host_os in aix4.[23]|aix4.[23].*|aix5*)
|
||||||
|
for ld_flag in $LDFLAGS; do
|
||||||
|
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
|
||||||
|
aix_use_runtimelinking=yes
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_separator=':'
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
case $host_os in aix4.[012]|aix4.[012].*)
|
||||||
|
collect2name=`${CC} -print-prog-name=collect2`
|
||||||
|
if test -f "$collect2name" && \
|
||||||
|
strings "$collect2name" | grep resolve_lib_name >/dev/null
|
||||||
|
then
|
||||||
|
# We have reworked collect2
|
||||||
|
hardcode_direct=yes
|
||||||
|
else
|
||||||
|
# We have old collect2
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
fi
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if test "$aix_use_runtimelinking" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
|
||||||
|
else
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
||||||
|
else
|
||||||
|
hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
# see comment about different semantics on the GNU ld section
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32*)
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec=' '
|
||||||
|
libext=lib
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
freebsd1*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
freebsd2.2*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
freebsd2*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
freebsd*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes # Not in the search PATH, but as the default
|
||||||
|
# location of the library.
|
||||||
|
;;
|
||||||
|
irix5* | irix6*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
osf3*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
osf4* | osf5*)
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
else
|
||||||
|
# Both cc and cxx compiler support -rpath directly
|
||||||
|
hardcode_libdir_flag_spec='-rpath $libdir'
|
||||||
|
fi
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
sco3.2v5*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
sysv4)
|
||||||
|
if test "x$host_vendor" = xsno; then
|
||||||
|
hardcode_direct=yes # is this really true???
|
||||||
|
else
|
||||||
|
hardcode_direct=no # Motorola manual says yes, but my tests say they lie
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv4.3*)
|
||||||
|
;;
|
||||||
|
sysv5*)
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
if test -d /usr/nec; then
|
||||||
|
ld_shlibs=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv4.2uw2*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=no
|
||||||
|
;;
|
||||||
|
sysv5uw7* | unixware7*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check dynamic linker characteristics
|
||||||
|
libname_spec='lib$name'
|
||||||
|
sys_lib_dlsearch_path_spec="/lib /usr/lib"
|
||||||
|
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
aix4* | aix5*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
shlibext=ixlibrary
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
bsdi4*)
|
||||||
|
shlibext=so
|
||||||
|
sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
|
||||||
|
sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32*)
|
||||||
|
case $GCC,$host_os in
|
||||||
|
yes,cygwin*)
|
||||||
|
shlibext=dll.a
|
||||||
|
;;
|
||||||
|
yes,mingw*)
|
||||||
|
shlibext=dll
|
||||||
|
sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
|
||||||
|
;;
|
||||||
|
yes,pw32*)
|
||||||
|
shlibext=dll
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
shlibext=dll
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
shlibext=dylib
|
||||||
|
;;
|
||||||
|
freebsd1*)
|
||||||
|
;;
|
||||||
|
freebsd*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
gnu*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
shlibext=sl
|
||||||
|
;;
|
||||||
|
irix5* | irix6*)
|
||||||
|
shlibext=so
|
||||||
|
case "$host_os" in
|
||||||
|
irix5*)
|
||||||
|
libsuff= shlibsuff=
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case $LD in
|
||||||
|
*-32|*"-32 ") libsuff= shlibsuff= ;;
|
||||||
|
*-n32|*"-n32 ") libsuff=32 shlibsuff=N32 ;;
|
||||||
|
*-64|*"-64 ") libsuff=64 shlibsuff=64 ;;
|
||||||
|
*) libsuff= shlibsuff= ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
|
||||||
|
sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
|
||||||
|
;;
|
||||||
|
linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
|
||||||
|
;;
|
||||||
|
linux-gnu*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
libname_spec='$name'
|
||||||
|
shlibext=dll
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
shlibext=so
|
||||||
|
sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
|
||||||
|
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
|
||||||
|
;;
|
||||||
|
sco3.2v5*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
|
||||||
|
shlibext=so
|
||||||
|
case "$host_vendor" in
|
||||||
|
motorola)
|
||||||
|
sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
shlibext=so
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
if test -d /usr/nec; then
|
||||||
|
shlibext=so
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
||||||
|
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_sys_lib_search_path_spec=`echo "X$sys_lib_search_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_sys_lib_dlsearch_path_spec=`echo "X$sys_lib_dlsearch_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
|
||||||
|
sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
|
||||||
|
|
||||||
|
# How to pass a linker flag through the compiler.
|
||||||
|
wl="$escaped_wl"
|
||||||
|
|
||||||
|
# Static library suffix (normally "a").
|
||||||
|
libext="$libext"
|
||||||
|
|
||||||
|
# Shared library suffix (normally "so").
|
||||||
|
shlibext="$shlibext"
|
||||||
|
|
||||||
|
# Flag to hardcode \$libdir into a binary during linking.
|
||||||
|
# This must work even if \$libdir does not exist.
|
||||||
|
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
|
||||||
|
|
||||||
|
# Whether we need a single -rpath flag with a separated argument.
|
||||||
|
hardcode_libdir_separator="$hardcode_libdir_separator"
|
||||||
|
|
||||||
|
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_direct="$hardcode_direct"
|
||||||
|
|
||||||
|
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_minus_L="$hardcode_minus_L"
|
||||||
|
|
||||||
|
# Compile-time system search path for libraries
|
||||||
|
sys_lib_search_path_spec="$escaped_sys_lib_search_path_spec"
|
||||||
|
|
||||||
|
# Run-time system search path for libraries
|
||||||
|
sys_lib_dlsearch_path_spec="$escaped_sys_lib_dlsearch_path_spec"
|
||||||
|
|
||||||
|
EOF
|
|
@ -503,7 +503,6 @@ AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
|
||||||
AC_SUBST(PACKAGE)
|
AC_SUBST(PACKAGE)
|
||||||
AC_SUBST(VERSION)
|
AC_SUBST(VERSION)
|
||||||
|
|
||||||
ALL_LINGUAS="it nyc tr de de-utf"
|
|
||||||
AM_GNU_GETTEXT
|
AM_GNU_GETTEXT
|
||||||
dnl
|
dnl
|
||||||
dnl End of configuration options
|
dnl End of configuration options
|
||||||
|
@ -641,7 +640,7 @@ if test "$e2fsprogs_cv_struct_st_flags" = yes; then
|
||||||
AC_DEFINE(HAVE_STAT_FLAGS)
|
AC_DEFINE(HAVE_STAT_FLAGS)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 getmntinfo strtoull strcasecmp srandom fchown mallinfo fdatasync strnlen sysconf pathconf)
|
AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 getmntinfo strtoull strcasecmp srandom fchown mallinfo fdatasync strnlen strptime sysconf pathconf)
|
||||||
dnl
|
dnl
|
||||||
dnl Check to see if -lsocket is required (solaris) to make something
|
dnl Check to see if -lsocket is required (solaris) to make something
|
||||||
dnl that uses socket() to compile; this is needed for the UUID library
|
dnl that uses socket() to compile; this is needed for the UUID library
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2003-05-03 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
|
* Makefile.in: Add $(LIBINTL) to the link line so we can support
|
||||||
|
using the internal gettext library.
|
||||||
|
|
||||||
|
* e2fsck.h: Add #ifndef protection around LOCALEDIR definition.
|
||||||
|
|
||||||
2003-04-27 Theodore Ts'o <tytso@mit.edu>
|
2003-04-27 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
* message.c (expand_at_expression): Fixed NLS support for message
|
* message.c (expand_at_expression): Fixed NLS support for message
|
||||||
|
|
|
@ -16,16 +16,16 @@ PROGS= e2fsck
|
||||||
MANPAGES= e2fsck.8
|
MANPAGES= e2fsck.8
|
||||||
XTRA_CFLAGS= -DRESOURCE_TRACK
|
XTRA_CFLAGS= -DRESOURCE_TRACK
|
||||||
|
|
||||||
LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(LIBUUID)
|
LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(LIBUUID) $(LIBINTL)
|
||||||
DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(DEPLIBUUID)
|
DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(DEPLIBUUID)
|
||||||
|
|
||||||
STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) \
|
STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) \
|
||||||
$(STATIC_LIBUUID)
|
$(STATIC_LIBUUID) $(LIBINTL)
|
||||||
STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) \
|
STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) \
|
||||||
$(DEPSTATIC_LIBUUID)
|
$(DEPSTATIC_LIBUUID)
|
||||||
|
|
||||||
PROFILED_LIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \
|
PROFILED_LIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \
|
||||||
$(PROFILED_BLKID) $(PROFILED_LIBUUID)
|
$(PROFILED_BLKID) $(PROFILED_LIBUUID) $(LIBINTL)
|
||||||
PROFILED_DEPLIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \
|
PROFILED_DEPLIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \
|
||||||
$(PROFILED_BLKID) $(DEPPROFILED_LIBUUID)
|
$(PROFILED_BLKID) $(DEPPROFILED_LIBUUID)
|
||||||
|
|
||||||
|
|
|
@ -42,10 +42,12 @@
|
||||||
#else
|
#else
|
||||||
#define N_(a) (a)
|
#define N_(a) (a)
|
||||||
#endif
|
#endif
|
||||||
/* FIXME */
|
#ifndef NLS_CAT_NAME
|
||||||
#define NLS_CAT_NAME "e2fsprogs"
|
#define NLS_CAT_NAME "e2fsprogs"
|
||||||
|
#endif
|
||||||
|
#ifndef LOCALEDIR
|
||||||
#define LOCALEDIR "/usr/share/locale"
|
#define LOCALEDIR "/usr/share/locale"
|
||||||
/* FIXME */
|
#endif
|
||||||
#else
|
#else
|
||||||
#define _(a) (a)
|
#define _(a) (a)
|
||||||
#define N_(a) a
|
#define N_(a) a
|
||||||
|
|
1090
intl/ChangeLog
1090
intl/ChangeLog
File diff suppressed because it is too large
Load Diff
283
intl/Makefile.in
283
intl/Makefile.in
|
@ -1,19 +1,20 @@
|
||||||
# Makefile for directory with message catalog handling in GNU NLS Utilities.
|
# Makefile for directory with message catalog handling in GNU NLS Utilities.
|
||||||
# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
# Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
# it under the terms of the GNU General Public License as published by
|
# under the terms of the GNU Library General Public License as published
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
# by the Free Software Foundation; either version 2, or (at your option)
|
||||||
# any later version.
|
# any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# GNU General Public License for more details.
|
# Library General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU Library General Public
|
||||||
# along with this program; if not, write to the Free Software
|
# License along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
# USA.
|
||||||
|
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
|
@ -28,75 +29,107 @@ VPATH = @srcdir@
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
exec_prefix = @exec_prefix@
|
exec_prefix = @exec_prefix@
|
||||||
transform = @program_transform_name@
|
transform = @program_transform_name@
|
||||||
libdir = $(exec_prefix)/lib
|
libdir = @libdir@
|
||||||
includedir = $(prefix)/include
|
includedir = @includedir@
|
||||||
datadir = $(prefix)/@DATADIRNAME@
|
datadir = @datadir@
|
||||||
localedir = $(datadir)/locale
|
localedir = $(datadir)/locale
|
||||||
gnulocaledir = $(prefix)/share/locale
|
gettextsrcdir = $(datadir)/gettext/intl
|
||||||
gettextsrcdir = @datadir@/gettext/intl
|
aliaspath = $(localedir)
|
||||||
aliaspath = $(localedir):.
|
|
||||||
subdir = intl
|
subdir = intl
|
||||||
|
|
||||||
INSTALL = @INSTALL@
|
INSTALL = @INSTALL@
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||||
|
mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
|
||||||
|
|
||||||
l = @l@
|
l = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||||
|
|
||||||
AR = ar
|
AR = ar
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
LIBTOOL = @LIBTOOL@
|
LIBTOOL = @LIBTOOL@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
|
YACC = @INTLBISON@ -y -d
|
||||||
|
YFLAGS = --name-prefix=__gettext
|
||||||
|
|
||||||
DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
|
DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
|
||||||
-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
|
-DLIBDIR=\"$(libdir)\" -DIN_LIBINTL @DEFS@
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
|
|
||||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
||||||
|
|
||||||
HEADERS = $(COMHDRS) libgettext.h loadinfo.h
|
HEADERS = $(COMHDRS) libgnuintl.h loadinfo.h
|
||||||
COMHDRS = gettext.h gettextP.h hash-string.h
|
COMHDRS = gmo.h gettextP.h hash-string.h plural-exp.h eval-plural.h os2compat.h
|
||||||
SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
|
SOURCES = $(COMSRCS) intl-compat.c
|
||||||
COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
|
COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
|
||||||
finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
|
finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
|
||||||
explodename.c
|
explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
|
||||||
|
plural-exp.c localcharset.c localename.c osdep.c os2compat.c
|
||||||
OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
|
OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
|
||||||
finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
|
finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
|
||||||
explodename.$lo
|
explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
|
||||||
CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
|
plural.$lo plural-exp.$lo localcharset.$lo localename.$lo osdep.$lo
|
||||||
GETTOBJS = intl-compat.$lo
|
GETTOBJS = intl-compat.$lo
|
||||||
DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
|
DISTFILES.common = Makefile.in \
|
||||||
xopen-msg.sed $(HEADERS) $(SOURCES)
|
config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
|
||||||
|
DISTFILES.generated = plural.c
|
||||||
DISTFILES.normal = VERSION
|
DISTFILES.normal = VERSION
|
||||||
DISTFILES.gettext = libintl.glibc intlh.inst.in
|
DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc
|
||||||
|
DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
|
||||||
|
COPYING.LIB-2 gettext.h libgettext.h plural-eval.c
|
||||||
|
|
||||||
|
# Libtool's library version information for libintl.
|
||||||
|
# Before making a gettext release, the gettext maintainer must change this
|
||||||
|
# according to the libtool documentation, section "Library interface versions".
|
||||||
|
# Maintainers of other packages that include the intl directory must *not*
|
||||||
|
# change these values.
|
||||||
|
LTV_CURRENT=4
|
||||||
|
LTV_REVISION=0
|
||||||
|
LTV_AGE=2
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .c .o .lo
|
.SUFFIXES: .c .y .o .lo .sin .sed
|
||||||
.c.o:
|
.c.o:
|
||||||
$(COMPILE) $<
|
$(COMPILE) $<
|
||||||
.c.lo:
|
.c.lo:
|
||||||
$(LIBTOOL) --mode=compile $(COMPILE) $<
|
$(LIBTOOL) --mode=compile $(COMPILE) $<
|
||||||
|
|
||||||
INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
|
.y.c:
|
||||||
|
$(YACC) $(YFLAGS) --output $@ $<
|
||||||
|
rm -f $*.h
|
||||||
|
|
||||||
|
.sin.sed:
|
||||||
|
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
|
||||||
|
mv t-$@ $@
|
||||||
|
|
||||||
|
INCLUDES = -I.. -I. -I$(top_srcdir)/intl
|
||||||
|
|
||||||
all: all-@USE_INCLUDED_LIBINTL@
|
all: all-@USE_INCLUDED_LIBINTL@
|
||||||
|
all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
|
||||||
|
all-no: all-no-@BUILD_INCLUDED_LIBINTL@
|
||||||
|
all-no-yes: libgnuintl.$la
|
||||||
|
all-no-no:
|
||||||
|
|
||||||
all-yes: libintl.$la intlh.inst
|
libintl.a libgnuintl.a: $(OBJECTS)
|
||||||
all-no:
|
|
||||||
|
|
||||||
libintl.a: $(OBJECTS)
|
|
||||||
rm -f $@
|
rm -f $@
|
||||||
$(AR) cru $@ $(OBJECTS)
|
$(AR) cru $@ $(OBJECTS)
|
||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
libintl.la: $(OBJECTS)
|
libintl.la libgnuintl.la: $(OBJECTS)
|
||||||
$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
|
$(LIBTOOL) --mode=link \
|
||||||
-version-info 1:0 -rpath $(libdir)
|
$(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
|
||||||
|
$(OBJECTS) @LTLIBICONV@ -lc \
|
||||||
|
-version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
|
||||||
|
-rpath $(libdir) \
|
||||||
|
-no-undefined
|
||||||
|
|
||||||
../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
|
libintl.h: libgnuintl.h
|
||||||
cd ../po && $(MAKE) cat-id-tbl.$lo
|
cp $(srcdir)/libgnuintl.h libintl.h
|
||||||
|
|
||||||
|
charset.alias: config.charset
|
||||||
|
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
|
||||||
|
mv t-$@ $@
|
||||||
|
|
||||||
check: all
|
check: all
|
||||||
|
|
||||||
|
@ -104,37 +137,92 @@ check: all
|
||||||
# only use the library should use install instead.
|
# only use the library should use install instead.
|
||||||
|
|
||||||
# We must not install the libintl.h/libintl.a files if we are on a
|
# We must not install the libintl.h/libintl.a files if we are on a
|
||||||
# system which has the gettext() function in its C library or in a
|
# system which has the GNU gettext() function in its C library or in a
|
||||||
# separate library or use the catgets interface. A special case is
|
# separate library.
|
||||||
# where configure found a previously installed GNU gettext library.
|
|
||||||
# If you want to use the one which comes with this version of the
|
# If you want to use the one which comes with this version of the
|
||||||
# package, you have to use `configure --with-included-gettext'.
|
# package, you have to use `configure --with-included-gettext'.
|
||||||
install: install-exec install-data
|
install: install-exec install-data
|
||||||
install-exec: all
|
install-exec: all
|
||||||
if test "$(PACKAGE)" = "gettext" \
|
if test "$(PACKAGE)" = "gettext" \
|
||||||
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
||||||
if test -r $(MKINSTALLDIRS); then \
|
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
|
||||||
$(MKINSTALLDIRS) $(libdir) $(includedir); \
|
$(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
|
||||||
|
$(LIBTOOL) --mode=install \
|
||||||
|
$(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
|
||||||
else \
|
else \
|
||||||
$(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
|
: ; \
|
||||||
|
fi
|
||||||
|
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
|
test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
|
||||||
|
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
||||||
|
dest=$(DESTDIR)$(libdir)/charset.alias; \
|
||||||
|
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
||||||
|
orig=$(DESTDIR)$(libdir)/charset.alias; \
|
||||||
|
sed -f ref-add.sed $$orig > $$temp; \
|
||||||
|
$(INSTALL_DATA) $$temp $$dest; \
|
||||||
|
rm -f $$temp; \
|
||||||
|
else \
|
||||||
|
if test @GLIBC21@ = no; then \
|
||||||
|
orig=charset.alias; \
|
||||||
|
sed -f ref-add.sed $$orig > $$temp; \
|
||||||
|
$(INSTALL_DATA) $$temp $$dest; \
|
||||||
|
rm -f $$temp; \
|
||||||
fi; \
|
fi; \
|
||||||
$(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
|
fi; \
|
||||||
$(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
|
$(mkinstalldirs) $(DESTDIR)$(localedir); \
|
||||||
|
test -f $(DESTDIR)$(localedir)/locale.alias \
|
||||||
|
&& orig=$(DESTDIR)$(localedir)/locale.alias \
|
||||||
|
|| orig=$(srcdir)/locale.alias; \
|
||||||
|
temp=$(DESTDIR)$(localedir)/t-locale.alias; \
|
||||||
|
dest=$(DESTDIR)$(localedir)/locale.alias; \
|
||||||
|
sed -f ref-add.sed $$orig > $$temp; \
|
||||||
|
$(INSTALL_DATA) $$temp $$dest; \
|
||||||
|
rm -f $$temp; \
|
||||||
else \
|
else \
|
||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
install-data: all
|
install-data: all
|
||||||
if test "$(PACKAGE)" = "gettext"; then \
|
if test "$(PACKAGE)" = "gettext"; then \
|
||||||
if test -r $(MKINSTALLDIRS); then \
|
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
||||||
$(MKINSTALLDIRS) $(gettextsrcdir); \
|
$(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
|
||||||
else \
|
$(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
|
||||||
$(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
|
dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \
|
||||||
fi; \
|
|
||||||
$(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
|
|
||||||
dists="$(DISTFILES.common)"; \
|
|
||||||
for file in $$dists; do \
|
for file in $$dists; do \
|
||||||
$(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
|
$(INSTALL_DATA) $(srcdir)/$$file \
|
||||||
|
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||||
done; \
|
done; \
|
||||||
|
chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
|
||||||
|
dists="$(DISTFILES.generated)"; \
|
||||||
|
for file in $$dists; do \
|
||||||
|
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
|
||||||
|
$(INSTALL_DATA) $$dir/$$file \
|
||||||
|
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||||
|
done; \
|
||||||
|
dists="$(DISTFILES.obsolete)"; \
|
||||||
|
for file in $$dists; do \
|
||||||
|
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||||
|
done; \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
install-strip: install
|
||||||
|
|
||||||
|
installdirs:
|
||||||
|
if test "$(PACKAGE)" = "gettext" \
|
||||||
|
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
|
test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(localedir); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
if test "$(PACKAGE)" = "gettext"; then \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
||||||
else \
|
else \
|
||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
|
@ -143,16 +231,56 @@ install-data: all
|
||||||
installcheck:
|
installcheck:
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
dists="$(DISTFILES.common)"; \
|
if test "$(PACKAGE)" = "gettext" \
|
||||||
for file in $$dists; do \
|
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
||||||
rm -f $(gettextsrcdir)/$$file; \
|
rm -f $(DESTDIR)$(includedir)/libintl.h; \
|
||||||
done
|
$(LIBTOOL) --mode=uninstall \
|
||||||
|
rm -f $(DESTDIR)$(libdir)/libintl.$la; \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
|
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
||||||
|
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
||||||
|
dest=$(DESTDIR)$(libdir)/charset.alias; \
|
||||||
|
sed -f ref-del.sed $$dest > $$temp; \
|
||||||
|
if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
|
||||||
|
rm -f $$dest; \
|
||||||
|
else \
|
||||||
|
$(INSTALL_DATA) $$temp $$dest; \
|
||||||
|
fi; \
|
||||||
|
rm -f $$temp; \
|
||||||
|
fi; \
|
||||||
|
if test -f $(DESTDIR)$(localedir)/locale.alias; then \
|
||||||
|
temp=$(DESTDIR)$(localedir)/t-locale.alias; \
|
||||||
|
dest=$(DESTDIR)$(localedir)/locale.alias; \
|
||||||
|
sed -f ref-del.sed $$dest > $$temp; \
|
||||||
|
if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
|
||||||
|
rm -f $$dest; \
|
||||||
|
else \
|
||||||
|
$(INSTALL_DATA) $$temp $$dest; \
|
||||||
|
fi; \
|
||||||
|
rm -f $$temp; \
|
||||||
|
fi; \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
if test "$(PACKAGE)" = "gettext"; then \
|
||||||
|
for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
|
||||||
|
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||||
|
done; \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
|
||||||
info dvi:
|
info dvi:
|
||||||
|
|
||||||
$(OBJECTS): ../config.h libgettext.h
|
$(OBJECTS): libgnuintl.h
|
||||||
bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
|
bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: gettextP.h gmo.h loadinfo.h
|
||||||
dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
|
dcigettext.$lo: hash-string.h
|
||||||
|
explodename.$lo l10nflist.$lo: loadinfo.h
|
||||||
|
dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: plural-exp.h
|
||||||
|
dcigettext.$lo: eval-plural.h
|
||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
|
@ -166,12 +294,19 @@ ID: $(HEADERS) $(SOURCES)
|
||||||
|
|
||||||
|
|
||||||
mostlyclean:
|
mostlyclean:
|
||||||
rm -f *.a *.o *.lo core core.*
|
rm -f *.a *.la *.o *.lo core core.*
|
||||||
|
rm -f libintl.h charset.alias ref-add.sed ref-del.sed
|
||||||
|
rm -f -r .libs _libs
|
||||||
|
|
||||||
clean: mostlyclean
|
clean: mostlyclean
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f Makefile ID TAGS po2msg.sed po2tbl.sed
|
rm -f Makefile ID TAGS
|
||||||
|
if test "$(PACKAGE)" = gettext; then \
|
||||||
|
rm -f ChangeLog.inst $(DISTFILES.normal); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
|
||||||
maintainer-clean: distclean
|
maintainer-clean: distclean
|
||||||
@echo "This command is intended for maintainers to use;"
|
@echo "This command is intended for maintainers to use;"
|
||||||
|
@ -181,34 +316,22 @@ maintainer-clean: distclean
|
||||||
# GNU gettext needs not contain the file `VERSION' but contains some
|
# GNU gettext needs not contain the file `VERSION' but contains some
|
||||||
# other files which should not be distributed in other packages.
|
# other files which should not be distributed in other packages.
|
||||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
dist distdir: Makefile $(DISTFILES)
|
dist distdir: Makefile
|
||||||
if test "$(PACKAGE)" = gettext; then \
|
if test "$(PACKAGE)" = gettext; then \
|
||||||
additional="$(DISTFILES.gettext)"; \
|
additional="$(DISTFILES.gettext)"; \
|
||||||
else \
|
else \
|
||||||
additional="$(DISTFILES.normal)"; \
|
additional="$(DISTFILES.normal)"; \
|
||||||
fi; \
|
fi; \
|
||||||
for file in $(DISTFILES.common) $$additional; do \
|
$(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
|
||||||
ln $(srcdir)/$$file $(distdir) 2> /dev/null \
|
for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
|
||||||
|| cp -p $(srcdir)/$$file $(distdir); \
|
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
|
||||||
|
cp -p $$dir/$$file $(distdir); \
|
||||||
done
|
done
|
||||||
|
|
||||||
dist-libc:
|
|
||||||
tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
|
|
||||||
|
|
||||||
Makefile: Makefile.in ../config.status
|
Makefile: Makefile.in ../config.status
|
||||||
cd .. \
|
cd .. \
|
||||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
# The dependency for intlh.inst is different in gettext and all other
|
|
||||||
# packages. Because we cannot you GNU make features we have to solve
|
|
||||||
# the problem while rewriting Makefile.in.
|
|
||||||
@GT_YES@intlh.inst: intlh.inst.in ../config.status
|
|
||||||
@GT_YES@ cd .. \
|
|
||||||
@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
|
|
||||||
@GT_YES@ $(SHELL) ./config.status
|
|
||||||
@GT_NO@.PHONY: intlh.inst
|
|
||||||
@GT_NO@intlh.inst:
|
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
# 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.
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
.NOEXPORT:
|
.NOEXPORT:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
GNU gettext library from gettext-0.10.35
|
GNU gettext library from gettext-0.11.5
|
||||||
|
|
|
@ -1,51 +1,59 @@
|
||||||
/* Implementation of the bindtextdomain(3) function
|
/* Implementation of the bindtextdomain(3) function
|
||||||
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined _LIBC
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#else
|
|
||||||
# ifdef HAVE_MALLOC_H
|
|
||||||
# include <malloc.h>
|
|
||||||
# else
|
|
||||||
void free ();
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_STRING_H || defined _LIBC
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#else
|
|
||||||
# include <strings.h>
|
|
||||||
# ifndef memcpy
|
|
||||||
# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
# include "libgettext.h"
|
# include "libgnuintl.h"
|
||||||
#endif
|
#endif
|
||||||
#include "gettext.h"
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
/* We have to handle multi-threaded applications. */
|
||||||
|
# include <bits/libc-lock.h>
|
||||||
|
#else
|
||||||
|
/* Provide dummy implementation if this is outside glibc. */
|
||||||
|
# define __libc_rwlock_define(CLASS, NAME)
|
||||||
|
# define __libc_rwlock_wrlock(NAME)
|
||||||
|
# define __libc_rwlock_unlock(NAME)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The internal variables in the standalone libintl.a must have different
|
||||||
|
names than the internal variables in GNU libc, otherwise programs
|
||||||
|
using libintl.a cannot be linked statically. */
|
||||||
|
#if !defined _LIBC
|
||||||
|
# define _nl_default_dirname libintl_nl_default_dirname
|
||||||
|
# define _nl_domain_bindings libintl_nl_domain_bindings
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
||||||
|
#ifndef offsetof
|
||||||
|
# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
|
||||||
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
/* Contains the default location of the message catalogs. */
|
/* Contains the default location of the message catalogs. */
|
||||||
|
@ -54,6 +62,9 @@ extern const char _nl_default_dirname[];
|
||||||
/* List with bindings of specific domains. */
|
/* List with bindings of specific domains. */
|
||||||
extern struct binding *_nl_domain_bindings;
|
extern struct binding *_nl_domain_bindings;
|
||||||
|
|
||||||
|
/* Lock variable to protect the global data in the gettext implementation. */
|
||||||
|
__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
|
||||||
|
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
with existing names and they should follow ANSI C. But this source
|
with existing names and they should follow ANSI C. But this source
|
||||||
|
@ -61,25 +72,48 @@ extern struct binding *_nl_domain_bindings;
|
||||||
prefix. So we have to make a difference here. */
|
prefix. So we have to make a difference here. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define BINDTEXTDOMAIN __bindtextdomain
|
# define BINDTEXTDOMAIN __bindtextdomain
|
||||||
|
# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
|
||||||
# ifndef strdup
|
# ifndef strdup
|
||||||
# define strdup(str) __strdup (str)
|
# define strdup(str) __strdup (str)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# define BINDTEXTDOMAIN bindtextdomain__
|
# define BINDTEXTDOMAIN libintl_bindtextdomain
|
||||||
|
# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Specify that the DOMAINNAME message catalog will be found
|
/* Prototypes for local functions. */
|
||||||
in DIRNAME rather than in the system locale data base. */
|
static void set_binding_values PARAMS ((const char *domainname,
|
||||||
char *
|
const char **dirnamep,
|
||||||
BINDTEXTDOMAIN (domainname, dirname)
|
const char **codesetp));
|
||||||
|
|
||||||
|
/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
|
||||||
|
to be used for the DOMAINNAME message catalog.
|
||||||
|
If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
|
||||||
|
modified, only the current value is returned.
|
||||||
|
If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
|
||||||
|
modified nor returned. */
|
||||||
|
static void
|
||||||
|
set_binding_values (domainname, dirnamep, codesetp)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
const char *dirname;
|
const char **dirnamep;
|
||||||
|
const char **codesetp;
|
||||||
{
|
{
|
||||||
struct binding *binding;
|
struct binding *binding;
|
||||||
|
int modified;
|
||||||
|
|
||||||
/* Some sanity checks. */
|
/* Some sanity checks. */
|
||||||
if (domainname == NULL || domainname[0] == '\0')
|
if (domainname == NULL || domainname[0] == '\0')
|
||||||
return NULL;
|
{
|
||||||
|
if (dirnamep)
|
||||||
|
*dirnamep = NULL;
|
||||||
|
if (codesetp)
|
||||||
|
*codesetp = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
__libc_rwlock_wrlock (_nl_state_lock);
|
||||||
|
|
||||||
|
modified = 0;
|
||||||
|
|
||||||
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
|
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
|
||||||
{
|
{
|
||||||
|
@ -95,83 +129,173 @@ BINDTEXTDOMAIN (domainname, dirname)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (binding != NULL)
|
||||||
|
{
|
||||||
|
if (dirnamep)
|
||||||
|
{
|
||||||
|
const char *dirname = *dirnamep;
|
||||||
|
|
||||||
if (dirname == NULL)
|
if (dirname == NULL)
|
||||||
/* The current binding has be to returned. */
|
/* The current binding has be to returned. */
|
||||||
return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
|
*dirnamep = binding->dirname;
|
||||||
|
else
|
||||||
if (binding != NULL)
|
|
||||||
{
|
{
|
||||||
/* The domain is already bound. If the new value and the old
|
/* The domain is already bound. If the new value and the old
|
||||||
one are equal we simply do nothing. Otherwise replace the
|
one are equal we simply do nothing. Otherwise replace the
|
||||||
old binding. */
|
old binding. */
|
||||||
if (strcmp (dirname, binding->dirname) != 0)
|
char *result = binding->dirname;
|
||||||
|
if (strcmp (dirname, result) != 0)
|
||||||
{
|
{
|
||||||
char *new_dirname;
|
|
||||||
|
|
||||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
if (strcmp (dirname, _nl_default_dirname) == 0)
|
||||||
new_dirname = (char *) _nl_default_dirname;
|
result = (char *) _nl_default_dirname;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if defined _LIBC || defined HAVE_STRDUP
|
#if defined _LIBC || defined HAVE_STRDUP
|
||||||
new_dirname = strdup (dirname);
|
result = strdup (dirname);
|
||||||
if (new_dirname == NULL)
|
|
||||||
return NULL;
|
|
||||||
#else
|
#else
|
||||||
size_t len = strlen (dirname) + 1;
|
size_t len = strlen (dirname) + 1;
|
||||||
new_dirname = (char *) malloc (len);
|
result = (char *) malloc (len);
|
||||||
if (new_dirname == NULL)
|
if (__builtin_expect (result != NULL, 1))
|
||||||
return NULL;
|
memcpy (result, dirname, len);
|
||||||
|
|
||||||
memcpy (new_dirname, dirname, len);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (__builtin_expect (result != NULL, 1))
|
||||||
|
{
|
||||||
if (binding->dirname != _nl_default_dirname)
|
if (binding->dirname != _nl_default_dirname)
|
||||||
free (binding->dirname);
|
free (binding->dirname);
|
||||||
|
|
||||||
binding->dirname = new_dirname;
|
binding->dirname = result;
|
||||||
|
modified = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*dirnamep = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codesetp)
|
||||||
|
{
|
||||||
|
const char *codeset = *codesetp;
|
||||||
|
|
||||||
|
if (codeset == NULL)
|
||||||
|
/* The current binding has be to returned. */
|
||||||
|
*codesetp = binding->codeset;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The domain is already bound. If the new value and the old
|
||||||
|
one are equal we simply do nothing. Otherwise replace the
|
||||||
|
old binding. */
|
||||||
|
char *result = binding->codeset;
|
||||||
|
if (result == NULL || strcmp (codeset, result) != 0)
|
||||||
|
{
|
||||||
|
#if defined _LIBC || defined HAVE_STRDUP
|
||||||
|
result = strdup (codeset);
|
||||||
|
#else
|
||||||
|
size_t len = strlen (codeset) + 1;
|
||||||
|
result = (char *) malloc (len);
|
||||||
|
if (__builtin_expect (result != NULL, 1))
|
||||||
|
memcpy (result, codeset, len);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (__builtin_expect (result != NULL, 1))
|
||||||
|
{
|
||||||
|
if (binding->codeset != NULL)
|
||||||
|
free (binding->codeset);
|
||||||
|
|
||||||
|
binding->codeset = result;
|
||||||
|
binding->codeset_cntr++;
|
||||||
|
modified = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*codesetp = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((dirnamep == NULL || *dirnamep == NULL)
|
||||||
|
&& (codesetp == NULL || *codesetp == NULL))
|
||||||
|
{
|
||||||
|
/* Simply return the default values. */
|
||||||
|
if (dirnamep)
|
||||||
|
*dirnamep = _nl_default_dirname;
|
||||||
|
if (codesetp)
|
||||||
|
*codesetp = NULL;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* We have to create a new binding. */
|
/* We have to create a new binding. */
|
||||||
#if !defined _LIBC && !defined HAVE_STRDUP
|
size_t len = strlen (domainname) + 1;
|
||||||
size_t len;
|
|
||||||
#endif
|
|
||||||
struct binding *new_binding =
|
struct binding *new_binding =
|
||||||
(struct binding *) malloc (sizeof (*new_binding));
|
(struct binding *) malloc (offsetof (struct binding, domainname) + len);
|
||||||
|
|
||||||
if (new_binding == NULL)
|
if (__builtin_expect (new_binding == NULL, 0))
|
||||||
return NULL;
|
goto failed;
|
||||||
|
|
||||||
#if defined _LIBC || defined HAVE_STRDUP
|
|
||||||
new_binding->domainname = strdup (domainname);
|
|
||||||
if (new_binding->domainname == NULL)
|
|
||||||
return NULL;
|
|
||||||
#else
|
|
||||||
len = strlen (domainname) + 1;
|
|
||||||
new_binding->domainname = (char *) malloc (len);
|
|
||||||
if (new_binding->domainname == NULL)
|
|
||||||
return NULL;
|
|
||||||
memcpy (new_binding->domainname, domainname, len);
|
memcpy (new_binding->domainname, domainname, len);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
if (dirnamep)
|
||||||
new_binding->dirname = (char *) _nl_default_dirname;
|
{
|
||||||
|
const char *dirname = *dirnamep;
|
||||||
|
|
||||||
|
if (dirname == NULL)
|
||||||
|
/* The default value. */
|
||||||
|
dirname = _nl_default_dirname;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (strcmp (dirname, _nl_default_dirname) == 0)
|
||||||
|
dirname = _nl_default_dirname;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *result;
|
||||||
#if defined _LIBC || defined HAVE_STRDUP
|
#if defined _LIBC || defined HAVE_STRDUP
|
||||||
new_binding->dirname = strdup (dirname);
|
result = strdup (dirname);
|
||||||
if (new_binding->dirname == NULL)
|
if (__builtin_expect (result == NULL, 0))
|
||||||
return NULL;
|
goto failed_dirname;
|
||||||
#else
|
#else
|
||||||
len = strlen (dirname) + 1;
|
size_t len = strlen (dirname) + 1;
|
||||||
new_binding->dirname = (char *) malloc (len);
|
result = (char *) malloc (len);
|
||||||
if (new_binding->dirname == NULL)
|
if (__builtin_expect (result == NULL, 0))
|
||||||
return NULL;
|
goto failed_dirname;
|
||||||
memcpy (new_binding->dirname, dirname, len);
|
memcpy (result, dirname, len);
|
||||||
#endif
|
#endif
|
||||||
|
dirname = result;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
*dirnamep = dirname;
|
||||||
|
new_binding->dirname = (char *) dirname;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* The default value. */
|
||||||
|
new_binding->dirname = (char *) _nl_default_dirname;
|
||||||
|
|
||||||
|
new_binding->codeset_cntr = 0;
|
||||||
|
|
||||||
|
if (codesetp)
|
||||||
|
{
|
||||||
|
const char *codeset = *codesetp;
|
||||||
|
|
||||||
|
if (codeset != NULL)
|
||||||
|
{
|
||||||
|
char *result;
|
||||||
|
|
||||||
|
#if defined _LIBC || defined HAVE_STRDUP
|
||||||
|
result = strdup (codeset);
|
||||||
|
if (__builtin_expect (result == NULL, 0))
|
||||||
|
goto failed_codeset;
|
||||||
|
#else
|
||||||
|
size_t len = strlen (codeset) + 1;
|
||||||
|
result = (char *) malloc (len);
|
||||||
|
if (__builtin_expect (result == NULL, 0))
|
||||||
|
goto failed_codeset;
|
||||||
|
memcpy (result, codeset, len);
|
||||||
|
#endif
|
||||||
|
codeset = result;
|
||||||
|
new_binding->codeset_cntr++;
|
||||||
|
}
|
||||||
|
*codesetp = codeset;
|
||||||
|
new_binding->codeset = (char *) codeset;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
new_binding->codeset = NULL;
|
||||||
|
|
||||||
/* Now enqueue it. */
|
/* Now enqueue it. */
|
||||||
if (_nl_domain_bindings == NULL
|
if (_nl_domain_bindings == NULL
|
||||||
|
@ -191,13 +315,55 @@ BINDTEXTDOMAIN (domainname, dirname)
|
||||||
binding->next = new_binding;
|
binding->next = new_binding;
|
||||||
}
|
}
|
||||||
|
|
||||||
binding = 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return binding->dirname;
|
/* If we modified any binding, we flush the caches. */
|
||||||
|
if (modified)
|
||||||
|
++_nl_msg_cat_cntr;
|
||||||
|
|
||||||
|
__libc_rwlock_unlock (_nl_state_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specify that the DOMAINNAME message catalog will be found
|
||||||
|
in DIRNAME rather than in the system locale data base. */
|
||||||
|
char *
|
||||||
|
BINDTEXTDOMAIN (domainname, dirname)
|
||||||
|
const char *domainname;
|
||||||
|
const char *dirname;
|
||||||
|
{
|
||||||
|
set_binding_values (domainname, &dirname, NULL);
|
||||||
|
return (char *) dirname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specify the character encoding in which the messages from the
|
||||||
|
DOMAINNAME message catalog will be returned. */
|
||||||
|
char *
|
||||||
|
BIND_TEXTDOMAIN_CODESET (domainname, codeset)
|
||||||
|
const char *domainname;
|
||||||
|
const char *codeset;
|
||||||
|
{
|
||||||
|
set_binding_values (domainname, NULL, &codeset);
|
||||||
|
return (char *) codeset;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
/* Alias for function name in GNU C Library. */
|
/* Aliases for function names in GNU C Library. */
|
||||||
weak_alias (__bindtextdomain, bindtextdomain);
|
weak_alias (__bindtextdomain, bindtextdomain);
|
||||||
|
weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,262 +0,0 @@
|
||||||
/* Compatibility code for gettext-using-catgets interface.
|
|
||||||
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#ifdef STDC_HEADERS
|
|
||||||
# include <stdlib.h>
|
|
||||||
# include <string.h>
|
|
||||||
#else
|
|
||||||
char *getenv ();
|
|
||||||
# ifdef HAVE_MALLOC_H
|
|
||||||
# include <malloc.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_NL_TYPES_H
|
|
||||||
# include <nl_types.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "libgettext.h"
|
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
|
||||||
|
|
||||||
/* XPG3 defines the result of `setlocale (category, NULL)' as:
|
|
||||||
``Directs `setlocale()' to query `category' and return the current
|
|
||||||
setting of `local'.''
|
|
||||||
However it does not specify the exact format. And even worse: POSIX
|
|
||||||
defines this not at all. So we can use this feature only on selected
|
|
||||||
system (e.g. those using GNU C Library). */
|
|
||||||
#ifdef _LIBC
|
|
||||||
# define HAVE_LOCALE_NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The catalog descriptor. */
|
|
||||||
static nl_catd catalog = (nl_catd) -1;
|
|
||||||
|
|
||||||
/* Name of the default catalog. */
|
|
||||||
static const char default_catalog_name[] = "messages";
|
|
||||||
|
|
||||||
/* Name of currently used catalog. */
|
|
||||||
static const char *catalog_name = default_catalog_name;
|
|
||||||
|
|
||||||
/* Get ID for given string. If not found return -1. */
|
|
||||||
static int msg_to_cat_id PARAMS ((const char *msg));
|
|
||||||
|
|
||||||
/* Substitution for systems lacking this function in their C library. */
|
|
||||||
#if !_LIBC && !HAVE_STPCPY
|
|
||||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Set currently used domain/catalog. */
|
|
||||||
char *
|
|
||||||
textdomain (domainname)
|
|
||||||
const char *domainname;
|
|
||||||
{
|
|
||||||
nl_catd new_catalog;
|
|
||||||
char *new_name;
|
|
||||||
size_t new_name_len;
|
|
||||||
char *lang;
|
|
||||||
|
|
||||||
#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \
|
|
||||||
&& defined HAVE_LOCALE_NULL
|
|
||||||
lang = setlocale (LC_MESSAGES, NULL);
|
|
||||||
#else
|
|
||||||
lang = getenv ("LC_ALL");
|
|
||||||
if (lang == NULL || lang[0] == '\0')
|
|
||||||
{
|
|
||||||
lang = getenv ("LC_MESSAGES");
|
|
||||||
if (lang == NULL || lang[0] == '\0')
|
|
||||||
lang = getenv ("LANG");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (lang == NULL || lang[0] == '\0')
|
|
||||||
lang = "C";
|
|
||||||
|
|
||||||
/* See whether name of currently used domain is asked. */
|
|
||||||
if (domainname == NULL)
|
|
||||||
return (char *) catalog_name;
|
|
||||||
|
|
||||||
if (domainname[0] == '\0')
|
|
||||||
domainname = default_catalog_name;
|
|
||||||
|
|
||||||
/* Compute length of added path element. */
|
|
||||||
new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
|
|
||||||
+ sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
|
|
||||||
+ sizeof (".cat");
|
|
||||||
|
|
||||||
new_name = (char *) malloc (new_name_len);
|
|
||||||
if (new_name == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
strcpy (new_name, PACKAGE);
|
|
||||||
new_catalog = catopen (new_name, 0);
|
|
||||||
|
|
||||||
if (new_catalog == (nl_catd) -1)
|
|
||||||
{
|
|
||||||
/* NLSPATH search didn't work, try absolute path */
|
|
||||||
sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
|
|
||||||
PACKAGE);
|
|
||||||
new_catalog = catopen (new_name, 0);
|
|
||||||
|
|
||||||
if (new_catalog == (nl_catd) -1)
|
|
||||||
{
|
|
||||||
free (new_name);
|
|
||||||
return (char *) catalog_name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Close old catalog. */
|
|
||||||
if (catalog != (nl_catd) -1)
|
|
||||||
catclose (catalog);
|
|
||||||
if (catalog_name != default_catalog_name)
|
|
||||||
free ((char *) catalog_name);
|
|
||||||
|
|
||||||
catalog = new_catalog;
|
|
||||||
catalog_name = new_name;
|
|
||||||
|
|
||||||
return (char *) catalog_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
bindtextdomain (domainname, dirname)
|
|
||||||
const char *domainname;
|
|
||||||
const char *dirname;
|
|
||||||
{
|
|
||||||
#if HAVE_SETENV || HAVE_PUTENV
|
|
||||||
char *old_val, *new_val, *cp;
|
|
||||||
size_t new_val_len;
|
|
||||||
|
|
||||||
/* This does not make much sense here but to be compatible do it. */
|
|
||||||
if (domainname == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* Compute length of added path element. If we use setenv we don't need
|
|
||||||
the first byts for NLSPATH=, but why complicate the code for this
|
|
||||||
peanuts. */
|
|
||||||
new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
|
|
||||||
+ sizeof ("/%L/LC_MESSAGES/%N.cat");
|
|
||||||
|
|
||||||
old_val = getenv ("NLSPATH");
|
|
||||||
if (old_val == NULL || old_val[0] == '\0')
|
|
||||||
{
|
|
||||||
old_val = NULL;
|
|
||||||
new_val_len += 1 + sizeof (LOCALEDIR) - 1
|
|
||||||
+ sizeof ("/%L/LC_MESSAGES/%N.cat");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
new_val_len += strlen (old_val);
|
|
||||||
|
|
||||||
new_val = (char *) malloc (new_val_len);
|
|
||||||
if (new_val == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
# if HAVE_SETENV
|
|
||||||
cp = new_val;
|
|
||||||
# else
|
|
||||||
cp = stpcpy (new_val, "NLSPATH=");
|
|
||||||
# endif
|
|
||||||
|
|
||||||
cp = stpcpy (cp, dirname);
|
|
||||||
cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
|
|
||||||
|
|
||||||
if (old_val == NULL)
|
|
||||||
{
|
|
||||||
# if __STDC__
|
|
||||||
stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
|
|
||||||
# else
|
|
||||||
|
|
||||||
cp = stpcpy (cp, LOCALEDIR);
|
|
||||||
stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
stpcpy (cp, old_val);
|
|
||||||
|
|
||||||
# if HAVE_SETENV
|
|
||||||
setenv ("NLSPATH", new_val, 1);
|
|
||||||
free (new_val);
|
|
||||||
# else
|
|
||||||
putenv (new_val);
|
|
||||||
/* Do *not* free the environment entry we just entered. It is used
|
|
||||||
from now on. */
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return (char *) domainname;
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef gettext
|
|
||||||
char *
|
|
||||||
gettext (msg)
|
|
||||||
const char *msg;
|
|
||||||
{
|
|
||||||
int msgid;
|
|
||||||
|
|
||||||
if (msg == NULL || catalog == (nl_catd) -1)
|
|
||||||
return (char *) msg;
|
|
||||||
|
|
||||||
/* Get the message from the catalog. We always use set number 1.
|
|
||||||
The message ID is computed by the function `msg_to_cat_id'
|
|
||||||
which works on the table generated by `po-to-tbl'. */
|
|
||||||
msgid = msg_to_cat_id (msg);
|
|
||||||
if (msgid == -1)
|
|
||||||
return (char *) msg;
|
|
||||||
|
|
||||||
return catgets (catalog, 1, msgid, (char *) msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
|
|
||||||
for the one equal to msg. If it is found return the ID. In case when
|
|
||||||
the string is not found return -1. */
|
|
||||||
static int
|
|
||||||
msg_to_cat_id (msg)
|
|
||||||
const char *msg;
|
|
||||||
{
|
|
||||||
int cnt;
|
|
||||||
|
|
||||||
for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
|
|
||||||
if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
|
|
||||||
return _msg_tbl[cnt]._msg_number;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* @@ begin of epilog @@ */
|
|
||||||
|
|
||||||
/* We don't want libintl.a to depend on any other library. So we
|
|
||||||
avoid the non-standard function stpcpy. In GNU C Library this
|
|
||||||
function is available, though. Also allow the symbol HAVE_STPCPY
|
|
||||||
to be defined. */
|
|
||||||
#if !_LIBC && !HAVE_STPCPY
|
|
||||||
static char *
|
|
||||||
stpcpy (dest, src)
|
|
||||||
char *dest;
|
|
||||||
const char *src;
|
|
||||||
{
|
|
||||||
while ((*dest++ = *src++) != '\0')
|
|
||||||
/* Do nothing. */ ;
|
|
||||||
return dest - 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
|
@ -0,0 +1,466 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Output a system dependent table of character encoding aliases.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000-2002 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Library General Public License as published
|
||||||
|
# by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Library General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Library General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
# USA.
|
||||||
|
#
|
||||||
|
# The table consists of lines of the form
|
||||||
|
# ALIAS CANONICAL
|
||||||
|
#
|
||||||
|
# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
|
||||||
|
# ALIAS is compared in a case sensitive way.
|
||||||
|
#
|
||||||
|
# CANONICAL is the GNU canonical name for this character encoding.
|
||||||
|
# It must be an encoding supported by libiconv. Support by GNU libc is
|
||||||
|
# also desirable. CANONICAL is case insensitive. Usually an upper case
|
||||||
|
# MIME charset name is preferred.
|
||||||
|
# The current list of GNU canonical charset names is as follows.
|
||||||
|
#
|
||||||
|
# name used by which systems a MIME name?
|
||||||
|
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
||||||
|
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
||||||
|
# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
|
||||||
|
# ISO-8859-3 glibc solaris yes
|
||||||
|
# ISO-8859-4 osf solaris freebsd yes
|
||||||
|
# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
|
||||||
|
# ISO-8859-6 glibc aix hpux solaris yes
|
||||||
|
# ISO-8859-7 glibc aix hpux irix osf solaris yes
|
||||||
|
# ISO-8859-8 glibc aix hpux osf solaris yes
|
||||||
|
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
||||||
|
# ISO-8859-13 glibc
|
||||||
|
# ISO-8859-14 glibc
|
||||||
|
# ISO-8859-15 glibc aix osf solaris freebsd
|
||||||
|
# KOI8-R glibc solaris freebsd yes
|
||||||
|
# KOI8-U glibc freebsd yes
|
||||||
|
# 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 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 woe32
|
||||||
|
# CP1252 aix woe32
|
||||||
|
# CP1253 woe32
|
||||||
|
# CP1254 woe32
|
||||||
|
# CP1255 glibc woe32
|
||||||
|
# CP1256 woe32
|
||||||
|
# CP1257 woe32
|
||||||
|
# GB2312 glibc aix hpux irix solaris freebsd yes
|
||||||
|
# EUC-JP glibc aix hpux irix osf solaris freebsd yes
|
||||||
|
# EUC-KR glibc aix hpux irix osf solaris freebsd yes
|
||||||
|
# EUC-TW glibc aix hpux irix osf solaris
|
||||||
|
# BIG5 glibc aix hpux osf solaris freebsd yes
|
||||||
|
# BIG5-HKSCS glibc solaris
|
||||||
|
# GBK glibc aix osf solaris woe32 dos
|
||||||
|
# GB18030 glibc solaris
|
||||||
|
# SHIFT_JIS hpux osf solaris freebsd yes
|
||||||
|
# JOHAB glibc solaris woe32
|
||||||
|
# TIS-620 glibc aix hpux osf solaris
|
||||||
|
# VISCII glibc yes
|
||||||
|
# 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 glibc aix hpux osf solaris yes
|
||||||
|
#
|
||||||
|
# Note: Names which are not marked as being a MIME name should not be used in
|
||||||
|
# Internet protocols for information interchange (mail, news, etc.).
|
||||||
|
#
|
||||||
|
# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
|
||||||
|
# must understand both names and treat them as equivalent.
|
||||||
|
#
|
||||||
|
# The first argument passed to this file is the canonical host specification,
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||||
|
# or
|
||||||
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
|
|
||||||
|
host="$1"
|
||||||
|
os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
|
||||||
|
echo "# This file contains a table of character encoding aliases,"
|
||||||
|
echo "# suitable for operating system '${os}'."
|
||||||
|
echo "# It was automatically generated from config.charset."
|
||||||
|
# List of references, updated during installation:
|
||||||
|
echo "# Packages using this file: "
|
||||||
|
case "$os" in
|
||||||
|
linux* | *-gnu*)
|
||||||
|
# With glibc-2.1 or newer, we don't need any canonicalization,
|
||||||
|
# because glibc has iconv and both glibc and libiconv support all
|
||||||
|
# GNU canonical names directly. Therefore, the Makefile does not
|
||||||
|
# need to install the alias file at all.
|
||||||
|
# The following applies only to glibc-2.0.x and older libcs.
|
||||||
|
echo "ISO_646.IRV:1983 ASCII"
|
||||||
|
;;
|
||||||
|
aix*)
|
||||||
|
echo "ISO8859-1 ISO-8859-1"
|
||||||
|
echo "ISO8859-2 ISO-8859-2"
|
||||||
|
echo "ISO8859-5 ISO-8859-5"
|
||||||
|
echo "ISO8859-6 ISO-8859-6"
|
||||||
|
echo "ISO8859-7 ISO-8859-7"
|
||||||
|
echo "ISO8859-8 ISO-8859-8"
|
||||||
|
echo "ISO8859-9 ISO-8859-9"
|
||||||
|
echo "ISO8859-15 ISO-8859-15"
|
||||||
|
echo "IBM-850 CP850"
|
||||||
|
echo "IBM-856 CP856"
|
||||||
|
echo "IBM-921 ISO-8859-13"
|
||||||
|
echo "IBM-922 CP922"
|
||||||
|
echo "IBM-932 CP932"
|
||||||
|
echo "IBM-943 CP943"
|
||||||
|
echo "IBM-1046 CP1046"
|
||||||
|
echo "IBM-1124 CP1124"
|
||||||
|
echo "IBM-1129 CP1129"
|
||||||
|
echo "IBM-1252 CP1252"
|
||||||
|
echo "IBM-eucCN GB2312"
|
||||||
|
echo "IBM-eucJP EUC-JP"
|
||||||
|
echo "IBM-eucKR EUC-KR"
|
||||||
|
echo "IBM-eucTW EUC-TW"
|
||||||
|
echo "big5 BIG5"
|
||||||
|
echo "GBK GBK"
|
||||||
|
echo "TIS-620 TIS-620"
|
||||||
|
echo "UTF-8 UTF-8"
|
||||||
|
;;
|
||||||
|
hpux*)
|
||||||
|
echo "iso88591 ISO-8859-1"
|
||||||
|
echo "iso88592 ISO-8859-2"
|
||||||
|
echo "iso88595 ISO-8859-5"
|
||||||
|
echo "iso88596 ISO-8859-6"
|
||||||
|
echo "iso88597 ISO-8859-7"
|
||||||
|
echo "iso88598 ISO-8859-8"
|
||||||
|
echo "iso88599 ISO-8859-9"
|
||||||
|
echo "iso885915 ISO-8859-15"
|
||||||
|
echo "roman8 HP-ROMAN8"
|
||||||
|
echo "arabic8 HP-ARABIC8"
|
||||||
|
echo "greek8 HP-GREEK8"
|
||||||
|
echo "hebrew8 HP-HEBREW8"
|
||||||
|
echo "turkish8 HP-TURKISH8"
|
||||||
|
echo "kana8 HP-KANA8"
|
||||||
|
echo "tis620 TIS-620"
|
||||||
|
echo "big5 BIG5"
|
||||||
|
echo "eucJP EUC-JP"
|
||||||
|
echo "eucKR EUC-KR"
|
||||||
|
echo "eucTW EUC-TW"
|
||||||
|
echo "hp15CN GB2312"
|
||||||
|
#echo "ccdc ?" # what is this?
|
||||||
|
echo "SJIS SHIFT_JIS"
|
||||||
|
echo "utf8 UTF-8"
|
||||||
|
;;
|
||||||
|
irix*)
|
||||||
|
echo "ISO8859-1 ISO-8859-1"
|
||||||
|
echo "ISO8859-2 ISO-8859-2"
|
||||||
|
echo "ISO8859-5 ISO-8859-5"
|
||||||
|
echo "ISO8859-7 ISO-8859-7"
|
||||||
|
echo "ISO8859-9 ISO-8859-9"
|
||||||
|
echo "eucCN GB2312"
|
||||||
|
echo "eucJP EUC-JP"
|
||||||
|
echo "eucKR EUC-KR"
|
||||||
|
echo "eucTW EUC-TW"
|
||||||
|
;;
|
||||||
|
osf*)
|
||||||
|
echo "ISO8859-1 ISO-8859-1"
|
||||||
|
echo "ISO8859-2 ISO-8859-2"
|
||||||
|
echo "ISO8859-4 ISO-8859-4"
|
||||||
|
echo "ISO8859-5 ISO-8859-5"
|
||||||
|
echo "ISO8859-7 ISO-8859-7"
|
||||||
|
echo "ISO8859-8 ISO-8859-8"
|
||||||
|
echo "ISO8859-9 ISO-8859-9"
|
||||||
|
echo "ISO8859-15 ISO-8859-15"
|
||||||
|
echo "cp850 CP850"
|
||||||
|
echo "big5 BIG5"
|
||||||
|
echo "dechanyu DEC-HANYU"
|
||||||
|
echo "dechanzi GB2312"
|
||||||
|
echo "deckanji DEC-KANJI"
|
||||||
|
echo "deckorean EUC-KR"
|
||||||
|
echo "eucJP EUC-JP"
|
||||||
|
echo "eucKR EUC-KR"
|
||||||
|
echo "eucTW EUC-TW"
|
||||||
|
echo "GBK GBK"
|
||||||
|
echo "KSC5601 CP949"
|
||||||
|
echo "sdeckanji EUC-JP"
|
||||||
|
echo "SJIS SHIFT_JIS"
|
||||||
|
echo "TACTIS TIS-620"
|
||||||
|
echo "UTF-8 UTF-8"
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
echo "646 ASCII"
|
||||||
|
echo "ISO8859-1 ISO-8859-1"
|
||||||
|
echo "ISO8859-2 ISO-8859-2"
|
||||||
|
echo "ISO8859-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 "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-15 ISO-8859-15"
|
||||||
|
echo "eucCN GB2312"
|
||||||
|
echo "eucJP EUC-JP"
|
||||||
|
echo "eucKR EUC-KR"
|
||||||
|
echo "eucTW EUC-TW"
|
||||||
|
echo "BIG5 BIG5"
|
||||||
|
echo "SJIS SHIFT_JIS"
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
# BeOS has a single locale, and it has UTF-8 encoding.
|
||||||
|
echo "* UTF-8"
|
||||||
|
;;
|
||||||
|
msdosdjgpp*)
|
||||||
|
# DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
|
||||||
|
# localcharset.c falls back to using the full locale name
|
||||||
|
# from the environment variables.
|
||||||
|
echo "#"
|
||||||
|
echo "# The encodings given here may not all be correct."
|
||||||
|
echo "# If you find that the encoding given for your language and"
|
||||||
|
echo "# country is not the one your DOS machine actually uses, just"
|
||||||
|
echo "# correct it in this file, and send a mail to"
|
||||||
|
echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
|
||||||
|
echo "# and Bruno Haible <bruno@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_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
|
597
intl/dcgettext.c
597
intl/dcgettext.c
|
@ -1,220 +1,44 @@
|
||||||
/* Implementation of the dcgettext(3) function.
|
/* Implementation of the dcgettext(3) function.
|
||||||
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
# define alloca __builtin_alloca
|
|
||||||
# define HAVE_ALLOCA 1
|
|
||||||
#else
|
|
||||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
|
||||||
# include <alloca.h>
|
|
||||||
# else
|
|
||||||
# ifdef _AIX
|
|
||||||
#pragma alloca
|
|
||||||
# else
|
|
||||||
# ifndef alloca
|
|
||||||
char *alloca ();
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#ifndef errno
|
|
||||||
extern int errno;
|
|
||||||
#endif
|
|
||||||
#ifndef __set_errno
|
|
||||||
# define __set_errno(val) errno = (val)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined _LIBC
|
|
||||||
# include <stdlib.h>
|
|
||||||
#else
|
|
||||||
char *getenv ();
|
|
||||||
# ifdef HAVE_MALLOC_H
|
|
||||||
# include <malloc.h>
|
|
||||||
# else
|
|
||||||
void free ();
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_STRING_H || defined _LIBC
|
|
||||||
# ifndef _GNU_SOURCE
|
|
||||||
# define _GNU_SOURCE 1
|
|
||||||
# endif
|
|
||||||
# include <string.h>
|
|
||||||
#else
|
|
||||||
# include <strings.h>
|
|
||||||
#endif
|
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
|
||||||
# include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gettext.h"
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
# include "libgettext.h"
|
# include "libgnuintl.h"
|
||||||
#endif
|
#endif
|
||||||
#include "hash-string.h"
|
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
/* Rename the non ANSI C functions. This is required by the standard
|
|
||||||
because some ANSI C functions will require linking with this object
|
|
||||||
file and the name space must not be polluted. */
|
|
||||||
# define getcwd __getcwd
|
|
||||||
# ifndef stpcpy
|
|
||||||
# define stpcpy __stpcpy
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# if !defined HAVE_GETCWD
|
|
||||||
char *getwd ();
|
|
||||||
# define getcwd(buf, max) getwd (buf)
|
|
||||||
# else
|
|
||||||
char *getcwd ();
|
|
||||||
# endif
|
|
||||||
# ifndef HAVE_STPCPY
|
|
||||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Amount to increase buffer size by in each try. */
|
|
||||||
#define PATH_INCR 32
|
|
||||||
|
|
||||||
/* The following is from pathmax.h. */
|
|
||||||
/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
|
|
||||||
PATH_MAX but might cause redefinition warnings when sys/param.h is
|
|
||||||
later included (as on MORE/BSD 4.3). */
|
|
||||||
#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
|
|
||||||
# include <limits.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _POSIX_PATH_MAX
|
|
||||||
# define _POSIX_PATH_MAX 255
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
|
|
||||||
# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Don't include sys/param.h if it already has been. */
|
|
||||||
#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
|
|
||||||
# include <sys/param.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(PATH_MAX) && defined(MAXPATHLEN)
|
|
||||||
# define PATH_MAX MAXPATHLEN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PATH_MAX
|
|
||||||
# define PATH_MAX _POSIX_PATH_MAX
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* XPG3 defines the result of `setlocale (category, NULL)' as:
|
|
||||||
``Directs `setlocale()' to query `category' and return the current
|
|
||||||
setting of `local'.''
|
|
||||||
However it does not specify the exact format. And even worse: POSIX
|
|
||||||
defines this not at all. So we can use this feature only on selected
|
|
||||||
system (e.g. those using GNU C Library). */
|
|
||||||
#ifdef _LIBC
|
|
||||||
# define HAVE_LOCALE_NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Name of the default domain used for gettext(3) prior any call to
|
|
||||||
textdomain(3). The default value for this is "messages". */
|
|
||||||
const char _nl_default_default_domain[] = "messages";
|
|
||||||
|
|
||||||
/* Value used as the default domain for gettext(3). */
|
|
||||||
const char *_nl_current_default_domain = _nl_default_default_domain;
|
|
||||||
|
|
||||||
/* Contains the default location of the message catalogs. */
|
|
||||||
const char _nl_default_dirname[] = GNULOCALEDIR;
|
|
||||||
|
|
||||||
/* List with bindings of specific domains created by bindtextdomain()
|
|
||||||
calls. */
|
|
||||||
struct binding *_nl_domain_bindings;
|
|
||||||
|
|
||||||
/* Prototypes for local functions. */
|
|
||||||
static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
|
|
||||||
const char *msgid)) internal_function;
|
|
||||||
static const char *category_to_name PARAMS ((int category)) internal_function;
|
|
||||||
static const char *guess_category_value PARAMS ((int category,
|
|
||||||
const char *categoryname))
|
|
||||||
internal_function;
|
|
||||||
|
|
||||||
|
|
||||||
/* For those loosing systems which don't have `alloca' we have to add
|
|
||||||
some additional code emulating it. */
|
|
||||||
#ifdef HAVE_ALLOCA
|
|
||||||
/* Nothing has to be done. */
|
|
||||||
# define ADD_BLOCK(list, address) /* nothing */
|
|
||||||
# define FREE_BLOCKS(list) /* nothing */
|
|
||||||
#else
|
|
||||||
struct block_list
|
|
||||||
{
|
|
||||||
void *address;
|
|
||||||
struct block_list *next;
|
|
||||||
};
|
|
||||||
# define ADD_BLOCK(list, addr) \
|
|
||||||
do { \
|
|
||||||
struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
|
|
||||||
/* If we cannot get a free block we cannot add the new element to \
|
|
||||||
the list. */ \
|
|
||||||
if (newp != NULL) { \
|
|
||||||
newp->address = (addr); \
|
|
||||||
newp->next = (list); \
|
|
||||||
(list) = newp; \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
# define FREE_BLOCKS(list) \
|
|
||||||
do { \
|
|
||||||
while (list != NULL) { \
|
|
||||||
struct block_list *old = list; \
|
|
||||||
list = list->next; \
|
|
||||||
free (old); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
# undef alloca
|
|
||||||
# define alloca(size) (malloc (size))
|
|
||||||
#endif /* have alloca */
|
|
||||||
|
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
with existing names and they should follow ANSI C. But this source
|
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 __
|
code is also used in GNU C Library where the names have a __
|
||||||
prefix. So we have to make a difference here. */
|
prefix. So we have to make a difference here. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define DCGETTEXT __dcgettext
|
# define DCGETTEXT __dcgettext
|
||||||
|
# define DCIGETTEXT __dcigettext
|
||||||
#else
|
#else
|
||||||
# define DCGETTEXT dcgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
|
# define DCIGETTEXT libintl_dcigettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||||
|
@ -225,400 +49,11 @@ DCGETTEXT (domainname, msgid, category)
|
||||||
const char *msgid;
|
const char *msgid;
|
||||||
int category;
|
int category;
|
||||||
{
|
{
|
||||||
#ifndef HAVE_ALLOCA
|
return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
|
||||||
struct block_list *block_list = NULL;
|
|
||||||
#endif
|
|
||||||
struct loaded_l10nfile *domain;
|
|
||||||
struct binding *binding;
|
|
||||||
const char *categoryname;
|
|
||||||
const char *categoryvalue;
|
|
||||||
char *dirname, *xdomainname;
|
|
||||||
char *single_locale;
|
|
||||||
char *retval;
|
|
||||||
int saved_errno = errno;
|
|
||||||
|
|
||||||
/* If no real MSGID is given return NULL. */
|
|
||||||
if (msgid == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* If DOMAINNAME is NULL, we are interested in the default domain. If
|
|
||||||
CATEGORY is not LC_MESSAGES this might not make much sense but the
|
|
||||||
defintion left this undefined. */
|
|
||||||
if (domainname == NULL)
|
|
||||||
domainname = _nl_current_default_domain;
|
|
||||||
|
|
||||||
/* First find matching binding. */
|
|
||||||
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
|
|
||||||
{
|
|
||||||
int compare = strcmp (domainname, binding->domainname);
|
|
||||||
if (compare == 0)
|
|
||||||
/* We found it! */
|
|
||||||
break;
|
|
||||||
if (compare < 0)
|
|
||||||
{
|
|
||||||
/* It is not in the list. */
|
|
||||||
binding = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (binding == NULL)
|
|
||||||
dirname = (char *) _nl_default_dirname;
|
|
||||||
else if (binding->dirname[0] == '/')
|
|
||||||
dirname = binding->dirname;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* We have a relative path. Make it absolute now. */
|
|
||||||
size_t dirname_len = strlen (binding->dirname) + 1;
|
|
||||||
size_t path_max;
|
|
||||||
char *ret;
|
|
||||||
|
|
||||||
path_max = (unsigned) PATH_MAX;
|
|
||||||
path_max += 2; /* The getcwd docs say to do this. */
|
|
||||||
|
|
||||||
dirname = (char *) alloca (path_max + dirname_len);
|
|
||||||
ADD_BLOCK (block_list, dirname);
|
|
||||||
|
|
||||||
__set_errno (0);
|
|
||||||
while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
|
|
||||||
{
|
|
||||||
path_max += PATH_INCR;
|
|
||||||
dirname = (char *) alloca (path_max + dirname_len);
|
|
||||||
ADD_BLOCK (block_list, dirname);
|
|
||||||
__set_errno (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret == NULL)
|
|
||||||
{
|
|
||||||
/* We cannot get the current working directory. Don't signal an
|
|
||||||
error but simply return the default string. */
|
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
__set_errno (saved_errno);
|
|
||||||
return (char *) msgid;
|
|
||||||
}
|
|
||||||
|
|
||||||
stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now determine the symbolic name of CATEGORY and its value. */
|
|
||||||
categoryname = category_to_name (category);
|
|
||||||
categoryvalue = guess_category_value (category, categoryname);
|
|
||||||
|
|
||||||
xdomainname = (char *) alloca (strlen (categoryname)
|
|
||||||
+ strlen (domainname) + 5);
|
|
||||||
ADD_BLOCK (block_list, xdomainname);
|
|
||||||
|
|
||||||
stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
|
|
||||||
domainname),
|
|
||||||
".mo");
|
|
||||||
|
|
||||||
/* Creating working area. */
|
|
||||||
single_locale = (char *) alloca (strlen (categoryvalue) + 1);
|
|
||||||
ADD_BLOCK (block_list, single_locale);
|
|
||||||
|
|
||||||
|
|
||||||
/* Search for the given string. This is a loop because we perhaps
|
|
||||||
got an ordered list of languages to consider for th translation. */
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
/* Make CATEGORYVALUE point to the next element of the list. */
|
|
||||||
while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
|
|
||||||
++categoryvalue;
|
|
||||||
if (categoryvalue[0] == '\0')
|
|
||||||
{
|
|
||||||
/* The whole contents of CATEGORYVALUE has been searched but
|
|
||||||
no valid entry has been found. We solve this situation
|
|
||||||
by implicitly appending a "C" entry, i.e. no translation
|
|
||||||
will take place. */
|
|
||||||
single_locale[0] = 'C';
|
|
||||||
single_locale[1] = '\0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char *cp = single_locale;
|
|
||||||
while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
|
|
||||||
*cp++ = *categoryvalue++;
|
|
||||||
*cp = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If the current locale value is C (or POSIX) we don't load a
|
|
||||||
domain. Return the MSGID. */
|
|
||||||
if (strcmp (single_locale, "C") == 0
|
|
||||||
|| strcmp (single_locale, "POSIX") == 0)
|
|
||||||
{
|
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
__set_errno (saved_errno);
|
|
||||||
return (char *) msgid;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Find structure describing the message catalog matching the
|
|
||||||
DOMAINNAME and CATEGORY. */
|
|
||||||
domain = _nl_find_domain (dirname, single_locale, xdomainname);
|
|
||||||
|
|
||||||
if (domain != NULL)
|
|
||||||
{
|
|
||||||
retval = find_msg (domain, msgid);
|
|
||||||
|
|
||||||
if (retval == NULL)
|
|
||||||
{
|
|
||||||
int cnt;
|
|
||||||
|
|
||||||
for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
|
|
||||||
{
|
|
||||||
retval = find_msg (domain->successor[cnt], msgid);
|
|
||||||
|
|
||||||
if (retval != NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (retval != NULL)
|
|
||||||
{
|
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
__set_errno (saved_errno);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
/* Alias for function name in GNU C Library. */
|
/* Alias for function name in GNU C Library. */
|
||||||
|
INTDEF(__dcgettext)
|
||||||
weak_alias (__dcgettext, dcgettext);
|
weak_alias (__dcgettext, dcgettext);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static char *
|
|
||||||
internal_function
|
|
||||||
find_msg (domain_file, msgid)
|
|
||||||
struct loaded_l10nfile *domain_file;
|
|
||||||
const char *msgid;
|
|
||||||
{
|
|
||||||
size_t top, act, bottom;
|
|
||||||
struct loaded_domain *domain;
|
|
||||||
|
|
||||||
if (domain_file->decided == 0)
|
|
||||||
_nl_load_domain (domain_file);
|
|
||||||
|
|
||||||
if (domain_file->data == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
domain = (struct loaded_domain *) domain_file->data;
|
|
||||||
|
|
||||||
/* Locate the MSGID and its translation. */
|
|
||||||
if (domain->hash_size > 2 && domain->hash_tab != NULL)
|
|
||||||
{
|
|
||||||
/* Use the hashing table. */
|
|
||||||
nls_uint32 len = strlen (msgid);
|
|
||||||
nls_uint32 hash_val = hash_string (msgid);
|
|
||||||
nls_uint32 idx = hash_val % domain->hash_size;
|
|
||||||
nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
|
|
||||||
nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
|
|
||||||
|
|
||||||
if (nstr == 0)
|
|
||||||
/* Hash table entry is empty. */
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
|
|
||||||
&& strcmp (msgid,
|
|
||||||
domain->data + W (domain->must_swap,
|
|
||||||
domain->orig_tab[nstr - 1].offset)) == 0)
|
|
||||||
return (char *) domain->data + W (domain->must_swap,
|
|
||||||
domain->trans_tab[nstr - 1].offset);
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
if (idx >= domain->hash_size - incr)
|
|
||||||
idx -= domain->hash_size - incr;
|
|
||||||
else
|
|
||||||
idx += incr;
|
|
||||||
|
|
||||||
nstr = W (domain->must_swap, domain->hash_tab[idx]);
|
|
||||||
if (nstr == 0)
|
|
||||||
/* Hash table entry is empty. */
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
|
|
||||||
&& strcmp (msgid,
|
|
||||||
domain->data + W (domain->must_swap,
|
|
||||||
domain->orig_tab[nstr - 1].offset))
|
|
||||||
== 0)
|
|
||||||
return (char *) domain->data
|
|
||||||
+ W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now we try the default method: binary search in the sorted
|
|
||||||
array of messages. */
|
|
||||||
bottom = 0;
|
|
||||||
top = domain->nstrings;
|
|
||||||
while (bottom < top)
|
|
||||||
{
|
|
||||||
int cmp_val;
|
|
||||||
|
|
||||||
act = (bottom + top) / 2;
|
|
||||||
cmp_val = strcmp (msgid, domain->data
|
|
||||||
+ W (domain->must_swap,
|
|
||||||
domain->orig_tab[act].offset));
|
|
||||||
if (cmp_val < 0)
|
|
||||||
top = act;
|
|
||||||
else if (cmp_val > 0)
|
|
||||||
bottom = act + 1;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If an translation is found return this. */
|
|
||||||
return bottom >= top ? NULL : (char *) domain->data
|
|
||||||
+ W (domain->must_swap,
|
|
||||||
domain->trans_tab[act].offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Return string representation of locale CATEGORY. */
|
|
||||||
static const char *
|
|
||||||
internal_function
|
|
||||||
category_to_name (category)
|
|
||||||
int category;
|
|
||||||
{
|
|
||||||
const char *retval;
|
|
||||||
|
|
||||||
switch (category)
|
|
||||||
{
|
|
||||||
#ifdef LC_COLLATE
|
|
||||||
case LC_COLLATE:
|
|
||||||
retval = "LC_COLLATE";
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef LC_CTYPE
|
|
||||||
case LC_CTYPE:
|
|
||||||
retval = "LC_CTYPE";
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef LC_MONETARY
|
|
||||||
case LC_MONETARY:
|
|
||||||
retval = "LC_MONETARY";
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef LC_NUMERIC
|
|
||||||
case LC_NUMERIC:
|
|
||||||
retval = "LC_NUMERIC";
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef LC_TIME
|
|
||||||
case LC_TIME:
|
|
||||||
retval = "LC_TIME";
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef LC_MESSAGES
|
|
||||||
case LC_MESSAGES:
|
|
||||||
retval = "LC_MESSAGES";
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef LC_RESPONSE
|
|
||||||
case LC_RESPONSE:
|
|
||||||
retval = "LC_RESPONSE";
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef LC_ALL
|
|
||||||
case LC_ALL:
|
|
||||||
/* This might not make sense but is perhaps better than any other
|
|
||||||
value. */
|
|
||||||
retval = "LC_ALL";
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
/* If you have a better idea for a default value let me know. */
|
|
||||||
retval = "LC_XXX";
|
|
||||||
}
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Guess value of current locale from value of the environment variables. */
|
|
||||||
static const char *
|
|
||||||
internal_function
|
|
||||||
guess_category_value (category, categoryname)
|
|
||||||
int category;
|
|
||||||
const char *categoryname;
|
|
||||||
{
|
|
||||||
const char *retval;
|
|
||||||
|
|
||||||
/* The highest priority value is the `LANGUAGE' environment
|
|
||||||
variable. This is a GNU extension. */
|
|
||||||
retval = getenv ("LANGUAGE");
|
|
||||||
if (retval != NULL && retval[0] != '\0')
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
/* `LANGUAGE' is not set. So we have to proceed with the POSIX
|
|
||||||
methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some
|
|
||||||
systems this can be done by the `setlocale' function itself. */
|
|
||||||
#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
|
|
||||||
return setlocale (category, NULL);
|
|
||||||
#else
|
|
||||||
/* Setting of LC_ALL overwrites all other. */
|
|
||||||
retval = getenv ("LC_ALL");
|
|
||||||
if (retval != NULL && retval[0] != '\0')
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
/* Next comes the name of the desired category. */
|
|
||||||
retval = getenv (categoryname);
|
|
||||||
if (retval != NULL && retval[0] != '\0')
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
/* Last possibility is the LANG environment variable. */
|
|
||||||
retval = getenv ("LANG");
|
|
||||||
if (retval != NULL && retval[0] != '\0')
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
/* We use C as the default domain. POSIX says this is implementation
|
|
||||||
defined. */
|
|
||||||
return "C";
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* @@ begin of epilog @@ */
|
|
||||||
|
|
||||||
/* We don't want libintl.a to depend on any other library. So we
|
|
||||||
avoid the non-standard function stpcpy. In GNU C Library this
|
|
||||||
function is available, though. Also allow the symbol HAVE_STPCPY
|
|
||||||
to be defined. */
|
|
||||||
#if !_LIBC && !HAVE_STPCPY
|
|
||||||
static char *
|
|
||||||
stpcpy (dest, src)
|
|
||||||
char *dest;
|
|
||||||
const char *src;
|
|
||||||
{
|
|
||||||
while ((*dest++ = *src++) != '\0')
|
|
||||||
/* Do nothing. */ ;
|
|
||||||
return dest - 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
/* If we want to free all resources we have to do some work at
|
|
||||||
program's end. */
|
|
||||||
static void __attribute__ ((unused))
|
|
||||||
free_mem (void)
|
|
||||||
{
|
|
||||||
struct binding *runp;
|
|
||||||
|
|
||||||
for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
|
|
||||||
{
|
|
||||||
free (runp->domainname);
|
|
||||||
if (runp->dirname != _nl_default_dirname)
|
|
||||||
/* Yes, this is a pointer comparison. */
|
|
||||||
free (runp->dirname);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_nl_current_default_domain != _nl_default_default_domain)
|
|
||||||
/* Yes, again a pointer comparison. */
|
|
||||||
free ((char *) _nl_current_default_domain);
|
|
||||||
}
|
|
||||||
|
|
||||||
text_set_element (__libc_subfreeres, free_mem);
|
|
||||||
#endif
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,61 @@
|
||||||
|
/* Implementation of the dcngettext(3) function.
|
||||||
|
Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "gettextP.h"
|
||||||
|
#ifdef _LIBC
|
||||||
|
# include <libintl.h>
|
||||||
|
#else
|
||||||
|
# include "libgnuintl.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
|
with existing names and they should follow ANSI C. But this source
|
||||||
|
code is also used in GNU C Library where the names have a __
|
||||||
|
prefix. So we have to make a difference here. */
|
||||||
|
#ifdef _LIBC
|
||||||
|
# define DCNGETTEXT __dcngettext
|
||||||
|
# define DCIGETTEXT __dcigettext
|
||||||
|
#else
|
||||||
|
# define DCNGETTEXT libintl_dcngettext
|
||||||
|
# define DCIGETTEXT libintl_dcigettext
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||||
|
locale. */
|
||||||
|
char *
|
||||||
|
DCNGETTEXT (domainname, msgid1, msgid2, n, category)
|
||||||
|
const char *domainname;
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
|
int category;
|
||||||
|
{
|
||||||
|
return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
/* Alias for function name in GNU C Library. */
|
||||||
|
INTDEF(__dcngettext)
|
||||||
|
weak_alias (__dcngettext, dcngettext);
|
||||||
|
#endif
|
|
@ -1,32 +1,32 @@
|
||||||
/* Implementation of the dgettext(3) function
|
/* Implementation of the dgettext(3) function.
|
||||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined HAVE_LOCALE_H || defined _LIBC
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
|
#include "gettextP.h"
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
# include "libgettext.h"
|
# include "libgnuintl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
@ -37,10 +37,10 @@
|
||||||
prefix. So we have to make a difference here. */
|
prefix. So we have to make a difference here. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define DGETTEXT __dgettext
|
# define DGETTEXT __dgettext
|
||||||
# define DCGETTEXT __dcgettext
|
# define DCGETTEXT INTUSE(__dcgettext)
|
||||||
#else
|
#else
|
||||||
# define DGETTEXT dgettext__
|
# define DGETTEXT libintl_dgettext
|
||||||
# define DCGETTEXT dcgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
/* Implementation of the dngettext(3) function.
|
||||||
|
Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
#include "gettextP.h"
|
||||||
|
#ifdef _LIBC
|
||||||
|
# include <libintl.h>
|
||||||
|
#else
|
||||||
|
# include "libgnuintl.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
|
with existing names and they should follow ANSI C. But this source
|
||||||
|
code is also used in GNU C Library where the names have a __
|
||||||
|
prefix. So we have to make a difference here. */
|
||||||
|
#ifdef _LIBC
|
||||||
|
# define DNGETTEXT __dngettext
|
||||||
|
# define DCNGETTEXT INTUSE(__dcngettext)
|
||||||
|
#else
|
||||||
|
# define DNGETTEXT 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 (domainname, msgid1, msgid2, n)
|
||||||
|
const char *domainname;
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
|
{
|
||||||
|
return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
/* Alias for function name in GNU C Library. */
|
||||||
|
weak_alias (__dngettext, dngettext);
|
||||||
|
#endif
|
|
@ -0,0 +1,114 @@
|
||||||
|
/* Plural expression evaluation.
|
||||||
|
Copyright (C) 2000-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef STATIC
|
||||||
|
#define STATIC static
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Evaluate the plural expression and return an index value. */
|
||||||
|
STATIC unsigned long int plural_eval PARAMS ((struct expression *pexp,
|
||||||
|
unsigned long int n))
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
unsigned long int
|
||||||
|
internal_function
|
||||||
|
plural_eval (pexp, n)
|
||||||
|
struct expression *pexp;
|
||||||
|
unsigned long int n;
|
||||||
|
{
|
||||||
|
switch (pexp->nargs)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
switch (pexp->operation)
|
||||||
|
{
|
||||||
|
case var:
|
||||||
|
return n;
|
||||||
|
case num:
|
||||||
|
return pexp->val.num;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
/* pexp->operation must be lnot. */
|
||||||
|
unsigned long int arg = plural_eval (pexp->val.args[0], n);
|
||||||
|
return ! arg;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
|
||||||
|
if (pexp->operation == lor)
|
||||||
|
return leftarg || plural_eval (pexp->val.args[1], n);
|
||||||
|
else if (pexp->operation == land)
|
||||||
|
return leftarg && plural_eval (pexp->val.args[1], n);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
|
||||||
|
|
||||||
|
switch (pexp->operation)
|
||||||
|
{
|
||||||
|
case mult:
|
||||||
|
return leftarg * rightarg;
|
||||||
|
case divide:
|
||||||
|
#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;
|
||||||
|
}
|
|
@ -1,33 +1,27 @@
|
||||||
/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined _LIBC
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_STRING_H || defined _LIBC
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#else
|
|
||||||
# include <strings.h>
|
|
||||||
#endif
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include "loadinfo.h"
|
#include "loadinfo.h"
|
||||||
|
@ -43,6 +37,18 @@
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
|
char *
|
||||||
|
_nl_find_language (name)
|
||||||
|
const char *name;
|
||||||
|
{
|
||||||
|
while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
|
||||||
|
&& name[0] != '+' && name[0] != ',')
|
||||||
|
++name;
|
||||||
|
|
||||||
|
return (char *) name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
_nl_explode_name (name, language, modifier, territory, codeset,
|
_nl_explode_name (name, language, modifier, territory, codeset,
|
||||||
normalized_codeset, special, sponsor, revision)
|
normalized_codeset, special, sponsor, revision)
|
||||||
|
@ -74,9 +80,7 @@ _nl_explode_name (name, language, modifier, territory, codeset,
|
||||||
mask = 0;
|
mask = 0;
|
||||||
syntax = undecided;
|
syntax = undecided;
|
||||||
*language = cp = name;
|
*language = cp = name;
|
||||||
while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
|
cp = _nl_find_language (*language);
|
||||||
&& cp[0] != '+' && cp[0] != ',')
|
|
||||||
++cp;
|
|
||||||
|
|
||||||
if (*language == cp)
|
if (*language == cp)
|
||||||
/* This does not make sense: language has to be specified. Use
|
/* This does not make sense: language has to be specified. Use
|
||||||
|
|
|
@ -1,64 +1,40 @@
|
||||||
/* Handle list of needed message catalogs
|
/* Handle list of needed message catalogs
|
||||||
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
Written by Ulrich Drepper <drepper@gnu.org>, 1995.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined _LIBC
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#else
|
|
||||||
# ifdef HAVE_MALLOC_H
|
|
||||||
# include <malloc.h>
|
|
||||||
# else
|
|
||||||
void free ();
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_STRING_H || defined _LIBC
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#else
|
|
||||||
# include <strings.h>
|
|
||||||
# ifndef memcpy
|
|
||||||
# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
#if defined HAVE_UNISTD_H || defined _LIBC
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gettext.h"
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
# include "libgettext.h"
|
# include "libgnuintl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
@ -71,10 +47,11 @@ static struct loaded_l10nfile *_nl_loaded_domains;
|
||||||
established bindings. */
|
established bindings. */
|
||||||
struct loaded_l10nfile *
|
struct loaded_l10nfile *
|
||||||
internal_function
|
internal_function
|
||||||
_nl_find_domain (dirname, locale, domainname)
|
_nl_find_domain (dirname, locale, domainname, domainbinding)
|
||||||
const char *dirname;
|
const char *dirname;
|
||||||
char *locale;
|
char *locale;
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
|
struct binding *domainbinding;
|
||||||
{
|
{
|
||||||
struct loaded_l10nfile *retval;
|
struct loaded_l10nfile *retval;
|
||||||
const char *language;
|
const char *language;
|
||||||
|
@ -120,7 +97,7 @@ _nl_find_domain (dirname, locale, domainname)
|
||||||
int cnt;
|
int cnt;
|
||||||
|
|
||||||
if (retval->decided == 0)
|
if (retval->decided == 0)
|
||||||
_nl_load_domain (retval);
|
_nl_load_domain (retval, domainbinding);
|
||||||
|
|
||||||
if (retval->data != NULL)
|
if (retval->data != NULL)
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -128,7 +105,7 @@ _nl_find_domain (dirname, locale, domainname)
|
||||||
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
|
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
|
||||||
{
|
{
|
||||||
if (retval->successor[cnt]->decided == 0)
|
if (retval->successor[cnt]->decided == 0)
|
||||||
_nl_load_domain (retval->successor[cnt]);
|
_nl_load_domain (retval->successor[cnt], domainbinding);
|
||||||
|
|
||||||
if (retval->successor[cnt]->data != NULL)
|
if (retval->successor[cnt]->data != NULL)
|
||||||
break;
|
break;
|
||||||
|
@ -175,14 +152,14 @@ _nl_find_domain (dirname, locale, domainname)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (retval->decided == 0)
|
if (retval->decided == 0)
|
||||||
_nl_load_domain (retval);
|
_nl_load_domain (retval, domainbinding);
|
||||||
if (retval->data == NULL)
|
if (retval->data == NULL)
|
||||||
{
|
{
|
||||||
int cnt;
|
int cnt;
|
||||||
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
|
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
|
||||||
{
|
{
|
||||||
if (retval->successor[cnt]->decided == 0)
|
if (retval->successor[cnt]->decided == 0)
|
||||||
_nl_load_domain (retval->successor[cnt]);
|
_nl_load_domain (retval->successor[cnt], domainbinding);
|
||||||
if (retval->successor[cnt]->data != NULL)
|
if (retval->successor[cnt]->data != NULL)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -192,6 +169,10 @@ _nl_find_domain (dirname, locale, domainname)
|
||||||
if (alias_value != NULL)
|
if (alias_value != NULL)
|
||||||
free (locale);
|
free (locale);
|
||||||
|
|
||||||
|
/* The space for normalized_codeset is dynamically allocated. Free it. */
|
||||||
|
if (mask & XPG_NORM_CODESET)
|
||||||
|
free ((void *) normalized_codeset);
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,6 +189,7 @@ free_mem (void)
|
||||||
if (runp->data != NULL)
|
if (runp->data != NULL)
|
||||||
_nl_unload_domain ((struct loaded_domain *) runp->data);
|
_nl_unload_domain ((struct loaded_domain *) runp->data);
|
||||||
runp = runp->next;
|
runp = runp->next;
|
||||||
|
free ((char *) here->filename);
|
||||||
free (here);
|
free (here);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
/* Implementation of gettext(3) function.
|
/* Implementation of gettext(3) function.
|
||||||
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
|
@ -23,21 +24,14 @@
|
||||||
# define __need_NULL
|
# define __need_NULL
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
#else
|
#else
|
||||||
# ifdef STDC_HEADERS
|
|
||||||
# include <stdlib.h> /* Just for NULL. */
|
# include <stdlib.h> /* Just for NULL. */
|
||||||
# else
|
|
||||||
# ifdef HAVE_STRING_H
|
|
||||||
# include <string.h>
|
|
||||||
# else
|
|
||||||
# define NULL ((void *) 0)
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "gettextP.h"
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
# include "libgettext.h"
|
# include "libgnuintl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
@ -48,10 +42,10 @@
|
||||||
prefix. So we have to make a difference here. */
|
prefix. So we have to make a difference here. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define GETTEXT __gettext
|
# define GETTEXT __gettext
|
||||||
# define DGETTEXT __dgettext
|
# define DCGETTEXT INTUSE(__dcgettext)
|
||||||
#else
|
#else
|
||||||
# define GETTEXT gettext__
|
# define GETTEXT libintl_gettext
|
||||||
# define DGETTEXT dgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the current default message catalog for the current
|
/* Look up MSGID in the current default message catalog for the current
|
||||||
|
@ -61,7 +55,7 @@ char *
|
||||||
GETTEXT (msgid)
|
GETTEXT (msgid)
|
||||||
const char *msgid;
|
const char *msgid;
|
||||||
{
|
{
|
||||||
return DGETTEXT (NULL, msgid);
|
return DCGETTEXT (NULL, msgid, LC_MESSAGES);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
|
|
105
intl/gettext.h
105
intl/gettext.h
|
@ -1,105 +0,0 @@
|
||||||
/* Internal header for GNU gettext internationalization functions.
|
|
||||||
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#ifndef _GETTEXT_H
|
|
||||||
#define _GETTEXT_H 1
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#if HAVE_LIMITS_H || _LIBC
|
|
||||||
# include <limits.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
|
||||||
|
|
||||||
/* The magic number of the GNU message catalog format. */
|
|
||||||
#define _MAGIC 0x950412de
|
|
||||||
#define _MAGIC_SWAPPED 0xde120495
|
|
||||||
|
|
||||||
/* Revision number of the currently used .mo (binary) file format. */
|
|
||||||
#define MO_REVISION_NUMBER 0
|
|
||||||
|
|
||||||
/* The following contortions are an attempt to use the C preprocessor
|
|
||||||
to determine an unsigned integral type that is 32 bits wide. An
|
|
||||||
alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
|
|
||||||
doing that would require that the configure script compile and *run*
|
|
||||||
the resulting executable. Locally running cross-compiled executables
|
|
||||||
is usually not possible. */
|
|
||||||
|
|
||||||
#if __STDC__
|
|
||||||
# define UINT_MAX_32_BITS 4294967295U
|
|
||||||
#else
|
|
||||||
# define UINT_MAX_32_BITS 0xFFFFFFFF
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If UINT_MAX isn't defined, assume it's a 32-bit type.
|
|
||||||
This should be valid for all systems GNU cares about because
|
|
||||||
that doesn't include 16-bit systems, and only modern systems
|
|
||||||
(that certainly have <limits.h>) have 64+-bit integral types. */
|
|
||||||
|
|
||||||
#ifndef UINT_MAX
|
|
||||||
# define UINT_MAX UINT_MAX_32_BITS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if UINT_MAX == UINT_MAX_32_BITS
|
|
||||||
typedef unsigned nls_uint32;
|
|
||||||
#else
|
|
||||||
# if USHRT_MAX == UINT_MAX_32_BITS
|
|
||||||
typedef unsigned short nls_uint32;
|
|
||||||
# else
|
|
||||||
# if ULONG_MAX == UINT_MAX_32_BITS
|
|
||||||
typedef unsigned long nls_uint32;
|
|
||||||
# else
|
|
||||||
/* The following line is intended to throw an error. Using #error is
|
|
||||||
not portable enough. */
|
|
||||||
"Cannot determine unsigned 32-bit data type."
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Header for binary .mo file format. */
|
|
||||||
struct mo_file_header
|
|
||||||
{
|
|
||||||
/* The magic number. */
|
|
||||||
nls_uint32 magic;
|
|
||||||
/* The revision number of the file format. */
|
|
||||||
nls_uint32 revision;
|
|
||||||
/* The number of strings pairs. */
|
|
||||||
nls_uint32 nstrings;
|
|
||||||
/* Offset of table with start offsets of original strings. */
|
|
||||||
nls_uint32 orig_tab_offset;
|
|
||||||
/* Offset of table with start offsets of translation strings. */
|
|
||||||
nls_uint32 trans_tab_offset;
|
|
||||||
/* Size of hashing table. */
|
|
||||||
nls_uint32 hash_tab_size;
|
|
||||||
/* Offset of first hashing entry. */
|
|
||||||
nls_uint32 hash_tab_offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct string_desc
|
|
||||||
{
|
|
||||||
/* Length of addressed string. */
|
|
||||||
nls_uint32 length;
|
|
||||||
/* Offset of string in file. */
|
|
||||||
nls_uint32 offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* @@ begin of epilog @@ */
|
|
||||||
|
|
||||||
#endif /* gettext.h */
|
|
207
intl/gettextP.h
207
intl/gettextP.h
|
@ -1,30 +1,43 @@
|
||||||
/* Header describing internals of gettext library
|
/* Header describing internals of libintl library.
|
||||||
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifndef _GETTEXTP_H
|
#ifndef _GETTEXTP_H
|
||||||
#define _GETTEXTP_H
|
#define _GETTEXTP_H
|
||||||
|
|
||||||
|
#include <stddef.h> /* Get size_t. */
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
# include "../iconv/gconv_int.h"
|
||||||
|
#else
|
||||||
|
# if HAVE_ICONV
|
||||||
|
# include <iconv.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "loadinfo.h"
|
#include "loadinfo.h"
|
||||||
|
|
||||||
|
#include "gmo.h" /* Get nls_uint32. */
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(args) args
|
# define PARAMS(args) args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(args) ()
|
# define PARAMS(args) ()
|
||||||
|
@ -35,6 +48,16 @@
|
||||||
# define internal_function
|
# define internal_function
|
||||||
#endif
|
#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
|
#ifndef W
|
||||||
# define W(flag, data) ((flag) ? SWAP (data) : (data))
|
# define W(flag, data) ((flag) ? SWAP (data) : (data))
|
||||||
#endif
|
#endif
|
||||||
|
@ -44,8 +67,6 @@
|
||||||
# include <byteswap.h>
|
# include <byteswap.h>
|
||||||
# define SWAP(i) bswap_32 (i)
|
# define SWAP(i) bswap_32 (i)
|
||||||
#else
|
#else
|
||||||
static nls_uint32 SWAP PARAMS ((nls_uint32 i));
|
|
||||||
|
|
||||||
static inline nls_uint32
|
static inline nls_uint32
|
||||||
SWAP (i)
|
SWAP (i)
|
||||||
nls_uint32 i;
|
nls_uint32 i;
|
||||||
|
@ -55,34 +76,166 @@ SWAP (i)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct loaded_domain
|
/* In-memory representation of system dependent string. */
|
||||||
|
struct sysdep_string_desc
|
||||||
{
|
{
|
||||||
const char *data;
|
/* Length of addressed string, including the trailing NUL. */
|
||||||
int use_mmap;
|
size_t length;
|
||||||
size_t mmap_size;
|
/* Pointer to addressed string. */
|
||||||
int must_swap;
|
const char *pointer;
|
||||||
nls_uint32 nstrings;
|
|
||||||
struct string_desc *orig_tab;
|
|
||||||
struct string_desc *trans_tab;
|
|
||||||
nls_uint32 hash_size;
|
|
||||||
nls_uint32 *hash_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;
|
||||||
|
|
||||||
|
int codeset_cntr;
|
||||||
|
#ifdef _LIBC
|
||||||
|
__gconv_t conv;
|
||||||
|
#else
|
||||||
|
# if HAVE_ICONV
|
||||||
|
iconv_t conv;
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
char **conv_tab;
|
||||||
|
|
||||||
|
struct expression *plural;
|
||||||
|
unsigned long int nplurals;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* We want to allocate a string at the end of the struct. But ISO C
|
||||||
|
doesn't allow zero sized arrays. */
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# define ZERO 0
|
||||||
|
#else
|
||||||
|
# define ZERO 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* A set of settings bound to a message domain. Used to store settings
|
||||||
|
from bindtextdomain() and bind_textdomain_codeset(). */
|
||||||
struct binding
|
struct binding
|
||||||
{
|
{
|
||||||
struct binding *next;
|
struct binding *next;
|
||||||
char *domainname;
|
|
||||||
char *dirname;
|
char *dirname;
|
||||||
|
int codeset_cntr; /* Incremented each time codeset changes. */
|
||||||
|
char *codeset;
|
||||||
|
char domainname[ZERO];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* A counter which is incremented each time some previous translations
|
||||||
|
become invalid.
|
||||||
|
This variable is part of the external ABI of the GNU libintl. */
|
||||||
|
extern int _nl_msg_cat_cntr;
|
||||||
|
|
||||||
|
#ifndef _LIBC
|
||||||
|
const char *_nl_locale_name PARAMS ((int category, const char *categoryname));
|
||||||
|
#endif
|
||||||
|
|
||||||
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
||||||
char *__locale,
|
char *__locale,
|
||||||
const char *__domainname))
|
const char *__domainname,
|
||||||
|
struct binding *__domainbinding))
|
||||||
internal_function;
|
internal_function;
|
||||||
void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
|
void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
|
||||||
|
struct binding *__domainbinding))
|
||||||
internal_function;
|
internal_function;
|
||||||
void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
|
void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
|
||||||
internal_function;
|
internal_function;
|
||||||
|
const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
|
||||||
|
struct loaded_domain *__domain,
|
||||||
|
struct binding *__domainbinding))
|
||||||
|
internal_function;
|
||||||
|
void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
|
||||||
|
struct binding *domainbinding,
|
||||||
|
const char *msgid, size_t *lengthp))
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
extern char *__gettext PARAMS ((const char *__msgid));
|
||||||
|
extern char *__dgettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid));
|
||||||
|
extern char *__dcgettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid, int __category));
|
||||||
|
extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
|
||||||
|
unsigned long int __n));
|
||||||
|
extern char *__dngettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1, const char *__msgid2,
|
||||||
|
unsigned long int n));
|
||||||
|
extern char *__dcngettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1, const char *__msgid2,
|
||||||
|
unsigned long int __n, int __category));
|
||||||
|
extern char *__dcigettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1, const char *__msgid2,
|
||||||
|
int __plural, unsigned long int __n,
|
||||||
|
int __category));
|
||||||
|
extern char *__textdomain PARAMS ((const char *__domainname));
|
||||||
|
extern char *__bindtextdomain PARAMS ((const char *__domainname,
|
||||||
|
const char *__dirname));
|
||||||
|
extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
|
||||||
|
const char *__codeset));
|
||||||
|
#else
|
||||||
|
extern char *libintl_gettext PARAMS ((const char *__msgid));
|
||||||
|
extern char *libintl_dgettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid));
|
||||||
|
extern char *libintl_dcgettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid, int __category));
|
||||||
|
extern char *libintl_ngettext PARAMS ((const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n));
|
||||||
|
extern char *libintl_dngettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n));
|
||||||
|
extern char *libintl_dcngettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n,
|
||||||
|
int __category));
|
||||||
|
extern char *libintl_dcigettext PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
int __plural, unsigned long int __n,
|
||||||
|
int __category));
|
||||||
|
extern char *libintl_textdomain PARAMS ((const char *__domainname));
|
||||||
|
extern char *libintl_bindtextdomain PARAMS ((const char *__domainname,
|
||||||
|
const char *__dirname));
|
||||||
|
extern char *libintl_bind_textdomain_codeset PARAMS ((const char *__domainname,
|
||||||
|
const char *__codeset));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* @@ begin of epilog @@ */
|
/* @@ begin of epilog @@ */
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,148 @@
|
||||||
|
/* Description of GNU message catalog format: general file layout.
|
||||||
|
Copyright (C) 1995, 1997, 2000-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _GETTEXT_H
|
||||||
|
#define _GETTEXT_H 1
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
|
/* The magic number of the GNU message catalog format. */
|
||||||
|
#define _MAGIC 0x950412de
|
||||||
|
#define _MAGIC_SWAPPED 0xde120495
|
||||||
|
|
||||||
|
/* Revision number of the currently used .mo (binary) file format. */
|
||||||
|
#define MO_REVISION_NUMBER 0
|
||||||
|
|
||||||
|
/* The following contortions are an attempt to use the C preprocessor
|
||||||
|
to determine an unsigned integral type that is 32 bits wide. An
|
||||||
|
alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
|
||||||
|
as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
|
||||||
|
when cross-compiling. */
|
||||||
|
|
||||||
|
#if __STDC__
|
||||||
|
# define UINT_MAX_32_BITS 4294967295U
|
||||||
|
#else
|
||||||
|
# define UINT_MAX_32_BITS 0xFFFFFFFF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* If UINT_MAX isn't defined, assume it's a 32-bit type.
|
||||||
|
This should be valid for all systems GNU cares about because
|
||||||
|
that doesn't include 16-bit systems, and only modern systems
|
||||||
|
(that certainly have <limits.h>) have 64+-bit integral types. */
|
||||||
|
|
||||||
|
#ifndef UINT_MAX
|
||||||
|
# define UINT_MAX UINT_MAX_32_BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if UINT_MAX == UINT_MAX_32_BITS
|
||||||
|
typedef unsigned nls_uint32;
|
||||||
|
#else
|
||||||
|
# if USHRT_MAX == UINT_MAX_32_BITS
|
||||||
|
typedef unsigned short nls_uint32;
|
||||||
|
# else
|
||||||
|
# if ULONG_MAX == UINT_MAX_32_BITS
|
||||||
|
typedef unsigned long nls_uint32;
|
||||||
|
# else
|
||||||
|
/* The following line is intended to throw an error. Using #error is
|
||||||
|
not portable enough. */
|
||||||
|
"Cannot determine unsigned 32-bit data type."
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Header for binary .mo file format. */
|
||||||
|
struct mo_file_header
|
||||||
|
{
|
||||||
|
/* The magic number. */
|
||||||
|
nls_uint32 magic;
|
||||||
|
/* The revision number of the file format. */
|
||||||
|
nls_uint32 revision;
|
||||||
|
|
||||||
|
/* The following are only used in .mo files with major revision 0. */
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
{
|
||||||
|
/* Size of static segment. */
|
||||||
|
nls_uint32 segsize;
|
||||||
|
/* Reference to system dependent string segment, or ~0 at the end. */
|
||||||
|
nls_uint32 sysdepref;
|
||||||
|
} 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 */
|
|
@ -1,25 +1,25 @@
|
||||||
/* Implements a string hashing function.
|
/* Description of GNU message catalog format: string hashing function.
|
||||||
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
You should have received a copy of the GNU Library General Public
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
License along with this program; if not, write to the Free Software
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
Boston, MA 02111-1307, USA. */
|
USA. */
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(Args) Args
|
# define PARAMS(Args) Args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(Args) ()
|
# define PARAMS(Args) ()
|
||||||
|
@ -33,9 +33,9 @@
|
||||||
/* Defines the so called `hashpjw' function by P.J. Weinberger
|
/* Defines the so called `hashpjw' function by P.J. Weinberger
|
||||||
[see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
|
[see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
|
||||||
1986, 1987 Bell Telephone Laboratories, Inc.] */
|
1986, 1987 Bell Telephone Laboratories, Inc.] */
|
||||||
static unsigned long hash_string PARAMS ((const char *__str_param));
|
static unsigned long int hash_string PARAMS ((const char *__str_param));
|
||||||
|
|
||||||
static inline unsigned long
|
static inline unsigned long int
|
||||||
hash_string (str_param)
|
hash_string (str_param)
|
||||||
const char *str_param;
|
const char *str_param;
|
||||||
{
|
{
|
||||||
|
@ -47,8 +47,8 @@ hash_string (str_param)
|
||||||
while (*str != '\0')
|
while (*str != '\0')
|
||||||
{
|
{
|
||||||
hval <<= 4;
|
hval <<= 4;
|
||||||
hval += (unsigned long) *str++;
|
hval += (unsigned long int) *str++;
|
||||||
g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
|
g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
|
||||||
if (g != 0)
|
if (g != 0)
|
||||||
{
|
{
|
||||||
hval ^= g >> (HASHWORDBITS - 8);
|
hval ^= g >> (HASHWORDBITS - 8);
|
||||||
|
|
|
@ -1,43 +1,64 @@
|
||||||
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
|
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
|
||||||
Library.
|
Library.
|
||||||
Copyright (C) 1995 Software Foundation, Inc.
|
Copyright (C) 1995, 2000-2002 Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software
|
License along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "libgettext.h"
|
#define _INTL_REDIRECT_MACROS
|
||||||
|
#include "libgnuintl.h"
|
||||||
|
#include "gettextP.h"
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ 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. */
|
||||||
|
|
||||||
|
|
||||||
#undef gettext
|
#undef gettext
|
||||||
#undef dgettext
|
#undef dgettext
|
||||||
#undef dcgettext
|
#undef dcgettext
|
||||||
|
#undef ngettext
|
||||||
|
#undef dngettext
|
||||||
|
#undef dcngettext
|
||||||
#undef textdomain
|
#undef textdomain
|
||||||
#undef bindtextdomain
|
#undef bindtextdomain
|
||||||
|
#undef bind_textdomain_codeset
|
||||||
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
bindtextdomain (domainname, dirname)
|
gettext (msgid)
|
||||||
const char *domainname;
|
const char *msgid;
|
||||||
const char *dirname;
|
|
||||||
{
|
{
|
||||||
return bindtextdomain__ (domainname, dirname);
|
return libintl_gettext (msgid);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
dgettext (domainname, msgid)
|
||||||
|
const char *domainname;
|
||||||
|
const char *msgid;
|
||||||
|
{
|
||||||
|
return libintl_dgettext (domainname, msgid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,24 +68,40 @@ dcgettext (domainname, msgid, category)
|
||||||
const char *msgid;
|
const char *msgid;
|
||||||
int category;
|
int category;
|
||||||
{
|
{
|
||||||
return dcgettext__ (domainname, msgid, category);
|
return libintl_dcgettext (domainname, msgid, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
dgettext (domainname, msgid)
|
ngettext (msgid1, msgid2, n)
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
|
{
|
||||||
|
return libintl_ngettext (msgid1, msgid2, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
dngettext (domainname, msgid1, msgid2, n)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
const char *msgid;
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
{
|
{
|
||||||
return dgettext__ (domainname, msgid);
|
return libintl_dngettext (domainname, msgid1, msgid2, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
gettext (msgid)
|
dcngettext (domainname, msgid1, msgid2, n, category)
|
||||||
const char *msgid;
|
const char *domainname;
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
|
int category;
|
||||||
{
|
{
|
||||||
return gettext__ (msgid);
|
return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,5 +109,23 @@ char *
|
||||||
textdomain (domainname)
|
textdomain (domainname)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
{
|
{
|
||||||
return textdomain__ (domainname);
|
return libintl_textdomain (domainname);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
bindtextdomain (domainname, dirname)
|
||||||
|
const char *domainname;
|
||||||
|
const char *dirname;
|
||||||
|
{
|
||||||
|
return libintl_bindtextdomain (domainname, dirname);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
bind_textdomain_codeset (domainname, codeset)
|
||||||
|
const char *domainname;
|
||||||
|
const char *codeset;
|
||||||
|
{
|
||||||
|
return libintl_bind_textdomain_codeset (domainname, codeset);
|
||||||
}
|
}
|
||||||
|
|
178
intl/l10nflist.c
178
intl/l10nflist.c
|
@ -1,52 +1,40 @@
|
||||||
/* Handle list of needed message catalogs
|
/* Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* Tell glibc's <string.h> to provide a prototype for stpcpy().
|
||||||
|
This must come before <config.h> because <config.h> may include
|
||||||
|
<features.h>, and once <features.h> has been included, it's too late. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# define _GNU_SOURCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined HAVE_STRING_H || defined _LIBC
|
|
||||||
# ifndef _GNU_SOURCE
|
|
||||||
# define _GNU_SOURCE 1
|
|
||||||
# endif
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#else
|
|
||||||
# include <strings.h>
|
|
||||||
# ifndef memcpy
|
|
||||||
# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined _LIBC || defined HAVE_ARGZ_H
|
#if defined _LIBC || defined HAVE_ARGZ_H
|
||||||
# include <argz.h>
|
# include <argz.h>
|
||||||
#endif
|
#endif
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined _LIBC
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "loadinfo.h"
|
#include "loadinfo.h"
|
||||||
|
|
||||||
|
@ -74,6 +62,24 @@ static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||||
# endif
|
# endif
|
||||||
#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 __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS */
|
||||||
|
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||||
|
# define HAS_DEVICE(P) \
|
||||||
|
((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
|
||||||
|
&& (P)[1] == ':')
|
||||||
|
# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
|
||||||
|
#else
|
||||||
|
/* Unix */
|
||||||
|
# define ISSLASH(C) ((C) == '/')
|
||||||
|
# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define function which are usually not available. */
|
/* Define function which are usually not available. */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
||||||
|
@ -97,6 +103,10 @@ argz_count__ (argz, len)
|
||||||
}
|
}
|
||||||
# undef __argz_count
|
# undef __argz_count
|
||||||
# define __argz_count(argz, len) argz_count__ (argz, len)
|
# define __argz_count(argz, len) argz_count__ (argz, len)
|
||||||
|
#else
|
||||||
|
# ifdef _LIBC
|
||||||
|
# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
|
||||||
|
# endif
|
||||||
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
|
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
||||||
|
@ -121,6 +131,11 @@ argz_stringify__ (argz, len, sep)
|
||||||
}
|
}
|
||||||
# undef __argz_stringify
|
# undef __argz_stringify
|
||||||
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
|
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
|
||||||
|
#else
|
||||||
|
# ifdef _LIBC
|
||||||
|
# define __argz_stringify(argz, len, sep) \
|
||||||
|
INTUSE(__argz_stringify) (argz, len, sep)
|
||||||
|
# endif
|
||||||
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
||||||
|
@ -188,12 +203,18 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
int do_allocate;
|
int do_allocate;
|
||||||
{
|
{
|
||||||
char *abs_filename;
|
char *abs_filename;
|
||||||
struct loaded_l10nfile *last = NULL;
|
struct loaded_l10nfile **lastp;
|
||||||
struct loaded_l10nfile *retval;
|
struct loaded_l10nfile *retval;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
size_t dirlist_count;
|
||||||
size_t entries;
|
size_t entries;
|
||||||
int cnt;
|
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. */
|
/* Allocate room for the full file name. */
|
||||||
abs_filename = (char *) malloc (dirlist_len
|
abs_filename = (char *) malloc (dirlist_len
|
||||||
+ strlen (language)
|
+ strlen (language)
|
||||||
|
@ -211,7 +232,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
+ (((mask & CEN_SPONSOR) != 0
|
+ (((mask & CEN_SPONSOR) != 0
|
||||||
|| (mask & CEN_REVISION) != 0)
|
|| (mask & CEN_REVISION) != 0)
|
||||||
? (1 + ((mask & CEN_SPONSOR) != 0
|
? (1 + ((mask & CEN_SPONSOR) != 0
|
||||||
? strlen (sponsor) + 1 : 0)
|
? strlen (sponsor) : 0)
|
||||||
+ ((mask & CEN_REVISION) != 0
|
+ ((mask & CEN_REVISION) != 0
|
||||||
? strlen (revision) + 1 : 0)) : 0)
|
? strlen (revision) + 1 : 0)) : 0)
|
||||||
+ 1 + strlen (filename) + 1);
|
+ 1 + strlen (filename) + 1);
|
||||||
|
@ -219,14 +240,16 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
if (abs_filename == NULL)
|
if (abs_filename == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
retval = NULL;
|
|
||||||
last = NULL;
|
|
||||||
|
|
||||||
/* Construct file name. */
|
/* Construct file name. */
|
||||||
memcpy (abs_filename, dirlist, dirlist_len);
|
cp = abs_filename;
|
||||||
__argz_stringify (abs_filename, dirlist_len, ':');
|
if (dirlist_len > 0)
|
||||||
cp = abs_filename + (dirlist_len - 1);
|
{
|
||||||
*cp++ = '/';
|
memcpy (cp, dirlist, dirlist_len);
|
||||||
|
__argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
|
||||||
|
cp += dirlist_len;
|
||||||
|
cp[-1] = '/';
|
||||||
|
}
|
||||||
|
|
||||||
cp = stpcpy (cp, language);
|
cp = stpcpy (cp, language);
|
||||||
|
|
||||||
if ((mask & TERRITORY) != 0)
|
if ((mask & TERRITORY) != 0)
|
||||||
|
@ -273,7 +296,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
|
|
||||||
/* Look in list of already loaded domains whether it is already
|
/* Look in list of already loaded domains whether it is already
|
||||||
available. */
|
available. */
|
||||||
last = NULL;
|
lastp = l10nfile_list;
|
||||||
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
|
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
|
||||||
if (retval->filename != NULL)
|
if (retval->filename != NULL)
|
||||||
{
|
{
|
||||||
|
@ -288,7 +311,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
last = retval;
|
lastp = &retval->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval != NULL || do_allocate == 0)
|
if (retval != NULL || do_allocate == 0)
|
||||||
|
@ -297,39 +320,50 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = (struct loaded_l10nfile *)
|
dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
|
||||||
malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
|
|
||||||
* (1 << pop (mask))
|
/* 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 *)));
|
* sizeof (struct loaded_l10nfile *)));
|
||||||
if (retval == NULL)
|
if (retval == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
retval->filename = abs_filename;
|
retval->filename = abs_filename;
|
||||||
retval->decided = (__argz_count (dirlist, dirlist_len) != 1
|
|
||||||
|
/* 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_CODESET) != 0
|
||||||
&& (mask & XPG_NORM_CODESET) != 0));
|
&& (mask & XPG_NORM_CODESET) != 0));
|
||||||
retval->data = NULL;
|
retval->data = NULL;
|
||||||
|
|
||||||
if (last == NULL)
|
retval->next = *lastp;
|
||||||
{
|
*lastp = retval;
|
||||||
retval->next = *l10nfile_list;
|
|
||||||
*l10nfile_list = retval;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
retval->next = last->next;
|
|
||||||
last->next = retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
entries = 0;
|
entries = 0;
|
||||||
/* If the DIRLIST is a real list the RETVAL entry corresponds not to
|
/* Recurse to fill the inheritance list of RETVAL.
|
||||||
a real file. So we have to use the DIRLIST separation mechanism
|
If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
|
||||||
of the inner loop. */
|
entry does not correspond to a real file; retval->filename contains
|
||||||
cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
|
colons. In this case we loop across all elements of DIRLIST and
|
||||||
for (; cnt >= 0; --cnt)
|
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
|
if ((cnt & ~mask) == 0
|
||||||
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
|
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
|
||||||
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
|
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
|
||||||
|
{
|
||||||
|
if (dirlist_count > 1)
|
||||||
{
|
{
|
||||||
/* Iterate over all elements of the DIRLIST. */
|
/* Iterate over all elements of the DIRLIST. */
|
||||||
char *dir = NULL;
|
char *dir = NULL;
|
||||||
|
@ -337,8 +371,15 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
|
while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
|
||||||
!= NULL)
|
!= NULL)
|
||||||
retval->successor[entries++]
|
retval->successor[entries++]
|
||||||
= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
|
= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
|
||||||
language, territory, codeset,
|
cnt, language, territory, codeset,
|
||||||
|
normalized_codeset, modifier, special,
|
||||||
|
sponsor, revision, filename, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
retval->successor[entries++]
|
||||||
|
= _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
|
||||||
|
cnt, language, territory, codeset,
|
||||||
normalized_codeset, modifier, special,
|
normalized_codeset, modifier, special,
|
||||||
sponsor, revision, filename, 1);
|
sponsor, revision, filename, 1);
|
||||||
}
|
}
|
||||||
|
@ -349,10 +390,11 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
|
|
||||||
/* Normalize codeset name. There is no standard for the codeset
|
/* Normalize codeset name. There is no standard for the codeset
|
||||||
names. Normalization allows the user to use any of the common
|
names. Normalization allows the user to use any of the common
|
||||||
names. */
|
names. The return value is dynamically allocated and has to be
|
||||||
|
freed by the caller. */
|
||||||
const char *
|
const char *
|
||||||
_nl_normalize_codeset (codeset, name_len)
|
_nl_normalize_codeset (codeset, name_len)
|
||||||
const unsigned char *codeset;
|
const char *codeset;
|
||||||
size_t name_len;
|
size_t name_len;
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
@ -362,11 +404,11 @@ _nl_normalize_codeset (codeset, name_len)
|
||||||
size_t cnt;
|
size_t cnt;
|
||||||
|
|
||||||
for (cnt = 0; cnt < name_len; ++cnt)
|
for (cnt = 0; cnt < name_len; ++cnt)
|
||||||
if (isalnum (codeset[cnt]))
|
if (isalnum ((unsigned char) codeset[cnt]))
|
||||||
{
|
{
|
||||||
++len;
|
++len;
|
||||||
|
|
||||||
if (isalpha (codeset[cnt]))
|
if (isalpha ((unsigned char) codeset[cnt]))
|
||||||
only_digit = 0;
|
only_digit = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,9 +422,9 @@ _nl_normalize_codeset (codeset, name_len)
|
||||||
wp = retval;
|
wp = retval;
|
||||||
|
|
||||||
for (cnt = 0; cnt < name_len; ++cnt)
|
for (cnt = 0; cnt < name_len; ++cnt)
|
||||||
if (isalpha (codeset[cnt]))
|
if (isalpha ((unsigned char) codeset[cnt]))
|
||||||
*wp++ = tolower (codeset[cnt]);
|
*wp++ = tolower ((unsigned char) codeset[cnt]);
|
||||||
else if (isdigit (codeset[cnt]))
|
else if (isdigit ((unsigned char) codeset[cnt]))
|
||||||
*wp++ = codeset[cnt];
|
*wp++ = codeset[cnt];
|
||||||
|
|
||||||
*wp = '\0';
|
*wp = '\0';
|
||||||
|
|
|
@ -0,0 +1,296 @@
|
||||||
|
/* Message catalogs for internationalization.
|
||||||
|
Copyright (C) 1995-1997, 2000-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _LIBINTL_H
|
||||||
|
#define _LIBINTL_H 1
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
/* The LC_MESSAGES locale category is the category used by the functions
|
||||||
|
gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
|
||||||
|
On systems that don't define it, use an arbitrary value instead.
|
||||||
|
On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
|
||||||
|
then includes <libintl.h> (i.e. this file!) and then only defines
|
||||||
|
LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
|
||||||
|
in this case. */
|
||||||
|
#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
|
||||||
|
# define LC_MESSAGES 1729
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* We define an additional symbol to signal that we use the GNU
|
||||||
|
implementation of gettext. */
|
||||||
|
#define __USE_GNU_GETTEXT 1
|
||||||
|
|
||||||
|
/* 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 ? 1 : -1)
|
||||||
|
|
||||||
|
/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
|
||||||
|
precedence over _conio_gettext. */
|
||||||
|
#ifdef __DJGPP__
|
||||||
|
# undef gettext
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
|
||||||
|
used by programs. Similarly, test __PROTOTYPES, not PROTOTYPES. */
|
||||||
|
#ifndef _INTL_PARAMS
|
||||||
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
|
# define _INTL_PARAMS(args) args
|
||||||
|
# else
|
||||||
|
# define _INTL_PARAMS(args) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* 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 && (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
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
static inline char *gettext (const char *__msgid)
|
||||||
|
{
|
||||||
|
return libintl_gettext (__msgid);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define gettext libintl_gettext
|
||||||
|
#endif
|
||||||
|
extern char *gettext _INTL_PARAMS ((const char *__msgid))
|
||||||
|
_INTL_ASM (libintl_gettext);
|
||||||
|
#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);
|
||||||
|
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 _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid))
|
||||||
|
_INTL_ASM (libintl_dgettext);
|
||||||
|
#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);
|
||||||
|
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 _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid,
|
||||||
|
int __category))
|
||||||
|
_INTL_ASM (libintl_dcgettext);
|
||||||
|
#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);
|
||||||
|
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 _INTL_PARAMS ((const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n))
|
||||||
|
_INTL_ASM (libintl_ngettext);
|
||||||
|
#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);
|
||||||
|
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 _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n))
|
||||||
|
_INTL_ASM (libintl_dngettext);
|
||||||
|
#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);
|
||||||
|
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 _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n,
|
||||||
|
int __category))
|
||||||
|
_INTL_ASM (libintl_dcngettext);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Set the current default message catalog to DOMAINNAME.
|
||||||
|
If DOMAINNAME is null, return the current default.
|
||||||
|
If DOMAINNAME is "", reset to the default of "messages". */
|
||||||
|
#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 _INTL_PARAMS ((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 _INTL_PARAMS ((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 _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__codeset))
|
||||||
|
_INTL_ASM (libintl_bind_textdomain_codeset);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* libintl.h */
|
|
@ -1,100 +0,0 @@
|
||||||
# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
|
|
||||||
# Copyright (C) 1995 Free Software Foundation, Inc.
|
|
||||||
# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The first directive in the .msg should be the definition of the
|
|
||||||
# message set number. We use always set number 1.
|
|
||||||
#
|
|
||||||
1 {
|
|
||||||
i\
|
|
||||||
$set 1 # Automatically created by po2msg.sed
|
|
||||||
h
|
|
||||||
s/.*/0/
|
|
||||||
x
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# Mitch's old catalog format does not allow comments.
|
|
||||||
#
|
|
||||||
# We copy the original message as a comment into the .msg file.
|
|
||||||
#
|
|
||||||
/^msgid/ {
|
|
||||||
s/msgid[ ]*"//
|
|
||||||
#
|
|
||||||
# This does not work now with the new format.
|
|
||||||
# /"$/! {
|
|
||||||
# s/\\$//
|
|
||||||
# s/$/ ... (more lines following)"/
|
|
||||||
# }
|
|
||||||
x
|
|
||||||
# The following nice solution is by
|
|
||||||
# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
|
|
||||||
td
|
|
||||||
# Increment a decimal number in pattern space.
|
|
||||||
# First hide trailing `9' digits.
|
|
||||||
:d
|
|
||||||
s/9\(_*\)$/_\1/
|
|
||||||
td
|
|
||||||
# Assure at least one digit is available.
|
|
||||||
s/^\(_*\)$/0\1/
|
|
||||||
# Increment the last digit.
|
|
||||||
s/8\(_*\)$/9\1/
|
|
||||||
s/7\(_*\)$/8\1/
|
|
||||||
s/6\(_*\)$/7\1/
|
|
||||||
s/5\(_*\)$/6\1/
|
|
||||||
s/4\(_*\)$/5\1/
|
|
||||||
s/3\(_*\)$/4\1/
|
|
||||||
s/2\(_*\)$/3\1/
|
|
||||||
s/1\(_*\)$/2\1/
|
|
||||||
s/0\(_*\)$/1\1/
|
|
||||||
# Convert the hidden `9' digits to `0's.
|
|
||||||
s/_/0/g
|
|
||||||
x
|
|
||||||
G
|
|
||||||
s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# The .msg file contains, other then the .po file, only the translations
|
|
||||||
# but each given a unique ID. Starting from 1 and incrementing by 1 for
|
|
||||||
# each message we assign them to the messages.
|
|
||||||
# It is important that the .po file used to generate the cat-id-tbl.c file
|
|
||||||
# (with po-to-tbl) is the same as the one used here. (At least the order
|
|
||||||
# of declarations must not be changed.)
|
|
||||||
#
|
|
||||||
/^msgstr/ {
|
|
||||||
s/msgstr[ ]*"\(.*\)"/# \1/
|
|
||||||
# Clear substitution flag.
|
|
||||||
tb
|
|
||||||
# Append the next line.
|
|
||||||
:b
|
|
||||||
N
|
|
||||||
# Look whether second part is continuation line.
|
|
||||||
s/\(.*\n\)"\(.*\)"/\1\2/
|
|
||||||
# Yes, then branch.
|
|
||||||
ta
|
|
||||||
P
|
|
||||||
D
|
|
||||||
# Note that D includes a jump to the start!!
|
|
||||||
# We found a continuation line. But before printing insert '\'.
|
|
||||||
:a
|
|
||||||
s/\(.*\)\(\n.*\)/\1\\\2/
|
|
||||||
P
|
|
||||||
# We cannot use D here.
|
|
||||||
s/.*\n\(.*\)/\1/
|
|
||||||
tb
|
|
||||||
}
|
|
||||||
d
|
|
104
intl/loadinfo.h
104
intl/loadinfo.h
|
@ -1,29 +1,64 @@
|
||||||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1996-1999, 2000-2002 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _LOADINFO_H
|
||||||
|
#define _LOADINFO_H 1
|
||||||
|
|
||||||
|
/* Declarations of locale dependent catalog lookup functions.
|
||||||
|
Implemented in
|
||||||
|
|
||||||
|
localealias.c Possibly replace a locale name by another.
|
||||||
|
explodename.c Split a locale name into its various fields.
|
||||||
|
l10nflist.c Generate a list of filenames of possible message catalogs.
|
||||||
|
finddomain.c Find and open the relevant message catalogs.
|
||||||
|
|
||||||
|
The main function _nl_find_domain() in finddomain.c is declared
|
||||||
|
in gettextP.h.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(args) args
|
# define PARAMS(args) args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(args) ()
|
# define PARAMS(args) ()
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef internal_function
|
||||||
|
# define internal_function
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Tell the compiler when a conditional or integer expression is
|
||||||
|
almost always true or almost always false. */
|
||||||
|
#ifndef HAVE_BUILTIN_EXPECT
|
||||||
|
# define __builtin_expect(expr, val) (expr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Separator in PATH like lists of pathnames. */
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS */
|
||||||
|
# define PATH_SEPARATOR ';'
|
||||||
|
#else
|
||||||
|
/* Unix */
|
||||||
|
# define PATH_SEPARATOR ':'
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Encoding of locale name parts. */
|
/* Encoding of locale name parts. */
|
||||||
#define CEN_REVISION 1
|
#define CEN_REVISION 1
|
||||||
#define CEN_SPONSOR 2
|
#define CEN_SPONSOR 2
|
||||||
|
@ -50,9 +85,27 @@ struct loaded_l10nfile
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset,
|
/* Normalize codeset name. There is no standard for the codeset
|
||||||
|
names. Normalization allows the user to use any of the common
|
||||||
|
names. The return value is dynamically allocated and has to be
|
||||||
|
freed by the caller. */
|
||||||
|
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
||||||
size_t name_len));
|
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,
|
||||||
|
SPECIAL, SPONSOR, REVISION 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 *
|
extern struct loaded_l10nfile *
|
||||||
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
||||||
const char *dirlist, size_t dirlist_len, int mask,
|
const char *dirlist, size_t dirlist_len, int mask,
|
||||||
|
@ -63,9 +116,29 @@ _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
||||||
const char *sponsor, const char *revision,
|
const char *sponsor, const char *revision,
|
||||||
const char *filename, int do_allocate));
|
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. */
|
||||||
extern const char *_nl_expand_alias PARAMS ((const char *name));
|
extern const char *_nl_expand_alias PARAMS ((const char *name));
|
||||||
|
|
||||||
|
/* Split a locale name NAME into its pieces: language, modifier,
|
||||||
|
territory, codeset, special, sponsor, revision.
|
||||||
|
NAME gets destructively modified: NUL bytes are inserted here and
|
||||||
|
there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
|
||||||
|
*CODESET, *SPECIAL, *SPONSOR, *REVISION 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, CEN_AUDIENCE for *MODIFIER,
|
||||||
|
TERRITORY for *TERRITORY,
|
||||||
|
XPG_CODESET for *CODESET,
|
||||||
|
XPG_NORM_CODESET for *NORMALIZED_CODESET,
|
||||||
|
CEN_SPECIAL for *SPECIAL,
|
||||||
|
CEN_SPONSOR for *SPONSOR,
|
||||||
|
CEN_REVISION for *REVISION.
|
||||||
|
*/
|
||||||
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
||||||
const char **modifier,
|
const char **modifier,
|
||||||
const char **territory,
|
const char **territory,
|
||||||
|
@ -74,3 +147,10 @@ extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
||||||
const char **special,
|
const char **special,
|
||||||
const char **sponsor,
|
const char **sponsor,
|
||||||
const char **revision));
|
const char **revision));
|
||||||
|
|
||||||
|
/* 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. */
|
||||||
|
extern char *_nl_find_language PARAMS ((const char *name));
|
||||||
|
|
||||||
|
#endif /* loadinfo.h */
|
||||||
|
|
1200
intl/loadmsgcat.c
1200
intl/loadmsgcat.c
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,369 @@
|
||||||
|
/* Determine a canonical name for the current locale's character encoding.
|
||||||
|
|
||||||
|
Copyright (C) 2000-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* Written by Bruno Haible <bruno@clisp.org>. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_STDDEF_H
|
||||||
|
# include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#if HAVE_STRING_H
|
||||||
|
# include <string.h>
|
||||||
|
#else
|
||||||
|
# include <strings.h>
|
||||||
|
#endif
|
||||||
|
#if HAVE_STDLIB_H
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__
|
||||||
|
# undef WIN32 /* avoid warning on mingw32 */
|
||||||
|
# define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __EMX__
|
||||||
|
/* Assume EMX program runs on OS/2, even if compiled under DOS. */
|
||||||
|
# define OS2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined WIN32
|
||||||
|
# if HAVE_LANGINFO_CODESET
|
||||||
|
# include <langinfo.h>
|
||||||
|
# else
|
||||||
|
# if HAVE_SETLOCALE
|
||||||
|
# include <locale.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#elif defined WIN32
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# include <windows.h>
|
||||||
|
#endif
|
||||||
|
#if defined OS2
|
||||||
|
# define INCL_DOS
|
||||||
|
# include <os2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS */
|
||||||
|
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DIRECTORY_SEPARATOR
|
||||||
|
# define DIRECTORY_SEPARATOR '/'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSLASH
|
||||||
|
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_GETC_UNLOCKED
|
||||||
|
# undef getc
|
||||||
|
# define getc getc_unlocked
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
/* When compiling with "gcc -x c++", produce a function with C linkage. */
|
||||||
|
extern "C" const char * locale_charset (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The following static variable is declared 'volatile' to avoid a
|
||||||
|
possible multithread problem in the function get_charset_aliases. If we
|
||||||
|
are running in a threaded environment, and if two threads initialize
|
||||||
|
'charset_aliases' simultaneously, both will produce the same value,
|
||||||
|
and everything will be ok if the two assignments to 'charset_aliases'
|
||||||
|
are atomic. But I don't know what will happen if the two assignments mix. */
|
||||||
|
#if __STDC__ != 1
|
||||||
|
# define volatile /* empty */
|
||||||
|
#endif
|
||||||
|
/* Pointer to the contents of the charset.alias file, if it has already been
|
||||||
|
read, else NULL. Its format is:
|
||||||
|
ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
|
||||||
|
static const char * volatile charset_aliases;
|
||||||
|
|
||||||
|
/* Return a pointer to the contents of the charset.alias file. */
|
||||||
|
static const char *
|
||||||
|
get_charset_aliases ()
|
||||||
|
{
|
||||||
|
const char *cp;
|
||||||
|
|
||||||
|
cp = charset_aliases;
|
||||||
|
if (cp == NULL)
|
||||||
|
{
|
||||||
|
#if !defined WIN32
|
||||||
|
FILE *fp;
|
||||||
|
const char *dir = LIBDIR;
|
||||||
|
const char *base = "charset.alias";
|
||||||
|
char *file_name;
|
||||||
|
|
||||||
|
/* Concatenate dir and base into freshly allocated file_name. */
|
||||||
|
{
|
||||||
|
size_t dir_len = strlen (dir);
|
||||||
|
size_t base_len = strlen (base);
|
||||||
|
int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
|
||||||
|
file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
|
||||||
|
if (file_name != NULL)
|
||||||
|
{
|
||||||
|
memcpy (file_name, dir, dir_len);
|
||||||
|
if (add_slash)
|
||||||
|
file_name[dir_len] = DIRECTORY_SEPARATOR;
|
||||||
|
memcpy (file_name + dir_len + add_slash, base, base_len + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
|
||||||
|
/* Out of memory or file not found, treat it as empty. */
|
||||||
|
cp = "";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Parse the file's contents. */
|
||||||
|
int c;
|
||||||
|
char buf1[50+1];
|
||||||
|
char buf2[50+1];
|
||||||
|
char *res_ptr = NULL;
|
||||||
|
size_t res_size = 0;
|
||||||
|
size_t l1, l2;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
c = getc (fp);
|
||||||
|
if (c == EOF)
|
||||||
|
break;
|
||||||
|
if (c == '\n' || c == ' ' || c == '\t')
|
||||||
|
continue;
|
||||||
|
if (c == '#')
|
||||||
|
{
|
||||||
|
/* Skip comment, to end of line. */
|
||||||
|
do
|
||||||
|
c = getc (fp);
|
||||||
|
while (!(c == EOF || c == '\n'));
|
||||||
|
if (c == EOF)
|
||||||
|
break;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ungetc (c, fp);
|
||||||
|
if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
|
||||||
|
break;
|
||||||
|
l1 = strlen (buf1);
|
||||||
|
l2 = strlen (buf2);
|
||||||
|
if (res_size == 0)
|
||||||
|
{
|
||||||
|
res_size = l1 + 1 + l2 + 1;
|
||||||
|
res_ptr = (char *) malloc (res_size + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
res_size += l1 + 1 + l2 + 1;
|
||||||
|
res_ptr = (char *) realloc (res_ptr, res_size + 1);
|
||||||
|
}
|
||||||
|
if (res_ptr == NULL)
|
||||||
|
{
|
||||||
|
/* Out of memory. */
|
||||||
|
res_size = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
|
||||||
|
strcpy (res_ptr + res_size - (l2 + 1), buf2);
|
||||||
|
}
|
||||||
|
fclose (fp);
|
||||||
|
if (res_size == 0)
|
||||||
|
cp = "";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*(res_ptr + res_size) = '\0';
|
||||||
|
cp = res_ptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file_name != NULL)
|
||||||
|
free (file_name);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* To avoid the troubles of installing a separate file in the same
|
||||||
|
directory as the DLL and of retrieving the DLL's directory at
|
||||||
|
runtime, simply inline the aliases here. */
|
||||||
|
|
||||||
|
# if defined WIN32
|
||||||
|
cp = "CP936" "\0" "GBK" "\0"
|
||||||
|
"CP1361" "\0" "JOHAB" "\0"
|
||||||
|
"CP20127" "\0" "ASCII" "\0"
|
||||||
|
"CP20866" "\0" "KOI8-R" "\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";
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
charset_aliases = cp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Determine the current locale's character encoding, and canonicalize it
|
||||||
|
into one of the canonical names listed in config.charset.
|
||||||
|
The result must not be freed; it is statically allocated.
|
||||||
|
If the canonical name cannot be determined, the result is a non-canonical
|
||||||
|
name. */
|
||||||
|
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#endif
|
||||||
|
const char *
|
||||||
|
locale_charset ()
|
||||||
|
{
|
||||||
|
const char *codeset;
|
||||||
|
const char *aliases;
|
||||||
|
|
||||||
|
#if !(defined WIN32 || defined OS2)
|
||||||
|
|
||||||
|
# if HAVE_LANGINFO_CODESET
|
||||||
|
|
||||||
|
/* Most systems support nl_langinfo (CODESET) nowadays. */
|
||||||
|
codeset = nl_langinfo (CODESET);
|
||||||
|
|
||||||
|
# else
|
||||||
|
|
||||||
|
/* On old systems which lack it, use setlocale or getenv. */
|
||||||
|
const char *locale = NULL;
|
||||||
|
|
||||||
|
/* But most old systems don't have a complete set of locales. Some
|
||||||
|
(like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
|
||||||
|
use setlocale here; it would return "C" when it doesn't support the
|
||||||
|
locale name the user has set. */
|
||||||
|
# if HAVE_SETLOCALE && 0
|
||||||
|
locale = setlocale (LC_CTYPE, NULL);
|
||||||
|
# endif
|
||||||
|
if (locale == NULL || locale[0] == '\0')
|
||||||
|
{
|
||||||
|
locale = getenv ("LC_ALL");
|
||||||
|
if (locale == NULL || locale[0] == '\0')
|
||||||
|
{
|
||||||
|
locale = getenv ("LC_CTYPE");
|
||||||
|
if (locale == NULL || locale[0] == '\0')
|
||||||
|
locale = getenv ("LANG");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* On some old systems, one used to set locale = "iso8859_1". On others,
|
||||||
|
you set it to "language_COUNTRY.charset". In any case, we resolve it
|
||||||
|
through the charset.alias file. */
|
||||||
|
codeset = locale;
|
||||||
|
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined WIN32
|
||||||
|
|
||||||
|
static char buf[2 + 10 + 1];
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Locale name alias data base.
|
||||||
|
# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Library General Public License as published
|
||||||
|
# by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Library General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Library General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
# USA.
|
||||||
|
|
||||||
|
# The format of this file is the same as for the corresponding file of
|
||||||
|
# the X Window System, which normally can be found in
|
||||||
|
# /usr/lib/X11/locale/locale.alias
|
||||||
|
# A single line contains two fields: an alias and a substitution value.
|
||||||
|
# All entries are case independent.
|
||||||
|
|
||||||
|
# Note: This file is far from being complete. If you have a value for
|
||||||
|
# your own site which you think might be useful for others too, share
|
||||||
|
# it with the rest of us. Send it using the `glibcbug' script to
|
||||||
|
# bugs@gnu.org.
|
||||||
|
|
||||||
|
# Packages using this file:
|
||||||
|
|
||||||
|
bokmal no_NO.ISO-8859-1
|
||||||
|
bokmål no_NO.ISO-8859-1
|
||||||
|
catalan ca_ES.ISO-8859-1
|
||||||
|
croatian hr_HR.ISO-8859-2
|
||||||
|
czech cs_CZ.ISO-8859-2
|
||||||
|
danish da_DK.ISO-8859-1
|
||||||
|
dansk da_DK.ISO-8859-1
|
||||||
|
deutsch de_DE.ISO-8859-1
|
||||||
|
dutch nl_NL.ISO-8859-1
|
||||||
|
eesti et_EE.ISO-8859-1
|
||||||
|
estonian et_EE.ISO-8859-1
|
||||||
|
finnish fi_FI.ISO-8859-1
|
||||||
|
français fr_FR.ISO-8859-1
|
||||||
|
french fr_FR.ISO-8859-1
|
||||||
|
galego gl_ES.ISO-8859-1
|
||||||
|
galician gl_ES.ISO-8859-1
|
||||||
|
german de_DE.ISO-8859-1
|
||||||
|
greek el_GR.ISO-8859-7
|
||||||
|
hebrew he_IL.ISO-8859-8
|
||||||
|
hrvatski hr_HR.ISO-8859-2
|
||||||
|
hungarian hu_HU.ISO-8859-2
|
||||||
|
icelandic is_IS.ISO-8859-1
|
||||||
|
italian it_IT.ISO-8859-1
|
||||||
|
japanese ja_JP.eucJP
|
||||||
|
japanese.euc ja_JP.eucJP
|
||||||
|
ja_JP ja_JP.eucJP
|
||||||
|
ja_JP.ujis ja_JP.eucJP
|
||||||
|
japanese.sjis ja_JP.SJIS
|
||||||
|
korean ko_KR.eucKR
|
||||||
|
korean.euc ko_KR.eucKR
|
||||||
|
ko_KR ko_KR.eucKR
|
||||||
|
lithuanian lt_LT.ISO-8859-13
|
||||||
|
nb_NO no_NO.ISO-8859-1
|
||||||
|
nb_NO.ISO-8859-1 no_NO.ISO-8859-1
|
||||||
|
norwegian no_NO.ISO-8859-1
|
||||||
|
nynorsk nn_NO.ISO-8859-1
|
||||||
|
polish pl_PL.ISO-8859-2
|
||||||
|
portuguese pt_PT.ISO-8859-1
|
||||||
|
romanian ro_RO.ISO-8859-2
|
||||||
|
russian ru_RU.ISO-8859-5
|
||||||
|
slovak sk_SK.ISO-8859-2
|
||||||
|
slovene sl_SI.ISO-8859-2
|
||||||
|
slovenian sl_SI.ISO-8859-2
|
||||||
|
spanish es_ES.ISO-8859-1
|
||||||
|
swedish sv_SE.ISO-8859-1
|
||||||
|
thai th_TH.TIS-620
|
||||||
|
turkish tr_TR.ISO-8859-9
|
|
@ -1,20 +1,27 @@
|
||||||
/* Handle aliases for locale names.
|
/* Handle aliases for locale names.
|
||||||
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* Tell glibc's <string.h> to provide a prototype for mempcpy().
|
||||||
|
This must come before <config.h> because <config.h> may include
|
||||||
|
<features.h>, and once <features.h> has been included, it's too late. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# define _GNU_SOURCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
|
@ -22,6 +29,9 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#if defined _LIBC || defined HAVE___FSETLOCKING
|
||||||
|
# include <stdio_ext.h>
|
||||||
|
#endif
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
@ -41,35 +51,9 @@ char *alloca ();
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined _LIBC
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#else
|
|
||||||
char *getenv ();
|
|
||||||
# ifdef HAVE_MALLOC_H
|
|
||||||
# include <malloc.h>
|
|
||||||
# else
|
|
||||||
void free ();
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_STRING_H || defined _LIBC
|
|
||||||
# ifndef _GNU_SOURCE
|
|
||||||
# define _GNU_SOURCE 1
|
|
||||||
# endif
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#else
|
|
||||||
# include <strings.h>
|
|
||||||
# ifndef memcpy
|
|
||||||
# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gettext.h"
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
@ -80,8 +64,11 @@ void free ();
|
||||||
file and the name space must not be polluted. */
|
file and the name space must not be polluted. */
|
||||||
# define strcasecmp __strcasecmp
|
# define strcasecmp __strcasecmp
|
||||||
|
|
||||||
|
# ifndef mempcpy
|
||||||
# define mempcpy __mempcpy
|
# define mempcpy __mempcpy
|
||||||
|
# endif
|
||||||
# define HAVE_MEMPCPY 1
|
# define HAVE_MEMPCPY 1
|
||||||
|
# define HAVE___FSETLOCKING 1
|
||||||
|
|
||||||
/* We need locking here since we can be called from different places. */
|
/* We need locking here since we can be called from different places. */
|
||||||
# include <bits/libc-lock.h>
|
# include <bits/libc-lock.h>
|
||||||
|
@ -89,41 +76,36 @@ void free ();
|
||||||
__libc_lock_define_initialized (static, lock);
|
__libc_lock_define_initialized (static, lock);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef internal_function
|
||||||
|
# define internal_function
|
||||||
|
#endif
|
||||||
|
|
||||||
/* For those loosing systems which don't have `alloca' we have to add
|
/* 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. */
|
some additional code emulating it. */
|
||||||
#ifdef HAVE_ALLOCA
|
#ifdef HAVE_ALLOCA
|
||||||
/* Nothing has to be done. */
|
# define freea(p) /* nothing */
|
||||||
# define ADD_BLOCK(list, address) /* nothing */
|
|
||||||
# define FREE_BLOCKS(list) /* nothing */
|
|
||||||
#else
|
#else
|
||||||
struct block_list
|
# define alloca(n) malloc (n)
|
||||||
{
|
# define freea(p) free (p)
|
||||||
void *address;
|
#endif
|
||||||
struct block_list *next;
|
|
||||||
};
|
#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
|
||||||
# define ADD_BLOCK(list, addr) \
|
# undef fgets
|
||||||
do { \
|
# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
|
||||||
struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
|
#endif
|
||||||
/* If we cannot get a free block we cannot add the new element to \
|
#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
|
||||||
the list. */ \
|
# undef feof
|
||||||
if (newp != NULL) { \
|
# define feof(s) feof_unlocked (s)
|
||||||
newp->address = (addr); \
|
#endif
|
||||||
newp->next = (list); \
|
|
||||||
(list) = newp; \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
# define FREE_BLOCKS(list) \
|
|
||||||
do { \
|
|
||||||
while (list != NULL) { \
|
|
||||||
struct block_list *old = list; \
|
|
||||||
list = list->next; \
|
|
||||||
free (old); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
# undef alloca
|
|
||||||
# define alloca(size) (malloc (size))
|
|
||||||
#endif /* have alloca */
|
|
||||||
|
|
||||||
|
|
||||||
struct alias_map
|
struct alias_map
|
||||||
|
@ -133,18 +115,18 @@ struct alias_map
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static char *string_space = NULL;
|
static char *string_space;
|
||||||
static size_t string_space_act = 0;
|
static size_t string_space_act;
|
||||||
static size_t string_space_max = 0;
|
static size_t string_space_max;
|
||||||
static struct alias_map *map;
|
static struct alias_map *map;
|
||||||
static size_t nmap = 0;
|
static size_t nmap;
|
||||||
static size_t maxmap = 0;
|
static size_t maxmap;
|
||||||
|
|
||||||
|
|
||||||
/* Prototypes for local functions. */
|
/* Prototypes for local functions. */
|
||||||
static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
|
static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
|
||||||
internal_function;
|
internal_function;
|
||||||
static void extend_alias_table PARAMS ((void));
|
static int extend_alias_table PARAMS ((void));
|
||||||
static int alias_compare PARAMS ((const struct alias_map *map1,
|
static int alias_compare PARAMS ((const struct alias_map *map1,
|
||||||
const struct alias_map *map2));
|
const struct alias_map *map2));
|
||||||
|
|
||||||
|
@ -153,7 +135,7 @@ const char *
|
||||||
_nl_expand_alias (name)
|
_nl_expand_alias (name)
|
||||||
const char *name;
|
const char *name;
|
||||||
{
|
{
|
||||||
static const char *locale_alias_path = LOCALE_ALIAS_PATH;
|
static const char *locale_alias_path;
|
||||||
struct alias_map *retval;
|
struct alias_map *retval;
|
||||||
const char *result = NULL;
|
const char *result = NULL;
|
||||||
size_t added;
|
size_t added;
|
||||||
|
@ -162,6 +144,9 @@ _nl_expand_alias (name)
|
||||||
__libc_lock_lock (lock);
|
__libc_lock_lock (lock);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (locale_alias_path == NULL)
|
||||||
|
locale_alias_path = LOCALE_ALIAS_PATH;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
struct alias_map item;
|
struct alias_map item;
|
||||||
|
@ -190,11 +175,12 @@ _nl_expand_alias (name)
|
||||||
{
|
{
|
||||||
const char *start;
|
const char *start;
|
||||||
|
|
||||||
while (locale_alias_path[0] == ':')
|
while (locale_alias_path[0] == PATH_SEPARATOR)
|
||||||
++locale_alias_path;
|
++locale_alias_path;
|
||||||
start = locale_alias_path;
|
start = locale_alias_path;
|
||||||
|
|
||||||
while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
|
while (locale_alias_path[0] != '\0'
|
||||||
|
&& locale_alias_path[0] != PATH_SEPARATOR)
|
||||||
++locale_alias_path;
|
++locale_alias_path;
|
||||||
|
|
||||||
if (start < locale_alias_path)
|
if (start < locale_alias_path)
|
||||||
|
@ -217,16 +203,12 @@ read_alias_file (fname, fname_len)
|
||||||
const char *fname;
|
const char *fname;
|
||||||
int fname_len;
|
int fname_len;
|
||||||
{
|
{
|
||||||
#ifndef HAVE_ALLOCA
|
|
||||||
struct block_list *block_list = NULL;
|
|
||||||
#endif
|
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char *full_fname;
|
char *full_fname;
|
||||||
size_t added;
|
size_t added;
|
||||||
static const char aliasfile[] = "/locale.alias";
|
static const char aliasfile[] = "/locale.alias";
|
||||||
|
|
||||||
full_fname = (char *) alloca (fname_len + sizeof aliasfile);
|
full_fname = (char *) alloca (fname_len + sizeof aliasfile);
|
||||||
ADD_BLOCK (block_list, full_fname);
|
|
||||||
#ifdef HAVE_MEMPCPY
|
#ifdef HAVE_MEMPCPY
|
||||||
mempcpy (mempcpy (full_fname, fname, fname_len),
|
mempcpy (mempcpy (full_fname, fname, fname_len),
|
||||||
aliasfile, sizeof aliasfile);
|
aliasfile, sizeof aliasfile);
|
||||||
|
@ -236,26 +218,29 @@ read_alias_file (fname, fname_len)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fp = fopen (full_fname, "r");
|
fp = fopen (full_fname, "r");
|
||||||
|
freea (full_fname);
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
{
|
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
#ifdef HAVE___FSETLOCKING
|
||||||
|
/* No threads present. */
|
||||||
|
__fsetlocking (fp, FSETLOCKING_BYCALLER);
|
||||||
|
#endif
|
||||||
|
|
||||||
added = 0;
|
added = 0;
|
||||||
while (!feof (fp))
|
while (!FEOF (fp))
|
||||||
{
|
{
|
||||||
/* It is a reasonable approach to use a fix buffer here because
|
/* It is a reasonable approach to use a fix buffer here because
|
||||||
a) we are only interested in the first two fields
|
a) we are only interested in the first two fields
|
||||||
b) these fields must be usable as file names and so must not
|
b) these fields must be usable as file names and so must not
|
||||||
be that long
|
be that long
|
||||||
*/
|
*/
|
||||||
unsigned char buf[BUFSIZ];
|
char buf[BUFSIZ];
|
||||||
unsigned char *alias;
|
char *alias;
|
||||||
unsigned char *value;
|
char *value;
|
||||||
unsigned char *cp;
|
char *cp;
|
||||||
|
|
||||||
if (fgets (buf, sizeof buf, fp) == NULL)
|
if (FGETS (buf, sizeof buf, fp) == NULL)
|
||||||
/* EOF reached. */
|
/* EOF reached. */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -265,7 +250,7 @@ read_alias_file (fname, fname_len)
|
||||||
{
|
{
|
||||||
char altbuf[BUFSIZ];
|
char altbuf[BUFSIZ];
|
||||||
do
|
do
|
||||||
if (fgets (altbuf, sizeof altbuf, fp) == NULL)
|
if (FGETS (altbuf, sizeof altbuf, fp) == NULL)
|
||||||
/* Make sure the inner loop will be left. The outer loop
|
/* Make sure the inner loop will be left. The outer loop
|
||||||
will exit at the `feof' test. */
|
will exit at the `feof' test. */
|
||||||
break;
|
break;
|
||||||
|
@ -274,21 +259,21 @@ read_alias_file (fname, fname_len)
|
||||||
|
|
||||||
cp = buf;
|
cp = buf;
|
||||||
/* Ignore leading white space. */
|
/* Ignore leading white space. */
|
||||||
while (isspace (cp[0]))
|
while (isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
|
|
||||||
/* A leading '#' signals a comment line. */
|
/* A leading '#' signals a comment line. */
|
||||||
if (cp[0] != '\0' && cp[0] != '#')
|
if (cp[0] != '\0' && cp[0] != '#')
|
||||||
{
|
{
|
||||||
alias = cp++;
|
alias = cp++;
|
||||||
while (cp[0] != '\0' && !isspace (cp[0]))
|
while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
/* Terminate alias name. */
|
/* Terminate alias name. */
|
||||||
if (cp[0] != '\0')
|
if (cp[0] != '\0')
|
||||||
*cp++ = '\0';
|
*cp++ = '\0';
|
||||||
|
|
||||||
/* Now look for the beginning of the value. */
|
/* Now look for the beginning of the value. */
|
||||||
while (isspace (cp[0]))
|
while (isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
|
|
||||||
if (cp[0] != '\0')
|
if (cp[0] != '\0')
|
||||||
|
@ -297,7 +282,7 @@ read_alias_file (fname, fname_len)
|
||||||
size_t value_len;
|
size_t value_len;
|
||||||
|
|
||||||
value = cp++;
|
value = cp++;
|
||||||
while (cp[0] != '\0' && !isspace (cp[0]))
|
while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
/* Terminate value. */
|
/* Terminate value. */
|
||||||
if (cp[0] == '\n')
|
if (cp[0] == '\n')
|
||||||
|
@ -312,7 +297,8 @@ read_alias_file (fname, fname_len)
|
||||||
*cp++ = '\0';
|
*cp++ = '\0';
|
||||||
|
|
||||||
if (nmap >= maxmap)
|
if (nmap >= maxmap)
|
||||||
extend_alias_table ();
|
if (__builtin_expect (extend_alias_table (), 0))
|
||||||
|
return added;
|
||||||
|
|
||||||
alias_len = strlen (alias) + 1;
|
alias_len = strlen (alias) + 1;
|
||||||
value_len = strlen (value) + 1;
|
value_len = strlen (value) + 1;
|
||||||
|
@ -325,10 +311,19 @@ read_alias_file (fname, fname_len)
|
||||||
? alias_len + value_len : 1024));
|
? alias_len + value_len : 1024));
|
||||||
char *new_pool = (char *) realloc (string_space, new_size);
|
char *new_pool = (char *) realloc (string_space, new_size);
|
||||||
if (new_pool == NULL)
|
if (new_pool == NULL)
|
||||||
{
|
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
return added;
|
return added;
|
||||||
|
|
||||||
|
if (__builtin_expect (string_space != new_pool, 0))
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < nmap; i++)
|
||||||
|
{
|
||||||
|
map[i].alias += new_pool - string_space;
|
||||||
|
map[i].value += new_pool - string_space;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
string_space = new_pool;
|
string_space = new_pool;
|
||||||
string_space_max = new_size;
|
string_space_max = new_size;
|
||||||
}
|
}
|
||||||
|
@ -355,12 +350,11 @@ read_alias_file (fname, fname_len)
|
||||||
qsort (map, nmap, sizeof (struct alias_map),
|
qsort (map, nmap, sizeof (struct alias_map),
|
||||||
(int (*) PARAMS ((const void *, const void *))) alias_compare);
|
(int (*) PARAMS ((const void *, const void *))) alias_compare);
|
||||||
|
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
return added;
|
return added;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static int
|
||||||
extend_alias_table ()
|
extend_alias_table ()
|
||||||
{
|
{
|
||||||
size_t new_size;
|
size_t new_size;
|
||||||
|
@ -371,10 +365,11 @@ extend_alias_table ()
|
||||||
* sizeof (struct alias_map)));
|
* sizeof (struct alias_map)));
|
||||||
if (new_map == NULL)
|
if (new_map == NULL)
|
||||||
/* Simply don't extend: we don't have any more core. */
|
/* Simply don't extend: we don't have any more core. */
|
||||||
return;
|
return -1;
|
||||||
|
|
||||||
map = new_map;
|
map = new_map;
|
||||||
maxmap = new_size;
|
maxmap = new_size;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,772 @@
|
||||||
|
/* Determine the current selected locale.
|
||||||
|
Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */
|
||||||
|
/* Win32 code written by Tor Lillqvist <tml@iki.fi>. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__
|
||||||
|
# undef WIN32 /* avoid warning on mingw32 */
|
||||||
|
# define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# include <windows.h>
|
||||||
|
/* Mingw headers don't have latest language and sublanguage codes. */
|
||||||
|
# ifndef LANG_AFRIKAANS
|
||||||
|
# define LANG_AFRIKAANS 0x36
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ALBANIAN
|
||||||
|
# define LANG_ALBANIAN 0x1c
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ARABIC
|
||||||
|
# define LANG_ARABIC 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ARMENIAN
|
||||||
|
# define LANG_ARMENIAN 0x2b
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ASSAMESE
|
||||||
|
# define LANG_ASSAMESE 0x4d
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_AZERI
|
||||||
|
# define LANG_AZERI 0x2c
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_BASQUE
|
||||||
|
# define LANG_BASQUE 0x2d
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_BELARUSIAN
|
||||||
|
# define LANG_BELARUSIAN 0x23
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_BENGALI
|
||||||
|
# define LANG_BENGALI 0x45
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_CATALAN
|
||||||
|
# define LANG_CATALAN 0x03
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_DIVEHI
|
||||||
|
# define LANG_DIVEHI 0x65
|
||||||
|
# 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_GALICIAN
|
||||||
|
# define LANG_GALICIAN 0x56
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_GEORGIAN
|
||||||
|
# define LANG_GEORGIAN 0x37
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_GUJARATI
|
||||||
|
# define LANG_GUJARATI 0x47
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_HEBREW
|
||||||
|
# define LANG_HEBREW 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_HINDI
|
||||||
|
# define LANG_HINDI 0x39
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_INDONESIAN
|
||||||
|
# define LANG_INDONESIAN 0x21
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KANNADA
|
||||||
|
# define LANG_KANNADA 0x4b
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KASHMIRI
|
||||||
|
# define LANG_KASHMIRI 0x60
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KAZAK
|
||||||
|
# define LANG_KAZAK 0x3f
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KONKANI
|
||||||
|
# define LANG_KONKANI 0x57
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KYRGYZ
|
||||||
|
# define LANG_KYRGYZ 0x40
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_LATVIAN
|
||||||
|
# define LANG_LATVIAN 0x26
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_LITHUANIAN
|
||||||
|
# define LANG_LITHUANIAN 0x27
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MACEDONIAN
|
||||||
|
# define LANG_MACEDONIAN 0x2f
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MALAY
|
||||||
|
# define LANG_MALAY 0x3e
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MALAYALAM
|
||||||
|
# define LANG_MALAYALAM 0x4c
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MANIPURI
|
||||||
|
# define LANG_MANIPURI 0x58
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MARATHI
|
||||||
|
# define LANG_MARATHI 0x4e
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MONGOLIAN
|
||||||
|
# define LANG_MONGOLIAN 0x50
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_NEPALI
|
||||||
|
# define LANG_NEPALI 0x61
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ORIYA
|
||||||
|
# define LANG_ORIYA 0x48
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_PUNJABI
|
||||||
|
# define LANG_PUNJABI 0x46
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SANSKRIT
|
||||||
|
# define LANG_SANSKRIT 0x4f
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SERBIAN
|
||||||
|
# define LANG_SERBIAN 0x1a
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SINDHI
|
||||||
|
# define LANG_SINDHI 0x59
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SLOVAK
|
||||||
|
# define LANG_SLOVAK 0x1b
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SORBIAN
|
||||||
|
# define LANG_SORBIAN 0x2e
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SWAHILI
|
||||||
|
# define LANG_SWAHILI 0x41
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SYRIAC
|
||||||
|
# define LANG_SYRIAC 0x5a
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TAMIL
|
||||||
|
# define LANG_TAMIL 0x49
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TATAR
|
||||||
|
# define LANG_TATAR 0x44
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TELUGU
|
||||||
|
# define LANG_TELUGU 0x4a
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_THAI
|
||||||
|
# define LANG_THAI 0x1e
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_UKRAINIAN
|
||||||
|
# define LANG_UKRAINIAN 0x22
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_URDU
|
||||||
|
# define LANG_URDU 0x20
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_UZBEK
|
||||||
|
# define LANG_UZBEK 0x43
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_VIETNAMESE
|
||||||
|
# define LANG_VIETNAMESE 0x2a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
|
||||||
|
# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_IRAQ
|
||||||
|
# define SUBLANG_ARABIC_IRAQ 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_EGYPT
|
||||||
|
# define SUBLANG_ARABIC_EGYPT 0x03
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_LIBYA
|
||||||
|
# define SUBLANG_ARABIC_LIBYA 0x04
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_ALGERIA
|
||||||
|
# define SUBLANG_ARABIC_ALGERIA 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_MOROCCO
|
||||||
|
# define SUBLANG_ARABIC_MOROCCO 0x06
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_TUNISIA
|
||||||
|
# define SUBLANG_ARABIC_TUNISIA 0x07
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_OMAN
|
||||||
|
# define SUBLANG_ARABIC_OMAN 0x08
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_YEMEN
|
||||||
|
# define SUBLANG_ARABIC_YEMEN 0x09
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_SYRIA
|
||||||
|
# define SUBLANG_ARABIC_SYRIA 0x0a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_JORDAN
|
||||||
|
# define SUBLANG_ARABIC_JORDAN 0x0b
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_LEBANON
|
||||||
|
# define SUBLANG_ARABIC_LEBANON 0x0c
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_KUWAIT
|
||||||
|
# define SUBLANG_ARABIC_KUWAIT 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_UAE
|
||||||
|
# define SUBLANG_ARABIC_UAE 0x0e
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_BAHRAIN
|
||||||
|
# define SUBLANG_ARABIC_BAHRAIN 0x0f
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_QATAR
|
||||||
|
# define SUBLANG_ARABIC_QATAR 0x10
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_AZERI_LATIN
|
||||||
|
# define SUBLANG_AZERI_LATIN 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_AZERI_CYRILLIC
|
||||||
|
# define SUBLANG_AZERI_CYRILLIC 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_CHINESE_MACAU
|
||||||
|
# define SUBLANG_CHINESE_MACAU 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
|
||||||
|
# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_JAMAICA
|
||||||
|
# define SUBLANG_ENGLISH_JAMAICA 0x08
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_CARIBBEAN
|
||||||
|
# define SUBLANG_ENGLISH_CARIBBEAN 0x09
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_BELIZE
|
||||||
|
# define SUBLANG_ENGLISH_BELIZE 0x0a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_TRINIDAD
|
||||||
|
# define SUBLANG_ENGLISH_TRINIDAD 0x0b
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_ZIMBABWE
|
||||||
|
# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_PHILIPPINES
|
||||||
|
# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_LUXEMBOURG
|
||||||
|
# define SUBLANG_FRENCH_LUXEMBOURG 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_MONACO
|
||||||
|
# define SUBLANG_FRENCH_MONACO 0x06
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_GERMAN_LUXEMBOURG
|
||||||
|
# define SUBLANG_GERMAN_LUXEMBOURG 0x04
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
|
||||||
|
# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_KASHMIRI_INDIA
|
||||||
|
# define SUBLANG_KASHMIRI_INDIA 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_MALAY_MALAYSIA
|
||||||
|
# define SUBLANG_MALAY_MALAYSIA 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
|
||||||
|
# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_NEPALI_INDIA
|
||||||
|
# define SUBLANG_NEPALI_INDIA 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SERBIAN_LATIN
|
||||||
|
# define SUBLANG_SERBIAN_LATIN 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SERBIAN_CYRILLIC
|
||||||
|
# define SUBLANG_SERBIAN_CYRILLIC 0x03
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_GUATEMALA
|
||||||
|
# define SUBLANG_SPANISH_GUATEMALA 0x04
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_COSTA_RICA
|
||||||
|
# define SUBLANG_SPANISH_COSTA_RICA 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_PANAMA
|
||||||
|
# define SUBLANG_SPANISH_PANAMA 0x06
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
|
||||||
|
# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_VENEZUELA
|
||||||
|
# define SUBLANG_SPANISH_VENEZUELA 0x08
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_COLOMBIA
|
||||||
|
# define SUBLANG_SPANISH_COLOMBIA 0x09
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_PERU
|
||||||
|
# define SUBLANG_SPANISH_PERU 0x0a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_ARGENTINA
|
||||||
|
# define SUBLANG_SPANISH_ARGENTINA 0x0b
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_ECUADOR
|
||||||
|
# define SUBLANG_SPANISH_ECUADOR 0x0c
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_CHILE
|
||||||
|
# define SUBLANG_SPANISH_CHILE 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_URUGUAY
|
||||||
|
# define SUBLANG_SPANISH_URUGUAY 0x0e
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_PARAGUAY
|
||||||
|
# define SUBLANG_SPANISH_PARAGUAY 0x0f
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_BOLIVIA
|
||||||
|
# define SUBLANG_SPANISH_BOLIVIA 0x10
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_EL_SALVADOR
|
||||||
|
# define SUBLANG_SPANISH_EL_SALVADOR 0x11
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_HONDURAS
|
||||||
|
# define SUBLANG_SPANISH_HONDURAS 0x12
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_NICARAGUA
|
||||||
|
# define SUBLANG_SPANISH_NICARAGUA 0x13
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_PUERTO_RICO
|
||||||
|
# define SUBLANG_SPANISH_PUERTO_RICO 0x14
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SWEDISH_FINLAND
|
||||||
|
# define SUBLANG_SWEDISH_FINLAND 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_URDU_PAKISTAN
|
||||||
|
# define SUBLANG_URDU_PAKISTAN 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_URDU_INDIA
|
||||||
|
# define SUBLANG_URDU_INDIA 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_UZBEK_LATIN
|
||||||
|
# define SUBLANG_UZBEK_LATIN 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_UZBEK_CYRILLIC
|
||||||
|
# define SUBLANG_UZBEK_CYRILLIC 0x02
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* XPG3 defines the result of 'setlocale (category, NULL)' as:
|
||||||
|
"Directs 'setlocale()' to query 'category' and return the current
|
||||||
|
setting of 'local'."
|
||||||
|
However it does not specify the exact format. Neither do SUSV2 and
|
||||||
|
ISO C 99. So we can use this feature only on selected systems (e.g.
|
||||||
|
those using GNU C Library). */
|
||||||
|
#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
|
||||||
|
# define HAVE_LOCALE_NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Determine the current locale's name, and canonicalize it into XPG syntax
|
||||||
|
language[_territory[.codeset]][@modifier]
|
||||||
|
The codeset part in the result is not reliable; the locale_charset()
|
||||||
|
should be used for codeset information instead.
|
||||||
|
The result must not be freed; it is statically allocated. */
|
||||||
|
|
||||||
|
const char *
|
||||||
|
_nl_locale_name (category, categoryname)
|
||||||
|
int category;
|
||||||
|
const char *categoryname;
|
||||||
|
{
|
||||||
|
const char *retval;
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
|
||||||
|
/* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
|
||||||
|
On some systems this can be done by the 'setlocale' function itself. */
|
||||||
|
# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
|
||||||
|
retval = setlocale (category, NULL);
|
||||||
|
# else
|
||||||
|
/* Setting of LC_ALL overwrites all other. */
|
||||||
|
retval = getenv ("LC_ALL");
|
||||||
|
if (retval == NULL || retval[0] == '\0')
|
||||||
|
{
|
||||||
|
/* Next comes the name of the desired category. */
|
||||||
|
retval = getenv (categoryname);
|
||||||
|
if (retval == NULL || retval[0] == '\0')
|
||||||
|
{
|
||||||
|
/* Last possibility is the LANG environment variable. */
|
||||||
|
retval = getenv ("LANG");
|
||||||
|
if (retval == NULL || retval[0] == '\0')
|
||||||
|
/* We use C as the default domain. POSIX says this is
|
||||||
|
implementation defined. */
|
||||||
|
retval = "C";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
#else /* WIN32 */
|
||||||
|
|
||||||
|
/* Return an XPG style locale name language[_territory][@modifier].
|
||||||
|
Don't even bother determining the codeset; it's not useful in this
|
||||||
|
context, because message catalogs are not specific to a single
|
||||||
|
codeset. */
|
||||||
|
|
||||||
|
LCID lcid;
|
||||||
|
LANGID langid;
|
||||||
|
int primary, sub;
|
||||||
|
|
||||||
|
/* Let the user override the system settings through environment
|
||||||
|
variables, as on POSIX systems. */
|
||||||
|
retval = getenv ("LC_ALL");
|
||||||
|
if (retval != NULL && retval[0] != '\0')
|
||||||
|
return retval;
|
||||||
|
retval = getenv (categoryname);
|
||||||
|
if (retval != NULL && retval[0] != '\0')
|
||||||
|
return retval;
|
||||||
|
retval = getenv ("LANG");
|
||||||
|
if (retval != NULL && retval[0] != '\0')
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
/* Use native Win32 API locale ID. */
|
||||||
|
lcid = GetThreadLocale ();
|
||||||
|
|
||||||
|
/* Strip off the sorting rules, keep only the language part. */
|
||||||
|
langid = LANGIDFROMLCID (lcid);
|
||||||
|
|
||||||
|
/* Split into language and territory part. */
|
||||||
|
primary = PRIMARYLANGID (langid);
|
||||||
|
sub = SUBLANGID (langid);
|
||||||
|
|
||||||
|
/* 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 0x5e: /* 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@latin";
|
||||||
|
case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
|
||||||
|
}
|
||||||
|
return "az";
|
||||||
|
case LANG_BASQUE:
|
||||||
|
return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
|
||||||
|
case LANG_BELARUSIAN: return "be_BY";
|
||||||
|
case LANG_BENGALI: return "bn_IN";
|
||||||
|
case LANG_BULGARIAN: return "bg_BG";
|
||||||
|
case 0x55: /* BURMESE */ return "my_MM";
|
||||||
|
case 0x53: /* CAMBODIAN */ return "km_KH";
|
||||||
|
case LANG_CATALAN: return "ca_ES";
|
||||||
|
case 0x5c: /* 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_YU";
|
||||||
|
case SUBLANG_SERBIAN_CYRILLIC: return "sr_YU@cyrillic";
|
||||||
|
}
|
||||||
|
return "hr";
|
||||||
|
case LANG_CZECH: return "cs_CZ";
|
||||||
|
case LANG_DANISH: return "da_DK";
|
||||||
|
case LANG_DIVEHI: return "div_MV";
|
||||||
|
case LANG_DUTCH:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_DUTCH: return "nl_NL";
|
||||||
|
case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
|
||||||
|
}
|
||||||
|
return "nl";
|
||||||
|
case 0x66: /* 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";
|
||||||
|
}
|
||||||
|
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";
|
||||||
|
}
|
||||||
|
return "fr";
|
||||||
|
case 0x62: /* FRISIAN */ return "fy_NL";
|
||||||
|
case 0x67: /* FULFULDE */ return "ful_NG";
|
||||||
|
case 0x3c: /* 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 0x74: /* GUARANI */ return "gn_PY";
|
||||||
|
case LANG_GUJARATI: return "gu_IN";
|
||||||
|
case 0x68: /* HAUSA */ return "ha_NG";
|
||||||
|
case 0x75: /* 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 0x69: /* IBIBIO */ return "nic_NG";
|
||||||
|
case LANG_ICELANDIC: return "is_IS";
|
||||||
|
case 0x70: /* IGBO */ return "ibo_NG";
|
||||||
|
case LANG_INDONESIAN: return "id_ID";
|
||||||
|
case 0x5d: /* 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 0x71: /* KANURI */ return "kau_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 0x54: /* LAO */ return "lo_LA";
|
||||||
|
case 0x76: /* 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 0x3a: /* 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:
|
||||||
|
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 "no_NO";
|
||||||
|
case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
|
||||||
|
}
|
||||||
|
return "no";
|
||||||
|
case LANG_ORIYA: return "or_IN";
|
||||||
|
case 0x72: /* OROMO */ return "om_ET";
|
||||||
|
case 0x79: /* PAPIAMENTU */ return "pap_AN";
|
||||||
|
case 0x63: /* 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: return "pa_IN";
|
||||||
|
case 0x17: /* RHAETO-ROMANCE */ return "rm_CH";
|
||||||
|
case LANG_ROMANIAN: return "ro_RO";
|
||||||
|
case LANG_RUSSIAN:
|
||||||
|
return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA". */
|
||||||
|
case 0x3b: /* SAMI */ return "se_NO";
|
||||||
|
case LANG_SANSKRIT: return "sa_IN";
|
||||||
|
case LANG_SINDHI: return "sd";
|
||||||
|
case 0x5b: /* SINHALESE */ return "si_LK";
|
||||||
|
case LANG_SLOVAK: return "sk_SK";
|
||||||
|
case LANG_SLOVENIAN: return "sl_SI";
|
||||||
|
case 0x77: /* 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@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 0x30: /* SUTU */ return "bnt_TZ";
|
||||||
|
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 0x64: /* TAGALOG */ return "tl_PH";
|
||||||
|
case 0x28: /* TAJIK */ return "tg_TJ";
|
||||||
|
case 0x5f: /* TAMAZIGHT */ return "ber_MA";
|
||||||
|
case LANG_TAMIL:
|
||||||
|
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 0x51: /* TIBETAN */ return "bo_CN";
|
||||||
|
case 0x73: /* TIGRINYA */ return "ti_ET";
|
||||||
|
case 0x31: /* TSONGA */ return "ts_ZA";
|
||||||
|
case LANG_TURKISH: return "tr_TR";
|
||||||
|
case 0x42: /* 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)
|
||||||
|
{
|
||||||
|
/* FIXME: Adjust this when Uzbek locales appear on Unix. */
|
||||||
|
case SUBLANG_UZBEK_LATIN: return "uz_UZ@latin";
|
||||||
|
case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
|
||||||
|
}
|
||||||
|
return "uz";
|
||||||
|
case 0x33: /* VENDA */ return "ven_ZA";
|
||||||
|
case LANG_VIETNAMESE: return "vi_VN";
|
||||||
|
case 0x52: /* WELSH */ return "cy_GB";
|
||||||
|
case 0x34: /* XHOSA */ return "xh_ZA";
|
||||||
|
case 0x78: /* YI */ return "sit_CN";
|
||||||
|
case 0x3d: /* YIDDISH */ return "yi_IL";
|
||||||
|
case 0x6a: /* YORUBA */ return "yo_NG";
|
||||||
|
case 0x35: /* ZULU */ return "zu_ZA";
|
||||||
|
default: return "C";
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
/* Implementation of ngettext(3) function.
|
||||||
|
Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
# define __need_NULL
|
||||||
|
# include <stddef.h>
|
||||||
|
#else
|
||||||
|
# include <stdlib.h> /* Just for NULL. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "gettextP.h"
|
||||||
|
#ifdef _LIBC
|
||||||
|
# include <libintl.h>
|
||||||
|
#else
|
||||||
|
# include "libgnuintl.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
|
with existing names and they should follow ANSI C. But this source
|
||||||
|
code is also used in GNU C Library where the names have a __
|
||||||
|
prefix. So we have to make a difference here. */
|
||||||
|
#ifdef _LIBC
|
||||||
|
# define NGETTEXT __ngettext
|
||||||
|
# define DCNGETTEXT INTUSE(__dcngettext)
|
||||||
|
#else
|
||||||
|
# define NGETTEXT 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 (msgid1, msgid2, n)
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
|
{
|
||||||
|
return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
/* Alias for function name in GNU C Library. */
|
||||||
|
weak_alias (__ngettext, ngettext);
|
||||||
|
#endif
|
|
@ -0,0 +1,98 @@
|
||||||
|
/* OS/2 compatibility functions.
|
||||||
|
Copyright (C) 2001-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#define OS2_AWARE
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
|
||||||
|
/* A version of getenv() that works from DLLs */
|
||||||
|
extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
|
||||||
|
|
||||||
|
char *
|
||||||
|
_nl_getenv (const char *name)
|
||||||
|
{
|
||||||
|
unsigned char *value;
|
||||||
|
if (DosScanEnv (name, &value))
|
||||||
|
return NULL;
|
||||||
|
else
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A fixed size buffer. */
|
||||||
|
char 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);
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
/* OS/2 compatibility defines.
|
||||||
|
This file is intended to be included from config.h
|
||||||
|
Copyright (C) 2001-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* When included from os2compat.h we need all the original definitions */
|
||||||
|
#ifndef OS2_AWARE
|
||||||
|
|
||||||
|
#undef LIBDIR
|
||||||
|
#define LIBDIR _nlos2_libdir
|
||||||
|
extern char *_nlos2_libdir;
|
||||||
|
|
||||||
|
#undef LOCALEDIR
|
||||||
|
#define LOCALEDIR _nlos2_localedir
|
||||||
|
extern char *_nlos2_localedir;
|
||||||
|
|
||||||
|
#undef LOCALE_ALIAS_PATH
|
||||||
|
#define LOCALE_ALIAS_PATH _nlos2_localealiaspath
|
||||||
|
extern char *_nlos2_localealiaspath;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef HAVE_STRCASECMP
|
||||||
|
#define HAVE_STRCASECMP 1
|
||||||
|
#define strcasecmp stricmp
|
||||||
|
#define strncasecmp strnicmp
|
||||||
|
|
||||||
|
/* We have our own getenv() which works even if library is compiled as DLL */
|
||||||
|
#define getenv _nl_getenv
|
||||||
|
|
||||||
|
/* Older versions of gettext used -1 as the value of LC_MESSAGES */
|
||||||
|
#define LC_MESSAGES_COMPAT (-1)
|
|
@ -0,0 +1,24 @@
|
||||||
|
/* OS dependent parts of libintl.
|
||||||
|
Copyright (C) 2001-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#if defined __EMX__
|
||||||
|
# include "os2compat.c"
|
||||||
|
#else
|
||||||
|
/* Avoid AIX compiler warning. */
|
||||||
|
typedef int dummy;
|
||||||
|
#endif
|
|
@ -0,0 +1,156 @@
|
||||||
|
/* Expression parsing for plural form selection.
|
||||||
|
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
||||||
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "plural-exp.h"
|
||||||
|
|
||||||
|
#if (defined __GNUC__ && !defined __APPLE_CC__) \
|
||||||
|
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
|
||||||
|
|
||||||
|
/* These structs are the constant expression for the germanic plural
|
||||||
|
form determination. It represents the expression "n != 1". */
|
||||||
|
static const struct expression plvar =
|
||||||
|
{
|
||||||
|
.nargs = 0,
|
||||||
|
.operation = var,
|
||||||
|
};
|
||||||
|
static const struct expression plone =
|
||||||
|
{
|
||||||
|
.nargs = 0,
|
||||||
|
.operation = num,
|
||||||
|
.val =
|
||||||
|
{
|
||||||
|
.num = 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct expression GERMANIC_PLURAL =
|
||||||
|
{
|
||||||
|
.nargs = 2,
|
||||||
|
.operation = not_equal,
|
||||||
|
.val =
|
||||||
|
{
|
||||||
|
.args =
|
||||||
|
{
|
||||||
|
[0] = (struct expression *) &plvar,
|
||||||
|
[1] = (struct expression *) &plone
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# define INIT_GERMANIC_PLURAL()
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* For compilers without support for ISO C 99 struct/union initializers:
|
||||||
|
Initialization at run-time. */
|
||||||
|
|
||||||
|
static struct expression plvar;
|
||||||
|
static struct expression plone;
|
||||||
|
struct expression GERMANIC_PLURAL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_germanic_plural ()
|
||||||
|
{
|
||||||
|
if (plone.val.num == 0)
|
||||||
|
{
|
||||||
|
plvar.nargs = 0;
|
||||||
|
plvar.operation = var;
|
||||||
|
|
||||||
|
plone.nargs = 0;
|
||||||
|
plone.operation = num;
|
||||||
|
plone.val.num = 1;
|
||||||
|
|
||||||
|
GERMANIC_PLURAL.nargs = 2;
|
||||||
|
GERMANIC_PLURAL.operation = not_equal;
|
||||||
|
GERMANIC_PLURAL.val.args[0] = &plvar;
|
||||||
|
GERMANIC_PLURAL.val.args[1] = &plone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
internal_function
|
||||||
|
EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp)
|
||||||
|
const char *nullentry;
|
||||||
|
struct expression **pluralp;
|
||||||
|
unsigned long int *npluralsp;
|
||||||
|
{
|
||||||
|
if (nullentry != NULL)
|
||||||
|
{
|
||||||
|
const char *plural;
|
||||||
|
const char *nplurals;
|
||||||
|
|
||||||
|
plural = strstr (nullentry, "plural=");
|
||||||
|
nplurals = strstr (nullentry, "nplurals=");
|
||||||
|
if (plural == NULL || nplurals == NULL)
|
||||||
|
goto no_plural;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *endp;
|
||||||
|
unsigned long int n;
|
||||||
|
struct parse_args args;
|
||||||
|
|
||||||
|
/* First get the number. */
|
||||||
|
nplurals += 9;
|
||||||
|
while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
|
||||||
|
++nplurals;
|
||||||
|
if (!(*nplurals >= '0' && *nplurals <= '9'))
|
||||||
|
goto no_plural;
|
||||||
|
#if defined HAVE_STRTOUL || defined _LIBC
|
||||||
|
n = strtoul (nplurals, &endp, 10);
|
||||||
|
#else
|
||||||
|
for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
|
||||||
|
n = n * 10 + (*endp - '0');
|
||||||
|
#endif
|
||||||
|
if (nplurals == endp)
|
||||||
|
goto no_plural;
|
||||||
|
*npluralsp = n;
|
||||||
|
|
||||||
|
/* Due to the restrictions bison imposes onto the interface of the
|
||||||
|
scanner function we have to put the input string and the result
|
||||||
|
passed up from the parser into the same structure which address
|
||||||
|
is passed down to the parser. */
|
||||||
|
plural += 7;
|
||||||
|
args.cp = plural;
|
||||||
|
if (PLURAL_PARSE (&args) != 0)
|
||||||
|
goto no_plural;
|
||||||
|
*pluralp = args.res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* By default we are using the Germanic form: singular form only
|
||||||
|
for `one', the plural form otherwise. Yes, this is also what
|
||||||
|
English is using since English is a Germanic language. */
|
||||||
|
no_plural:
|
||||||
|
INIT_GERMANIC_PLURAL ();
|
||||||
|
*pluralp = &GERMANIC_PLURAL;
|
||||||
|
*npluralsp = 2;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,126 @@
|
||||||
|
/* Expression parsing and evaluation for plural form selection.
|
||||||
|
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _PLURAL_EXP_H
|
||||||
|
#define _PLURAL_EXP_H
|
||||||
|
|
||||||
|
#ifndef PARAMS
|
||||||
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
|
# define PARAMS(args) args
|
||||||
|
# else
|
||||||
|
# define PARAMS(args) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef internal_function
|
||||||
|
# define internal_function
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef attribute_hidden
|
||||||
|
# define attribute_hidden
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* This is the representation of the expressions to determine the
|
||||||
|
plural form. */
|
||||||
|
struct expression
|
||||||
|
{
|
||||||
|
int nargs; /* Number of arguments. */
|
||||||
|
enum operator
|
||||||
|
{
|
||||||
|
/* Without arguments: */
|
||||||
|
var, /* The variable "n". */
|
||||||
|
num, /* Decimal number. */
|
||||||
|
/* Unary operators: */
|
||||||
|
lnot, /* Logical NOT. */
|
||||||
|
/* Binary operators: */
|
||||||
|
mult, /* Multiplication. */
|
||||||
|
divide, /* Division. */
|
||||||
|
module, /* Modulo operation. */
|
||||||
|
plus, /* Addition. */
|
||||||
|
minus, /* Subtraction. */
|
||||||
|
less_than, /* Comparison. */
|
||||||
|
greater_than, /* Comparison. */
|
||||||
|
less_or_equal, /* Comparison. */
|
||||||
|
greater_or_equal, /* Comparison. */
|
||||||
|
equal, /* Comparison for equality. */
|
||||||
|
not_equal, /* Comparison for inequality. */
|
||||||
|
land, /* Logical AND. */
|
||||||
|
lor, /* Logical OR. */
|
||||||
|
/* Ternary operators: */
|
||||||
|
qmop /* Question mark operator. */
|
||||||
|
} operation;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
unsigned long int num; /* Number value for `num'. */
|
||||||
|
struct expression *args[3]; /* Up to three arguments. */
|
||||||
|
} val;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is the data structure to pass information to the parser and get
|
||||||
|
the result in a thread-safe way. */
|
||||||
|
struct parse_args
|
||||||
|
{
|
||||||
|
const char *cp;
|
||||||
|
struct expression *res;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Names for the libintl functions are a problem. This source code is used
|
||||||
|
1. in the GNU C Library library,
|
||||||
|
2. in the GNU libintl library,
|
||||||
|
3. in the GNU gettext tools.
|
||||||
|
The function names in each situation must be different, to allow for
|
||||||
|
binary incompatible changes in 'struct expression'. Furthermore,
|
||||||
|
1. in the GNU C Library library, the names have a __ prefix,
|
||||||
|
2.+3. in the GNU libintl library and in the GNU gettext tools, the names
|
||||||
|
must follow ANSI C and not start with __.
|
||||||
|
So we have to distinguish the three cases. */
|
||||||
|
#ifdef _LIBC
|
||||||
|
# define FREE_EXPRESSION __gettext_free_exp
|
||||||
|
# define PLURAL_PARSE __gettextparse
|
||||||
|
# define GERMANIC_PLURAL __gettext_germanic_plural
|
||||||
|
# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
|
||||||
|
#elif defined (IN_LIBINTL)
|
||||||
|
# define FREE_EXPRESSION 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 PARAMS ((struct expression *exp))
|
||||||
|
internal_function;
|
||||||
|
extern int PLURAL_PARSE PARAMS ((void *arg));
|
||||||
|
extern struct expression GERMANIC_PLURAL attribute_hidden;
|
||||||
|
extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
|
||||||
|
struct expression **pluralp,
|
||||||
|
unsigned long int *npluralsp))
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
#if !defined (_LIBC) && !defined (IN_LIBINTL)
|
||||||
|
extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
|
||||||
|
unsigned long int n));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _PLURAL_EXP_H */
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,409 @@
|
||||||
|
%{
|
||||||
|
/* Expression parsing for plural form selection.
|
||||||
|
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
||||||
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* The bison generated parser uses alloca. AIX 3 forces us to put this
|
||||||
|
declaration at the beginning of the file. The declaration in bison's
|
||||||
|
skeleton file comes too late. This must come before <config.h>
|
||||||
|
because <config.h> may include arbitrary system headers. */
|
||||||
|
#if defined _AIX && !defined __GNUC__
|
||||||
|
#pragma alloca
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "plural-exp.h"
|
||||||
|
|
||||||
|
/* The main function generated by the parser is called __gettextparse,
|
||||||
|
but we want it to be called PLURAL_PARSE. */
|
||||||
|
#ifndef _LIBC
|
||||||
|
# define __gettextparse PLURAL_PARSE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
||||||
|
#define YYPARSE_PARAM arg
|
||||||
|
%}
|
||||||
|
%pure_parser
|
||||||
|
%expect 7
|
||||||
|
|
||||||
|
%union {
|
||||||
|
unsigned long int num;
|
||||||
|
enum operator op;
|
||||||
|
struct expression *exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
%{
|
||||||
|
/* Prototypes for local functions. */
|
||||||
|
static struct expression *new_exp PARAMS ((int nargs, enum operator op,
|
||||||
|
struct expression * const *args));
|
||||||
|
static inline struct expression *new_exp_0 PARAMS ((enum operator op));
|
||||||
|
static inline struct expression *new_exp_1 PARAMS ((enum operator op,
|
||||||
|
struct expression *right));
|
||||||
|
static struct expression *new_exp_2 PARAMS ((enum operator op,
|
||||||
|
struct expression *left,
|
||||||
|
struct expression *right));
|
||||||
|
static inline struct expression *new_exp_3 PARAMS ((enum operator op,
|
||||||
|
struct expression *bexp,
|
||||||
|
struct expression *tbranch,
|
||||||
|
struct expression *fbranch));
|
||||||
|
static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
|
||||||
|
static void yyerror PARAMS ((const char *str));
|
||||||
|
|
||||||
|
/* Allocation of expressions. */
|
||||||
|
|
||||||
|
static struct expression *
|
||||||
|
new_exp (nargs, op, args)
|
||||||
|
int nargs;
|
||||||
|
enum operator op;
|
||||||
|
struct expression * const *args;
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct expression *newp;
|
||||||
|
|
||||||
|
/* If any of the argument could not be malloc'ed, just return NULL. */
|
||||||
|
for (i = nargs - 1; i >= 0; i--)
|
||||||
|
if (args[i] == NULL)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
/* Allocate a new expression. */
|
||||||
|
newp = (struct expression *) malloc (sizeof (*newp));
|
||||||
|
if (newp != NULL)
|
||||||
|
{
|
||||||
|
newp->nargs = nargs;
|
||||||
|
newp->operation = op;
|
||||||
|
for (i = nargs - 1; i >= 0; i--)
|
||||||
|
newp->val.args[i] = args[i];
|
||||||
|
return newp;
|
||||||
|
}
|
||||||
|
|
||||||
|
fail:
|
||||||
|
for (i = nargs - 1; i >= 0; i--)
|
||||||
|
FREE_EXPRESSION (args[i]);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct expression *
|
||||||
|
new_exp_0 (op)
|
||||||
|
enum operator op;
|
||||||
|
{
|
||||||
|
return new_exp (0, op, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct expression *
|
||||||
|
new_exp_1 (op, right)
|
||||||
|
enum operator op;
|
||||||
|
struct expression *right;
|
||||||
|
{
|
||||||
|
struct expression *args[1];
|
||||||
|
|
||||||
|
args[0] = right;
|
||||||
|
return new_exp (1, op, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct expression *
|
||||||
|
new_exp_2 (op, left, right)
|
||||||
|
enum operator op;
|
||||||
|
struct expression *left;
|
||||||
|
struct expression *right;
|
||||||
|
{
|
||||||
|
struct expression *args[2];
|
||||||
|
|
||||||
|
args[0] = left;
|
||||||
|
args[1] = right;
|
||||||
|
return new_exp (2, op, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct expression *
|
||||||
|
new_exp_3 (op, bexp, tbranch, fbranch)
|
||||||
|
enum operator op;
|
||||||
|
struct expression *bexp;
|
||||||
|
struct expression *tbranch;
|
||||||
|
struct expression *fbranch;
|
||||||
|
{
|
||||||
|
struct expression *args[3];
|
||||||
|
|
||||||
|
args[0] = bexp;
|
||||||
|
args[1] = tbranch;
|
||||||
|
args[2] = fbranch;
|
||||||
|
return new_exp (3, op, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
||||||
|
/* This declares that all operators have the same associativity and the
|
||||||
|
precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
|
||||||
|
There is no unary minus and no bitwise operators.
|
||||||
|
Operators with the same syntactic behaviour have been merged into a single
|
||||||
|
token, to save space in the array generated by bison. */
|
||||||
|
%right '?' /* ? */
|
||||||
|
%left '|' /* || */
|
||||||
|
%left '&' /* && */
|
||||||
|
%left EQUOP2 /* == != */
|
||||||
|
%left CMPOP2 /* < > <= >= */
|
||||||
|
%left ADDOP2 /* + - */
|
||||||
|
%left MULOP2 /* * / % */
|
||||||
|
%right '!' /* ! */
|
||||||
|
|
||||||
|
%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
|
||||||
|
%token <num> NUMBER
|
||||||
|
%type <exp> exp
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
start: exp
|
||||||
|
{
|
||||||
|
if ($1 == NULL)
|
||||||
|
YYABORT;
|
||||||
|
((struct parse_args *) arg)->res = $1;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
exp: exp '?' exp ':' exp
|
||||||
|
{
|
||||||
|
$$ = new_exp_3 (qmop, $1, $3, $5);
|
||||||
|
}
|
||||||
|
| exp '|' exp
|
||||||
|
{
|
||||||
|
$$ = new_exp_2 (lor, $1, $3);
|
||||||
|
}
|
||||||
|
| exp '&' exp
|
||||||
|
{
|
||||||
|
$$ = new_exp_2 (land, $1, $3);
|
||||||
|
}
|
||||||
|
| exp EQUOP2 exp
|
||||||
|
{
|
||||||
|
$$ = new_exp_2 ($2, $1, $3);
|
||||||
|
}
|
||||||
|
| exp CMPOP2 exp
|
||||||
|
{
|
||||||
|
$$ = new_exp_2 ($2, $1, $3);
|
||||||
|
}
|
||||||
|
| exp ADDOP2 exp
|
||||||
|
{
|
||||||
|
$$ = new_exp_2 ($2, $1, $3);
|
||||||
|
}
|
||||||
|
| exp MULOP2 exp
|
||||||
|
{
|
||||||
|
$$ = new_exp_2 ($2, $1, $3);
|
||||||
|
}
|
||||||
|
| '!' exp
|
||||||
|
{
|
||||||
|
$$ = new_exp_1 (lnot, $2);
|
||||||
|
}
|
||||||
|
| 'n'
|
||||||
|
{
|
||||||
|
$$ = new_exp_0 (var);
|
||||||
|
}
|
||||||
|
| NUMBER
|
||||||
|
{
|
||||||
|
if (($$ = new_exp_0 (num)) != NULL)
|
||||||
|
$$->val.num = $1;
|
||||||
|
}
|
||||||
|
| '(' exp ')'
|
||||||
|
{
|
||||||
|
$$ = $2;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
void
|
||||||
|
internal_function
|
||||||
|
FREE_EXPRESSION (exp)
|
||||||
|
struct expression *exp;
|
||||||
|
{
|
||||||
|
if (exp == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Handle the recursive case. */
|
||||||
|
switch (exp->nargs)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
FREE_EXPRESSION (exp->val.args[2]);
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case 2:
|
||||||
|
FREE_EXPRESSION (exp->val.args[1]);
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case 1:
|
||||||
|
FREE_EXPRESSION (exp->val.args[0]);
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
free (exp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
yylex (lval, pexp)
|
||||||
|
YYSTYPE *lval;
|
||||||
|
const char **pexp;
|
||||||
|
{
|
||||||
|
const char *exp = *pexp;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
if (exp[0] == '\0')
|
||||||
|
{
|
||||||
|
*pexp = exp;
|
||||||
|
return YYEOF;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exp[0] != ' ' && exp[0] != '\t')
|
||||||
|
break;
|
||||||
|
|
||||||
|
++exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = *exp++;
|
||||||
|
switch (result)
|
||||||
|
{
|
||||||
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
|
case '5': case '6': case '7': case '8': case '9':
|
||||||
|
{
|
||||||
|
unsigned long int n = result - '0';
|
||||||
|
while (exp[0] >= '0' && exp[0] <= '9')
|
||||||
|
{
|
||||||
|
n *= 10;
|
||||||
|
n += exp[0] - '0';
|
||||||
|
++exp;
|
||||||
|
}
|
||||||
|
lval->num = n;
|
||||||
|
result = NUMBER;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '=':
|
||||||
|
if (exp[0] == '=')
|
||||||
|
{
|
||||||
|
++exp;
|
||||||
|
lval->op = equal;
|
||||||
|
result = EQUOP2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
result = YYERRCODE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '!':
|
||||||
|
if (exp[0] == '=')
|
||||||
|
{
|
||||||
|
++exp;
|
||||||
|
lval->op = not_equal;
|
||||||
|
result = EQUOP2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '&':
|
||||||
|
case '|':
|
||||||
|
if (exp[0] == result)
|
||||||
|
++exp;
|
||||||
|
else
|
||||||
|
result = YYERRCODE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '<':
|
||||||
|
if (exp[0] == '=')
|
||||||
|
{
|
||||||
|
++exp;
|
||||||
|
lval->op = less_or_equal;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lval->op = less_than;
|
||||||
|
result = CMPOP2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '>':
|
||||||
|
if (exp[0] == '=')
|
||||||
|
{
|
||||||
|
++exp;
|
||||||
|
lval->op = greater_or_equal;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lval->op = greater_than;
|
||||||
|
result = CMPOP2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '*':
|
||||||
|
lval->op = mult;
|
||||||
|
result = MULOP2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '/':
|
||||||
|
lval->op = divide;
|
||||||
|
result = MULOP2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '%':
|
||||||
|
lval->op = module;
|
||||||
|
result = MULOP2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '+':
|
||||||
|
lval->op = plus;
|
||||||
|
result = ADDOP2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '-':
|
||||||
|
lval->op = minus;
|
||||||
|
result = ADDOP2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'n':
|
||||||
|
case '?':
|
||||||
|
case ':':
|
||||||
|
case '(':
|
||||||
|
case ')':
|
||||||
|
/* Nothing, just return the character. */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ';':
|
||||||
|
case '\n':
|
||||||
|
case '\0':
|
||||||
|
/* Be safe and let the user call this function again. */
|
||||||
|
--exp;
|
||||||
|
result = YYEOF;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
result = YYERRCODE;
|
||||||
|
#if YYDEBUG != 0
|
||||||
|
--exp;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pexp = exp;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
yyerror (str)
|
||||||
|
const char *str;
|
||||||
|
{
|
||||||
|
/* Do nothing. We don't print error messages here. */
|
||||||
|
}
|
|
@ -1,102 +0,0 @@
|
||||||
# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
|
|
||||||
# Copyright (C) 1995 Free Software Foundation, Inc.
|
|
||||||
# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
#
|
|
||||||
1 {
|
|
||||||
i\
|
|
||||||
/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\
|
|
||||||
\
|
|
||||||
#if HAVE_CONFIG_H\
|
|
||||||
# include <config.h>\
|
|
||||||
#endif\
|
|
||||||
\
|
|
||||||
#include "libgettext.h"\
|
|
||||||
\
|
|
||||||
const struct _msg_ent _msg_tbl[] = {
|
|
||||||
h
|
|
||||||
s/.*/0/
|
|
||||||
x
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# Write msgid entries in C array form.
|
|
||||||
#
|
|
||||||
/^msgid/ {
|
|
||||||
s/msgid[ ]*\(".*"\)/ {\1/
|
|
||||||
tb
|
|
||||||
# Append the next line
|
|
||||||
:b
|
|
||||||
N
|
|
||||||
# Look whether second part is continuation line.
|
|
||||||
s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
|
|
||||||
# Yes, then branch.
|
|
||||||
ta
|
|
||||||
# Because we assume that the input file correctly formed the line
|
|
||||||
# just read cannot be again be a msgid line. So it's safe to ignore
|
|
||||||
# it.
|
|
||||||
s/\(.*\)\n.*/\1/
|
|
||||||
bc
|
|
||||||
# We found a continuation line. But before printing insert '\'.
|
|
||||||
:a
|
|
||||||
s/\(.*\)\(\n.*\)/\1\\\2/
|
|
||||||
P
|
|
||||||
# We cannot use D here.
|
|
||||||
s/.*\n\(.*\)/\1/
|
|
||||||
# Some buggy seds do not clear the `successful substitution since last ``t'''
|
|
||||||
# flag on `N', so we do a `t' here to clear it.
|
|
||||||
tb
|
|
||||||
# Not reached
|
|
||||||
:c
|
|
||||||
x
|
|
||||||
# The following nice solution is by
|
|
||||||
# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
|
|
||||||
td
|
|
||||||
# Increment a decimal number in pattern space.
|
|
||||||
# First hide trailing `9' digits.
|
|
||||||
:d
|
|
||||||
s/9\(_*\)$/_\1/
|
|
||||||
td
|
|
||||||
# Assure at least one digit is available.
|
|
||||||
s/^\(_*\)$/0\1/
|
|
||||||
# Increment the last digit.
|
|
||||||
s/8\(_*\)$/9\1/
|
|
||||||
s/7\(_*\)$/8\1/
|
|
||||||
s/6\(_*\)$/7\1/
|
|
||||||
s/5\(_*\)$/6\1/
|
|
||||||
s/4\(_*\)$/5\1/
|
|
||||||
s/3\(_*\)$/4\1/
|
|
||||||
s/2\(_*\)$/3\1/
|
|
||||||
s/1\(_*\)$/2\1/
|
|
||||||
s/0\(_*\)$/1\1/
|
|
||||||
# Convert the hidden `9' digits to `0's.
|
|
||||||
s/_/0/g
|
|
||||||
x
|
|
||||||
G
|
|
||||||
s/\(.*\)\n\([0-9]*\)/\1, \2},/
|
|
||||||
s/\(.*\)"$/\1/
|
|
||||||
p
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# Last line.
|
|
||||||
#
|
|
||||||
$ {
|
|
||||||
i\
|
|
||||||
};\
|
|
||||||
|
|
||||||
g
|
|
||||||
s/0*\(.*\)/int _msg_tbl_length = \1;/p
|
|
||||||
}
|
|
||||||
d
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Add this package to a list of references stored in a text file.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Library General Public License as published
|
||||||
|
# by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Library General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Library General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
# USA.
|
||||||
|
#
|
||||||
|
# Written by Bruno Haible <haible@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:/
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Remove this package from a list of references stored in a text file.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Library General Public License as published
|
||||||
|
# by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Library General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Library General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
# USA.
|
||||||
|
#
|
||||||
|
# Written by Bruno Haible <haible@clisp.cons.org>.
|
||||||
|
#
|
||||||
|
/^# Packages using this file: / {
|
||||||
|
s/# Packages using this file://
|
||||||
|
s/ @PACKAGE@ / /
|
||||||
|
s/^/# Packages using this file:/
|
||||||
|
}
|
|
@ -1,51 +1,60 @@
|
||||||
/* Implementation of the textdomain(3) function.
|
/* Implementation of the textdomain(3) function.
|
||||||
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU Library General Public License as published
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU Library General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined _LIBC
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#else
|
|
||||||
# include <strings.h>
|
|
||||||
# ifndef memcpy
|
|
||||||
# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
# include "libgettext.h"
|
# include "libgnuintl.h"
|
||||||
|
#endif
|
||||||
|
#include "gettextP.h"
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
/* We have to handle multi-threaded applications. */
|
||||||
|
# include <bits/libc-lock.h>
|
||||||
|
#else
|
||||||
|
/* Provide dummy implementation if this is outside glibc. */
|
||||||
|
# define __libc_rwlock_define(CLASS, NAME)
|
||||||
|
# define __libc_rwlock_wrlock(NAME)
|
||||||
|
# define __libc_rwlock_unlock(NAME)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The internal variables in the standalone libintl.a must have different
|
||||||
|
names than the internal variables in GNU libc, otherwise programs
|
||||||
|
using libintl.a cannot be linked statically. */
|
||||||
|
#if !defined _LIBC
|
||||||
|
# define _nl_default_default_domain libintl_nl_default_default_domain
|
||||||
|
# define _nl_current_default_domain libintl_nl_current_default_domain
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
/* Name of the default text domain. */
|
/* Name of the default text domain. */
|
||||||
extern const char _nl_default_default_domain[];
|
extern const char _nl_default_default_domain[] attribute_hidden;
|
||||||
|
|
||||||
/* Default text domain in which entries for gettext(3) are to be found. */
|
/* Default text domain in which entries for gettext(3) are to be found. */
|
||||||
extern const char *_nl_current_default_domain;
|
extern const char *_nl_current_default_domain attribute_hidden;
|
||||||
|
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
|
@ -58,9 +67,12 @@ extern const char *_nl_current_default_domain;
|
||||||
# define strdup(str) __strdup (str)
|
# define strdup(str) __strdup (str)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# define TEXTDOMAIN textdomain__
|
# define TEXTDOMAIN libintl_textdomain
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Lock variable to protect the global data in the gettext implementation. */
|
||||||
|
__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
|
||||||
|
|
||||||
/* Set the current default message catalog to DOMAINNAME.
|
/* Set the current default message catalog to DOMAINNAME.
|
||||||
If DOMAINNAME is null, return the current default.
|
If DOMAINNAME is null, return the current default.
|
||||||
If DOMAINNAME is "", reset to the default of "messages". */
|
If DOMAINNAME is "", reset to the default of "messages". */
|
||||||
|
@ -68,38 +80,60 @@ char *
|
||||||
TEXTDOMAIN (domainname)
|
TEXTDOMAIN (domainname)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
{
|
{
|
||||||
char *old;
|
char *new_domain;
|
||||||
|
char *old_domain;
|
||||||
|
|
||||||
/* A NULL pointer requests the current setting. */
|
/* A NULL pointer requests the current setting. */
|
||||||
if (domainname == NULL)
|
if (domainname == NULL)
|
||||||
return (char *) _nl_current_default_domain;
|
return (char *) _nl_current_default_domain;
|
||||||
|
|
||||||
old = (char *) _nl_current_default_domain;
|
__libc_rwlock_wrlock (_nl_state_lock);
|
||||||
|
|
||||||
|
old_domain = (char *) _nl_current_default_domain;
|
||||||
|
|
||||||
/* If domain name is the null string set to default domain "messages". */
|
/* If domain name is the null string set to default domain "messages". */
|
||||||
if (domainname[0] == '\0'
|
if (domainname[0] == '\0'
|
||||||
|| strcmp (domainname, _nl_default_default_domain) == 0)
|
|| strcmp (domainname, _nl_default_default_domain) == 0)
|
||||||
|
{
|
||||||
_nl_current_default_domain = _nl_default_default_domain;
|
_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
|
else
|
||||||
{
|
{
|
||||||
/* If the following malloc fails `_nl_current_default_domain'
|
/* If the following malloc fails `_nl_current_default_domain'
|
||||||
will be NULL. This value will be returned and so signals we
|
will be NULL. This value will be returned and so signals we
|
||||||
are out of core. */
|
are out of core. */
|
||||||
#if defined _LIBC || defined HAVE_STRDUP
|
#if defined _LIBC || defined HAVE_STRDUP
|
||||||
_nl_current_default_domain = strdup (domainname);
|
new_domain = strdup (domainname);
|
||||||
#else
|
#else
|
||||||
size_t len = strlen (domainname) + 1;
|
size_t len = strlen (domainname) + 1;
|
||||||
char *cp = (char *) malloc (len);
|
new_domain = (char *) malloc (len);
|
||||||
if (cp != NULL)
|
if (new_domain != NULL)
|
||||||
memcpy (cp, domainname, len);
|
memcpy (new_domain, domainname, len);
|
||||||
_nl_current_default_domain = cp;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (new_domain != NULL)
|
||||||
|
_nl_current_default_domain = new_domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (old != _nl_default_default_domain)
|
/* We use this possibility to signal a change of the loaded catalogs
|
||||||
free (old);
|
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;
|
||||||
|
|
||||||
return (char *) _nl_current_default_domain;
|
if (old_domain != new_domain && old_domain != _nl_default_default_domain)
|
||||||
|
free (old_domain);
|
||||||
|
}
|
||||||
|
|
||||||
|
__libc_rwlock_unlock (_nl_state_lock);
|
||||||
|
|
||||||
|
return new_domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
|
|
||||||
# Copyright (C) 1995 Free Software Foundation, Inc.
|
|
||||||
# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The first directive in the .msg should be the definition of the
|
|
||||||
# message set number. We use always set number 1.
|
|
||||||
#
|
|
||||||
1 {
|
|
||||||
i\
|
|
||||||
$set 1 # Automatically created by po2msg.sed
|
|
||||||
h
|
|
||||||
s/.*/0/
|
|
||||||
x
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# We copy all comments into the .msg file. Perhaps they can help.
|
|
||||||
#
|
|
||||||
/^#/ s/^#[ ]*/$ /p
|
|
||||||
#
|
|
||||||
# We copy the original message as a comment into the .msg file.
|
|
||||||
#
|
|
||||||
/^msgid/ {
|
|
||||||
# Does not work now
|
|
||||||
# /"$/! {
|
|
||||||
# s/\\$//
|
|
||||||
# s/$/ ... (more lines following)"/
|
|
||||||
# }
|
|
||||||
s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/
|
|
||||||
p
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# The .msg file contains, other then the .po file, only the translations
|
|
||||||
# but each given a unique ID. Starting from 1 and incrementing by 1 for
|
|
||||||
# each message we assign them to the messages.
|
|
||||||
# It is important that the .po file used to generate the cat-id-tbl.c file
|
|
||||||
# (with po-to-tbl) is the same as the one used here. (At least the order
|
|
||||||
# of declarations must not be changed.)
|
|
||||||
#
|
|
||||||
/^msgstr/ {
|
|
||||||
s/msgstr[ ]*"\(.*\)"/\1/
|
|
||||||
x
|
|
||||||
# The following nice solution is by
|
|
||||||
# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
|
|
||||||
td
|
|
||||||
# Increment a decimal number in pattern space.
|
|
||||||
# First hide trailing `9' digits.
|
|
||||||
:d
|
|
||||||
s/9\(_*\)$/_\1/
|
|
||||||
td
|
|
||||||
# Assure at least one digit is available.
|
|
||||||
s/^\(_*\)$/0\1/
|
|
||||||
# Increment the last digit.
|
|
||||||
s/8\(_*\)$/9\1/
|
|
||||||
s/7\(_*\)$/8\1/
|
|
||||||
s/6\(_*\)$/7\1/
|
|
||||||
s/5\(_*\)$/6\1/
|
|
||||||
s/4\(_*\)$/5\1/
|
|
||||||
s/3\(_*\)$/4\1/
|
|
||||||
s/2\(_*\)$/3\1/
|
|
||||||
s/1\(_*\)$/2\1/
|
|
||||||
s/0\(_*\)$/1\1/
|
|
||||||
# Convert the hidden `9' digits to `0's.
|
|
||||||
s/_/0/g
|
|
||||||
x
|
|
||||||
# Bring the line in the format `<number> <message>'
|
|
||||||
G
|
|
||||||
s/^[^\n]*$/& /
|
|
||||||
s/\(.*\)\n\([0-9]*\)/\2 \1/
|
|
||||||
# Clear flag from last substitution.
|
|
||||||
tb
|
|
||||||
# Append the next line.
|
|
||||||
:b
|
|
||||||
N
|
|
||||||
# Look whether second part is a continuation line.
|
|
||||||
s/\(.*\n\)"\(.*\)"/\1\2/
|
|
||||||
# Yes, then branch.
|
|
||||||
ta
|
|
||||||
P
|
|
||||||
D
|
|
||||||
# Note that `D' includes a jump to the start!!
|
|
||||||
# We found a continuation line. But before printing insert '\'.
|
|
||||||
:a
|
|
||||||
s/\(.*\)\(\n.*\)/\1\\\2/
|
|
||||||
P
|
|
||||||
# We cannot use the sed command `D' here
|
|
||||||
s/.*\n\(.*\)/\1/
|
|
||||||
tb
|
|
||||||
}
|
|
||||||
d
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2003-05-03 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
|
* Makefile.in: Add $(LIBINTL) to the link line so we can support
|
||||||
|
using the internal gettext library.
|
||||||
|
|
||||||
|
* nls-enable.h: Add #ifndef protection around LOCALEDIR definition.
|
||||||
|
|
||||||
2003-04-21 Theodore Ts'o <tytso@mit.edu>
|
2003-04-21 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
* Release of E2fsprogs 1.33
|
* Release of E2fsprogs 1.33
|
||||||
|
|
|
@ -63,13 +63,13 @@ findsuper: findsuper.o
|
||||||
|
|
||||||
tune2fs: $(TUNE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBS_BLKID)
|
tune2fs: $(TUNE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBS_BLKID)
|
||||||
$(CC) $(ALL_LDFLAGS) -o tune2fs $(TUNE2FS_OBJS) $(LIBS) \
|
$(CC) $(ALL_LDFLAGS) -o tune2fs $(TUNE2FS_OBJS) $(LIBS) \
|
||||||
$(LIBS_BLKID) $(LIBS_E2P)
|
$(LIBS_BLKID) $(LIBS_E2P) $(LIBINTL)
|
||||||
|
|
||||||
blkid: $(BLKID_OBJS) $(DEPLIBS_BLKID)
|
blkid: $(BLKID_OBJS) $(DEPLIBS_BLKID)
|
||||||
$(CC) $(ALL_LDFLAGS) -o blkid $(BLKID_OBJS) $(LIBS_BLKID)
|
$(CC) $(ALL_LDFLAGS) -o blkid $(BLKID_OBJS) $(LIBS_BLKID) $(LIBINTL)
|
||||||
|
|
||||||
e2image: $(E2IMAGE_OBJS) $(DEPLIBS)
|
e2image: $(E2IMAGE_OBJS) $(DEPLIBS)
|
||||||
$(CC) $(ALL_LDFLAGS) -o e2image $(E2IMAGE_OBJS) $(LIBS)
|
$(CC) $(ALL_LDFLAGS) -o e2image $(E2IMAGE_OBJS) $(LIBS) $(LIBINTL)
|
||||||
|
|
||||||
base_device: base_device.c
|
base_device: base_device.c
|
||||||
$(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(srcdir)/base_device.c \
|
$(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(srcdir)/base_device.c \
|
||||||
|
@ -80,37 +80,37 @@ check:: base_device
|
||||||
cmp $(srcdir)/base_device.tst base_device.out
|
cmp $(srcdir)/base_device.tst base_device.out
|
||||||
|
|
||||||
mklost+found: $(MKLPF_OBJS)
|
mklost+found: $(MKLPF_OBJS)
|
||||||
$(CC) $(ALL_LDFLAGS) -o mklost+found $(MKLPF_OBJS)
|
$(CC) $(ALL_LDFLAGS) -o mklost+found $(MKLPF_OBJS) $(LIBINTL)
|
||||||
|
|
||||||
mke2fs: $(MKE2FS_OBJS) $(DEPLIBS) $(LIBE2P) $(DEPLIBUUID) $(DEPLIBS_BLKID)
|
mke2fs: $(MKE2FS_OBJS) $(DEPLIBS) $(LIBE2P) $(DEPLIBUUID) $(DEPLIBS_BLKID)
|
||||||
$(CC) $(ALL_LDFLAGS) -o mke2fs $(MKE2FS_OBJS) $(LIBS) $(LIBS_BLKID) \
|
$(CC) $(ALL_LDFLAGS) -o mke2fs $(MKE2FS_OBJS) $(LIBS) $(LIBS_BLKID) \
|
||||||
$(LIBE2P) $(LIBUUID)
|
$(LIBE2P) $(LIBUUID) $(LIBINTL)
|
||||||
|
|
||||||
mke2fs.static: $(MKE2FS_OBJS) $(STATIC_DEPLIBS) $(STATIC_LIBE2P) $(DEPSTATIC_LIBUUID)
|
mke2fs.static: $(MKE2FS_OBJS) $(STATIC_DEPLIBS) $(STATIC_LIBE2P) $(DEPSTATIC_LIBUUID)
|
||||||
$(CC) $(ALL_LDFLAGS) -static -o mke2fs.static $(MKE2FS_OBJS) \
|
$(CC) $(ALL_LDFLAGS) -static -o mke2fs.static $(MKE2FS_OBJS) \
|
||||||
$(STATIC_LIBS) $(STATIC_LIBE2P) $(STATIC_LIBUUID)
|
$(STATIC_LIBS) $(STATIC_LIBE2P) $(STATIC_LIBUUID) $(LIBINTL)
|
||||||
|
|
||||||
resize2fs: resize2fs.o $(DEPLIBS)
|
resize2fs: resize2fs.o $(DEPLIBS)
|
||||||
$(CC) $(ALL_LDFLAGS) -o resize2fs resize2fs.o $(LIBS)
|
$(CC) $(ALL_LDFLAGS) -o resize2fs resize2fs.o $(LIBS) $(LIBINTL)
|
||||||
|
|
||||||
chattr: $(CHATTR_OBJS) $(DEPLIBS_E2P)
|
chattr: $(CHATTR_OBJS) $(DEPLIBS_E2P)
|
||||||
$(CC) $(ALL_LDFLAGS) -o chattr $(CHATTR_OBJS) $(LIBS_E2P)
|
$(CC) $(ALL_LDFLAGS) -o chattr $(CHATTR_OBJS) $(LIBS_E2P) $(LIBINTL)
|
||||||
|
|
||||||
lsattr: $(LSATTR_OBJS) $(DEPLIBS_E2P)
|
lsattr: $(LSATTR_OBJS) $(DEPLIBS_E2P)
|
||||||
$(CC) $(ALL_LDFLAGS) -o lsattr $(LSATTR_OBJS) $(LIBS_E2P)
|
$(CC) $(ALL_LDFLAGS) -o lsattr $(LSATTR_OBJS) $(LIBS_E2P) $(LIBINTL)
|
||||||
|
|
||||||
uuidgen: $(UUIDGEN_OBJS) $(DEPLIBUUID)
|
uuidgen: $(UUIDGEN_OBJS) $(DEPLIBUUID)
|
||||||
$(CC) $(ALL_LDFLAGS) -o uuidgen $(UUIDGEN_OBJS) $(LIBUUID)
|
$(CC) $(ALL_LDFLAGS) -o uuidgen $(UUIDGEN_OBJS) $(LIBUUID) $(LIBINTL)
|
||||||
|
|
||||||
dumpe2fs: $(DUMPE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBUUID)
|
dumpe2fs: $(DUMPE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBUUID)
|
||||||
$(CC) $(ALL_LDFLAGS) -o dumpe2fs $(DUMPE2FS_OBJS) $(LIBS) \
|
$(CC) $(ALL_LDFLAGS) -o dumpe2fs $(DUMPE2FS_OBJS) $(LIBS) \
|
||||||
$(LIBS_E2P) $(LIBUUID)
|
$(LIBS_E2P) $(LIBUUID) $(LIBINTL)
|
||||||
|
|
||||||
fsck: $(FSCK_OBJS) $(DEBLIBS_BLKID)
|
fsck: $(FSCK_OBJS) $(DEBLIBS_BLKID)
|
||||||
$(CC) $(ALL_LDFLAGS) -o fsck $(FSCK_OBJS) $(LIBS_BLKID)
|
$(CC) $(ALL_LDFLAGS) -o fsck $(FSCK_OBJS) $(LIBS_BLKID) $(LIBINTL)
|
||||||
|
|
||||||
badblocks: $(BADBLOCKS_OBJS) $(DEPLIBS)
|
badblocks: $(BADBLOCKS_OBJS) $(DEPLIBS)
|
||||||
$(CC) $(ALL_LDFLAGS) -o badblocks $(BADBLOCKS_OBJS) $(LIBS)
|
$(CC) $(ALL_LDFLAGS) -o badblocks $(BADBLOCKS_OBJS) $(LIBS) $(LIBINTL)
|
||||||
|
|
||||||
logsave: logsave.o
|
logsave: logsave.o
|
||||||
$(CC) $(ALL_LDFLAGS) -o logsave logsave.o
|
$(CC) $(ALL_LDFLAGS) -o logsave logsave.o
|
||||||
|
|
|
@ -7,10 +7,12 @@
|
||||||
#else
|
#else
|
||||||
#define N_(a) (a)
|
#define N_(a) (a)
|
||||||
#endif
|
#endif
|
||||||
/* FIXME */
|
#ifndef NLS_CAT_NAME
|
||||||
#define NLS_CAT_NAME "e2fsprogs"
|
#define NLS_CAT_NAME "e2fsprogs"
|
||||||
|
#endif
|
||||||
|
#ifndef LOCALEDIR
|
||||||
#define LOCALEDIR "/usr/share/locale"
|
#define LOCALEDIR "/usr/share/locale"
|
||||||
/* FIXME */
|
#endif
|
||||||
#else
|
#else
|
||||||
#define _(a) (a)
|
#define _(a) (a)
|
||||||
#define N_(a) a
|
#define N_(a) a
|
||||||
|
|
|
@ -2,25 +2,33 @@
|
||||||
# mkinstalldirs --- make directory hierarchy
|
# mkinstalldirs --- make directory hierarchy
|
||||||
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||||
# Created: 1993-05-16
|
# Created: 1993-05-16
|
||||||
# Last modified: 1994-03-25
|
|
||||||
# Public domain
|
# Public domain
|
||||||
|
|
||||||
|
# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $
|
||||||
|
|
||||||
errstatus=0
|
errstatus=0
|
||||||
|
|
||||||
for file in ${1+"$@"} ; do
|
for file
|
||||||
|
do
|
||||||
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
||||||
shift
|
shift
|
||||||
|
|
||||||
pathcomp=
|
pathcomp=
|
||||||
for d in ${1+"$@"} ; do
|
for d
|
||||||
|
do
|
||||||
pathcomp="$pathcomp$d"
|
pathcomp="$pathcomp$d"
|
||||||
case "$pathcomp" in
|
case "$pathcomp" in
|
||||||
-* ) pathcomp=./$pathcomp ;;
|
-* ) pathcomp=./$pathcomp ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test ! -d "$pathcomp"; then
|
if test ! -d "$pathcomp"; then
|
||||||
echo "mkdir $pathcomp" 1>&2
|
echo "mkdir $pathcomp"
|
||||||
mkdir "$pathcomp" || errstatus=$?
|
|
||||||
|
mkdir "$pathcomp" || lasterr=$?
|
||||||
|
|
||||||
|
if test ! -d "$pathcomp"; then
|
||||||
|
errstatus=$lasterr
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pathcomp="$pathcomp/"
|
pathcomp="$pathcomp/"
|
||||||
|
|
11
po/ChangeLog
11
po/ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2003-05-03 gettextize <bug-gnu-gettext@gnu.org>
|
||||||
|
|
||||||
|
* Makefile.in.in: Upgrade to gettext-0.11.5.
|
||||||
|
* Rules-quot: New file, from gettext-0.11.5.
|
||||||
|
* boldquot.sed: New file, from gettext-0.11.5.
|
||||||
|
* en@boldquot.header: New file, from gettext-0.11.5.
|
||||||
|
* en@quot.header: New file, from gettext-0.11.5.
|
||||||
|
* insert-header.sin: New file, from gettext-0.11.5.
|
||||||
|
* quot.sed: New file, from gettext-0.11.5.
|
||||||
|
* remove-potcdate.sin: New file, from gettext-0.11.5.
|
||||||
|
|
||||||
2003-04-21 Theodore Ts'o <tytso@mit.edu>
|
2003-04-21 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
* Release of E2fsprogs 1.33
|
* Release of E2fsprogs 1.33
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
it nyc tr de de-utf
|
|
@ -1,10 +1,12 @@
|
||||||
# Makefile for program source directory in GNU NLS utilities package.
|
# Makefile for PO directory in any package using GNU gettext.
|
||||||
# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
# Copyright (C) 1995-1997, 2000-2002 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
||||||
#
|
#
|
||||||
# This file file be copied and used freely without restrictions. It can
|
# This file can be copied and used freely without restrictions. It can
|
||||||
# be used in projects which are not available under the GNU Public License
|
# be used in projects which are not available under the GNU General Public
|
||||||
# but which still want to provide support for the GNU gettext functionality.
|
# License but which still want to provide support for the GNU gettext
|
||||||
# Please note that the actual code is *not* freely available.
|
# functionality.
|
||||||
|
# Please note that the actual code of GNU gettext is covered by the GNU
|
||||||
|
# General Public License and is *not* in the public domain.
|
||||||
|
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
|
@ -18,231 +20,298 @@ VPATH = @srcdir@
|
||||||
|
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
exec_prefix = @exec_prefix@
|
exec_prefix = @exec_prefix@
|
||||||
datadir = $(prefix)/@DATADIRNAME@
|
datadir = @datadir@
|
||||||
localedir = $(datadir)/locale
|
localedir = $(datadir)/locale
|
||||||
gnulocaledir = $(prefix)/share/locale
|
gettextsrcdir = $(datadir)/gettext/po
|
||||||
gettextsrcdir = $(prefix)/share/gettext/po
|
|
||||||
subdir = po
|
|
||||||
|
|
||||||
INSTALL = @INSTALL@
|
INSTALL = @INSTALL@
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
|
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||||
|
mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
|
||||||
|
|
||||||
CC = @CC@
|
GMSGFMT = @GMSGFMT@
|
||||||
GENCAT = @GENCAT@
|
|
||||||
GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
|
|
||||||
MSGFMT = @MSGFMT@
|
MSGFMT = @MSGFMT@
|
||||||
XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
|
XGETTEXT = @XGETTEXT@
|
||||||
MSGMERGE = PATH=../src:$$PATH msgmerge
|
MSGMERGE = msgmerge
|
||||||
|
MSGMERGE_UPDATE = @MSGMERGE@ --update
|
||||||
|
MSGINIT = msginit
|
||||||
|
MSGCONV = msgconv
|
||||||
|
MSGFILTER = msgfilter
|
||||||
|
|
||||||
DEFS = @DEFS@
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
|
||||||
|
|
||||||
INCLUDES = -I.. -I$(top_srcdir)/intl
|
|
||||||
|
|
||||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
|
||||||
|
|
||||||
SOURCES = cat-id-tbl.c
|
|
||||||
POFILES = @POFILES@
|
POFILES = @POFILES@
|
||||||
GMOFILES = @GMOFILES@
|
GMOFILES = @GMOFILES@
|
||||||
DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
|
UPDATEPOFILES = @UPDATEPOFILES@
|
||||||
stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
|
DUMMYPOFILES = @DUMMYPOFILES@
|
||||||
|
DISTFILES.common = Makefile.in.in Makevars remove-potcdate.sin \
|
||||||
|
$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
|
||||||
|
DISTFILES = $(DISTFILES.common) POTFILES.in $(DOMAIN).pot \
|
||||||
|
$(POFILES) $(GMOFILES) \
|
||||||
|
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
|
||||||
|
|
||||||
POTFILES = \
|
POTFILES = \
|
||||||
|
|
||||||
CATALOGS = @CATALOGS@
|
CATALOGS = @CATALOGS@
|
||||||
CATOBJEXT = @CATOBJEXT@
|
|
||||||
INSTOBJEXT = @INSTOBJEXT@
|
# Makevars gets inserted here. (Don't remove this line!)
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
|
.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update
|
||||||
|
|
||||||
.c.o:
|
|
||||||
$(COMPILE) $<
|
|
||||||
|
|
||||||
.po.pox:
|
|
||||||
$(MAKE) $(PACKAGE).pot
|
|
||||||
$(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
|
|
||||||
|
|
||||||
.po.mo:
|
.po.mo:
|
||||||
$(MSGFMT) -o $@ $<
|
@echo "$(MSGFMT) -c -o $@ $<"; \
|
||||||
|
$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
|
||||||
|
|
||||||
.po.gmo:
|
.po.gmo:
|
||||||
file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
|
@lang=`echo $* | sed -e 's,.*/,,'`; \
|
||||||
&& rm -f $$file && $(GMSGFMT) -o $$file $<
|
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||||
|
echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
|
||||||
|
$(GMSGFMT) -c --statistics -o t-$${lang}.gmo $(srcdir)/$${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
|
||||||
|
|
||||||
.po.cat:
|
.sin.sed:
|
||||||
sed -f ../intl/po2msg.sed < $< > $*.msg \
|
sed -e '/^#/d' $< > t-$@
|
||||||
&& rm -f $@ && $(GENCAT) $@ $*.msg
|
mv t-$@ $@
|
||||||
|
|
||||||
|
|
||||||
all: all-@USE_NLS@
|
all: all-@USE_NLS@
|
||||||
|
|
||||||
all-yes: cat-id-tbl.c $(CATALOGS)
|
all-yes: $(CATALOGS)
|
||||||
all-no:
|
all-no:
|
||||||
|
|
||||||
$(srcdir)/$(PACKAGE).pot: $(POTFILES)
|
# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
|
||||||
$(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
|
# otherwise packages like GCC can not be built if only parts of the source
|
||||||
--add-comments --keyword=_ --keyword=N_ \
|
# have been downloaded.
|
||||||
--files-from=$(srcdir)/POTFILES.in \
|
|
||||||
&& test ! -f $(PACKAGE).po \
|
|
||||||
|| ( rm -f $(srcdir)/$(PACKAGE).pot \
|
|
||||||
&& mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
|
|
||||||
|
|
||||||
$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
|
$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
|
||||||
$(srcdir)/stamp-cat-id: $(PACKAGE).pot
|
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||||
rm -f cat-id-tbl.tmp
|
--add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
|
||||||
sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
|
--files-from=$(srcdir)/POTFILES.in \
|
||||||
| sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
|
--copyright-holder='$(COPYRIGHT_HOLDER)'
|
||||||
if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
|
test ! -f $(DOMAIN).po || { \
|
||||||
rm cat-id-tbl.tmp; \
|
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||||
|
sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
|
||||||
|
sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
|
||||||
|
if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
|
||||||
|
rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
|
||||||
else \
|
else \
|
||||||
echo cat-id-tbl.c changed; \
|
rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
|
||||||
rm -f $(srcdir)/cat-id-tbl.c; \
|
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||||
mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
|
fi; \
|
||||||
fi
|
else \
|
||||||
cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
|
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||||
|
fi; \
|
||||||
|
}
|
||||||
|
|
||||||
|
$(srcdir)/$(DOMAIN).pot:
|
||||||
|
$(MAKE) $(DOMAIN).pot-update
|
||||||
|
|
||||||
|
$(POFILES): $(srcdir)/$(DOMAIN).pot
|
||||||
|
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
|
||||||
|
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||||
|
echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
|
||||||
|
cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
|
||||||
|
|
||||||
|
|
||||||
install: install-exec install-data
|
install: install-exec install-data
|
||||||
install-exec:
|
install-exec:
|
||||||
install-data: install-data-@USE_NLS@
|
install-data: install-data-@USE_NLS@
|
||||||
install-data-no: all
|
|
||||||
install-data-yes: all
|
|
||||||
if test -r "$(MKINSTALLDIRS)"; then \
|
|
||||||
$(MKINSTALLDIRS) $(DESTDIR)$(datadir); \
|
|
||||||
else \
|
|
||||||
$(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \
|
|
||||||
fi
|
|
||||||
@catalogs='$(CATALOGS)'; \
|
|
||||||
for cat in $$catalogs; do \
|
|
||||||
cat=`basename $$cat`; \
|
|
||||||
case "$$cat" in \
|
|
||||||
*.gmo) destdir=$(gnulocaledir);; \
|
|
||||||
*) destdir=$(localedir);; \
|
|
||||||
esac; \
|
|
||||||
lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
|
|
||||||
dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \
|
|
||||||
if test -r "$(MKINSTALLDIRS)"; then \
|
|
||||||
$(MKINSTALLDIRS) $$dir; \
|
|
||||||
else \
|
|
||||||
$(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
|
|
||||||
fi; \
|
|
||||||
if test -r $$cat; then \
|
|
||||||
$(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
|
|
||||||
echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
|
||||||
else \
|
|
||||||
$(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
|
|
||||||
echo "installing $(srcdir)/$$cat as" \
|
|
||||||
"$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
|
||||||
fi; \
|
|
||||||
if test -r $$cat.m; then \
|
|
||||||
$(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
|
||||||
echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
|
||||||
else \
|
|
||||||
if test -r $(srcdir)/$$cat.m ; then \
|
|
||||||
$(INSTALL_DATA) $(srcdir)/$$cat.m \
|
|
||||||
$$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
|
||||||
echo "installing $(srcdir)/$$cat as" \
|
|
||||||
"$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
|
||||||
else \
|
|
||||||
true; \
|
|
||||||
fi; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
if test "$(PACKAGE)" = "gettext"; then \
|
if test "$(PACKAGE)" = "gettext"; then \
|
||||||
if test -r "$(MKINSTALLDIRS)"; then \
|
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
||||||
$(MKINSTALLDIRS) $(gettextsrcdir); \
|
for file in $(DISTFILES.common); do \
|
||||||
else \
|
$(INSTALL_DATA) $(srcdir)/$$file \
|
||||||
$(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
|
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||||
fi; \
|
done; \
|
||||||
$(INSTALL_DATA) $(srcdir)/Makefile.in.in \
|
|
||||||
$(gettextsrcdir)/Makefile.in.in; \
|
|
||||||
else \
|
else \
|
||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
|
install-data-no: all
|
||||||
|
install-data-yes: all
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(datadir)
|
||||||
|
@catalogs='$(CATALOGS)'; \
|
||||||
|
for cat in $$catalogs; do \
|
||||||
|
cat=`basename $$cat`; \
|
||||||
|
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||||
|
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$$dir; \
|
||||||
|
if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
|
||||||
|
$(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
|
||||||
|
echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
|
||||||
|
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||||
|
if test -n "$$lc"; then \
|
||||||
|
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||||
|
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||||
|
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||||
|
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||||
|
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||||
|
for file in *; do \
|
||||||
|
if test -f $$file; then \
|
||||||
|
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||||
|
fi; \
|
||||||
|
done); \
|
||||||
|
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||||
|
else \
|
||||||
|
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||||
|
:; \
|
||||||
|
else \
|
||||||
|
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||||
|
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||||
|
ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||||
|
ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||||
|
cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||||
|
echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
done
|
||||||
|
|
||||||
|
install-strip: install
|
||||||
|
|
||||||
|
installdirs: installdirs-exec installdirs-data
|
||||||
|
installdirs-exec:
|
||||||
|
installdirs-data: installdirs-data-@USE_NLS@
|
||||||
|
if test "$(PACKAGE)" = "gettext"; then \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
installdirs-data-no:
|
||||||
|
installdirs-data-yes:
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(datadir)
|
||||||
|
@catalogs='$(CATALOGS)'; \
|
||||||
|
for cat in $$catalogs; do \
|
||||||
|
cat=`basename $$cat`; \
|
||||||
|
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||||
|
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$$dir; \
|
||||||
|
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||||
|
if test -n "$$lc"; then \
|
||||||
|
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||||
|
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||||
|
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||||
|
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||||
|
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||||
|
for file in *; do \
|
||||||
|
if test -f $$file; then \
|
||||||
|
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||||
|
fi; \
|
||||||
|
done); \
|
||||||
|
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||||
|
else \
|
||||||
|
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||||
|
:; \
|
||||||
|
else \
|
||||||
|
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||||
|
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
done
|
||||||
|
|
||||||
# Define this as empty until I found a useful application.
|
# Define this as empty until I found a useful application.
|
||||||
installcheck:
|
installcheck:
|
||||||
|
|
||||||
uninstall:
|
uninstall: uninstall-exec uninstall-data
|
||||||
|
uninstall-exec:
|
||||||
|
uninstall-data: uninstall-data-@USE_NLS@
|
||||||
|
if test "$(PACKAGE)" = "gettext"; then \
|
||||||
|
for file in $(DISTFILES.common); do \
|
||||||
|
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||||
|
done; \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
uninstall-data-no:
|
||||||
|
uninstall-data-yes:
|
||||||
catalogs='$(CATALOGS)'; \
|
catalogs='$(CATALOGS)'; \
|
||||||
for cat in $$catalogs; do \
|
for cat in $$catalogs; do \
|
||||||
cat=`basename $$cat`; \
|
cat=`basename $$cat`; \
|
||||||
lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
|
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||||
rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
|
for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
|
||||||
rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
|
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||||
rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
|
done; \
|
||||||
rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
|
|
||||||
done
|
done
|
||||||
rm -f $(gettextsrcdir)/po-Makefile.in.in
|
|
||||||
|
|
||||||
check:: all
|
check: all
|
||||||
|
|
||||||
cat-id-tbl.o: ../intl/libgettext.h
|
|
||||||
|
|
||||||
dvi info tags TAGS ID:
|
dvi info tags TAGS ID:
|
||||||
|
|
||||||
mostlyclean:
|
mostlyclean:
|
||||||
rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
|
rm -f remove-potcdate.sed *.gmo
|
||||||
|
rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
|
||||||
rm -fr *.o
|
rm -fr *.o
|
||||||
|
|
||||||
clean: mostlyclean
|
clean: mostlyclean
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
|
rm -f Makefile Makefile.in POTFILES *.mo
|
||||||
|
|
||||||
maintainer-clean: distclean
|
maintainer-clean: distclean
|
||||||
@echo "This command is intended for maintainers to use;"
|
@echo "This command is intended for maintainers to use;"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
rm -f $(GMOFILES)
|
rm -f $(GMOFILES)
|
||||||
|
|
||||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
dist distdir: update-po $(DISTFILES)
|
dist distdir:
|
||||||
|
$(MAKE) update-po
|
||||||
|
@$(MAKE) dist2
|
||||||
|
# This is a separate target because 'update-po' must be executed before.
|
||||||
|
dist2: $(DISTFILES)
|
||||||
dists="$(DISTFILES)"; \
|
dists="$(DISTFILES)"; \
|
||||||
|
if test -f $(srcdir)/ChangeLog; then dists="$$dists ChangeLog"; fi; \
|
||||||
|
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
|
||||||
for file in $$dists; do \
|
for file in $$dists; do \
|
||||||
ln $(srcdir)/$$file $(distdir) 2> /dev/null \
|
if test -f $$file; then \
|
||||||
|| cp -p $(srcdir)/$$file $(distdir); \
|
cp -p $$file $(distdir); \
|
||||||
|
else \
|
||||||
|
cp -p $(srcdir)/$$file $(distdir); \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
update-po: Makefile
|
update-po: Makefile
|
||||||
$(MAKE) $(PACKAGE).pot
|
$(MAKE) $(DOMAIN).pot-update
|
||||||
PATH=`pwd`/../src:$$PATH; \
|
$(MAKE) $(UPDATEPOFILES)
|
||||||
cd $(srcdir); \
|
$(MAKE) update-gmo
|
||||||
catalogs='$(CATALOGS)'; \
|
|
||||||
for cat in $$catalogs; do \
|
# General rule for updating PO files.
|
||||||
cat=`basename $$cat`; \
|
|
||||||
lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
|
.nop.po-update:
|
||||||
mv $$lang.po $$lang.old.po; \
|
@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
|
||||||
|
if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
|
||||||
|
tmpdir=`pwd`; \
|
||||||
echo "$$lang:"; \
|
echo "$$lang:"; \
|
||||||
if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
|
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||||
rm -f $$lang.old.po; \
|
echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
|
||||||
|
cd $(srcdir); \
|
||||||
|
if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
|
||||||
|
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||||
|
rm -f $$tmpdir/$$lang.new.po; \
|
||||||
else \
|
else \
|
||||||
echo "msgmerge for $$cat failed!"; \
|
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||||
rm -f $$lang.po; \
|
:; \
|
||||||
mv $$lang.old.po $$lang.po; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
|
|
||||||
POTFILES: POTFILES.in
|
|
||||||
( if test 'x$(srcdir)' != 'x.'; then \
|
|
||||||
posrcprefix='$(top_srcdir)/'; \
|
|
||||||
else \
|
else \
|
||||||
posrcprefix="../"; \
|
echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||||
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
rm -f $@-t $@ \
|
fi; \
|
||||||
&& (sed -e '/^#/d' -e '/^[ ]*$$/d' \
|
else \
|
||||||
-e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
|
echo "msgmerge for $$lang.po failed!" 1>&2; \
|
||||||
| sed -e '$$s/\\$$//') > $@-t \
|
rm -f $$tmpdir/$$lang.new.po; \
|
||||||
&& chmod a-w $@-t \
|
fi
|
||||||
&& mv $@-t $@ )
|
|
||||||
|
|
||||||
Makefile: Makefile.in.in ../config.status POTFILES
|
$(DUMMYPOFILES):
|
||||||
cd .. \
|
|
||||||
|
update-gmo: Makefile $(GMOFILES)
|
||||||
|
@:
|
||||||
|
|
||||||
|
Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
|
||||||
|
cd $(top_builddir) \
|
||||||
&& CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
|
&& CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
|
||||||
$(SHELL) ./config.status
|
$(SHELL) ./config.status
|
||||||
|
|
||||||
|
force:
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
# 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.
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
.NOEXPORT:
|
.NOEXPORT:
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Makefile variables for PO directory in any package using GNU gettext.
|
||||||
|
|
||||||
|
# Usually the message domain is the same as the package name.
|
||||||
|
DOMAIN = $(PACKAGE)
|
||||||
|
|
||||||
|
# These two variables depend on the location of this directory.
|
||||||
|
subdir = po
|
||||||
|
top_builddir = ..
|
||||||
|
|
||||||
|
# These options get passed to xgettext.
|
||||||
|
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
|
||||||
|
|
||||||
|
# This is the copyright holder that gets inserted into the header of the
|
||||||
|
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||||
|
# package. (Note that the msgstr strings, extracted from the package's
|
||||||
|
# sources, belong to the copyright holder of the package.) Translators are
|
||||||
|
# expected to transfer the copyright for their translations to this person
|
||||||
|
# or entity, or to disclaim their copyright. The empty string stands for
|
||||||
|
# the public domain; in this case the translators are expected to disclaim
|
||||||
|
# their copyright.
|
||||||
|
COPYRIGHT_HOLDER = Theodore Ts''o
|
||||||
|
|
||||||
|
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
||||||
|
# message catalogs shall be used. It is usually empty.
|
||||||
|
EXTRA_LOCALE_CATEGORIES =
|
|
@ -1,4 +1,7 @@
|
||||||
e2fsck/badblocks.c
|
e2fsck/badblocks.c
|
||||||
|
e2fsck/dict.c
|
||||||
|
e2fsck/dirinfo.c
|
||||||
|
e2fsck/dx_dirinfo.c
|
||||||
e2fsck/ehandler.c
|
e2fsck/ehandler.c
|
||||||
e2fsck/emptydir.c
|
e2fsck/emptydir.c
|
||||||
e2fsck/extend.c
|
e2fsck/extend.c
|
||||||
|
@ -14,26 +17,30 @@ e2fsck/pass4.c
|
||||||
e2fsck/pass5.c
|
e2fsck/pass5.c
|
||||||
e2fsck/problem.c
|
e2fsck/problem.c
|
||||||
e2fsck/recovery.c
|
e2fsck/recovery.c
|
||||||
|
e2fsck/region.c
|
||||||
e2fsck/scantest.c
|
e2fsck/scantest.c
|
||||||
e2fsck/super.c
|
e2fsck/super.c
|
||||||
e2fsck/swapfs.c
|
e2fsck/swapfs.c
|
||||||
e2fsck/unix.c
|
e2fsck/unix.c
|
||||||
e2fsck/util.c
|
e2fsck/util.c
|
||||||
misc/badblocks.c
|
misc/badblocks.c
|
||||||
|
misc/base_device.c
|
||||||
|
misc/blkid.c
|
||||||
misc/chattr.c
|
misc/chattr.c
|
||||||
misc/dumpe2fs.c
|
misc/dumpe2fs.c
|
||||||
misc/e2label.c
|
|
||||||
misc/e2image.c
|
misc/e2image.c
|
||||||
|
misc/e2label.c
|
||||||
misc/findsuper.c
|
misc/findsuper.c
|
||||||
misc/fsck.c
|
misc/fsck.c
|
||||||
misc/get_device_by_label.c
|
misc/logsave.c
|
||||||
misc/lsattr.c
|
misc/lsattr.c
|
||||||
misc/mke2fs.c
|
misc/mke2fs.c
|
||||||
misc/mklost+found.c
|
misc/mklost+found.c
|
||||||
misc/partinfo.c
|
misc/partinfo.c
|
||||||
misc/tune2fs.c
|
misc/tune2fs.c
|
||||||
misc/uuidgen.c
|
|
||||||
misc/util.c
|
misc/util.c
|
||||||
|
misc/uuidgen.c
|
||||||
|
resize/extent.c
|
||||||
resize/main.c
|
resize/main.c
|
||||||
resize/resize2fs.c
|
resize/resize2fs.c
|
||||||
resize/extent.c
|
resize/sim_progress.c
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Special Makefile rules for English message catalogs with quotation marks.
|
||||||
|
|
||||||
|
DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
|
||||||
|
|
||||||
|
.SUFFIXES: .insert-header .po-update-en
|
||||||
|
|
||||||
|
en@quot.po-update: en@quot.po-update-en
|
||||||
|
en@boldquot.po-update: en@boldquot.po-update-en
|
||||||
|
|
||||||
|
.insert-header.po-update-en:
|
||||||
|
@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
|
||||||
|
if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
|
||||||
|
tmpdir=`pwd`; \
|
||||||
|
echo "$$lang:"; \
|
||||||
|
ll=`echo $$lang | sed -e 's/@.*//'`; \
|
||||||
|
LC_ALL=C; export LC_ALL; \
|
||||||
|
cd $(srcdir); \
|
||||||
|
if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
|
||||||
|
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||||
|
rm -f $$tmpdir/$$lang.new.po; \
|
||||||
|
else \
|
||||||
|
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||||
|
:; \
|
||||||
|
else \
|
||||||
|
echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
else \
|
||||||
|
echo "creation of $$lang.po failed!" 1>&2; \
|
||||||
|
rm -f $$tmpdir/$$lang.new.po; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
en@quot.insert-header: insert-header.sin
|
||||||
|
sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
|
||||||
|
|
||||||
|
en@boldquot.insert-header: insert-header.sin
|
||||||
|
sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
|
||||||
|
|
||||||
|
mostlyclean: mostlyclean-quot
|
||||||
|
mostlyclean-quot:
|
||||||
|
rm -f *.insert-header
|
|
@ -0,0 +1,10 @@
|
||||||
|
s/"\([^"]*\)"/“\1”/g
|
||||||
|
s/`\([^`']*\)'/‘\1’/g
|
||||||
|
s/ '\([^`']*\)' / ‘\1’ /g
|
||||||
|
s/ '\([^`']*\)'$/ ‘\1’/g
|
||||||
|
s/^'\([^`']*\)' /‘\1’ /g
|
||||||
|
s/“”/""/g
|
||||||
|
s/“/“[1m/g
|
||||||
|
s/”/[0m”/g
|
||||||
|
s/‘/‘[1m/g
|
||||||
|
s/’/[0m’/g
|
938
po/de-utf.po
938
po/de-utf.po
File diff suppressed because it is too large
Load Diff
986
po/e2fsprogs.pot
986
po/e2fsprogs.pot
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,25 @@
|
||||||
|
# All this catalog "translates" are quotation characters.
|
||||||
|
# The msgids must be ASCII and therefore cannot contain real quotation
|
||||||
|
# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
|
||||||
|
# and double quote (0x22). These substitutes look strange; see
|
||||||
|
# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
|
||||||
|
#
|
||||||
|
# This catalog translates grave accent (0x60) and apostrophe (0x27) to
|
||||||
|
# left single quotation mark (U+2018) and right single quotation mark (U+2019).
|
||||||
|
# It also translates pairs of apostrophe (0x27) to
|
||||||
|
# left single quotation mark (U+2018) and right single quotation mark (U+2019)
|
||||||
|
# and pairs of quotation mark (0x22) to
|
||||||
|
# left double quotation mark (U+201C) and right double quotation mark (U+201D).
|
||||||
|
#
|
||||||
|
# When output to an UTF-8 terminal, the quotation characters appear perfectly.
|
||||||
|
# When output to an ISO-8859-1 terminal, the single quotation marks are
|
||||||
|
# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
|
||||||
|
# grave/acute accent (by libiconv), and the double quotation marks are
|
||||||
|
# transliterated to 0x22.
|
||||||
|
# When output to an ASCII terminal, the single quotation marks are
|
||||||
|
# transliterated to apostrophes, and the double quotation marks are
|
||||||
|
# transliterated to 0x22.
|
||||||
|
#
|
||||||
|
# This catalog furthermore displays the text between the quotation marks in
|
||||||
|
# bold face, assuming the VT100/XTerm escape sequences.
|
||||||
|
#
|
|
@ -0,0 +1,22 @@
|
||||||
|
# All this catalog "translates" are quotation characters.
|
||||||
|
# The msgids must be ASCII and therefore cannot contain real quotation
|
||||||
|
# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
|
||||||
|
# and double quote (0x22). These substitutes look strange; see
|
||||||
|
# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
|
||||||
|
#
|
||||||
|
# This catalog translates grave accent (0x60) and apostrophe (0x27) to
|
||||||
|
# left single quotation mark (U+2018) and right single quotation mark (U+2019).
|
||||||
|
# It also translates pairs of apostrophe (0x27) to
|
||||||
|
# left single quotation mark (U+2018) and right single quotation mark (U+2019)
|
||||||
|
# and pairs of quotation mark (0x22) to
|
||||||
|
# left double quotation mark (U+201C) and right double quotation mark (U+201D).
|
||||||
|
#
|
||||||
|
# When output to an UTF-8 terminal, the quotation characters appear perfectly.
|
||||||
|
# When output to an ISO-8859-1 terminal, the single quotation marks are
|
||||||
|
# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
|
||||||
|
# grave/acute accent (by libiconv), and the double quotation marks are
|
||||||
|
# transliterated to 0x22.
|
||||||
|
# When output to an ASCII terminal, the single quotation marks are
|
||||||
|
# transliterated to apostrophes, and the double quotation marks are
|
||||||
|
# transliterated to 0x22.
|
||||||
|
#
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Sed script that inserts the file called HEADER before the header entry.
|
||||||
|
#
|
||||||
|
# At each occurrence of a line starting with "msgid ", we execute the following
|
||||||
|
# commands. At the first occurrence, insert the file. At the following
|
||||||
|
# occurrences, do nothing. The distinction between the first and the following
|
||||||
|
# occurrences is achieved by looking at the hold space.
|
||||||
|
/^msgid /{
|
||||||
|
x
|
||||||
|
# Test if the hold space is empty.
|
||||||
|
s/m/m/
|
||||||
|
ta
|
||||||
|
# Yes it was empty. First occurrence. Read the file.
|
||||||
|
r HEADER
|
||||||
|
# Output the file's contents by reading the next line. But don't lose the
|
||||||
|
# current line while doing this.
|
||||||
|
g
|
||||||
|
N
|
||||||
|
bb
|
||||||
|
:a
|
||||||
|
# The hold space was nonempty. Following occurrences. Do nothing.
|
||||||
|
x
|
||||||
|
:b
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
s/"\([^"]*\)"/“\1”/g
|
||||||
|
s/`\([^`']*\)'/‘\1’/g
|
||||||
|
s/ '\([^`']*\)' / ‘\1’ /g
|
||||||
|
s/ '\([^`']*\)'$/ ‘\1’/g
|
||||||
|
s/^'\([^`']*\)' /‘\1’ /g
|
||||||
|
s/“”/""/g
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Sed script that remove the POT-Creation-Date line in the header entry
|
||||||
|
# from a POT file.
|
||||||
|
#
|
||||||
|
# The distinction between the first and the following occurrences of the
|
||||||
|
# pattern is achieved by looking at the hold space.
|
||||||
|
/^"POT-Creation-Date: .*"$/{
|
||||||
|
x
|
||||||
|
# Test if the hold space is empty.
|
||||||
|
s/P/P/
|
||||||
|
ta
|
||||||
|
# Yes it was empty. First occurrence. Remove the line.
|
||||||
|
g
|
||||||
|
d
|
||||||
|
bb
|
||||||
|
:a
|
||||||
|
# The hold space was nonempty. Following occurrences. Do nothing.
|
||||||
|
x
|
||||||
|
:b
|
||||||
|
}
|
|
@ -1,3 +1,10 @@
|
||||||
|
2003-05-03 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
|
* Makefile.in: Add $(LIBINTL) to the link line so we can support
|
||||||
|
using the internal gettext library.
|
||||||
|
|
||||||
|
* resize2fs.h: Add #ifndef protection around LOCALEDIR definition.
|
||||||
|
|
||||||
2003-04-21 Theodore Ts'o <tytso@mit.edu>
|
2003-04-21 Theodore Ts'o <tytso@mit.edu>
|
||||||
|
|
||||||
* Release of E2fsprogs 1.33
|
* Release of E2fsprogs 1.33
|
||||||
|
|
|
@ -25,10 +25,10 @@ SRCS= $(srcdir)/extent.c \
|
||||||
$(srcdir)/main.c \
|
$(srcdir)/main.c \
|
||||||
$(srcdir)/sim_progress.c
|
$(srcdir)/sim_progress.c
|
||||||
|
|
||||||
LIBS= $(LIBEXT2FS) $(LIBCOM_ERR)
|
LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBINTL)
|
||||||
DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR)
|
DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR)
|
||||||
|
|
||||||
STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
|
STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(LIBINTL)
|
||||||
STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
|
STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
|
|
|
@ -45,10 +45,12 @@
|
||||||
#else
|
#else
|
||||||
#define N_(a) (a)
|
#define N_(a) (a)
|
||||||
#endif
|
#endif
|
||||||
/* FIXME */
|
#ifndef NLS_CAT_NAME
|
||||||
#define NLS_CAT_NAME "e2fsprogs"
|
#define NLS_CAT_NAME "e2fsprogs"
|
||||||
|
#endif
|
||||||
|
#ifndef LOCALEDIR
|
||||||
#define LOCALEDIR "/usr/share/locale"
|
#define LOCALEDIR "/usr/share/locale"
|
||||||
/* FIXME */
|
#endif
|
||||||
#else
|
#else
|
||||||
#define _(a) (a)
|
#define _(a) (a)
|
||||||
#define N_(a) a
|
#define N_(a) a
|
||||||
|
|
Loading…
Reference in New Issue