summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyungKyu Song <hk76.song@samsung.com>2013-02-16 01:12:52 +0900
committerHyungKyu Song <hk76.song@samsung.com>2013-02-16 01:12:52 +0900
commit0f2d596c7a83742e44ec66157dc1405131e09bd3 (patch)
tree24002a5611810a9d83f8fcb9d81cdf1fe90d18b0
parent92ac94235133d4066f9d1762ebf69eb574b4932c (diff)
downloadsharutils-tizen_2.0.tar.gz
sharutils-tizen_2.0.tar.bz2
sharutils-tizen_2.0.zip
-rw-r--r--ABOUT-NLS996
-rw-r--r--AUTHORS22
-rw-r--r--COPYING639
-rw-r--r--ChangeLog34
-rw-r--r--INSTALL234
-rw-r--r--Makefile.am23
-rw-r--r--Makefile.in670
-rw-r--r--NEWS108
-rw-r--r--README80
-rw-r--r--THANKS91
-rw-r--r--TODO149
-rw-r--r--aclocal.m4923
-rwxr-xr-xconfig.guess1500
-rw-r--r--config.h.in473
-rwxr-xr-xconfig.rpath571
-rwxr-xr-xconfig.sub1616
-rwxr-xr-xconfigure16959
-rw-r--r--configure.ac144
-rw-r--r--contrib/Makefile.am21
-rw-r--r--contrib/Makefile.in359
-rw-r--r--contrib/bas-README25
-rw-r--r--contrib/pas-R.Marks25
-rw-r--r--contrib/pas-README45
-rw-r--r--contrib/shar.sh176
-rw-r--r--contrib/shar2.sh74
-rw-r--r--contrib/uudecode.bas78
-rw-r--r--contrib/uudecode.pas224
-rw-r--r--contrib/uudecode.pl24
-rw-r--r--contrib/uuencode.pas202
-rw-r--r--contrib/uuencode.pl10
-rwxr-xr-xdepcomp584
-rw-r--r--doc/Makefile.am47
-rw-r--r--doc/Makefile.in745
-rw-r--r--doc/ansi2knr.125
-rw-r--r--doc/compress-dummy.10
-rw-r--r--doc/doclicense.texi395
-rwxr-xr-xdoc/mdate-sh201
-rw-r--r--doc/shar.1258
-rw-r--r--doc/sharutils.info1924
-rw-r--r--doc/sharutils.texi1573
-rw-r--r--doc/stamp-vti4
-rw-r--r--doc/texinfo.tex7482
-rw-r--r--doc/unshar.160
-rw-r--r--doc/uuencode.1138
-rw-r--r--doc/uuencode.590
-rw-r--r--doc/version.texi4
-rwxr-xr-xinstall-sh507
-rw-r--r--intl/ChangeLog4
-rw-r--r--intl/Makefile.in500
-rw-r--r--intl/VERSION1
-rw-r--r--intl/bindtextdom.c363
-rwxr-xr-xintl/config.charset638
-rw-r--r--intl/dcgettext.c56
-rw-r--r--intl/dcigettext.c1258
-rw-r--r--intl/dcngettext.c57
-rw-r--r--intl/dgettext.c58
-rw-r--r--intl/dngettext.c59
-rw-r--r--intl/eval-plural.h108
-rw-r--r--intl/explodename.c185
-rw-r--r--intl/finddomain.c192
-rw-r--r--intl/gettext.c63
-rw-r--r--intl/gettextP.h218
-rw-r--r--intl/gmo.h149
-rw-r--r--intl/hash-string.h48
-rw-r--r--intl/intl-compat.c131
-rw-r--r--intl/l10nflist.c421
-rw-r--r--intl/langprefs.c130
-rw-r--r--intl/libgnuintl.h.in383
-rw-r--r--intl/loadinfo.h145
-rw-r--r--intl/loadmsgcat.c1420
-rw-r--r--intl/localcharset.c409
-rw-r--r--intl/localcharset.h42
-rw-r--r--intl/locale.alias78
-rw-r--r--intl/localealias.c414
-rw-r--r--intl/localename.c1500
-rw-r--r--intl/log.c98
-rw-r--r--intl/ngettext.c65
-rw-r--r--intl/os2compat.c98
-rw-r--r--intl/os2compat.h46
-rw-r--r--intl/osdep.c24
-rw-r--r--intl/plural-exp.c154
-rw-r--r--intl/plural-exp.h118
-rw-r--r--intl/plural.c1490
-rw-r--r--intl/plural.y381
-rw-r--r--intl/printf-args.c119
-rw-r--r--intl/printf-args.h137
-rw-r--r--intl/printf-parse.c537
-rw-r--r--intl/printf-parse.h75
-rw-r--r--intl/printf.c371
-rw-r--r--intl/ref-add.sin31
-rw-r--r--intl/ref-del.sin26
-rw-r--r--intl/relocatable.c449
-rw-r--r--intl/relocatable.h77
-rw-r--r--intl/textdomain.c141
-rw-r--r--intl/vasnprintf.c902
-rw-r--r--intl/vasnprintf.h78
-rw-r--r--intl/vasnwprintf.h46
-rw-r--r--intl/wprintf-parse.h75
-rw-r--r--intl/xsize.h109
-rw-r--r--lib/Makefile.am43
-rw-r--r--lib/Makefile.in503
-rw-r--r--lib/alloca.c504
-rw-r--r--lib/ansi2knr.c481
-rw-r--r--lib/basename.c90
-rw-r--r--lib/basename.h40
-rw-r--r--lib/error.c403
-rw-r--r--lib/error.h78
-rw-r--r--lib/exit.h32
-rw-r--r--lib/gen-uio53
-rw-r--r--lib/getopt.c1068
-rw-r--r--lib/getopt.h180
-rw-r--r--lib/getopt1.c188
-rw-r--r--lib/gettext.h69
-rw-r--r--lib/inttostr.c49
-rw-r--r--lib/inttostr.h65
-rw-r--r--lib/liballoca.h56
-rw-r--r--lib/malloc.c38
-rw-r--r--lib/md5.c417
-rw-r--r--lib/md5.h161
-rw-r--r--lib/memset.c26
-rw-r--r--lib/mktime.c528
-rw-r--r--lib/offtostr.c3
-rw-r--r--lib/pathmax.h55
-rw-r--r--lib/realloc.c44
-rw-r--r--lib/stpcpy.c50
-rw-r--r--lib/stpcpy.h40
-rw-r--r--lib/strftime.c1406
-rw-r--r--lib/strtoimax.c104
-rw-r--r--lib/strtol.c473
-rw-r--r--lib/strtoll.c35
-rw-r--r--lib/system.h208
-rw-r--r--lib/whoami.c118
-rw-r--r--lib/xalloc.h88
-rw-r--r--lib/xgetcwd.c87
-rw-r--r--lib/xgetcwd.h27
-rw-r--r--lib/xmalloc.c117
-rw-r--r--lib/xstrdup.c38
-rw-r--r--m4/codeset.m421
-rw-r--r--m4/error.m413
-rw-r--r--m4/gettext.m4549
-rw-r--r--m4/glibc2.m430
-rw-r--r--m4/glibc21.m430
-rw-r--r--m4/iconv.m4101
-rw-r--r--m4/intdiv0.m470
-rw-r--r--m4/intmax.m430
-rw-r--r--m4/inttypes-pri.m430
-rw-r--r--m4/inttypes.m425
-rw-r--r--m4/inttypes_h.m426
-rw-r--r--m4/lcmessage.m430
-rw-r--r--m4/lib-ld.m4110
-rw-r--r--m4/lib-link.m4553
-rw-r--r--m4/lib-prefix.m4153
-rw-r--r--m4/longdouble.m428
-rw-r--r--m4/longlong.m423
-rw-r--r--m4/malloc.m435
-rw-r--r--m4/nls.m451
-rw-r--r--m4/po.m4429
-rw-r--r--m4/printf-posix.m444
-rw-r--r--m4/progtest.m492
-rw-r--r--m4/realloc.m435
-rw-r--r--m4/sharutils.m445
-rw-r--r--m4/signed.m417
-rw-r--r--m4/size_max.m459
-rw-r--r--m4/stdint_h.m426
-rw-r--r--m4/uintmax_t.m430
-rw-r--r--m4/ulonglong.m423
-rw-r--r--m4/wchar_t.m420
-rw-r--r--m4/wint_t.m420
-rw-r--r--m4/xsize.m413
-rw-r--r--m4/xstrtoimax.m441
-rwxr-xr-xmissing367
-rwxr-xr-xmkinstalldirs161
-rw-r--r--packaging/sharutils.changes152
-rw-r--r--packaging/sharutils.manifest5
-rwxr-xr-xpackaging/sharutils.spec87
-rw-r--r--po/LINGUAS2
-rw-r--r--po/Makefile.in.in384
-rw-r--r--po/Makevars25
-rw-r--r--po/POTFILES.in13
-rw-r--r--po/Rules-quot47
-rw-r--r--po/bg.gmobin0 -> 24836 bytes
-rw-r--r--po/bg.po906
-rw-r--r--po/boldquot.sed10
-rw-r--r--po/ca.gmobin0 -> 13938 bytes
-rw-r--r--po/ca.po935
-rw-r--r--po/cs.gmobin0 -> 10120 bytes
-rw-r--r--po/cs.po972
-rw-r--r--po/da.gmobin0 -> 13311 bytes
-rw-r--r--po/da.po962
-rw-r--r--po/de.gmobin0 -> 14744 bytes
-rw-r--r--po/de.po934
-rw-r--r--po/el.gmobin0 -> 10486 bytes
-rw-r--r--po/el.po1278
-rw-r--r--po/en@boldquot.header25
-rw-r--r--po/en@quot.header22
-rw-r--r--po/es.gmobin0 -> 20873 bytes
-rw-r--r--po/es.po1277
-rw-r--r--po/et.gmobin0 -> 14871 bytes
-rw-r--r--po/et.po886
-rw-r--r--po/fi.gmobin0 -> 14909 bytes
-rw-r--r--po/fi.po954
-rw-r--r--po/fr.gmobin0 -> 20626 bytes
-rw-r--r--po/fr.po988
-rw-r--r--po/ga.gmobin0 -> 19688 bytes
-rw-r--r--po/ga.po923
-rw-r--r--po/gl.gmobin0 -> 10176 bytes
-rw-r--r--po/gl.po986
-rw-r--r--po/hu.gmobin0 -> 13420 bytes
-rw-r--r--po/hu.po950
-rw-r--r--po/insert-header.sin23
-rw-r--r--po/it.gmobin0 -> 19567 bytes
-rw-r--r--po/it.po938
-rw-r--r--po/ja.gmobin0 -> 18965 bytes
-rw-r--r--po/ja.po874
-rw-r--r--po/nb.gmobin0 -> 1307 bytes
-rw-r--r--po/nb.po1248
-rw-r--r--po/nl.gmobin0 -> 19534 bytes
-rw-r--r--po/nl.po881
-rw-r--r--po/nn.gmobin0 -> 969 bytes
-rw-r--r--po/nn.po1212
-rw-r--r--po/pl.gmobin0 -> 19540 bytes
-rw-r--r--po/pl.po882
-rw-r--r--po/pt.gmobin0 -> 4019 bytes
-rw-r--r--po/pt.po855
-rw-r--r--po/quot.sed6
-rw-r--r--po/remove-potcdate.sin19
-rw-r--r--po/ru.gmobin0 -> 19442 bytes
-rw-r--r--po/ru.po880
-rw-r--r--po/rw.gmobin0 -> 545 bytes
-rw-r--r--po/rw.po962
-rw-r--r--po/sharutils.pot779
-rw-r--r--po/sr.gmobin0 -> 19423 bytes
-rw-r--r--po/sr.po923
-rw-r--r--po/stamp-po1
-rw-r--r--po/sv.gmobin0 -> 19362 bytes
-rw-r--r--po/sv.po873
-rw-r--r--po/tr.gmobin0 -> 18872 bytes
-rw-r--r--po/tr.po873
-rw-r--r--po/vi.gmobin0 -> 22412 bytes
-rw-r--r--po/vi.po901
-rw-r--r--po/zh_TW.gmobin0 -> 11239 bytes
-rw-r--r--po/zh_TW.po965
-rw-r--r--src/Makefile.am64
-rw-r--r--src/Makefile.in607
-rw-r--r--src/compress-dummy.in50
-rw-r--r--src/encode.c98
-rw-r--r--src/mail-files.in108
-rw-r--r--src/mailshar.in106
-rw-r--r--src/remsync.in2277
-rw-r--r--src/scripts.def281
-rw-r--r--src/scripts.tpl34
-rw-r--r--src/scripts.x230
-rw-r--r--src/shar.c2325
-rw-r--r--src/unshar.c552
-rw-r--r--src/uudecode.c537
-rw-r--r--src/uuencode.c314
-rw-r--r--tests/Makefile.am32
-rw-r--r--tests/Makefile.in441
-rwxr-xr-xtests/shar-158
-rw-r--r--tests/shar-1.ok124
-rwxr-xr-xtests/shar-245
-rwxr-xr-xtests/shar-348
-rw-r--r--tests/testdata9
-rwxr-xr-xtests/uude-139
-rwxr-xr-xtests/uutest-127
-rw-r--r--version.m45
266 files changed, 102733 insertions, 0 deletions
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..e32d52d
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,996 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international! The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+ When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used. The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+ ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed. So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation. Future versions of GNU `gettext' will
+very likely convey even more functionality. So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+ So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU `gettext'. Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU `gettext' functions. If not, the included GNU
+`gettext' library will be used. This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour. The commands:
+
+ ./configure --with-included-gettext
+ ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this. This might not be desirable. You should use
+the more recent version of the GNU `gettext' library. I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+ ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+ The configuration process will not test for the `catgets' function
+and therefore it will not be used. The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+ Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code. For example, let's
+suppose that you speak German and live in Germany. At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
+locales supported by your system for your country by running the command
+`locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+ In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect. For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended. For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around. If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skill are praised more than
+programming skill, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of May 2005.
+The matrix shows, in regard of each package, for which languages PO
+files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB
+ +-------------------------------------------------+
+ GNUnet | |
+ a2ps | [] [] [] [] [] |
+ aegis | () |
+ ant-phone | () |
+ anubis | [] |
+ ap-utils | |
+ aspell | [] [] [] [] |
+ bash | [] [] |
+ batchelor | [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | [] |
+ bison | [] [] |
+ bluez-pin | [] [] [] [] |
+ clisp | [] [] |
+ console-tools | [] [] |
+ coreutils | [] [] [] [] |
+ cpio | |
+ cpplib | [] [] [] |
+ darkstat | [] () [] |
+ dialog | [] [] [] [] [] [] |
+ diffutils | [] [] [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ error | [] [] [] [] |
+ fetchmail | [] [] () [] |
+ fileutils | [] [] |
+ findutils | [] [] [] |
+ flex | [] [] [] |
+ fslint | [] |
+ gas | |
+ gawk | [] [] [] |
+ gbiff | [] |
+ gcal | [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] [] [] [] |
+ gettext-tools | [] [] |
+ gimp-print | [] [] [] [] |
+ gip | |
+ gliv | [] |
+ glunarclock | |
+ gmult | [] [] |
+ gnubiff | () |
+ gnucash | [] () () [] |
+ gnucash-glossary | [] () |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] |
+ gpe-calendar | [] [] |
+ gpe-clock | [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | |
+ gpe-edit | [] |
+ gpe-go | [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] |
+ gpe-taskmanager | [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] |
+ gpsdrive | () () |
+ gramadoir | [] [] |
+ grep | [] [] [] [] [] [] |
+ gretl | |
+ gsasl | [] |
+ gss | |
+ gst-plugins | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] () |
+ gtkspell | [] [] [] |
+ hello | [] [] [] [] |
+ id-utils | [] [] |
+ impost | |
+ indent | [] [] |
+ iso_3166 | |
+ iso_3166_1 | [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_3166_3 | [] |
+ iso_4217 | |
+ iso_639 | |
+ jpilot | [] |
+ jtag | |
+ jwhois | |
+ kbd | [] [] [] [] |
+ latrine | () |
+ ld | [] |
+ libc | [] [] [] [] [] |
+ libextractor | |
+ libgpewidget | [] [] [] |
+ libgphoto2 | [] |
+ libgphoto2_port | [] |
+ libgsasl | |
+ libiconv | [] [] [] [] [] |
+ libidn | |
+ lifelines | [] () |
+ lilypond | [] |
+ lingoteach | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | [] |
+ make | [] [] |
+ man-db | [] () [] [] |
+ minicom | [] [] |
+ mysecretdiary | [] [] |
+ nano | [] () [] |
+ nano_1_0 | [] () [] [] |
+ opcodes | [] |
+ parted | [] [] [] [] |
+ psmisc | |
+ ptx | [] [] [] |
+ pwdutils | |
+ python | |
+ radius | [] |
+ recode | [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] [] |
+ sed | [] [] |
+ sh-utils | [] [] |
+ shared-mime-info | [] [] |
+ sharutils | [] [] [] [] [] |
+ silky | |
+ skencil | [] () |
+ sketch | [] () |
+ solfege | [] |
+ soundtracker | [] [] |
+ sp | [] |
+ stardict | [] |
+ tar | |
+ texinfo | [] [] |
+ textutils | [] [] [] |
+ tin | () () |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] |
+ vorbis-tools | [] [] [] [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] |
+ wget | |
+ xchat | [] [] [] [] [] |
+ xkeyboard-config | |
+ xpad | |
+ +-------------------------------------------------+
+ af am ar az be bg bs ca cs cy da de el en en_GB
+ 10 0 0 2 7 5 0 40 43 2 51 91 19 1 14
+
+ eo es et eu fa fi fr ga gl he hi hr hu id is
+ +-----------------------------------------------+
+ GNUnet | |
+ a2ps | [] [] [] |
+ aegis | |
+ ant-phone | [] |
+ anubis | [] |
+ ap-utils | [] |
+ aspell | [] [] |
+ bash | [] [] [] [] |
+ batchelor | [] [] |
+ bfd | [] |
+ bibshelf | [] [] |
+ binutils | [] [] |
+ bison | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] |
+ clisp | [] [] |
+ console-tools | |
+ coreutils | [] [] [] [] [] |
+ cpio | [] [] |
+ cpplib | [] [] |
+ darkstat | [] () [] [] [] |
+ dialog | [] [] [] [] [] [] [] |
+ diffutils | [] [] [] [] [] [] [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] |
+ error | [] [] [] [] [] |
+ fetchmail | [] |
+ fileutils | [] [] [] [] [] |
+ findutils | [] [] [] [] |
+ flex | [] [] [] |
+ fslint | [] |
+ gas | [] [] |
+ gawk | [] [] [] [] |
+ gbiff | [] |
+ gcal | [] [] |
+ gcc | [] |
+ gettext-examples | [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] |
+ gimp-print | [] [] |
+ gip | [] [] [] |
+ gliv | () |
+ glunarclock | [] [] [] |
+ gmult | [] [] |
+ gnubiff | () |
+ gnucash | [] () |
+ gnucash-glossary | [] |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] |
+ gpe-calendar | [] [] [] [] |
+ gpe-clock | [] [] [] |
+ gpe-conf | [] |
+ gpe-contacts | [] |
+ gpe-edit | [] [] |
+ gpe-go | [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] |
+ gpe-taskmanager | [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] [] [] |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | () () [] |
+ gramadoir | [] [] |
+ grep | [] [] [] [] [] [] [] [] [] [] [] |
+ gretl | [] [] |
+ gsasl | [] [] [] |
+ gss | [] |
+ gst-plugins | [] [] |
+ gstreamer | |
+ gtick | [] [] [] [] |
+ gtkspell | [] [] [] [] [] |
+ hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] |
+ impost | [] [] |
+ indent | [] [] [] [] [] [] [] [] [] [] |
+ iso_3166 | [] [] [] |
+ iso_3166_1 | [] [] [] [] [] [] [] |
+ iso_3166_2 | [] |
+ iso_3166_3 | [] |
+ iso_4217 | [] [] [] |
+ iso_639 | [] [] [] [] |
+ jpilot | [] [] |
+ jtag | [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] |
+ latrine | [] [] |
+ ld | [] [] |
+ libc | [] [] [] [] [] |
+ libextractor | |
+ libgpewidget | [] [] [] [] [] |
+ libgphoto2 | [] [] [] |
+ libgphoto2_port | [] |
+ libgsasl | [] [] |
+ libiconv | [] [] [] [] [] [] [] [] [] [] |
+ libidn | [] [] |
+ lifelines | () |
+ lilypond | |
+ lingoteach | [] [] |
+ lynx | [] [] |
+ m4 | [] [] [] [] |
+ mailutils | [] [] |
+ make | [] [] [] [] [] [] [] |
+ man-db | () |
+ minicom | [] [] [] [] |
+ mysecretdiary | [] [] [] |
+ nano | [] [] () [] |
+ nano_1_0 | [] [] [] [] |
+ opcodes | [] [] [] |
+ parted | [] [] [] |
+ psmisc | [] |
+ ptx | [] [] [] [] [] [] [] [] [] |
+ pwdutils | |
+ python | |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] |
+ rpm | [] |
+ screem | |
+ scrollkeeper | [] [] [] |
+ sed | [] [] [] [] [] [] |
+ sh-utils | [] [] [] [] [] [] |
+ shared-mime-info | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] [] |
+ silky | [] |
+ skencil | [] [] |
+ sketch | [] [] |
+ solfege | |
+ soundtracker | [] [] |
+ sp | [] |
+ stardict | [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] |
+ textutils | [] [] [] [] [] |
+ tin | [] () |
+ tp-robot | [] [] |
+ tuxpaint | [] [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux | [] [] [] [] [] |
+ vorbis-tools | [] [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] [] [] [] |
+ wget | [] [] [] [] |
+ xchat | [] [] [] [] [] |
+ xkeyboard-config | |
+ xpad | [] [] [] |
+ +-----------------------------------------------+
+ eo es et eu fa fi fr ga gl he hi hr hu id is
+ 15 85 21 15 2 35 115 45 16 8 1 6 40 27 1
+
+ it ja ko ku lg lt lv mk mn ms mt nb nl nn no nso
+ +--------------------------------------------------+
+ GNUnet | |
+ a2ps | () () [] [] () |
+ aegis | () |
+ ant-phone | [] |
+ anubis | [] [] [] |
+ ap-utils | |
+ aspell | [] [] |
+ bash | [] |
+ batchelor | [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | [] [] [] [] |
+ bluez-pin | [] [] |
+ clisp | [] |
+ console-tools | |
+ coreutils | [] [] |
+ cpio | |
+ cpplib | [] |
+ darkstat | [] [] |
+ dialog | [] [] |
+ diffutils | [] [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] |
+ enscript | [] |
+ error | [] |
+ fetchmail | [] [] |
+ fileutils | [] [] [] |
+ findutils | [] [] |
+ flex | [] [] |
+ fslint | [] |
+ gas | |
+ gawk | [] [] |
+ gbiff | [] |
+ gcal | |
+ gcc | |
+ gettext-examples | [] [] [] |
+ gettext-runtime | [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gimp-print | [] [] |
+ gip | [] |
+ gliv | [] |
+ glunarclock | [] [] |
+ gmult | [] [] |
+ gnubiff | () |
+ gnucash | [] () () [] |
+ gnucash-glossary | [] [] |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-calendar | [] |
+ gpe-clock | [] |
+ gpe-conf | [] |
+ gpe-contacts | |
+ gpe-edit | [] |
+ gpe-go | [] |
+ gpe-login | [] |
+ gpe-ownerinfo | [] |
+ gpe-sketchbook | [] |
+ gpe-su | [] |
+ gpe-taskmanager | [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] |
+ gpe-todo | [] |
+ gphoto2 | [] [] [] |
+ gprof | |
+ gpsdrive | () () () () |
+ gramadoir | () |
+ grep | [] [] [] [] |
+ gretl | [] |
+ gsasl | [] |
+ gss | |
+ gst-plugins | [] [] |
+ gstreamer | [] [] |
+ gtick | [] [] |
+ gtkspell | [] [] [] |
+ hello | [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] |
+ impost | |
+ indent | [] [] [] |
+ iso_3166 | [] |
+ iso_3166_1 | [] [] |
+ iso_3166_2 | [] |
+ iso_3166_3 | [] |
+ iso_4217 | [] [] [] |
+ iso_639 | [] [] [] |
+ jpilot | () () () |
+ jtag | |
+ jwhois | [] [] |
+ kbd | [] |
+ latrine | [] [] |
+ ld | |
+ libc | [] [] [] [] [] |
+ libextractor | |
+ libgpewidget | [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] |
+ libgsasl | [] |
+ libiconv | [] [] |
+ libidn | [] |
+ lifelines | [] |
+ lilypond | |
+ lingoteach | [] [] |
+ lynx | [] [] [] |
+ m4 | [] [] |
+ mailutils | |
+ make | [] [] [] |
+ man-db | () |
+ minicom | [] |
+ mysecretdiary | [] |
+ nano | [] [] [] |
+ nano_1_0 | [] [] [] [] |
+ opcodes | [] |
+ parted | [] [] [] [] |
+ psmisc | [] [] [] |
+ ptx | [] [] [] |
+ pwdutils | |
+ python | |
+ radius | |
+ recode | [] [] |
+ rpm | [] [] |
+ screem | [] |
+ scrollkeeper | [] [] [] |
+ sed | [] [] |
+ sh-utils | [] [] [] |
+ shared-mime-info | [] [] [] [] |
+ sharutils | [] [] [] |
+ silky | [] |
+ skencil | |
+ sketch | |
+ solfege | [] [] [] |
+ soundtracker | [] |
+ sp | () |
+ stardict | [] [] |
+ tar | [] [] [] |
+ texinfo | [] [] [] |
+ textutils | [] [] [] |
+ tin | |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] |
+ vorbis-tools | [] |
+ wastesedge | [] |
+ wdiff | [] [] [] |
+ wget | [] |
+ xchat | [] [] [] [] [] |
+ xkeyboard-config | [] |
+ xpad | [] |
+ +--------------------------------------------------+
+ it ja ko ku lg lt lv mk mn ms mt nb nl nn no nso
+ 46 35 11 2 1 1 2 2 3 11 0 15 96 7 5 0
+
+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv
+ +----------------------------------------------+
+ GNUnet | |
+ a2ps | () [] [] [] [] [] [] |
+ aegis | () () |
+ ant-phone | [] |
+ anubis | [] [] [] |
+ ap-utils | () |
+ aspell | [] [] |
+ bash | [] [] [] |
+ batchelor | [] |
+ bfd | |
+ bibshelf | |
+ binutils | [] [] |
+ bison | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] |
+ clisp | [] |
+ console-tools | [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] |
+ cpplib | |
+ darkstat | [] [] [] [] [] [] |
+ dialog | [] [] [] [] [] [] [] |
+ diffutils | [] [] [] [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ error | [] [] [] |
+ fetchmail | [] [] [] [] |
+ fileutils | [] [] [] [] [] |
+ findutils | [] [] [] [] [] [] |
+ flex | [] [] [] [] [] |
+ fslint | [] [] [] |
+ gas | |
+ gawk | [] [] [] [] |
+ gbiff | [] |
+ gcal | [] |
+ gcc | |
+ gettext-examples | [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] [] [] |
+ gimp-print | [] [] |
+ gip | [] [] [] |
+ gliv | [] [] [] |
+ glunarclock | [] [] [] [] [] [] |
+ gmult | [] [] [] [] |
+ gnubiff | () [] |
+ gnucash | () [] [] [] [] |
+ gnucash-glossary | [] [] [] |
+ gpe-aerial | [] [] [] [] [] [] |
+ gpe-beam | [] [] [] [] [] [] |
+ gpe-calendar | [] [] [] [] [] [] [] |
+ gpe-clock | [] [] [] [] [] [] [] |
+ gpe-conf | [] [] [] [] [] [] |
+ gpe-contacts | [] [] [] [] |
+ gpe-edit | [] [] [] [] [] [] [] |
+ gpe-go | [] [] [] [] [] |
+ gpe-login | [] [] [] [] [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] [] [] |
+ gpe-sketchbook | [] [] [] [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] [] [] [] [] [] |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] |
+ gramadoir | [] |
+ grep | [] [] [] [] [] [] [] |
+ gretl | [] |
+ gsasl | [] [] [] [] [] |
+ gss | [] [] [] |
+ gst-plugins | [] [] [] [] |
+ gstreamer | [] [] [] [] |
+ gtick | [] [] [] |
+ gtkspell | [] [] [] [] [] [] |
+ hello | [] [] [] [] [] [] [] |
+ id-utils | [] [] [] [] |
+ impost | |
+ indent | [] [] [] [] [] [] |
+ iso_3166 | [] [] [] [] [] |
+ iso_3166_1 | [] [] [] [] |
+ iso_3166_2 | |
+ iso_3166_3 | [] [] [] |
+ iso_4217 | [] [] |
+ iso_639 | [] [] [] |
+ jpilot | |
+ jtag | [] |
+ jwhois | [] [] [] () () |
+ kbd | [] [] [] |
+ latrine | [] [] |
+ ld | [] |
+ libc | [] [] [] [] [] |
+ libextractor | [] |
+ libgpewidget | [] [] [] [] [] [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] |
+ libgsasl | [] [] [] |
+ libiconv | [] [] [] [] [] [] [] [] [] [] |
+ libidn | [] () |
+ lifelines | [] [] |
+ lilypond | |
+ lingoteach | [] |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailutils | [] [] [] |
+ make | [] [] [] [] |
+ man-db | [] [] |
+ minicom | [] [] [] [] |
+ mysecretdiary | [] [] [] [] |
+ nano | [] [] [] |
+ nano_1_0 | [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] [] [] |
+ psmisc | [] [] |
+ ptx | [] [] [] [] [] [] |
+ pwdutils | [] |
+ python | |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] |
+ rpm | [] [] [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] |
+ sh-utils | [] [] [] |
+ shared-mime-info | [] [] [] [] [] [] |
+ sharutils | [] [] [] |
+ silky | [] |
+ skencil | [] [] [] |
+ sketch | [] [] [] |
+ solfege | |
+ soundtracker | [] [] |
+ sp | |
+ stardict | [] [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] [] |
+ textutils | [] [] [] |
+ tin | |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] |
+ vorbis-tools | [] [] |
+ wastesedge | |
+ wdiff | [] [] [] [] [] [] |
+ wget | |
+ xchat | [] [] [] [] [] [] [] |
+ xkeyboard-config | |
+ xpad | |
+ +----------------------------------------------+
+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv
+ 1 3 47 29 57 6 78 73 5 44 12 12 50 85
+
+ ta tg th tk tr uk ven vi wa xh zh_CN zh_TW zu
+ +-----------------------------------------------+
+ GNUnet | | 0
+ a2ps | [] [] [] | 19
+ aegis | | 0
+ ant-phone | [] [] | 5
+ anubis | [] [] [] | 11
+ ap-utils | () [] | 2
+ aspell | [] [] [] | 13
+ bash | [] | 11
+ batchelor | [] [] | 7
+ bfd | | 1
+ bibshelf | [] | 5
+ binutils | [] | 6
+ bison | [] [] | 18
+ bluez-pin | [] [] [] [] [] | 25
+ clisp | | 7
+ console-tools | [] [] | 5
+ coreutils | [] [] | 17
+ cpio | [] [] [] | 7
+ cpplib | [] [] | 8
+ darkstat | [] () () | 15
+ dialog | [] [] [] | 25
+ diffutils | [] [] [] [] | 28
+ doodle | [] | 5
+ e2fsprogs | [] | 8
+ enscript | [] | 12
+ error | [] [] [] | 16
+ fetchmail | [] | 12
+ fileutils | [] [] [] | 18
+ findutils | [] [] | 17
+ flex | [] [] | 15
+ fslint | [] | 7
+ gas | [] | 3
+ gawk | [] | 14
+ gbiff | [] | 5
+ gcal | [] | 5
+ gcc | [] [] | 4
+ gettext-examples | [] [] [] [] [] | 21
+ gettext-runtime | [] [] [] [] [] | 25
+ gettext-tools | [] [] [] [] [] | 19
+ gimp-print | [] | 11
+ gip | [] | 8
+ gliv | [] [] | 7
+ glunarclock | [] [] | 13
+ gmult | [] [] [] | 13
+ gnubiff | [] | 3
+ gnucash | () [] | 10
+ gnucash-glossary | [] [] | 9
+ gpe-aerial | [] [] | 13
+ gpe-beam | [] [] | 13
+ gpe-calendar | [] [] [] [] | 18
+ gpe-clock | [] [] [] [] | 17
+ gpe-conf | [] [] | 12
+ gpe-contacts | [] [] | 7
+ gpe-edit | [] [] [] [] | 15
+ gpe-go | [] [] | 11
+ gpe-login | [] [] [] [] [] | 18
+ gpe-ownerinfo | [] [] [] [] | 19
+ gpe-sketchbook | [] [] | 14
+ gpe-su | [] [] [] | 16
+ gpe-taskmanager | [] [] [] | 17
+ gpe-timesheet | [] [] [] [] | 17
+ gpe-today | [] [] [] [] [] | 19
+ gpe-todo | [] [] [] | 17
+ gphoto2 | [] [] [] | 18
+ gprof | [] [] | 10
+ gpsdrive | | 3
+ gramadoir | [] | 6
+ grep | [] [] [] [] | 32
+ gretl | | 4
+ gsasl | [] [] | 12
+ gss | [] | 5
+ gst-plugins | [] [] [] | 17
+ gstreamer | [] [] [] [] | 15
+ gtick | [] | 11
+ gtkspell | [] [] [] [] | 21
+ hello | [] [] [] [] | 37
+ id-utils | [] [] | 13
+ impost | [] | 3
+ indent | [] [] [] [] | 25
+ iso_3166 | [] [] [] | 12
+ iso_3166_1 | [] [] | 20
+ iso_3166_2 | | 2
+ iso_3166_3 | [] [] | 8
+ iso_4217 | [] [] | 10
+ iso_639 | [] [] | 12
+ jpilot | [] [] [] | 6
+ jtag | | 2
+ jwhois | [] [] [] | 12
+ kbd | [] [] | 12
+ latrine | [] [] | 8
+ ld | [] | 5
+ libc | [] [] | 22
+ libextractor | | 1
+ libgpewidget | [] [] | 17
+ libgphoto2 | [] | 9
+ libgphoto2_port | | 5
+ libgsasl | [] | 7
+ libiconv | [] [] [] [] [] | 32
+ libidn | [] [] | 6
+ lifelines | | 4
+ lilypond | | 1
+ lingoteach | [] | 6
+ lynx | [] [] [] | 15
+ m4 | [] [] | 17
+ mailutils | [] | 7
+ make | [] [] | 18
+ man-db | | 5
+ minicom | | 11
+ mysecretdiary | [] [] | 12
+ nano | [] [] | 13
+ nano_1_0 | [] [] [] | 18
+ opcodes | [] [] | 9
+ parted | [] [] [] | 18
+ psmisc | [] | 7
+ ptx | [] [] | 23
+ pwdutils | | 1
+ python | | 0
+ radius | [] | 6
+ recode | [] [] | 22
+ rpm | [] [] | 11
+ screem | | 1
+ scrollkeeper | [] [] [] | 24
+ sed | [] [] [] | 21
+ sh-utils | [] | 15
+ shared-mime-info | [] [] [] | 21
+ sharutils | [] [] [] | 20
+ silky | | 3
+ skencil | | 6
+ sketch | | 6
+ solfege | | 4
+ soundtracker | [] | 8
+ sp | [] | 3
+ stardict | [] [] [] [] | 10
+ tar | [] [] [] [] | 15
+ texinfo | [] [] | 14
+ textutils | [] [] [] | 17
+ tin | | 1
+ tp-robot | [] [] [] | 8
+ tuxpaint | [] [] [] [] | 34
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux | [] [] [] | 18
+ vorbis-tools | [] | 10
+ wastesedge | | 1
+ wdiff | [] [] | 22
+ wget | [] [] | 7
+ xchat | [] [] [] [] | 26
+ xkeyboard-config | [] | 2
+ xpad | [] | 5
+ +-----------------------------------------------+
+ 73 teams ta tg th tk tr uk ven vi wa xh zh_CN zh_TW zu
+ 149 domains 0 0 0 1 77 30 0 92 16 0 42 32 0 1746
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer. There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+ If May 2005 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
+matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package. Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library. This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..c73dbd9
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,22 @@
+Authors of GNU shar utilities.
+
+The following contributions warranted legal paper exchanges with the
+Free Software Foundation. Also see files ChangeLog and THANKS.
+
+UUDECODE, UUENCODE, XXDECODE, XXENCODE David J. Camp
+Disclaims programs.
+
+UUDECODE, UUENCODE, XXDECODE, XXENCODE Washington University
+Disclaims programs by David J. Camp.
+
+SHARUTILS Francois Pinard Canada 1949 2/1/96
+Assigns past and future changes.
+
+SHARUTILS Ulrich Drepper Germany 1968 8/3/95
+Assigns past and future changes to Sharutils.
+
+SHARUTILS Jan Djarv Swedish 1963 9/8/95
+Assigns the manual "Shar man pages"
+
+SHARUTILS Bruce Korb USA
+Assigns past and future changes to Sharutils.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..1b0c0b9
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,639 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+ Preamble
+
+The GNU General Public License is a free, copyleft license for software and
+other kinds of works.
+
+The licenses for most software and other practical works are designed to take
+away your freedom to share and change the works. By contrast, the GNU General
+Public License is intended to guarantee your freedom to share and change all
+versions of a program--to make sure it remains free software for all its
+users. We, the Free Software Foundation, use the GNU General Public License
+for most of our software; it applies also to any other work released this way
+by its authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for them if you wish), that you
+receive source code or can get it if you want it, that you can change the
+software or use pieces of it in new free programs, and that you know you can
+do these things.
+
+To protect your rights, we need to prevent others from denying you these
+rights or asking you to surrender the rights. Therefore, you have certain
+responsibilities if you distribute copies of the software, or if you modify
+it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must pass on to the recipients the same freedoms that you
+received. You must make sure that they, too, receive or can get the source
+code. And you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert
+copyright on the software, and (2) offer you this License giving you legal
+permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that
+there is no warranty for this free software. For both users' and authors'
+sake, the GPL requires that modified versions be marked as changed, so that
+their problems will not be attributed erroneously to authors of previous
+versions.
+
+Some devices are designed to deny users access to install or run modified
+versions of the software inside them, although the manufacturer can do
+so. This is fundamentally incompatible with the aim of protecting users'
+freedom to change the software. The systematic pattern of such abuse occurs in
+the area of products for individuals to use, which is precisely where it is
+most unacceptable. Therefore, we have designed this version of the GPL to
+prohibit the practice for those products. If such problems arise substantially
+in other domains, we stand ready to extend this provision to those domains in
+future versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States
+should not allow patents to restrict development and use of software on
+general-purpose computers, but in those that do, we wish to avoid the special
+danger that patents applied to a free program could make it effectively
+proprietary. To prevent this, the GPL assures that patents cannot be used to
+render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+ TERMS AND CONDITIONS
+0. Definitions.
+
+``This License'' refers to version 3 of the GNU General Public License.
+
+``Copyright'' also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+``The Program'' refers to any copyrightable work licensed under this
+License. Each licensee is addressed as ``you''. ``Licensees'' and
+``recipients'' may be individuals or organizations.
+
+To ``modify'' a work means to copy from or adapt all or part of the work in a
+fashion requiring copyright permission, other than the making of an exact
+copy. The resulting work is called a ``modified version'' of the earlier work
+or a work ``based on'' the earlier work.
+
+A ``covered work'' means either the unmodified Program or a work based on the
+Program.
+
+To ``propagate'' a work means to do anything with it that, without permission,
+would make you directly or secondarily liable for infringement under
+applicable copyright law, except executing it on a computer or modifying a
+private copy. Propagation includes copying, distribution (with or without
+modification), making available to the public, and in some countries other
+activities as well.
+
+To ``convey'' a work means any kind of propagation that enables other parties
+to make or receive copies. Mere interaction with a user through a computer
+network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays ``Appropriate Legal Notices'' to the
+extent that it includes a convenient and prominently visible feature that (1)
+displays an appropriate copyright notice, and (2) tells the user that there is
+no warranty for the work (except to the extent that warranties are provided),
+that licensees may convey the work under this License, and how to view a copy
+of this License. If the interface presents a list of user commands or options,
+such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+
+The ``source code'' for a work means the preferred form of the work for making
+modifications to it. ``Object code'' means any non-source form of a work.
+
+A ``Standard Interface'' means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of interfaces
+specified for a particular programming language, one that is widely used among
+developers working in that language.
+
+The ``System Libraries'' of an executable work include anything, other than
+the work as a whole, that (a) is included in the normal form of packaging a
+Major Component, but which is not part of that Major Component, and (b) serves
+only to enable use of the work with that Major Component, or to implement a
+Standard Interface for which an implementation is available to the public in
+source code form. A ``Major Component'', in this context, means a major
+essential component (kernel, window system, and so on) of the specific
+operating system (if any) on which the executable work runs, or a compiler
+used to produce the work, or an object code interpreter used to run it.
+
+The ``Corresponding Source'' for a work in object code form means all the
+source code needed to generate, install, and (for an executable work) run the
+object code and to modify the work, including scripts to control those
+activities. However, it does not include the work's System Libraries, or
+general-purpose tools or generally available free programs which are used
+unmodified in performing those activities but which are not part of the
+work. For example, Corresponding Source includes interface definition files
+associated with source files for the work, and the source code for shared
+libraries and dynamically linked subprograms that the work is specifically
+designed to require, such as by intimate data communication or control flow
+between those subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+
+All rights granted under this License are granted for the term of copyright on
+the Program, and are irrevocable provided the stated conditions are met. This
+License explicitly affirms your unlimited permission to run the unmodified
+Program. The output from running a covered work is covered by this License
+only if the output, given its content, constitutes a covered work. This
+License acknowledges your rights of fair use or other equivalent, as provided
+by copyright law.
+
+You may make, run and propagate covered works that you do not convey, without
+conditions so long as your license otherwise remains in force. You may convey
+covered works to others for the sole purpose of having them make modifications
+exclusively for you, or provide you with facilities for running those works,
+provided that you comply with the terms of this License in conveying all
+material for which you do not control copyright. Those thus making or running
+the covered works for you must do so exclusively on your behalf, under your
+direction and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the
+conditions stated below. Sublicensing is not allowed; section 10 makes it
+unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological measure
+under any applicable law fulfilling obligations under article 11 of the WIPO
+copyright treaty adopted on 20 December 1996, or similar laws prohibiting or
+restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention is
+effected by exercising rights under this License with respect to the covered
+work, and you disclaim any intention to limit operation or modification of the
+work as a means of enforcing, against the work's users, your or third parties'
+legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you receive it,
+in any medium, provided that you conspicuously and appropriately publish on
+each copy an appropriate copyright notice; keep intact all notices stating
+that this License and any non-permissive terms added in accord with section 7
+apply to the code; keep intact all notices of the absence of any warranty; and
+give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you
+may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to produce it
+from the Program, in the form of source code under the terms of section 4,
+provided that you also meet all of these conditions:
+
+ * a) The work must carry prominent notices stating that you modified it,
+ and giving a relevant date.
+
+ * b) The work must carry prominent notices stating that it is released
+ under this License and any conditions added under section 7. This
+ requirement modifies the requirement in section 4 to ``keep intact all
+ notices''.
+
+ * c) You must license the entire work, as a whole, under this License to
+ anyone who comes into possession of a copy. This License will therefore
+ apply, along with any applicable section 7 additional terms, to the
+ whole of the work, and all its parts, regardless of how they are
+ packaged. This License gives no permission to license the work in any
+ other way, but it does not invalidate such permission if you have
+ separately received it.
+
+ * d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your work need
+ not make them do so.
+
+A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are
+not combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an ``aggregate'' if the compilation
+and its resulting copyright are not used to limit the access or legal rights
+of the compilation's users beyond what the individual works permit. Inclusion
+of a covered work in an aggregate does not cause this License to apply to the
+other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of sections
+4 and 5, provided that you also convey the machine-readable Corresponding
+Source under the terms of this License, in one of these ways:
+
+ * a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium customarily used
+ for software interchange.
+
+ * b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a written
+ offer, valid for at least three years and valid for as long as you offer
+ spare parts or customer support for that product model, to give anyone
+ who possesses the object code either (1) a copy of the Corresponding
+ Source for all the software in the product that is covered by this
+ License, on a durable physical medium customarily used for software
+ interchange, for a price no more than your reasonable cost of physically
+ performing this conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ * c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This alternative is
+ allowed only occasionally and noncommercially, and only if you received
+ the object code with such an offer, in accord with subsection 6b.
+
+ * d) Convey the object code by offering access from a designated place
+ (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to copy
+ the object code is a network server, the Corresponding Source may be on
+ a different server (operated by you or a third party) that supports
+ equivalent copying facilities, provided you maintain clear directions
+ next to the object code saying where to find the Corresponding
+ Source. Regardless of what server hosts the Corresponding Source, you
+ remain obligated to ensure that it is available for as long as needed to
+ satisfy these requirements.
+
+ * e) Convey the object code using peer-to-peer transmission, provided you
+ inform other peers where the object code and Corresponding Source of the
+ work are being offered to the general public at no charge under
+ subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the
+Corresponding Source as a System Library, need not be included in conveying
+the object code work.
+
+A ``User Product'' is either (1) a ``consumer product'', which means any
+tangible personal property which is normally used for personal, family, or
+household purposes, or (2) anything designed or sold for incorporation into a
+dwelling. In determining whether a product is a consumer product, doubtful
+cases shall be resolved in favor of coverage. For a particular product
+received by a particular user, ``normally used'' refers to a typical or common
+use of that class of product, regardless of the status of the particular user
+or of the way in which the particular user actually uses, or expects or is
+expected to use, the product. A product is a consumer product regardless of
+whether the product has substantial commercial, industrial or non-consumer
+uses, unless such uses represent the only significant mode of use of the
+product.
+
+``Installation Information'' for a User Product means any methods, procedures,
+authorization keys, or other information required to install and execute
+modified versions of a covered work in that User Product from a modified
+version of its Corresponding Source. The information must suffice to ensure
+that the continued functioning of the modified object code is in no case
+prevented or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as part of a
+transaction in which the right of possession and use of the User Product is
+transferred to the recipient in perpetuity or for a fixed term (regardless of
+how the transaction is characterized), the Corresponding Source conveyed under
+this section must be accompanied by the Installation Information. But this
+requirement does not apply if neither you nor any third party retains the
+ability to install modified object code on the User Product (for example, the
+work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates for a
+work that has been modified or installed by the recipient, or for the User
+Product in which it has been modified or installed. Access to a network may be
+denied when the modification itself materially and adversely affects the
+operation of the network or violates the rules and protocols for communication
+across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in
+accord with this section must be in a format that is publicly documented (and
+with an implementation available to the public in source code form), and must
+require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+
+``Additional permissions'' are terms that supplement the terms of this License
+by making exceptions from one or more of its conditions. Additional
+permissions that are applicable to the entire Program shall be treated as
+though they were included in this License, to the extent that they are valid
+under applicable law. If additional permissions apply only to part of the
+Program, that part may be used separately under those permissions, but the
+entire Program remains governed by this License without regard to the
+additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when
+you modify the work.) You may place additional permissions on material, added
+by you to a covered work, for which you have or can give appropriate copyright
+permission.
+
+Notwithstanding any other provision of this License, for material you add to a
+covered work, you may (if authorized by the copyright holders of that
+material) supplement the terms of this License with terms:
+
+ * a) Disclaiming warranty or limiting liability differently from the terms
+ of sections 15 and 16 of this License; or
+
+ * b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal Notices
+ displayed by works containing it; or
+
+ * c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ * d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ * e) Declining to grant rights under trademark law for use of some trade
+ names, trademarks, or service marks; or
+
+ * f) Requiring indemnification of licensors and authors of that material
+ by anyone who conveys the material (or modified versions of it) with
+ contractual assumptions of liability to the recipient, for any liability
+ that these contractual assumptions directly impose on those licensors
+ and authors.
+
+All other non-permissive additional terms are considered ``further
+restrictions'' within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is governed
+by this License along with a term that is a further restriction, you may
+remove that term. If a license document contains a further restriction but
+permits relicensing or conveying under this License, you may add to a covered
+work material governed by the terms of that license document, provided that
+the further restriction does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must
+place, in the relevant source files, a statement of the additional terms that
+apply to those files, or a notice indicating where to find the applicable
+terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a
+separately written license, or stated as exceptions; the above requirements
+apply either way.
+
+8. Termination.
+
+You may not propagate or modify a covered work except as expressly provided
+under this License. Any attempt otherwise to propagate or modify it is void,
+and will automatically terminate your rights under this License (including any
+patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a
+particular copyright holder is reinstated (a) provisionally, unless and until
+the copyright holder explicitly and finally terminates your license, and (b)
+permanently, if the copyright holder fails to notify you of the violation by
+some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated
+permanently if the copyright holder notifies you of the violation by some
+reasonable means, this is the first time you have received notice of violation
+of this License (for any work) from that copyright holder, and you cure the
+violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses
+of parties who have received copies or rights from you under this License. If
+your rights have been terminated and not permanently reinstated, you do not
+qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run a copy
+of the Program. Ancillary propagation of a covered work occurring solely as a
+consequence of using peer-to-peer transmission to receive a copy likewise does
+not require acceptance. However, nothing other than this License grants you
+permission to propagate or modify any covered work. These actions infringe
+copyright if you do not accept this License. Therefore, by modifying or
+propagating a covered work, you indicate your acceptance of this License to do
+so.
+
+10. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically receives a
+license from the original licensors, to run, modify and propagate that work,
+subject to this License. You are not responsible for enforcing compliance by
+third parties with this License.
+
+An ``entity transaction'' is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered work
+results from an entity transaction, each party to that transaction who
+receives a copy of the work also receives whatever licenses to the work the
+party's predecessor in interest had or could give under the previous
+paragraph, plus a right to possession of the Corresponding Source of the work
+from the predecessor in interest, if the predecessor has it or can get it with
+reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights
+granted or affirmed under this License. For example, you may not impose a
+license fee, royalty, or other charge for exercise of rights granted under
+this License, and you may not initiate litigation (including a cross-claim or
+counterclaim in a lawsuit) alleging that any patent claim is infringed by
+making, using, selling, offering for sale, or importing the Program or any
+portion of it.
+
+11. Patents.
+
+A ``contributor'' is a copyright holder who authorizes use under this License
+of the Program or a work on which the Program is based. The work thus licensed
+is called the contributor's ``contributor version''.
+
+A contributor's ``essential patent claims'' are all patent claims owned or
+controlled by the contributor, whether already acquired or hereafter acquired,
+that would be infringed by some manner, permitted by this License, of making,
+using, or selling its contributor version, but do not include claims that
+would be infringed only as a consequence of further modification of the
+contributor version. For purposes of this definition, ``control'' includes the
+right to grant patent sublicenses in a manner consistent with the requirements
+of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+license under the contributor's essential patent claims, to make, use, sell,
+offer for sale, import and otherwise run, modify and propagate the contents of
+its contributor version.
+
+In the following three paragraphs, a ``patent license'' is any express
+agreement or commitment, however denominated, not to enforce a patent (such as
+an express permission to practice a patent or covenant not to sue for patent
+infringement). To ``grant'' such a patent license to a party means to make
+such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free of
+charge and under the terms of this License, through a publicly available
+network server or other readily accessible means, then you must either (1)
+cause the Corresponding Source to be so available, or (2) arrange to deprive
+yourself of the benefit of the patent license for this particular work, or (3)
+arrange, in a manner consistent with the requirements of this License, to
+extend the patent license to downstream recipients. ``Knowingly relying''
+means you have actual knowledge that, but for the patent license, your
+conveying the covered work in a country, or your recipient's use of the
+covered work in a country, would infringe one or more identifiable patents in
+that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you
+convey, or propagate by procuring conveyance of, a covered work, and grant a
+patent license to some of the parties receiving the covered work authorizing
+them to use, propagate, modify or convey a specific copy of the covered work,
+then the patent license you grant is automatically extended to all recipients
+of the covered work and works based on it.
+
+A patent license is ``discriminatory'' if it does not include within the scope
+of its coverage, prohibits the exercise of, or is conditioned on the
+non-exercise of one or more of the rights that are specifically granted under
+this License. You may not convey a covered work if you are a party to an
+arrangement with a third party that is in the business of distributing
+software, under which you make payment to the third party based on the extent
+of your activity of conveying the work, and under which the third party
+grants, to any of the parties who would receive the covered work from you, a
+discriminatory patent license (a) in connection with copies of the covered
+work conveyed by you (or copies made from those copies), or (b) primarily for
+and in connection with specific products or compilations that contain the
+covered work, unless you entered into that arrangement, or that patent license
+was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any
+implied license or other defenses to infringement that may otherwise be
+available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not excuse
+you from the conditions of this License. If you cannot convey a covered work
+so as to satisfy simultaneously your obligations under this License and any
+other pertinent obligations, then as a consequence you may not convey it at
+all. For example, if you agree to terms that obligate you to collect a royalty
+for further conveying from those to whom you convey the Program, the only way
+you could satisfy both those terms and this License would be to refrain
+entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have permission to
+link or combine any covered work with a work licensed under version 3 of the
+GNU Affero General Public License into a single combined work, and to convey
+the resulting work. The terms of this License will continue to apply to the
+part which is the covered work, but the special requirements of the GNU Affero
+General Public License, section 13, concerning interaction through a network
+will apply to the combination as such.
+
+14. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions of the
+GNU General Public License from time to time. Such new versions will be
+similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies that a certain numbered version of the GNU General Public License
+``or any later version'' applies to it, you have the option of following the
+terms and conditions either of that numbered version or of any later version
+published by the Free Software Foundation. If the Program does not specify a
+version number of the GNU General Public License, you may choose any version
+ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the
+GNU General Public License can be used, that proxy's public statement of
+acceptance of a version permanently authorizes you to choose that version for
+the Program.
+
+Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any author or
+copyright holder as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
+COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM
+AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
+SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
+DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
+A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided above
+cannot be given local legal effect according to their terms, reviewing courts
+shall apply local law that most closely approximates an absolute waiver of all
+civil liability in connection with the Program, unless a warranty or
+assumption of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively state the exclusion
+of warranty; and each file should have at least the ``copyright'' line and a
+pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like
+this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author> This program comes with
+ ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
+ and you are welcome to redistribute it under certain conditions; type
+ `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands might
+be different; for a GUI interface, you would use an ``about box''.
+
+You should also get your employer (if you work as a programmer) or school, if
+any, to sign a ``copyright disclaimer'' for the program, if necessary. For
+more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General Public
+License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..78159a0
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,34 @@
+2006-08-30 Bruce Korb <bkorb@gnu.org>
+
+ * src/scripts.def: quote the heredoc marker. No shell evals.
+
+2006-06-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/shar-3: Quote sed command, since it contains a ^,
+ and Solaris /bin/sh treats unquoted ^ like |. Problem
+ reported by Nelson H. F. Beebe.
+
+2006-05-18 Bruce Korb <bkorb@gnu.org>
+
+ * bootstrap: add code to derive compress-dummy.1 from the script.
+ * configure.ac: Remember which dirent header was found
+ * src/shar.c: Use the #define name of the dirent header for #include
+ Remove our own private declarations of opendir and readdir.
+ * doc/Makefile.am(dist_man2_MANS): add compress-dummy.1
+ * src/compress-dummy.in: clarify the name of what it is.
+
+2006-05-15 Bruno Haible <bruno@clisp.org>
+
+ * shar.c: declare readdir IFF readdir is not already a #define
+
+2006-04-26 Pavel Roskin <proski@gnu.org>
+
+ * uudecode.c (read_stduu): Allow characters other than '\n'
+ after "end", viz., the DOS style newline "\r\n".
+
+2006-03-24 Santiago Vila <sanvila@unex.es>
+
+ * uudecode.c(decode): make clear the name of the file causing problems
+ * shar.c(change_files): fix args to fprintf.
+
+[[... see cvs ChangeLog.2005 ]]
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..5458714
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,234 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006 Free Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about. Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
+
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+ Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..5ff84e4
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,23 @@
+## Makefile for the toplevel directory of the GNU Shar utilities.
+## Copyright (C) 1995, 1996, 2002, 2007 Free Software Foundation, Inc.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to:
+## the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+## Boston, MA 02110-1301, USA.
+
+## Process this file with automake to produce Makefile.in.
+
+EXTRA_DIST = config.rpath $(DIST_ALPHA)
+SUBDIRS = intl lib src doc po contrib tests
+ACLOCAL_AMFLAGS = -I m4
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..d5867c5
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,670 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(top_srcdir)/configure $(top_srcdir)/intl/Makefile.in \
+ ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS THANKS TODO \
+ config.guess config.rpath config.sub depcomp install-sh \
+ missing mkinstalldirs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/realloc.m4 \
+ $(top_srcdir)/m4/sharutils.m4 $(top_srcdir)/m4/signed.m4 \
+ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrtoimax.m4 \
+ $(top_srcdir)/version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = intl/Makefile
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ADD_SCRIPT = @ADD_SCRIPT@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMPRESS = @COMPRESS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DIFF = @DIFF@
+DIRENT_HEADER = @DIRENT_HEADER@
+DIST_ALPHA = @DIST_ALPHA@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+INSTALL = @INSTALL@
+INSTALL_COMPRESS_LINK = @INSTALL_COMPRESS_LINK@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAILER = @MAILER@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SH = @SH@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TAR = @TAR@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = config.rpath $(DIST_ALPHA)
+SUBDIRS = intl lib src doc po contrib tests
+ACLOCAL_AMFLAGS = -I m4
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnits '; \
+ cd $(srcdir) && $(AUTOMAKE) --gnits \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnits Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+ else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: $(am__configure_deps)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @case `sed 15q $(srcdir)/NEWS` in \
+ *"$(VERSION)"*) : ;; \
+ *) \
+ echo "NEWS not updated; not releasing" 1>&2; \
+ exit 1;; \
+ esac
+ $(am__remove_distdir)
+ test -d $(distdir) || mkdir $(distdir)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && cd $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ --with-included-gettext \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+ install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+ dist-shar dist-tarZ dist-zip distcheck distclean \
+ distclean-generic distclean-hdr distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..4e09207
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,108 @@
+GNU sharutils NEWS - User visible changes.
+Copyright (C) 1994, 1995, 1996, 2002, 2004, 2005, 2006,
+ 2007 Free Software Foundation, Inc.
+
+Version 4.7 - July 2007, by Bruce Korb
+
+* fix a grammatical typo in doc/uuencode.1
+* relicense the product under GPL version 3.
+
+
+
+Version 4.6.3 - March 2006, by Bruce Korb
+
+* Recognize "end\r\n" as "end" as well as "end\n".
+* Avoid duplicate declarations of "readdir".
+* generate compress-dummy.1 from the dummy script at bootstrap time
+
+
+
+Version 4.6.2 - March 2006, by Bruce Korb
+
+* Correctly indicate which file is causing output problems.
+* copyright dates
+
+
+
+Version 4.6.1 - January 2006, by Bruce Korb
+
+* Adapt to "md5sum" version changes
+* clean up message strings. Let translators order the components properly.
+* Put nearly all the longer shell fragments into the "scripts.def" file.
+* a couple of CYGWIN fopen() cleanups in uu-en/de-code.c.
+
+
+Version 4.6 - October 2005, by Bruce Korb
+
+* Incorporate new Japanese translation
+* Release last alpha release (4.5.3) as full release
+ (i.e. there are no source changes since then.)
+
+
+Version 4.5.3 - September 2005, by Bruce Korb
+
+* Fix up installation directory references
+* one new and one updated traslation
+* libtool 1.5.20
+
+
+Version 4.5.2 - August 2005, by Bruce Korb
+
+* fix test that only worked on certain fs types
+* update .texi usage
+* incorporate a few new translation updates
+* improve mail-file usage text
+* add "BUG REPORTS" sections to the man pages
+
+
+Version 4.5.1 - August 2005, by Bruce Korb
+
+* fix mem usage bug in shar
+* re-enable md5 checksumming.
+* Use the parameterized here doc parameter everywhere :)
+* test this stuff some more
+
+
+Version 4.5 - August 2005, by Bruce Korb
+
+* fix bug in unshar
+* better usage examples
+* test this stuff
+
+
+Version 4.4 - July 2005, by Bruce Korb
+
+* autotool cleanup
+* Make a non-alpha release this time.
+* Ensure a "intmax_t" exists in the code.
+
+
+Version 4.3.81 - June 2005, by Bruce Korb
+
+* Compatibility: True 64 does not have "snprintf"
+* Updated FSF address
+
+
+Version 4.3.80 - April 2005, by Bruce Korb
+
+* Buglet: Unlink the temporary file when unsharing from stdin.
+
+
+Version 4.3.79 - April 2005, by Bruce Korb
+
+* rewrote the temporary file handling in unshar to avoid both a theoretical
+ timing hole (hitting it requires cooperation) and a buffer overrun
+ attack (a file name exceeding 1K).
+* new translations and updates. They are all now missing two messages:
+ "allocate file name buffer" and "allocate file buffer". *sigh*.
+
+
+Version 4.3.78 - January 2005, by Bruce Korb
+
+* fixed test to not require updates for every release number
+* fixed the uuencode man page so that docbook generation can work correctly.
+
+
+Version 4.3.77 - September 2004, by Bruce Korb
+
+* Fixed a buffer overrun exploit
diff --git a/README b/README
new file mode 100644
index 0000000..b4473df
--- /dev/null
+++ b/README
@@ -0,0 +1,80 @@
+This is the set of GNU shar utilities.
+
+"sharutils" is now licensed under the terms of the GNU GPL version 3
+(or, at your option, any later version).
+
+`shar' makes so-called shell archives out of many files, preparing
+them for transmission by electronic mail services. `unshar' helps
+unpacking shell archives after reception. The core of both programs
+is initially derived from public domain. Some modules and other
+code sections are freely borrowed from other GNU distributions,
+bringing `shar' under the terms of the GNU General Public License.
+
+`uuencode' prepares a file for transmission over an electronic channel
+which ignores or otherwise mangles the eight bit (high order bit) of
+bytes. `uudecode' does the converse transformation. They are derived
+from the BSD NET/2 distribution, but enchanced with the features
+described in recent POSIX standards. If you have more powerful
+`uuencode' and `uudecode' already available, you may want to use
+`./configure --disable-uucode' to prevent their installation.
+
+`remsync' allows for remote synchronization of directory trees,
+using electronic mail. This part of sharutils is still alpha.
+You should have already installed Perl, gzip, GNU diff, GNU tar
+and GNU shar prior to installing remsync package. Only Perl is
+really mandatory, write to me if you feel like helping to remove
+the other dependencies.
+
+Beside the Perl script `remsync' and its shell scripts the whole
+package now is internationalized. This includes the generated shell
+scripts. As described in the `ABOUT-NLS' file you have various
+options for handling this internationalization but this package is
+special in one point: it always needs the GNU message catalog files to
+be installed. Therefore it might be a good idea to always use the GNU
+gettext functions and not the functions provided by your system. This
+is of course not needed if your system uses GNU gettext in its system
+library.
+
+See file `ABOUT-NLS' for how to customize this program to your language.
+See file `COPYING' for copying conditions.
+See file `TODO' for a list of things people have thought about doing.
+See file `INSTALL' for compilation and installation instructions.
+See file `NEWS' for a list of major changes in the current release.
+See file `THANKS' for a list of contributors.
+
+Jan Djarv takes care of the man pages, otherwise unsupported, and
+their installation is kept separate from `make install'. You use
+`make install-man' for them. Better think GNU and switch to Info.
+
+Your feedback will help us to make a better and more portable
+product. Mail suggestions and bug reports (including documentation
+errors) for this program to `bug-gnu-utils@gnu.org'.
+
+Language file updates:
+el 1998-06-20
+cs 1999-01-05
+gl 2000-05-30
+pt 2002-06-24
+nb 2002-06-25
+nn 2002-06-25
+zh_TW 2002-08-03
+hu 2002-08-05
+ca 2003-01-06
+da 2003-03-01
+rw 2005-04-04
+fi 2005-09-16
+et 2005-11-08
+sr 2005-12-13
+nl 2006-01-21
+de 2006-05-20
+pl 2006-05-20
+sv 2006-05-20
+tr 2006-05-21
+bg 2006-05-22
+ga 2006-05-22
+ru 2006-05-22
+fr 2006-05-23
+it 2006-05-23
+vi 2006-05-24
+es 2006-05-26
+ja 2006-08-30
diff --git a/THANKS b/THANKS
new file mode 100644
index 0000000..c6be520
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,91 @@
+The shar and unshar programs is the collective work of many authors.
+Many people contributed to shar by reporting problems, suggesting
+various improvements or submitting actual code. Here is a list of
+these people. Help me keeping it complete and exempt of errors.
+
+Andrew B. Smith abs@maunsell.co.uk
+Andrew Walduck amewaldu@undergrad.math.uwaterloo.ca
+Andrey A. Chernov ache@astral.msk.su
+Andries E. Brouwer aeb@win.tue.nl
+Andy Seaborne afs@hplb.hpl.hp.com
+Antonio Esteves esteves@di.uminho.pt
+Bernd Nordhausen bernd@passage.com
+Bill Aten bill@netagw.com
+Bill Campbell bill@celestial.com
+Bill Silvert silvert@cs.dal.ca
+Bruce Korb bkorb@gnu.org
+Bruno Haible haible@ma2s2.mathematik.uni-karlsruhe.de
+Christian von Roques roques@pond.sub.org
+Christopher Sawtell chris@gerty.equinox.gen.nz
+Colas Nahaboo colas@mirsa.inria.fr
+David J. MacKenzie djm@uunet.uu.net
+Dennis Boylan nanovx!dennis
+Donald Page donaldp@sco.com
+Elliott Pacetti epacet@unf6.cis.unf.edu
+Elvia Lopez Hurtado elvial@ctsmex.attmail.com
+Eric Backus ericb@lsid.hp.com
+François Pinard pinard@iro.umontreal.ca
+Gordon Joly G.Joly@cs.ucl.ac.uk
+Gordon Moffet netcom!gam
+Greg McGary gkm@cstone.net
+Gregory Neil Shapiro gshapiro@wpi.edu
+Harlan Stenn harlan@mumps.pfcs.com
+Horst von Brand vonbrand@inf.utfsm.cl
+Ian Jackson iwj@cam-orl.co.uk
+Jan Djarv Jan.Djarv@sa.erisoft.se
+James Gosling James.Gosling@eng.sun.com
+Jim Meyering meyering@na-net.ornl.gov
+Joseph E. Sacco jsacco@ssl.com
+Joshua R. Poulson jrp@plaza.ds.adp.com
+Karl Berry kb@cs.umb.edu
+Karl Eichwalder ke@suse.de
+Karl Vogel vogelke@c-17igp.wpafb.af.mil
+Kaveh R. Ghazi ghazi@noc.rutgers.edu
+Ken Olstad olstad@msc.edu
+Laurent Bourbeau bpi!bourbeau
+Meade Roberts meade@plaza.ds.adp.com
+Michael A. Thompson mike@iotek.ns.ca
+Michael Mauldin mlm@cs.cmu.edu
+Michael Rendell michael@cs.mun.ca
+Nelson H. F. Beebe beebe@math.utah.edu
+Noah Friedman friedman@gnu.ai.mit.edu
+Pat Myrto rwing!pat
+Paul A. Vixie paul@vix.com
+Paul Eggert eggert@twinsun.com
+Richard H. Gumpertz rhg@cps.com
+Richard Segal segal@cs.washington.edu
+Richard Stallman rms@gnu.org
+Robert J.C. Kyanko rob@rjck.oau.org
+Robert Wolf Robert.Wolf@nmiinc.com
+Roderick Schertler roderick@gate.net
+Stepan Kasal kasal@math.cas.cz
+Thomas E. Dickey dickey@clark.net
+Ulrich Drepper drepper@gnu.ai.mit.edu
+Warren Tucker wht@n4hgf.atl.ga.us
+William Davidsen davidsen@tmr.com
+
+
+Thanks to all members of the translation teams for the different
+languages. Mentioned here are the persons who sent the catalogs:
+
+Catalan: Antoni Bella Perez bella5@teleline.es
+Chinese (traditional): Yuan-Chen Cheng ycheng@sinica.edu.tw
+Czech: Vladimir Michl Vladimir.Michl@upol.cz
+Danish: Keld Simonsen keld@dkuug.dk
+Dutch: Andries E. Brouwer aeb@win.tue.nl
+ Erick Branderhorst branderh@debian.org
+Estonian: Toomas Soome Toomas.Soome@microlink.ee
+French: François Pinard pinard@iro.umontreal.ca
+ Michel Robitaille robitail@IRO.UMontreal.CA
+Galician: Jesús Bravo Álvarez jba@pobox.com
+German: Ulrich Drepper drepper@gnu.ai.mit.edu
+ Karl Eichwalder ke@suse.de
+Greek: Simos KSenitellis simos@teiath.gr
+Hungarian: Gábor István stive@mezobereny.hu
+Japanese: Sakai Kiyotaka ksakai@netwk.ntt-at.co.jp
+ IIDA Yosiaki iida@gnu.org
+Portugese: Antonio Esteves esteves@di.uminho.pt
+Russian: Const Kaplinsky const@ce.cctpu.edu.ru
+Spanish: Tomás Bautista bautista@cma.ulpgc.es
+Svedish: Jan Djärv Jan.Djarv@sa.erisoft.se
+Turkish: Eyüp Hakan Duran hakan_duran@hotmail.com
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..88a67bd
--- /dev/null
+++ b/TODO
@@ -0,0 +1,149 @@
+* TODO file for GNU sharutils
+
+Tell <bug-gnu-utils@gnu.org> if you feel like volunteering for any
+of these ideas, listed more or less in decreasing order of priority.
+Some TODO items are implicit from received email.
+
+- read_stduu, read_base64, decode: arbitrary limitation, by using a fixed
+ length buffer. Although well-formed uuencode coded output always fits
+ within this buffer, an arbitrary-length filename may make the begin line
+ exceed the buffer, and it is not robust to malicious input.
+ Furthermore, POSIX states that input files are not necessarily text
+ files since arbitrary data and line lengths may precede the embedded
+ uuencode section. We should probably be using gnulib's getline here.
+
+- decode: POSIX only states that the input file contain output from uuencode,
+ not that the encoded data begins immediately after a newline character.
+ Maybe it is worth asking for an interpretation from the POSIX Austin Group
+ as to whether arbitrary characters can proceed the "begin" on the first
+ line of the encoded data.
+
+- decode: POSIX requires uudecode to parse both octal AND symbolic mode,
+ but the GNU uudecode currently fails on symbolic modes.
+
+- main: When using the GNU uudecode extension of parsing multiple
+ filenames, the -o option no longer makes sense (you end up decoding
+ multiple source files into the same destination, destroying data from
+ all but the last filename argument). Since multiple filenames is an
+ extension, you should reject attempts to use -o if more than one file is
+ specified.
+
+- decode: GNU uudecode attempts to do ~ expansion, which is allowed by
+ POSIX since ~ is not part of the portable filename character set.
+ However, it may be worth considering extensions to uuencode and uudecode
+ that encode non-portable filename characters in such a manner that
+ uudecode can recreate any valid filename (within the limits of the
+ filesystem it is expanding onto).
+
+- decode: If the output file already exists and is a FIFO or symlink, GNU
+ uudecode fails, although POSIX requires that a FIFO be opened for
+ writing and a symlink be followed.
+
+- all over: uudecode should be careful to use binary mode ("rb" instead of
+ "r" for fopen, for example), on systems where it matters.
+
+- use chksum instead of md5sum. Stephen Gildea proposed this and
+ he is probably right. chksum is standardized and more often found
+ on non-GNU systems.
+
+- change mail-files to use multiple To: lines instead of having a
+ loop. Suggested by Tom Tromey.
+
+- shar: Don't offer -Z if compress isn't available (--help is
+ adjusted; also add ifdefs to rip out the code?).
+- shar: Add -j, --bzip2.
+ (Done by Bruno; check whether it's added everywhere. grep for
+ BTzZ and similar strings)
+- Use plural form:
+ #: src/shar.c:2279
+ #, c-format
+ msgid "Created %d files\n"
+ msgstr "%d Datei(en) erzeugt\n"
+- Check the old todo list (after "cut here").
+
+After 4.4.0:
+- Remove intl/.
+- Split some messages.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=- cut here -=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+(One more word. This list already existed when I took over the task
+of maintaining sharutils. I have not investigated the list enough
+to say this will also be correct for me. But Franc,ois and I often
+agree so it is likely.)
+
+
+.# Next release
+The next release will have these changes:
+. + better integrate uucode with the others, code-wise
+
+
+.@ ChangeLog
+
+.* Short term
+. + Utiliser guillemets français dans fr.tt
+. + convert uucode documentation into sharutils.texi
+. + remove many fixed limits, everywhere
+. + delete useless code, among which some matching features
+. + simplify further `:' vs `true' usage, the latter might be avoided
+. + remsync matters
+. - documentation
+The documentation is still rudimentary, but might help you to
+understand what is going on. Many examples in some quick start
+node might help. In any case, criticize it at will, and let me
+use your comments as an incentive for further improvement. Any help
+from native English speakers is appreciated.
+
+Carefully ensure that you have a backup of your synchronized trees
+before your tries of remsync. It does work for me, but who knows if
+it will not be dangerous in your particular setup.
+
+White lines, and lines beginning with \`#\', are comments. Command
+keywords may be abbreviated to their first letter. Space between
+successive keywords may be omitted. Variable arguments may often be
+replaced by numeric index from lists. SITE may also be local or 0.
+SITE_SET is a list of SITE, default is all. A ! prefix complements it.
+The following commands are meant for automatic internal use:
+. - handle receving files over symbolic links or directories
+. - maintain a project title
+. - no remote could also be local
+. - diagnose /net/mnt_tmp/... directories
+. - if deleting a scan, already registered files declared unexisting
+. - have a paranoid option, in which diffs are always done
+. - study if and how the symbolic links might be transported
+
+.* Medium term
+. + integrate remsync script and documentation
+. + have -C as synonymous for -d in shar
+ 1994-08-22, Karl Berry <kb@cs.umb.edu>
+. + speedup unshar, far too slow while matching sed input
+. + construct some `make check' for shar/unshar
+. + do something sensible with file permissions
+. + study if the symbolic links might be transported
+. + when local/remote directories are relative, this should be to ~user
+. + do not send absolute files
+. + add some `-h UNSHAR.HDR' option
+ 1994-08-19, Marty Leisner <leisner@sdsp.mc.xerox.com>
+. + decode options from a SHAR environment variable
+ 1994-08-30, Ulrich Drepper <drepper@ira.uka.de>
+. + automatic detection of gzip'ed shar files in unshar
+ 1996-06-06, Larry Schwimmer <rosebud@cyclone.Stanford.EDU>
+. + provide -z option to compress input of shar (???)
+ 1996-06-06, Larry Schwimmer <rosebud@cyclone.Stanford.EDU>
+. + remsync matters
+. - have a command to rename a remote while keeping all its values
+. - do something sensible with file permissions
+. - qualify each scan with destination sites
+. - emacslisp/menage.el to omit, have it reconstructed automatically instead
+. - have an equivalence system for email addresses
+. - avoid computing checksums for ignored files
+. - have a master directory for .remsync's, have them located elsewhere
+. - have a recursive mode finding all .remsync's in tree
+. - provide encryption hooks, so people can use e.g. PGP or rot13 :-)
+
+.* Long term
+. + automatically retrieve in correct sequence from a bunched file
+ 1994-08-24, Karl Berry <kb@cs.umb.edu>
+. + when -T, just reject binary files
+ 1994-08-29, Andrew A. Chernov <ache@astral.msk.su>
+ 1994-09-11, Eric Backus <ericb@lsid.hp.com> -- disagrees
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..5e90c54
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,923 @@
+# generated automatically by aclocal 1.10 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_if(m4_PACKAGE_VERSION, [2.61],,
+[m4_fatal([this file was generated for autoconf 2.61.
+You have another version of autoconf. If you want to use that,
+you should regenerate the build system entirely.], [63])])
+
+# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.10], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10])dnl
+_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+
+# Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+AC_DEFUN([AM_WITH_DMALLOC],
+[AC_MSG_CHECKING([if malloc debugging is wanted])
+AC_ARG_WITH(dmalloc,
+[ --with-dmalloc use dmalloc, as in
+ http://www.dmalloc.com/dmalloc.tar.gz],
+[if test "$withval" = yes; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(WITH_DMALLOC,1,
+ [Define if using the dmalloc debugging malloc package])
+ LIBS="$LIBS -ldmalloc"
+ LDFLAGS="$LDFLAGS -g"
+else
+ AC_MSG_RESULT(no)
+fi], [AC_MSG_RESULT(no)])
+])
+
+AU_DEFUN([fp_WITH_DMALLOC], [AM_WITH_DMALLOC])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/codeset.m4])
+m4_include([m4/error.m4])
+m4_include([m4/gettext.m4])
+m4_include([m4/glibc2.m4])
+m4_include([m4/glibc21.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/intdiv0.m4])
+m4_include([m4/intmax.m4])
+m4_include([m4/inttypes-pri.m4])
+m4_include([m4/inttypes.m4])
+m4_include([m4/inttypes_h.m4])
+m4_include([m4/lcmessage.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/longdouble.m4])
+m4_include([m4/longlong.m4])
+m4_include([m4/malloc.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/po.m4])
+m4_include([m4/printf-posix.m4])
+m4_include([m4/progtest.m4])
+m4_include([m4/realloc.m4])
+m4_include([m4/sharutils.m4])
+m4_include([m4/signed.m4])
+m4_include([m4/size_max.m4])
+m4_include([m4/stdint_h.m4])
+m4_include([m4/uintmax_t.m4])
+m4_include([m4/ulonglong.m4])
+m4_include([m4/wchar_t.m4])
+m4_include([m4/wint_t.m4])
+m4_include([m4/xsize.m4])
+m4_include([m4/xstrtoimax.m4])
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..396482d
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1500 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
+
+timestamp='2006-07-02'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ x86:Interix*:[3456]*)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ EM64T:Interix*:[3456]*)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
+ p
+ }'`"
+ test x"${LIBC}" != x && {
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit
+ }
+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..f03e7e3
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,473 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if the `closedir' function returns void instead of `int'. */
+#undef CLOSEDIR_VOID
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+ systems. This function is required for `alloca.c' support on those systems.
+ */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* define to directory entry header file */
+#undef DIRENT_HEADER
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+ */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <argz.h> header file. */
+#undef HAVE_ARGZ_H
+
+/* Define to 1 if you have the `asprintf' function. */
+#undef HAVE_ASPRINTF
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+ CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if compress is available. */
+#undef HAVE_COMPRESS
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+ don't. */
+#undef HAVE_DECL_FEOF_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+ you don't. */
+#undef HAVE_DECL_FGETS_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+ don't. */
+#undef HAVE_DECL_GETC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `strerror', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRERROR
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRERROR_R
+
+/* Define to 1 if you have the declaration of `strtoimax', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRTOIMAX
+
+/* Define to 1 if you have the declaration of `strtol', and to 0 if you don't.
+ */
+#undef HAVE_DECL_STRTOL
+
+/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRTOLL
+
+/* Define to 1 if you have the declaration of `strtoul', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRTOUL
+
+/* Define to 1 if you have the declaration of `strtoumax', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRTOUMAX
+
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TZNAME
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL__SNPRINTF
+
+/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL__SNWPRINTF
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_DIRENT_H
+
+/* Define if the malloc check has been performed. */
+#undef HAVE_DONE_WORKING_MALLOC_CHECK
+
+/* Define if the realloc check has been performed. */
+#undef HAVE_DONE_WORKING_REALLOC_CHECK
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+#undef HAVE_DOPRNT
+
+/* Define if the current hostname may be found in /etc/systemid. */
+#undef HAVE_ETC_SYSTEMID
+
+/* Define to 1 if you have the `fchmod' function. */
+#undef HAVE_FCHMOD
+
+/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
+#undef HAVE_FSEEKO
+
+/* Define to 1 if you have the `fwprintf' function. */
+#undef HAVE_FWPRINTF
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getegid' function. */
+#undef HAVE_GETEGID
+
+/* Define to 1 if you have the `geteuid' function. */
+#undef HAVE_GETEUID
+
+/* Define to 1 if you have the `getgid' function. */
+#undef HAVE_GETGID
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_INTMAX_T
+
+/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
+#undef HAVE_INTTYPES_H
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+ declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
+/* Define to 1 if you have the `isascii' function. */
+#undef HAVE_ISASCII
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define if you have the 'long double' type. */
+#undef HAVE_LONG_DOUBLE
+
+/* Define if you have the 'long long' type. */
+#undef HAVE_LONG_LONG
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the `memcpy' function. */
+#undef HAVE_MEMCPY
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the `mktime' function. */
+#undef HAVE_MKTIME
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <nl_types.h> header file. */
+#undef HAVE_NL_TYPES_H
+
+/* Define if your printf() function supports format strings with positions. */
+#undef HAVE_POSIX_PRINTF
+
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+ uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the `strerror_r' function. */
+#undef HAVE_STRERROR_R
+
+/* Define to 1 if you have the `strftime' function. */
+#undef HAVE_STRFTIME
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strtoimax' function. */
+#undef HAVE_STRTOIMAX
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if you have the `strtoll' function. */
+#undef HAVE_STRTOLL
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* Define to 1 if `tm_zone' is member of `struct tm'. */
+#undef HAVE_STRUCT_TM_TM_ZONE
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+ `HAVE_STRUCT_TM_TM_ZONE' instead. */
+#undef HAVE_TM_ZONE
+
+/* Define to 1 if you have the `tsearch' function. */
+#undef HAVE_TSEARCH
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+ `tzname'. */
+#undef HAVE_TZNAME
+
+/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_UINTMAX_T
+
+/* Define to 1 if you have the `uname' function. */
+#undef HAVE_UNAME
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the 'unsigned long long' type. */
+#undef HAVE_UNSIGNED_LONG_LONG
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define to 1 if you have the `wcslen' function. */
+#undef HAVE_WCSLEN
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
+/* Define to 1 if you have the `__argz_count' function. */
+#undef HAVE___ARGZ_COUNT
+
+/* Define to 1 if you have the `__argz_next' function. */
+#undef HAVE___ARGZ_NEXT
+
+/* Define to 1 if you have the `__argz_stringify' function. */
+#undef HAVE___ARGZ_STRINGIFY
+
+/* Define to 1 if you have the `__fsetlocking' function. */
+#undef HAVE___FSETLOCKING
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if integer division by zero raises signal SIGFPE. */
+#undef INTDIV0_RAISES_SIGFPE
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* Define as the maximum value of type 'size_t', if the system doesn't define
+ it. */
+#undef SIZE_MAX
+
+/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at runtime.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if strerror_r returns char *. */
+#undef STRERROR_R_CHAR_P
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* Define if using the dmalloc debugging malloc package */
+#undef WITH_DMALLOC
+
+/* Define to 1 if your processor stores words with the most significant byte
+ first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
+/* Define to 1 if on AIX 3.
+ System headers sometimes define this.
+ We just want to avoid a redefinition error message. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Make sure we see all GNU extensions. */
+#undef _GNU_SOURCE
+
+/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
+#undef _LARGEFILE_SOURCE
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+ this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Define to 1 if type `char' is unsigned and you are not using gcc. */
+#ifndef __CHAR_UNSIGNED__
+# undef __CHAR_UNSIGNED__
+#endif
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to rpl_malloc if the replacement function should be used. */
+#undef malloc
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define as the type of the result of subtracting two pointers, if the system
+ doesn't define it. */
+#undef ptrdiff_t
+
+/* Define to rpl_realloc if the replacement function should be used. */
+#undef realloc
+
+/* Define to empty if the C compiler doesn't support this keyword. */
+#undef signed
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to unsigned long or unsigned long long if <stdint.h> and
+ <inttypes.h> don't define. */
+#undef uintmax_t
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 0000000..3f1bef3
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,571 @@
+#! /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-2005 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+cc_basename=`echo "$CC" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ darwin*)
+ case "$cc_basename" in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | pw32* | os2*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux*)
+ case $cc_basename in
+ icc* | ecc*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ 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/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = yes; then
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case "$cc_basename" in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | kfreebsd*-gnu | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10* | hpux11*)
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=no
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4.2uw2*)
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ ;;
+ sysv5*)
+ hardcode_libdir_flag_spec=
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ ;;
+ aix4* | aix5*)
+ ;;
+ amigaos*)
+ ;;
+ beos*)
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ shrext=.dll
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ ;;
+ dgux*)
+ ;;
+ freebsd1*)
+ ;;
+ kfreebsd*-gnu)
+ ;;
+ freebsd*)
+ ;;
+ gnu*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case "$host_cpu" in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux*)
+ ;;
+ knetbsd*-gnu)
+ ;;
+ netbsd*)
+ ;;
+ newsos6)
+ ;;
+ nto-qnx*)
+ ;;
+ openbsd*)
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ ;;
+ osf3* | osf4* | osf5*)
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ ;;
+ sunos4*)
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ ;;
+ sysv4*MP*)
+ ;;
+ uts4*)
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..fab0aa3
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1616 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
+
+timestamp='2006-09-20'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16c)
+ basic_machine=cr16c-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..bcf4060
--- /dev/null
+++ b/configure
@@ -0,0 +1,16959 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for sharutils 4.7.
+#
+# Report bugs to <bug-gnu-utils@gnu.org>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+ if (eval ":") 2>/dev/null; then
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+
+ if test $as_have_required = yes && (eval ":
+(as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=\$LINENO
+ as_lineno_2=\$LINENO
+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+ :
+else
+ as_candidate_shells=
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ case $as_dir in
+ /*)
+ for as_base in sh bash ksh sh5; do
+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ done;;
+ esac
+done
+IFS=$as_save_IFS
+
+
+ for as_shell in $as_candidate_shells $SHELL; do
+ # Try only shells that exist, to save several forks.
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+ CONFIG_SHELL=$as_shell
+ as_have_required=yes
+ if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+ (exit $1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+ break
+fi
+
+fi
+
+ done
+
+ if test "x$CONFIG_SHELL" != x; then
+ for as_var in BASH_ENV ENV
+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ done
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+ if test $as_have_required = no; then
+ echo This script requires a shell more modern than all the
+ echo shells that I found on your system. Please install a
+ echo modern shell, or manually run the script under such a
+ echo shell if you do have one.
+ { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+ echo No shell found that supports shell functions.
+ echo Please tell autoconf@gnu.org about your system,
+ echo including any error possibly output before this
+ echo message
+}
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='sharutils'
+PACKAGE_TARNAME='sharutils'
+PACKAGE_VERSION='4.7'
+PACKAGE_STRING='sharutils 4.7'
+PACKAGE_BUGREPORT='bug-gnu-utils@gnu.org'
+
+ac_unique_file="src/shar.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+am__isrc
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+mkdir_p
+AWK
+SET_MAKE
+am__leading_dot
+AMTAR
+am__tar
+am__untar
+DIST_ALPHA
+ADD_SCRIPT
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+RANLIB
+DIFF
+MAILER
+PERL
+SH
+TAR
+COMPRESS
+INSTALL_COMPRESS_LINK
+CPP
+GREP
+EGREP
+DIRENT_HEADER
+LIBOBJS
+ALLOCA
+UUCODE_TRUE
+UUCODE_FALSE
+MKINSTALLDIRS
+USE_NLS
+MSGFMT
+GMSGFMT
+XGETTEXT
+MSGMERGE
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+GLIBC2
+GLIBC21
+INTL_MACOSX_LIBS
+HAVE_POSIX_PRINTF
+HAVE_ASPRINTF
+HAVE_SNPRINTF
+HAVE_WPRINTF
+LIBICONV
+LTLIBICONV
+INTLBISON
+BUILD_INCLUDED_LIBINTL
+USE_INCLUDED_LIBINTL
+CATOBJEXT
+DATADIRNAME
+INSTOBJEXT
+GENCAT
+INTLOBJS
+INTL_LIBTOOL_SUFFIX_PREFIX
+INTLLIBS
+LIBINTL
+LTLIBINTL
+POSUB
+LTLIBOBJS'
+ac_subst_files=''
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+ eval enable_$ac_feature=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+ eval enable_$ac_feature=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+ eval with_$ac_package=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+ eval with_$ac_package=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ { echo "$as_me: error: Working directory cannot be determined" >&2
+ { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ { echo "$as_me: error: pwd does not report name of working directory" >&2
+ { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+ { (exit 1); exit 1; }; }
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures sharutils 4.7 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/sharutils]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of sharutils 4.7:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-compress-link install compress link if the program is missing
+ --disable-largefile omit support for large files
+ --disable-uucode disable installation of uuencode and uudecode
+ --disable-nls do not use Native Language Support
+ --disable-rpath do not hardcode runtime library paths
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+ --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
+ --with-included-gettext use the GNU gettext library included here
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+ --with-dmalloc use dmalloc, as in
+ http://www.dmalloc.com/dmalloc.tar.gz
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bug-gnu-utils@gnu.org>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" || continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+sharutils configure 4.7
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by sharutils $as_me 4.7, which was
+generated by GNU Autoconf 2.61. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args '$ac_arg'"
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+ set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+ set x "$ac_default_prefix/share/config.site" \
+ "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+am__api_version='1.10'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm -f conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+if test -z "$MKDIR_P"; then
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+done
+IFS=$as_save_IFS
+
+fi
+
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ test -d ./--version && rmdir ./--version
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+echo "${ECHO_T}$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+ SET_MAKE=
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='sharutils'
+ VERSION='4.7'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+
+
+ADD_SCRIPT="mail-files mailshar"
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler --version >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -v >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -V >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort. b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions. Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ CFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_c89=$ac_arg
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+ xno)
+ { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+{ echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+depcc="$CC" am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+ SET_MAKE=
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+# Carefully avoid gdiff for X as found on SGI systems.
+if (DISPLAY= gdiff /dev/null /dev/null) 2> /dev/null; then
+ for ac_prog in gnudiff diffgnu gdiff diff
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_DIFF+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $DIFF in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DIFF=$ac_cv_path_DIFF
+if test -n "$DIFF"; then
+ { echo "$as_me:$LINENO: result: $DIFF" >&5
+echo "${ECHO_T}$DIFF" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$DIFF" && break
+done
+test -n "$DIFF" || DIFF="no"
+
+else
+ for ac_prog in gnudiff diffgnu diff
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_DIFF+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $DIFF in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DIFF=$ac_cv_path_DIFF
+if test -n "$DIFF"; then
+ { echo "$as_me:$LINENO: result: $DIFF" >&5
+echo "${ECHO_T}$DIFF" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$DIFF" && break
+done
+test -n "$DIFF" || DIFF="no"
+
+fi
+
+PATH_save="$PATH"; PATH="$PATH:/usr/sbin:/usr/ucb:/usr/bin:/bin"
+for ac_prog in Mail mailx elm mush mail
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MAILER+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MAILER in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MAILER="$MAILER" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MAILER="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MAILER=$ac_cv_path_MAILER
+if test -n "$MAILER"; then
+ { echo "$as_me:$LINENO: result: $MAILER" >&5
+echo "${ECHO_T}$MAILER" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$MAILER" && break
+done
+test -n "$MAILER" || MAILER="no"
+
+PATH="$PATH_save"
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PERL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no"
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { echo "$as_me:$LINENO: result: $PERL" >&5
+echo "${ECHO_T}$PERL" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+for ac_prog in bash sh
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_SH+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $SH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SH="$SH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+SH=$ac_cv_path_SH
+if test -n "$SH"; then
+ { echo "$as_me:$LINENO: result: $SH" >&5
+echo "${ECHO_T}$SH" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$SH" && break
+done
+test -n "$SH" || SH="no"
+
+
+for ac_prog in gnutar targnu gtar tar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_TAR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $TAR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TAR="$TAR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+TAR=$ac_cv_path_TAR
+if test -n "$TAR"; then
+ { echo "$as_me:$LINENO: result: $TAR" >&5
+echo "${ECHO_T}$TAR" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$TAR" && break
+done
+test -n "$TAR" || TAR="tar"
+
+
+if test $ac_cv_path_PERL != no; then
+ ADD_SCRIPT="$ADD_SCRIPT remsync"
+ ac_config_files="$ac_config_files src/remsync"
+
+fi
+
+
+
+ for ac_prog in compress
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_COMPRESS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $COMPRESS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_COMPRESS="$COMPRESS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_COMPRESS="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+COMPRESS=$ac_cv_path_COMPRESS
+if test -n "$COMPRESS"; then
+ { echo "$as_me:$LINENO: result: $COMPRESS" >&5
+echo "${ECHO_T}$COMPRESS" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$COMPRESS" && break
+done
+test -n "$COMPRESS" || COMPRESS="no"
+
+ if test $COMPRESS != no; then
+ cp $srcdir/COPYING tCOPYING
+ { echo "$as_me:$LINENO: checking whether compress works" >&5
+echo $ECHO_N "checking whether compress works... $ECHO_C" >&6; }
+ if compress tCOPYING >/dev/null 2>&1; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_COMPRESS 1
+_ACEOF
+
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+ else
+ COMPRESS=no
+ { echo "$as_me:$LINENO: result: no, installing compress-dummy" >&5
+echo "${ECHO_T}no, installing compress-dummy" >&6; }
+ fi
+ rm -f tCOPYING tCOPYING.Z
+ fi
+ if test $COMPRESS = no; then
+ ADD_SCRIPT="$ADD_SCRIPT compress-dummy"
+ ac_config_files="$ac_config_files src/compress-dummy"
+
+ fi
+
+ if test $COMPRESS = no; then
+ # Check whether --enable-compress-link was given.
+if test "${enable_compress_link+set}" = set; then
+ enableval=$enable_compress_link;
+fi
+
+ if test "x$enable_compress_link" = xyes; then
+ INSTALL_COMPRESS_LINK="compress-link"
+ else
+ INSTALL_COMPRESS_LINK=
+ fi
+ fi
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+ # Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+ $ac_path_GREP_found && break 3
+ done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+ # Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+ $ac_path_EGREP_found && break 3
+ done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+
+{ echo "$as_me:$LINENO: checking for AIX" >&5
+echo $ECHO_N "checking for AIX... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef _AIX
+ yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define _ALL_SOURCE 1
+_ACEOF
+
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+rm -f conftest*
+
+
+{ echo "$as_me:$LINENO: checking for library containing strerror" >&5
+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror ();
+int
+main ()
+{
+return strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_search_strerror=$ac_res
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext
+ if test "${ac_cv_search_strerror+set}" = set; then
+ break
+fi
+done
+if test "${ac_cv_search_strerror+set}" = set; then
+ :
+else
+ ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+echo "${ECHO_T}$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ { echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking minix/config.h usability" >&5
+echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <minix/config.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking minix/config.h presence" >&5
+echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <minix/config.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-gnu-utils@gnu.org ##
+## ------------------------------------ ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_minix_config_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; }
+
+fi
+if test $ac_cv_header_minix_config_h = yes; then
+ MINIX=yes
+else
+ MINIX=
+fi
+
+
+if test "$MINIX" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_1_SOURCE 2
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _MINIX 1
+_ACEOF
+
+fi
+
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then
+ enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+ { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
+echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; }
+if test "${ac_cv_sys_largefile_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_largefile_CC=' -n32'; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
+echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; }
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_file_offset_bits=no; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_file_offset_bits=64; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
+echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -f conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
+echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; }
+if test "${ac_cv_sys_large_files+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_large_files=no; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_sys_large_files=1; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
+echo "${ECHO_T}$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -f conftest*
+ fi
+fi
+
+if test $cross_compiling = no; then
+
+{ echo "$as_me:$LINENO: checking whether char is unsigned" >&5
+echo $ECHO_N "checking whether char is unsigned... $ECHO_C" >&6; }
+if test "${ac_cv_c_char_unsigned+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((char) -1) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_char_unsigned=no
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_c_char_unsigned=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_char_unsigned" >&5
+echo "${ECHO_T}$ac_cv_c_char_unsigned" >&6; }
+if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
+ cat >>confdefs.h <<\_ACEOF
+#define __CHAR_UNSIGNED__ 1
+_ACEOF
+
+fi
+
+fi
+{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset cs;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_c_const=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
+if test "${ac_cv_c_inline+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_inline=$ac_kw
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6; }
+
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # See if sys/param.h defines the BYTE_ORDER macro.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
+ && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
+ bogus endian macros
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_bigendian=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_c_bigendian=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # It does not; compile a test program.
+if test "$cross_compiling" = yes; then
+ # try to guess the endianness by grepping values into an object file
+ ac_cv_c_bigendian=unknown
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+int
+main ()
+{
+ _ascii (); _ebcdic ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+ ac_cv_c_bigendian=yes
+fi
+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_bigendian=no
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
+case $ac_cv_c_bigendian in
+ yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+ ;;
+ no)
+ ;;
+ *)
+ { { echo "$as_me:$LINENO: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+echo "$as_me: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+
+
+
+
+
+
+
+
+for ac_header in limits.h locale.h memory.h string.h sys/wait.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-gnu-utils@gnu.org ##
+## ------------------------------------ ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+ { echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' dir; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_search_opendir=$ac_res
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext
+ if test "${ac_cv_search_opendir+set}" = set; then
+ break
+fi
+done
+if test "${ac_cv_search_opendir+set}" = set; then
+ :
+else
+ ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+else
+ { echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' x; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_search_opendir=$ac_res
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext
+ if test "${ac_cv_search_opendir+set}" = set; then
+ break
+fi
+done
+if test "${ac_cv_search_opendir+set}" = set; then
+ :
+else
+ ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+test X$ac_header_dirent = Xno && {
+ { { echo "$as_me:$LINENO: error: a dirent header is required." >&5
+echo "$as_me: error: a dirent header is required." >&2;}
+ { (exit 1); exit 1; }; }
+}
+DIRENT_HEADER=\<${ac_header_dirent}\>
+
+cat >>confdefs.h <<_ACEOF
+#define DIRENT_HEADER ${DIRENT_HEADER}
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
+echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6; }
+if test "${ac_cv_header_stat_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined S_ISBLK && defined S_IFDIR
+extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
+#endif
+
+#if defined S_ISBLK && defined S_IFCHR
+extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
+#endif
+
+#if defined S_ISLNK && defined S_IFREG
+extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
+#endif
+
+#if defined S_ISSOCK && defined S_IFREG
+extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stat_broken=no
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stat_broken=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
+echo "${ECHO_T}$ac_cv_header_stat_broken" >&6; }
+if test $ac_cv_header_stat_broken = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STAT_MACROS_BROKEN 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; }
+if test "${ac_cv_struct_tm+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+ int *p = &tm.tm_sec;
+ return !p;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_struct_tm=time.h
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_struct_tm=sys/time.h
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+echo "${ECHO_T}$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TM_IN_SYS_TIME 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
+echo $ECHO_N "checking for struct tm.tm_zone... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_tm_tm_zone+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_cv_struct_tm>
+
+
+int
+main ()
+{
+static struct tm ac_aggr;
+if (ac_aggr.tm_zone)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_member_struct_tm_tm_zone=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_cv_struct_tm>
+
+
+int
+main ()
+{
+static struct tm ac_aggr;
+if (sizeof ac_aggr.tm_zone)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_member_struct_tm_tm_zone=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_tm_tm_zone=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
+echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6; }
+if test $ac_cv_member_struct_tm_tm_zone = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TM_TM_ZONE 1
+_ACEOF
+
+
+fi
+
+if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TM_ZONE 1
+_ACEOF
+
+else
+ { echo "$as_me:$LINENO: checking whether tzname is declared" >&5
+echo $ECHO_N "checking whether tzname is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_tzname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <time.h>
+
+int
+main ()
+{
+#ifndef tzname
+ (void) tzname;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_tzname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_tzname=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_tzname" >&5
+echo "${ECHO_T}$ac_cv_have_decl_tzname" >&6; }
+if test $ac_cv_have_decl_tzname = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TZNAME 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TZNAME 0
+_ACEOF
+
+
+fi
+
+
+ { echo "$as_me:$LINENO: checking for tzname" >&5
+echo $ECHO_N "checking for tzname... $ECHO_C" >&6; }
+if test "${ac_cv_var_tzname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <time.h>
+#if !HAVE_DECL_TZNAME
+extern char *tzname[];
+#endif
+
+int
+main ()
+{
+return tzname[0][0];
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_var_tzname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_var_tzname=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
+echo "${ECHO_T}$ac_cv_var_tzname" >&6; }
+ if test $ac_cv_var_tzname = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TZNAME 1
+_ACEOF
+
+ fi
+fi
+
+{ echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+typedef size_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+ return 0;
+if (sizeof (ac__type_new_))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_type_size_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_size_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
+if test $ac_cv_type_size_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+
+
+
+
+for ac_func in strerror vprintf doprnt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ { echo "$as_me:$LINENO: checking whether strerror is declared" >&5
+echo $ECHO_N "checking whether strerror is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strerror+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strerror
+ (void) strerror;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strerror=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strerror=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strerror" >&6; }
+if test $ac_cv_have_decl_strerror = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR 0
+_ACEOF
+
+
+fi
+
+
+ { echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5
+echo $ECHO_N "checking whether strerror_r is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strerror_r+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strerror_r
+ (void) strerror_r;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strerror_r=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strerror_r=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror_r" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strerror_r" >&6; }
+if test $ac_cv_have_decl_strerror_r = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R 0
+_ACEOF
+
+
+fi
+
+
+
+for ac_func in strerror_r
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ echo "$as_me:$LINENO: checking whether strerror_r returns char *" >&5
+echo $ECHO_N "checking whether strerror_r returns char *... $ECHO_C" >&6; }
+if test "${ac_cv_func_strerror_r_char_p+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ ac_cv_func_strerror_r_char_p=no
+ if test $ac_cv_have_decl_strerror_r = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ char *p = strerror_r (0, buf, sizeof buf);
+ return !p || x;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_func_strerror_r_char_p=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+ # strerror_r is not declared. Choose between
+ # systems that have relatively inaccessible declarations for the
+ # function. BeOS and DEC UNIX 4.0 fall in this category, but the
+ # former has a strerror_r that returns char*, while the latter
+ # has a strerror_r that returns `int'.
+ # This test should segfault on the DEC system.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+ extern char *strerror_r ();
+int
+main ()
+{
+char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ return ! isalpha (x);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_strerror_r_char_p=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r_char_p" >&5
+echo "${ECHO_T}$ac_cv_func_strerror_r_char_p" >&6; }
+if test $ac_cv_func_strerror_r_char_p = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STRERROR_R_CHAR_P 1
+_ACEOF
+
+fi
+
+ { echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DONE_WORKING_MALLOC_CHECK 1
+_ACEOF
+
+
+ { echo "$as_me:$LINENO: checking whether malloc(0) returns a non-NULL pointer" >&5
+echo $ECHO_N "checking whether malloc(0) returns a non-NULL pointer... $ECHO_C" >&6; }
+if test "${jm_cv_func_working_malloc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ jm_cv_func_working_malloc=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+ char *malloc ();
+ int
+ main ()
+ {
+ exit (malloc (0) ? 0 : 1);
+ }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ jm_cv_func_working_malloc=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+jm_cv_func_working_malloc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $jm_cv_func_working_malloc" >&5
+echo "${ECHO_T}$jm_cv_func_working_malloc" >&6; }
+ if test $jm_cv_func_working_malloc = no; then
+ case " $LIBOBJS " in
+ *" malloc.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS malloc.$ac_objext"
+ ;;
+esac
+
+
+cat >>confdefs.h <<\_ACEOF
+#define malloc rpl_malloc
+_ACEOF
+
+ fi
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DONE_WORKING_REALLOC_CHECK 1
+_ACEOF
+
+
+ { echo "$as_me:$LINENO: checking whether realloc(0,0) returns a non-NULL pointer" >&5
+echo $ECHO_N "checking whether realloc(0,0) returns a non-NULL pointer... $ECHO_C" >&6; }
+if test "${jm_cv_func_working_realloc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ jm_cv_func_working_realloc=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+ char *realloc ();
+ int
+ main ()
+ {
+ exit (realloc (0, 0) ? 0 : 1);
+ }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ jm_cv_func_working_realloc=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+jm_cv_func_working_realloc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $jm_cv_func_working_realloc" >&5
+echo "${ECHO_T}$jm_cv_func_working_realloc" >&6; }
+ if test $jm_cv_func_working_realloc = no; then
+ case " $LIBOBJS " in
+ *" realloc.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS realloc.$ac_objext"
+ ;;
+esac
+
+
+cat >>confdefs.h <<\_ACEOF
+#define realloc rpl_realloc
+_ACEOF
+
+ fi
+
+
+
+
+
+
+
+
+for ac_func in fchmod getcwd isascii memcpy strchr strerror uname
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments. Useless!
+{ echo "$as_me:$LINENO: checking for working alloca.h" >&5
+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; }
+if test "${ac_cv_working_alloca_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_working_alloca_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_working_alloca_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA_H 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for alloca" >&5
+echo $ECHO_N "checking for alloca... $ECHO_C" >&6; }
+if test "${ac_cv_func_alloca_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_func_alloca_works=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_alloca_works=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA 1
+_ACEOF
+
+else
+ # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble. Some versions do not even contain alloca or
+# contain a buggy version. If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+cat >>confdefs.h <<\_ACEOF
+#define C_ALLOCA 1
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; }
+if test "${ac_cv_os_cray+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "webecray" >/dev/null 2>&1; then
+ ac_cv_os_cray=yes
+else
+ ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+echo "${ECHO_T}$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+ for ac_func in _getb67 GETB67 getb67; do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+ break
+fi
+
+ done
+fi
+
+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; }
+if test "${ac_cv_c_stack_direction+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_c_stack_direction=0
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+find_stack_direction ()
+{
+ static char *addr = 0;
+ auto char dummy;
+ if (addr == 0)
+ {
+ addr = &dummy;
+ return find_stack_direction ();
+ }
+ else
+ return (&dummy > addr) ? 1 : -1;
+}
+
+int
+main ()
+{
+ return find_stack_direction () < 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_stack_direction=1
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether closedir returns void" >&5
+echo $ECHO_N "checking whether closedir returns void... $ECHO_C" >&6; }
+if test "${ac_cv_func_closedir_void+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_closedir_void=yes
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header_dirent>
+#ifndef __cplusplus
+int closedir ();
+#endif
+
+int
+main ()
+{
+return closedir (opendir (".")) != 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_closedir_void=no
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_closedir_void=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_closedir_void" >&5
+echo "${ECHO_T}$ac_cv_func_closedir_void" >&6; }
+if test $ac_cv_func_closedir_void = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define CLOSEDIR_VOID 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6; }
+if test "${ac_cv_sys_largefile_source+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_sys_largefile_source=no; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#define _LARGEFILE_SOURCE 1
+#include <stdio.h>
+int
+main ()
+{
+return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_sys_largefile_source=1; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_cv_sys_largefile_source=unknown
+ break
+done
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_source" >&5
+echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6; }
+case $ac_cv_sys_largefile_source in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source
+_ACEOF
+;;
+esac
+rm -f conftest*
+
+# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
+# in glibc 2.1.3, but that breaks too many other things.
+# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
+if test $ac_cv_sys_largefile_source != unknown; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FSEEKO 1
+_ACEOF
+
+fi
+
+
+for ac_func in strftime
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ # strftime is in -lintl on SCO UNIX.
+{ echo "$as_me:$LINENO: checking for strftime in -lintl" >&5
+echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_intl_strftime+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strftime ();
+int
+main ()
+{
+return strftime ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_lib_intl_strftime=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_intl_strftime=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6; }
+if test $ac_cv_lib_intl_strftime = yes; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRFTIME 1
+_ACEOF
+
+LIBS="-lintl $LIBS"
+fi
+
+fi
+done
+
+
+for ac_func in vprintf
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+{ echo "$as_me:$LINENO: checking for _doprnt" >&5
+echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; }
+if test "${ac_cv_func__doprnt+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define _doprnt innocuous__doprnt
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char _doprnt (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef _doprnt
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char _doprnt ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub__doprnt || defined __stub____doprnt
+choke me
+#endif
+
+int
+main ()
+{
+return _doprnt ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_func__doprnt=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func__doprnt=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
+echo "${ECHO_T}$ac_cv_func__doprnt" >&6; }
+if test $ac_cv_func__doprnt = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DOPRNT 1
+_ACEOF
+
+fi
+
+fi
+done
+
+
+
+
+
+
+for ac_func in memset mktime stpcpy strftime
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case " $LIBOBJS " in
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+
+ { echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; }
+if test "${gl_cv_header_inttypes_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <inttypes.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t) -1;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_header_inttypes_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_header_inttypes_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gl_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$gl_cv_header_inttypes_h" >&6; }
+ if test $gl_cv_header_inttypes_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for stdint.h" >&5
+echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
+if test "${gl_cv_header_stdint_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <stdint.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t) -1;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gl_cv_header_stdint_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gl_cv_header_stdint_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gl_cv_header_stdint_h" >&5
+echo "${ECHO_T}$gl_cv_header_stdint_h" >&6; }
+ if test $gl_cv_header_stdint_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+_ACEOF
+
+ fi
+
+
+
+
+ { echo "$as_me:$LINENO: checking for intmax_t" >&5
+echo $ECHO_N "checking for intmax_t... $ECHO_C" >&6; }
+if test "${gt_cv_c_intmax_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+
+int
+main ()
+{
+intmax_t x = -1;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_c_intmax_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_c_intmax_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_c_intmax_t" >&5
+echo "${ECHO_T}$gt_cv_c_intmax_t" >&6; }
+ if test $gt_cv_c_intmax_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INTMAX_T 1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for unsigned long long" >&5
+echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6; }
+if test "${ac_cv_type_unsigned_long_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+unsigned long long ull = 1ULL; int i = 63;
+int
+main ()
+{
+unsigned long long ullmax = (unsigned long long) -1;
+ return ull << i | ull >> i | ullmax / ull | ullmax % ull;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_type_unsigned_long_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_unsigned_long_long=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6; }
+ if test $ac_cv_type_unsigned_long_long = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UNSIGNED_LONG_LONG 1
+_ACEOF
+
+ fi
+
+
+
+
+ if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+
+ test $ac_cv_type_unsigned_long_long = yes \
+ && ac_type='unsigned long long' \
+ || ac_type='unsigned long'
+
+cat >>confdefs.h <<_ACEOF
+#define uintmax_t $ac_type
+_ACEOF
+
+ else
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UINTMAX_T 1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for long long" >&5
+echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
+if test "${ac_cv_type_long_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+long long ll = 1LL; int i = 63;
+int
+main ()
+{
+long long llmax = (long long) -1;
+ return ll << i | ll >> i | llmax / ll | llmax % ll;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_type_long_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_long_long=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
+ if test $ac_cv_type_long_long = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_LONG 1
+_ACEOF
+
+ fi
+
+
+
+
+
+
+ { echo "$as_me:$LINENO: checking whether strtol is declared" >&5
+echo $ECHO_N "checking whether strtol is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strtol+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strtol
+ (void) strtol;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strtol=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strtol=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtol" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strtol" >&6; }
+if test $ac_cv_have_decl_strtol = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOL 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOL 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether strtoul is declared" >&5
+echo $ECHO_N "checking whether strtoul is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strtoul+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strtoul
+ (void) strtoul;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strtoul=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strtoul=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoul" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strtoul" >&6; }
+if test $ac_cv_have_decl_strtoul = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOUL 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOUL 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether strtoll is declared" >&5
+echo $ECHO_N "checking whether strtoll is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strtoll+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strtoll
+ (void) strtoll;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strtoll=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strtoll=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoll" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strtoll" >&6; }
+if test $ac_cv_have_decl_strtoll = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOLL 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOLL 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether strtoimax is declared" >&5
+echo $ECHO_N "checking whether strtoimax is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strtoimax+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strtoimax
+ (void) strtoimax;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strtoimax=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strtoimax=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoimax" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strtoimax" >&6; }
+if test $ac_cv_have_decl_strtoimax = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOIMAX 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOIMAX 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether strtoumax is declared" >&5
+echo $ECHO_N "checking whether strtoumax is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strtoumax+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strtoumax
+ (void) strtoumax;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strtoumax=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strtoumax=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoumax" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strtoumax" >&6; }
+if test $ac_cv_have_decl_strtoumax = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOUMAX 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRTOUMAX 0
+_ACEOF
+
+
+fi
+
+
+
+
+
+for ac_header in limits.h stdlib.h inttypes.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-gnu-utils@gnu.org ##
+## ------------------------------------ ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ { echo "$as_me:$LINENO: checking whether <inttypes.h> defines strtoimax as a macro" >&5
+echo $ECHO_N "checking whether <inttypes.h> defines strtoimax as a macro... $ECHO_C" >&6; }
+if test "${jm_cv_func_strtoimax_macro+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <inttypes.h>
+#ifdef strtoimax
+ inttypes_h_defines_strtoimax
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "inttypes_h_defines_strtoimax" >/dev/null 2>&1; then
+ jm_cv_func_strtoimax_macro=yes
+else
+ jm_cv_func_strtoimax_macro=no
+fi
+rm -f conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $jm_cv_func_strtoimax_macro" >&5
+echo "${ECHO_T}$jm_cv_func_strtoimax_macro" >&6; }
+
+ if test "$jm_cv_func_strtoimax_macro" != yes; then
+
+for ac_func in strtoimax
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case " $LIBOBJS " in
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+ fi
+
+ case "$jm_cv_func_strtoimax_macro,$ac_cv_func_strtoimax" in
+ no,no)
+
+for ac_func in strtol
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case " $LIBOBJS " in
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+
+ if test "$ac_cv_type_long_long" = yes; then
+
+for ac_func in strtoll
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case " $LIBOBJS " in
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+ fi
+ ;;
+ esac
+
+
+{ echo "$as_me:$LINENO: checking for /etc/systemid" >&5
+echo $ECHO_N "checking for /etc/systemid... $ECHO_C" >&6; }
+if test -f /etc/systemid; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ETC_SYSTEMID 1
+_ACEOF
+
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+# Check whether --enable-uucode was given.
+if test "${enable_uucode+set}" = set; then
+ enableval=$enable_uucode;
+fi
+
+ if test "x$enable_uucode" != xno; then
+ UUCODE_TRUE=
+ UUCODE_FALSE='#'
+else
+ UUCODE_TRUE='#'
+ UUCODE_FALSE=
+fi
+
+
+
+
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+
+
+
+ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+ # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then
+ enableval=$enable_nls; USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi
+
+ { echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6; }
+
+
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGFMT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ { echo "$as_me:$LINENO: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$XGETTEXT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+ rm -f messages.po
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ { echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ { echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; }
+ GMSGFMT=":"
+ fi
+ fi
+
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ { echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6; }
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+
+ ac_config_commands="$ac_config_commands default-1"
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+ { echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2 or newer" >&5
+echo $ECHO_N "checking whether we are using the GNU C Library 2 or newer... $ECHO_C" >&6; }
+if test "${ac_cv_gnu_library_2+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+ Lucky GNU user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+ ac_cv_gnu_library_2=yes
+else
+ ac_cv_gnu_library_2=no
+fi
+rm -f conftest*
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2" >&5
+echo "${ECHO_T}$ac_cv_gnu_library_2" >&6; }
+
+ GLIBC2="$ac_cv_gnu_library_2"
+
+
+
+ { echo "$as_me:$LINENO: checking for signed" >&5
+echo $ECHO_N "checking for signed... $ECHO_C" >&6; }
+if test "${bh_cv_c_signed+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+signed char x;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ bh_cv_c_signed=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ bh_cv_c_signed=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $bh_cv_c_signed" >&5
+echo "${ECHO_T}$bh_cv_c_signed" >&6; }
+ if test $bh_cv_c_signed = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define signed
+_ACEOF
+
+ fi
+
+{ echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_off_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+typedef off_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+ return 0;
+if (sizeof (ac__type_new_))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_type_off_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_off_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
+if test $ac_cv_type_off_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+
+ { echo "$as_me:$LINENO: checking for long double" >&5
+echo $ECHO_N "checking for long double... $ECHO_C" >&6; }
+if test "${gt_cv_c_long_double+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$GCC" = yes; then
+ gt_cv_c_long_double=yes
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+ /* The Stardent Vistra knows sizeof(long double), but does not support it. */
+ long double foo = 0.0;
+ /* On Ultrix 4.3 cc, long double is 4 and double is 8. */
+ int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_c_long_double=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_c_long_double=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_c_long_double" >&5
+echo "${ECHO_T}$gt_cv_c_long_double" >&6; }
+ if test $gt_cv_c_long_double = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_DOUBLE 1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for wchar_t" >&5
+echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6; }
+if test "${gt_cv_c_wchar_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+ wchar_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_c_wchar_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_c_wchar_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5
+echo "${ECHO_T}$gt_cv_c_wchar_t" >&6; }
+ if test $gt_cv_c_wchar_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WCHAR_T 1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for wint_t" >&5
+echo $ECHO_N "checking for wint_t... $ECHO_C" >&6; }
+if test "${gt_cv_c_wint_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <wchar.h>
+ wint_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_c_wint_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_c_wint_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5
+echo "${ECHO_T}$gt_cv_c_wint_t" >&6; }
+ if test $gt_cv_c_wint_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WINT_T 1
+_ACEOF
+
+ fi
+
+
+
+ { echo "$as_me:$LINENO: checking whether printf() supports POSIX/XSI format strings" >&5
+echo $ECHO_N "checking whether printf() supports POSIX/XSI format strings... $ECHO_C" >&6; }
+if test "${gt_cv_func_printf_posix+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ if test "$cross_compiling" = yes; then
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+ notposix
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "notposix" >/dev/null 2>&1; then
+ gt_cv_func_printf_posix="guessing no"
+else
+ gt_cv_func_printf_posix="guessing yes"
+fi
+rm -f conftest*
+
+
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+ dollar expansion (possibly an autoconf bug). */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+ sprintf (buf, format, 33, 55);
+ return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_func_printf_posix=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gt_cv_func_printf_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_printf_posix" >&5
+echo "${ECHO_T}$gt_cv_func_printf_posix" >&6; }
+ case $gt_cv_func_printf_posix in
+ *yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_POSIX_PRINTF 1
+_ACEOF
+
+ ;;
+ esac
+
+
+
+for ac_header in stdlib.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-gnu-utils@gnu.org ##
+## ------------------------------------ ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in getpagesize
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ echo "$as_me:$LINENO: checking for working mmap" >&5
+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; }
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_mmap_fixed_mapped=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+ Here is a matrix of mmap possibilities:
+ mmap private not fixed
+ mmap private fixed at somewhere currently unmapped
+ mmap private fixed at somewhere already mapped
+ mmap shared not fixed
+ mmap shared fixed at somewhere currently unmapped
+ mmap shared fixed at somewhere already mapped
+ For private mappings, we should verify that changes cannot be read()
+ back from the file, nor mmap's back from the file at a different
+ address. (There have been systems where private was not correctly
+ implemented like the infamous i386 svr4.0, and systems where the
+ VM page cache was not coherent with the file system buffer cache
+ like early versions of FreeBSD and possibly contemporary NetBSD.)
+ For shared mappings, we should conversely verify that changes get
+ propagated back to all the places they're supposed to be.
+
+ Grep wants private fixed already mapped.
+ The main things grep needs to know about mmap are:
+ * does it exist and is it safe to write into the mmap'd area
+ * how to use it (BSD variants) */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h. */
+#ifndef HAVE_GETPAGESIZE
+/* Assume that all systems that can run configure have sys/param.h. */
+# ifndef HAVE_SYS_PARAM_H
+# define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+# define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else /* no EXEC_PAGESIZE */
+# ifdef NBPG
+# define getpagesize() NBPG * CLSIZE
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif /* no CLSIZE */
+# else /* no NBPG */
+# ifdef NBPC
+# define getpagesize() NBPC
+# else /* no NBPC */
+# ifdef PAGESIZE
+# define getpagesize() PAGESIZE
+# endif /* PAGESIZE */
+# endif /* no NBPC */
+# endif /* no NBPG */
+# endif /* no EXEC_PAGESIZE */
+# else /* no HAVE_SYS_PARAM_H */
+# define getpagesize() 8192 /* punt totally */
+# endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+ char *data, *data2, *data3;
+ int i, pagesize;
+ int fd;
+
+ pagesize = getpagesize ();
+
+ /* First, make a file with some known garbage in it. */
+ data = (char *) malloc (pagesize);
+ if (!data)
+ return 1;
+ for (i = 0; i < pagesize; ++i)
+ *(data + i) = rand ();
+ umask (0);
+ fd = creat ("conftest.mmap", 0600);
+ if (fd < 0)
+ return 1;
+ if (write (fd, data, pagesize) != pagesize)
+ return 1;
+ close (fd);
+
+ /* Next, try to mmap the file at a fixed address which already has
+ something else allocated at it. If we can, also make sure that
+ we see the same garbage. */
+ fd = open ("conftest.mmap", O_RDWR);
+ if (fd < 0)
+ return 1;
+ data2 = (char *) malloc (2 * pagesize);
+ if (!data2)
+ return 1;
+ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
+ if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0L))
+ return 1;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data2 + i))
+ return 1;
+
+ /* Finally, make sure that changes to the mapped area do not
+ percolate back to the file as seen by read(). (This is a bug on
+ some variants of i386 svr4.0.) */
+ for (i = 0; i < pagesize; ++i)
+ *(data2 + i) = *(data2 + i) + 1;
+ data3 = (char *) malloc (pagesize);
+ if (!data3)
+ return 1;
+ if (read (fd, data3, pagesize) != pagesize)
+ return 1;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data3 + i))
+ return 1;
+ close (fd);
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_mmap_fixed_mapped=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; }
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+fi
+rm -f conftest.mmap
+
+
+ { echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
+echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6; }
+if test "${ac_cv_gnu_library_2_1+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+ Lucky GNU user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+ ac_cv_gnu_library_2_1=yes
+else
+ ac_cv_gnu_library_2_1=no
+fi
+rm -f conftest*
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5
+echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6; }
+
+ GLIBC21="$ac_cv_gnu_library_2_1"
+
+
+
+
+ { echo "$as_me:$LINENO: checking whether integer division by zero raises SIGFPE" >&5
+echo $ECHO_N "checking whether integer division by zero raises SIGFPE... $ECHO_C" >&6; }
+if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ if test "$cross_compiling" = yes; then
+
+ # Guess based on the CPU.
+ case "$host_cpu" in
+ alpha* | i3456786 | m68k | s390*)
+ gt_cv_int_divbyzero_sigfpe="guessing yes";;
+ *)
+ gt_cv_int_divbyzero_sigfpe="guessing no";;
+ esac
+
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+ /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
+ exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+ signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+ signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL. */
+#if defined (__sparc__) && defined (__linux__)
+ signal (SIGILL, sigfpe_handler);
+#endif
+
+ z = x / y;
+ nan = y / y;
+ exit (1);
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_int_divbyzero_sigfpe=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gt_cv_int_divbyzero_sigfpe=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_int_divbyzero_sigfpe" >&5
+echo "${ECHO_T}$gt_cv_int_divbyzero_sigfpe" >&6; }
+ case "$gt_cv_int_divbyzero_sigfpe" in
+ *yes) value=1;;
+ *) value=0;;
+ esac
+
+cat >>confdefs.h <<_ACEOF
+#define INTDIV0_RAISES_SIGFPE $value
+_ACEOF
+
+
+
+ { echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; }
+if test "${gt_cv_header_inttypes_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <inttypes.h>
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_header_inttypes_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_header_inttypes_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$gt_cv_header_inttypes_h" >&6; }
+ if test $gt_cv_header_inttypes_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H 1
+_ACEOF
+
+ fi
+
+
+
+ if test $gt_cv_header_inttypes_h = yes; then
+ { echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5
+echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6; }
+if test "${gt_cv_inttypes_pri_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ gt_cv_inttypes_pri_broken=no
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_inttypes_pri_broken=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5
+echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6; }
+ fi
+ if test "$gt_cv_inttypes_pri_broken" = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define PRI_MACROS_BROKEN 1
+_ACEOF
+
+ fi
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-gnu-utils@gnu.org ##
+## ------------------------------------ ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ { echo "$as_me:$LINENO: checking for SIZE_MAX" >&5
+echo $ECHO_N "checking for SIZE_MAX... $ECHO_C" >&6; }
+ result=
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Found it" >/dev/null 2>&1; then
+ result=yes
+fi
+rm -f conftest*
+
+ if test -z "$result"; then
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) res_hi=$ac_lo;;
+'') result=? ;;
+esac
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+static long int longval () { return ~(size_t)0 / 10; }
+static unsigned long int ulongval () { return ~(size_t)0 / 10; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if ((~(size_t)0 / 10) < 0)
+ {
+ long int i = longval ();
+ if (i != (~(size_t)0 / 10))
+ return 1;
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != (~(size_t)0 / 10))
+ return 1;
+ fprintf (f, "%lu\n", i);
+ }
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ res_hi=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+result=?
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) res_lo=$ac_lo;;
+'') result=? ;;
+esac
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+static long int longval () { return ~(size_t)0 % 10; }
+static unsigned long int ulongval () { return ~(size_t)0 % 10; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if ((~(size_t)0 % 10) < 0)
+ {
+ long int i = longval ();
+ if (i != (~(size_t)0 % 10))
+ return 1;
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != (~(size_t)0 % 10))
+ return 1;
+ fprintf (f, "%lu\n", i);
+ }
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ res_lo=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+result=?
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) fits_in_uint=$ac_lo;;
+'') result=? ;;
+esac
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+static long int longval () { return sizeof (size_t) <= sizeof (unsigned int); }
+static unsigned long int ulongval () { return sizeof (size_t) <= sizeof (unsigned int); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if ((sizeof (size_t) <= sizeof (unsigned int)) < 0)
+ {
+ long int i = longval ();
+ if (i != (sizeof (size_t) <= sizeof (unsigned int)))
+ return 1;
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != (sizeof (size_t) <= sizeof (unsigned int)))
+ return 1;
+ fprintf (f, "%lu\n", i);
+ }
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ fits_in_uint=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+result=?
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+
+ if test "$fits_in_uint" = 1; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stddef.h>
+ extern size_t foo;
+ extern unsigned long foo;
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ fits_in_uint=0
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test -z "$result"; then
+ if test "$fits_in_uint" = 1; then
+ result="$res_hi$res_lo"U
+ else
+ result="$res_hi$res_lo"UL
+ fi
+ else
+ result='~(size_t)0'
+ fi
+ fi
+ { echo "$as_me:$LINENO: result: $result" >&5
+echo "${ECHO_T}$result" >&6; }
+ if test "$result" != yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define SIZE_MAX $result
+_ACEOF
+
+ fi
+
+
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-gnu-utils@gnu.org ##
+## ------------------------------------ ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ { echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
+echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -framework CoreFoundation"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
+_ACEOF
+
+ fi
+ { echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
+echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -framework CoreFoundation"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ gt_cv_func_CFLocaleCopyCurrent=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_CFLocaleCopyCurrent=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFLOCALECOPYCURRENT 1
+_ACEOF
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
+
+
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | [A-Za-z]:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+ { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
+if test "${acl_cv_rpath+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6; }
+ wl="$acl_cv_wl"
+ libext="$acl_cv_libext"
+ shlibext="$acl_cv_shlibext"
+ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ hardcode_direct="$acl_cv_hardcode_direct"
+ hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+ enableval=$enable_rpath; :
+else
+ enable_rpath=yes
+fi
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+ withval=$with_libiconv_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
+ fi
+ fi
+
+fi
+
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='iconv '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+ fi
+ if test "$hardcode_minus_L" != no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+
+
+ { echo "$as_me:$LINENO: checking for ptrdiff_t" >&5
+echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_ptrdiff_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+typedef ptrdiff_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+ return 0;
+if (sizeof (ac__type_new_))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_type_ptrdiff_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_ptrdiff_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5
+echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6; }
+if test $ac_cv_type_ptrdiff_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define ptrdiff_t long
+_ACEOF
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-gnu-utils@gnu.org ##
+## ------------------------------------ ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in asprintf fwprintf getcwd getegid geteuid getgid getuid \
+mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
+strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
+__fsetlocking
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+ { echo "$as_me:$LINENO: checking whether _snprintf is declared" >&5
+echo $ECHO_N "checking whether _snprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl__snprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef _snprintf
+ char *p = (char *) _snprintf;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl__snprintf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl__snprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl__snprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl__snprintf" >&6; }
+ if test $ac_cv_have_decl__snprintf = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNPRINTF $gt_value
+_ACEOF
+
+
+
+ { echo "$as_me:$LINENO: checking whether _snwprintf is declared" >&5
+echo $ECHO_N "checking whether _snwprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl__snwprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef _snwprintf
+ char *p = (char *) _snwprintf;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl__snwprintf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl__snwprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl__snwprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl__snwprintf" >&6; }
+ if test $ac_cv_have_decl__snwprintf = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNWPRINTF $gt_value
+_ACEOF
+
+
+
+
+ { echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5
+echo $ECHO_N "checking whether feof_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef feof_unlocked
+ char *p = (char *) feof_unlocked;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_feof_unlocked=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_feof_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_feof_unlocked" >&6; }
+ if test $ac_cv_have_decl_feof_unlocked = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FEOF_UNLOCKED $gt_value
+_ACEOF
+
+
+
+ { echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5
+echo $ECHO_N "checking whether fgets_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef fgets_unlocked
+ char *p = (char *) fgets_unlocked;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_fgets_unlocked=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_fgets_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fgets_unlocked" >&6; }
+ if test $ac_cv_have_decl_fgets_unlocked = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FGETS_UNLOCKED $gt_value
+_ACEOF
+
+
+
+ { echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
+echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef getc_unlocked
+ char *p = (char *) getc_unlocked;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_getc_unlocked=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_getc_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; }
+ if test $ac_cv_have_decl_getc_unlocked = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED $gt_value
+_ACEOF
+
+
+
+ case $gt_cv_func_printf_posix in
+ *yes) HAVE_POSIX_PRINTF=1 ;;
+ *) HAVE_POSIX_PRINTF=0 ;;
+ esac
+
+ if test "$ac_cv_func_asprintf" = yes; then
+ HAVE_ASPRINTF=1
+ else
+ HAVE_ASPRINTF=0
+ fi
+
+ if test "$ac_cv_func_snprintf" = yes; then
+ HAVE_SNPRINTF=1
+ else
+ HAVE_SNPRINTF=0
+ fi
+
+ if test "$ac_cv_func_wprintf" = yes; then
+ HAVE_WPRINTF=1
+ else
+ HAVE_WPRINTF=0
+ fi
+
+
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+
+ { echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
+if test "${am_cv_func_iconv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ am_cv_func_iconv=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6; }
+ if test "$am_cv_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
+ { echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6; }
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+ if test "$am_cv_func_iconv" = yes; then
+ { echo "$as_me:$LINENO: checking for iconv declaration" >&5
+echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; }
+ if test "${am_cv_proto_iconv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ am_cv_proto_iconv_arg1=""
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ am_cv_proto_iconv_arg1="const"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+ am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ { echo "$as_me:$LINENO: result: ${ac_t:-
+ }$am_cv_proto_iconv" >&5
+echo "${ECHO_T}${ac_t:-
+ }$am_cv_proto_iconv" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
+echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6; }
+if test "${am_cv_langinfo_codeset+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ am_cv_langinfo_codeset=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ am_cv_langinfo_codeset=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
+echo "${ECHO_T}$am_cv_langinfo_codeset" >&6; }
+ if test $am_cv_langinfo_codeset = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LANGINFO_CODESET 1
+_ACEOF
+
+ fi
+
+ if test $ac_cv_header_locale_h = yes; then
+
+ { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
+echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; }
+if test "${gt_cv_val_LC_MESSAGES+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <locale.h>
+int
+main ()
+{
+return LC_MESSAGES
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ gt_cv_val_LC_MESSAGES=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_val_LC_MESSAGES=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_val_LC_MESSAGES" >&5
+echo "${ECHO_T}$gt_cv_val_LC_MESSAGES" >&6; }
+ if test $gt_cv_val_LC_MESSAGES = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LC_MESSAGES 1
+_ACEOF
+
+ fi
+
+ fi
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+ fi
+
+ for ac_prog in bison
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_INTLBISON+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$INTLBISON"; then
+ ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_INTLBISON="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+INTLBISON=$ac_cv_prog_INTLBISON
+if test -n "$INTLBISON"; then
+ { echo "$as_me:$LINENO: result: $INTLBISON" >&5
+echo "${ECHO_T}$INTLBISON" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$INTLBISON" && break
+done
+
+ if test -z "$INTLBISON"; then
+ ac_verc_fail=yes
+ else
+ { echo "$as_me:$LINENO: checking version of bison" >&5
+echo $ECHO_N "checking version of bison... $ECHO_C" >&6; }
+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ esac
+ { echo "$as_me:$LINENO: result: $ac_prog_version" >&5
+echo "${ECHO_T}$ac_prog_version" >&6; }
+ fi
+ if test $ac_verc_fail = yes; then
+ INTLBISON=:
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
+echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -framework CoreFoundation"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
+_ACEOF
+
+ fi
+ { echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
+echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -framework CoreFoundation"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ gt_cv_func_CFLocaleCopyCurrent=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_CFLocaleCopyCurrent=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFLOCALECOPYCURRENT 1
+_ACEOF
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
+
+
+
+ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+ # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then
+ enableval=$enable_nls; USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi
+
+ { echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6; }
+
+
+
+
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+
+ { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5
+echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; }
+
+# Check whether --with-included-gettext was given.
+if test "${with_included_gettext+set}" = set; then
+ withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval
+else
+ nls_cv_force_use_gnu_gettext=no
+fi
+
+ { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5
+echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; }
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+
+
+
+
+
+
+ { echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6; }
+if test "${gt_cv_func_gnugettext1_libc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ gt_cv_func_gnugettext1_libc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_gnugettext1_libc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6; }
+
+ if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then
+ withval=$with_libintl_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
+ fi
+ fi
+
+fi
+
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='intl '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$hardcode_direct" = yes; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+ fi
+ if test "$hardcode_minus_L" != no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+ done
+ fi
+
+ { echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
+echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6; }
+if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ gt_cv_func_gnugettext1_libintl=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ gt_cv_func_gnugettext1_libintl=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ gt_cv_func_gnugettext1_libintl=yes
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6; }
+ fi
+
+ if test "$gt_cv_func_gnugettext1_libc" = "yes" \
+ || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV"
+ LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ CATOBJEXT=.gmo
+ fi
+
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ { echo "$as_me:$LINENO: checking whether to use NLS" >&5
+echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6; }
+ { echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6; }
+ if test "$USE_NLS" = "yes"; then
+ { echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
+echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6; }
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ { echo "$as_me:$LINENO: result: $gt_source" >&5
+echo "${ECHO_T}$gt_source" >&6; }
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ { echo "$as_me:$LINENO: checking how to link with libintl" >&5
+echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6; }
+ { echo "$as_me:$LINENO: result: $LIBINTL" >&5
+echo "${ECHO_T}$LIBINTL" >&6; }
+
+ for element in $INCINTL; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+ fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DCGETTEXT 1
+_ACEOF
+
+ fi
+
+ POSUB=po
+ fi
+
+
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+
+
+
+
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ DATADIRNAME=share
+
+
+ INSTOBJEXT=.mo
+
+
+ GENCAT=gencat
+
+
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+
+
+ INTL_LIBTOOL_SUFFIX_PREFIX=
+
+
+
+ INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking if malloc debugging is wanted" >&5
+echo $ECHO_N "checking if malloc debugging is wanted... $ECHO_C" >&6; }
+
+# Check whether --with-dmalloc was given.
+if test "${with_dmalloc+set}" = set; then
+ withval=$with_dmalloc; if test "$withval" = yes; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define WITH_DMALLOC 1
+_ACEOF
+
+ LIBS="$LIBS -ldmalloc"
+ LDFLAGS="$LDFLAGS -g"
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+# sharutils is somewhat special about internationalization in that it
+# always requires the GNU .mo files installed.
+if test "x$CATOBJEXT" = "x.mo" || test "x$CATOBJEXT" = "x.cat"; then
+ new_CATALOGS=""
+ for cat in $CATALOGS; do
+ lang=`echo $cat | sed "s/\(.*\)\..*/\1/"`
+ new_CATALOGS="$new_CATALOGS $cat $lang.gmo"
+ done
+ CATALOGS="$new_CATALOGS"
+fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _GNU_SOURCE 1
+_ACEOF
+
+
+ac_config_files="$ac_config_files contrib/Makefile doc/Makefile intl/Makefile lib/Makefile po/Makefile.in src/Makefile src/mail-files src/mailshar tests/Makefile Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${UUCODE_TRUE}" && test -z "${UUCODE_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"UUCODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"UUCODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by sharutils $as_me 4.7, which was
+generated by GNU Autoconf 2.61. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+sharutils config.status 4.7
+configured by $0, generated by GNU Autoconf 2.61,
+ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ echo "$ac_cs_version"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ { echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ CONFIG_SHELL=$SHELL
+ export CONFIG_SHELL
+ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "src/remsync") CONFIG_FILES="$CONFIG_FILES src/remsync" ;;
+ "src/compress-dummy") CONFIG_FILES="$CONFIG_FILES src/compress-dummy" ;;
+ "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "intl/Makefile") CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;;
+ "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "src/mail-files") CONFIG_FILES="$CONFIG_FILES src/mail-files" ;;
+ "src/mailshar") CONFIG_FILES="$CONFIG_FILES src/mailshar" ;;
+ "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+am__isrc!$am__isrc$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+DIST_ALPHA!$DIST_ALPHA$ac_delim
+ADD_SCRIPT!$ADD_SCRIPT$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+am__include!$am__include$ac_delim
+am__quote!$am__quote$ac_delim
+AMDEP_TRUE!$AMDEP_TRUE$ac_delim
+AMDEP_FALSE!$AMDEP_FALSE$ac_delim
+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
+RANLIB!$RANLIB$ac_delim
+DIFF!$DIFF$ac_delim
+MAILER!$MAILER$ac_delim
+PERL!$PERL$ac_delim
+SH!$SH$ac_delim
+TAR!$TAR$ac_delim
+COMPRESS!$COMPRESS$ac_delim
+INSTALL_COMPRESS_LINK!$INSTALL_COMPRESS_LINK$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+DIRENT_HEADER!$DIRENT_HEADER$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+ALLOCA!$ALLOCA$ac_delim
+UUCODE_TRUE!$UUCODE_TRUE$ac_delim
+UUCODE_FALSE!$UUCODE_FALSE$ac_delim
+MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim
+USE_NLS!$USE_NLS$ac_delim
+MSGFMT!$MSGFMT$ac_delim
+GMSGFMT!$GMSGFMT$ac_delim
+_ACEOF
+
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+ ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+XGETTEXT!$XGETTEXT$ac_delim
+MSGMERGE!$MSGMERGE$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+GLIBC2!$GLIBC2$ac_delim
+GLIBC21!$GLIBC21$ac_delim
+INTL_MACOSX_LIBS!$INTL_MACOSX_LIBS$ac_delim
+HAVE_POSIX_PRINTF!$HAVE_POSIX_PRINTF$ac_delim
+HAVE_ASPRINTF!$HAVE_ASPRINTF$ac_delim
+HAVE_SNPRINTF!$HAVE_SNPRINTF$ac_delim
+HAVE_WPRINTF!$HAVE_WPRINTF$ac_delim
+LIBICONV!$LIBICONV$ac_delim
+LTLIBICONV!$LTLIBICONV$ac_delim
+INTLBISON!$INTLBISON$ac_delim
+BUILD_INCLUDED_LIBINTL!$BUILD_INCLUDED_LIBINTL$ac_delim
+USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim
+CATOBJEXT!$CATOBJEXT$ac_delim
+DATADIRNAME!$DATADIRNAME$ac_delim
+INSTOBJEXT!$INSTOBJEXT$ac_delim
+GENCAT!$GENCAT$ac_delim
+INTLOBJS!$INTLOBJS$ac_delim
+INTL_LIBTOOL_SUFFIX_PREFIX!$INTL_LIBTOOL_SUFFIX_PREFIX$ac_delim
+INTLLIBS!$INTLLIBS$ac_delim
+LIBINTL!$LIBINTL$ac_delim
+LTLIBINTL!$LTLIBINTL$ac_delim
+POSUB!$POSUB$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 33; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+ ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+ { (exit 1); exit 1; }; };;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ ac_file_inputs="$ac_file_inputs $ac_f"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input="Generated from "`IFS=:
+ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ fi
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin";;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir="$ac_dir"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ { (exit 1); exit 1; }; }; }
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out"; rm -f "$tmp/out";;
+ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+ esac
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status. If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless. But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*'
+ac_dB='\\)[ (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+ sed -n '
+ t rset
+ :rset
+ s/^[ ]*#[ ]*define[ ][ ]*//
+ t ok
+ d
+ :ok
+ s/[\\&,]/\\&/g
+ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+ ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[ #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+ # Write a here document:
+ cat >>$CONFIG_STATUS <<_ACEOF
+ # First, check the format of the line:
+ cat >"\$tmp/defines.sed" <<\\CEOF
+/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def
+/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def
+b
+:def
+_ACEOF
+ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+ grep . conftest.tail >/dev/null || break
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
+ if test x"$ac_file" != x-; then
+ echo "/* $configure_input */" >"$tmp/config.h"
+ cat "$ac_result" >>"$tmp/config.h"
+ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f $ac_file
+ mv "$tmp/config.h" $ac_file
+ fi
+ else
+ echo "/* $configure_input */"
+ cat "$ac_result"
+ fi
+ rm -f "$tmp/out12"
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $ac_file | $ac_file:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $ac_file" >`$as_dirname -- $ac_file ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X$ac_file : 'X\(//\)[^/]' \| \
+ X$ac_file : 'X\(//\)$' \| \
+ X$ac_file : 'X\(/\)' \| . 2>/dev/null ||
+echo X$ac_file |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir=$dirpart/$fdir
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ { (exit 1); exit 1; }; }; }
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+ ;;
+ "default-1":C)
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+
+ esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..6f79195
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,144 @@
+# Configure template for GNU shar utilities.
+# Copyright (C) 1994, 1995, 1996, 2002, 2005 Free Software Foundation, Inc.
+# Process this file with autoconf to produce a configure script.
+dnl
+dnl FIXME: AC_CHECK_HEADERS([sys/time.h])
+dnl FIXME: AC_CHECK_FUNCS([gethostname getwd])
+dnl
+m4_include([version.m4])
+AC_INIT([sharutils], sharutils_version, sharutils_eaddr)
+AC_CONFIG_SRCDIR([src/shar.c])
+AC_CONFIG_HEADERS([config.h])
+
+AM_INIT_AUTOMAKE([1.10 gnits dist-bzip2])
+AC_SUBST(DIST_ALPHA)
+
+dnl AC_ARG_PROGRAM
+
+AC_SUBST(ADD_SCRIPT, ["mail-files mailshar"])
+
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+
+dnl FIXME: Check that it is GNU diff indeed.
+# Carefully avoid gdiff for X as found on SGI systems.
+if (DISPLAY= gdiff /dev/null /dev/null) 2> /dev/null; then
+ AC_PATH_PROGS(DIFF, gnudiff diffgnu gdiff diff, no)
+else
+ AC_PATH_PROGS(DIFF, gnudiff diffgnu diff, no)
+fi
+
+dnl FIXME: Check that mailer accepts -s.
+PATH_save="$PATH"; PATH="$PATH:/usr/sbin:/usr/ucb:/usr/bin:/bin"
+AC_PATH_PROGS(MAILER, Mail mailx elm mush mail, no)
+PATH="$PATH_save"
+
+dnl FIXME: Check that perl was found.
+AC_PATH_PROG(PERL, perl, no)
+
+AC_PATH_PROGS(SH, bash sh, no)
+
+dnl FIXME: Check that it is GNU tar indeed.
+AC_PATH_PROGS(TAR, gnutar targnu gtar tar, tar)
+
+if test $ac_cv_path_PERL != no; then
+ ADD_SCRIPT="$ADD_SCRIPT remsync"
+ AC_CONFIG_FILES([src/remsync])
+fi
+
+dnl in m4/sharutils.m4
+ke_CHECK_COMPRESS_AND_LINK
+
+AC_AIX
+AC_ISC_POSIX
+AC_MINIX
+
+AC_SYS_LARGEFILE
+if test $cross_compiling = no; then
+ AC_C_CHAR_UNSIGNED
+fi
+AC_C_CONST
+AC_C_INLINE
+AC_C_BIGENDIAN
+
+AC_CHECK_HEADERS(limits.h locale.h memory.h string.h sys/wait.h unistd.h)
+AC_HEADER_DIRENT
+[test X$ac_header_dirent = Xno && {]
+ AC_MSG_ERROR([a dirent header is required.])
+[}
+DIRENT_HEADER=\<${ac_header_dirent}\>]
+AC_DEFINE_UNQUOTED(DIRENT_HEADER, [${DIRENT_HEADER}],
+ [define to directory entry header file])
+AC_SUBST(DIRENT_HEADER)
+AC_HEADER_STAT
+AC_HEADER_STDC
+AC_STRUCT_TIMEZONE
+AC_TYPE_SIZE_T
+
+jm_PREREQ_ERROR
+jm_FUNC_MALLOC
+jm_FUNC_REALLOC
+AC_CHECK_FUNCS(fchmod getcwd isascii memcpy strchr strerror uname)
+AC_FUNC_ALLOCA
+AC_FUNC_CLOSEDIR_VOID
+AC_FUNC_FSEEKO
+AC_FUNC_STRFTIME
+AC_FUNC_VPRINTF
+AC_REPLACE_FUNCS(memset mktime stpcpy strftime)
+jm_AC_PREREQ_XSTRTOIMAX
+
+AC_MSG_CHECKING(for /etc/systemid)
+if test -f /etc/systemid; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE([HAVE_ETC_SYSTEMID], 1,
+ [Define if the current hostname may be found in /etc/systemid.])
+else
+ AC_MSG_RESULT(no)
+fi
+
+AC_ARG_ENABLE(uucode,
+ [AS_HELP_STRING([--disable-uucode],
+ [disable installation of uuencode and uudecode])])
+AM_CONDITIONAL([UUCODE], [test "x$enable_uucode" != xno])
+
+AM_GNU_GETTEXT
+AM_GNU_GETTEXT_VERSION([0.14.5])
+AM_WITH_DMALLOC
+
+# sharutils is somewhat special about internationalization in that it
+# always requires the GNU .mo files installed.
+if test "x$CATOBJEXT" = "x.mo" || test "x$CATOBJEXT" = "x.cat"; then
+ new_CATALOGS=""
+ for cat in $CATALOGS; do
+ lang=`echo $cat | sed "s/\(.*\)\..*/\1/"`
+ new_CATALOGS="$new_CATALOGS $cat $lang.gmo"
+ done
+ CATALOGS="$new_CATALOGS"
+fi
+
+AC_DEFINE(_GNU_SOURCE, 1, [Make sure we see all GNU extensions.])
+
+AC_CONFIG_FILES([
+ contrib/Makefile
+ doc/Makefile
+ intl/Makefile
+ lib/Makefile
+ po/Makefile.in
+ src/Makefile
+ src/mail-files
+ src/mailshar
+ tests/Makefile
+ Makefile
+])
+AC_OUTPUT
+dnl Local Variables:
+dnl mode: autoconf-mode
+dnl tab-width: 8
+dnl indent-tabs-mode: nil
+dnl sh-indentation: 2
+dnl sh-basic-offset: 2
+dnl End:
+dnl
+dnl end of configure.ac
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
new file mode 100644
index 0000000..04ad5b9
--- /dev/null
+++ b/contrib/Makefile.am
@@ -0,0 +1,21 @@
+## Makefile for the contrib subdirectory of the GNU Shar utilities.
+## Copyright (C) 1995, 1996, 2007 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 3, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+## Process this file with automake to produce Makefile.in.
+
+EXTRA_DIST = shar.sh shar2.sh bas-README uudecode.bas pas-README \
+pas-R.Marks uudecode.pas uuencode.pas uudecode.pl uuencode.pl
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
new file mode 100644
index 0000000..cdef580
--- /dev/null
+++ b/contrib/Makefile.in
@@ -0,0 +1,359 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = contrib
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/realloc.m4 \
+ $(top_srcdir)/m4/sharutils.m4 $(top_srcdir)/m4/signed.m4 \
+ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrtoimax.m4 \
+ $(top_srcdir)/version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_SCRIPT = @ADD_SCRIPT@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMPRESS = @COMPRESS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DIFF = @DIFF@
+DIRENT_HEADER = @DIRENT_HEADER@
+DIST_ALPHA = @DIST_ALPHA@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+INSTALL = @INSTALL@
+INSTALL_COMPRESS_LINK = @INSTALL_COMPRESS_LINK@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAILER = @MAILER@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SH = @SH@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TAR = @TAR@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = shar.sh shar2.sh bas-README uudecode.bas pas-README \
+pas-R.Marks uudecode.pas uuencode.pas uudecode.pl uuencode.pl
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits contrib/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnits contrib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/bas-README b/contrib/bas-README
new file mode 100644
index 0000000..e1c787d
--- /dev/null
+++ b/contrib/bas-README
@@ -0,0 +1,25 @@
+Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site hoptoad.uucp
+From: rde@ukc.ac.uk (R.D.Eager)
+Newsgroups: net.sources
+Subject: Revised UUDECODE in MS-BASIC
+Date: 14 Mar 86 11:53:53 GMT
+Date-Received: 15 Mar 86 13:45:45 GMT
+Reply-To: rde@ukc.ac.uk (R.D.Eager)
+
+A while ago I posted a UUDECODE program, written in Microsoft Basic,
+to net.sources. Judging from the number of replies I had, people
+are finding this useful if they don't have access to the public
+domain UUDECODE, or to a C compiler.
+
+I found one or two problems recently; the main one was that it would
+not create an output file of more than 64K due to an undocumented
+feature of MS-BASIC. Here is a corrected version; as always, I
+suggest you compile it if you want the run time to be finite.
+
+ Bob Eager
+
+ rde@ukc.UUCP
+ rde@ukc
+ ...!mcvax!ukc!rde
+
+ Phone: +44 227 66822 ext 7589
diff --git a/contrib/pas-R.Marks b/contrib/pas-R.Marks
new file mode 100644
index 0000000..915ad89
--- /dev/null
+++ b/contrib/pas-R.Marks
@@ -0,0 +1,25 @@
+From: rmarks@KSP.Unisys.COM (Richard Marks)
+Newsgroups: comp.binaries.ibm.pc.archives
+Subject: UUENCODE/DECODE 4.20
+Date: 14 Aug 91 14:26:44 GMT
+
+I have just send in my latest UUENCODE/DECODE package to c.b.i.p
+for posting. This is level 4.20.
+
+This package has been out for four years. It is fast and it automatically
+handles multi-section decoding - with automatic CRC testing. Just
+save submissions as foo1.uue, foo2.uue, etc.; download to the PC; and
+enter UUDECODE FOO.
+
+Also this package handles lots of variations in checksums and character
+permutations. This includes XXencode/decode.
+
+The 4.20 version replaces the 4.13 version. It is a minor update with
+some improved error messages, beeping to alert for errors, and detection
+of some additional character permutations. Also the prior default for the
+encode was to put a checksum on each line; now with the use of full file
+CRC's, the default has been changed to turn this off.
+
+Regards,
+Richard Marks
+rmarks@MDC.unisys.COM
diff --git a/contrib/pas-README b/contrib/pas-README
new file mode 100644
index 0000000..0a31d26
--- /dev/null
+++ b/contrib/pas-README
@@ -0,0 +1,45 @@
+Here are versions of uuencode and uudecode that will work on an IBM
+PC. There is a version for Turbo Pascal and one for Microsoft C.
+Porting them into other machines, languages or dialects should not
+pose a large problem.
+
+Sorry about the lack of documentation, but the programs are easy to
+use, so you should not have a problem. I don't know why a UNIX
+site would not have these in the first place, but at least your
+manual should tell you how to use them. If you are not using UNIX
+at all, you have my sympathy.
+
+The Pascal programs' author is unknown. The C programs were
+provided by Don Kneller.
+
+Tom Reingold
+Rockefeller University
+New York City
+UUCP: {seismo | harvard | ihnp4}!cmcl2!rna!rocky2!reintom
+BITNET: REINTOM@ROCKVAX
+ARPANET: reintom@rockefeller.arpa
+
+======================================================================
+
+Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site hoptoad.uucp
+From: darmon@polaris.UUCP (Pierre Darmon)
+Newsgroups: net.sources
+Subject: Modified Turbo Pascal uudecode/encode. More user-friendly.
+Date: 30 Oct 86 01:12:40 GMT
+Date-Received:
+Reply-To: darmon@polaris.UUCP (Pierre Darmon)
+Organization: IBM Research, Yorktown Heights, N.Y.
+
+The following are the Turbo Pascal source files for uudecode and uuencode,
+modified from the net posting to display the remaining bytes to be processed,
+instead of filling up the screen with periods. It also displays the percentage
+left. See my previous posting to net.micro,net.micro.pc and net.sources for
+details.
+
+Enjoy!
+
+--
+
+Pierre Darmon, IBM Thomas J. Watson Research Center.
+.....seismo!philabs!polaris!darmon.
+darmon.yktvmz.ibm@csnet-relay
diff --git a/contrib/shar.sh b/contrib/shar.sh
new file mode 100644
index 0000000..3a9783a
--- /dev/null
+++ b/contrib/shar.sh
@@ -0,0 +1,176 @@
+#!/bin/sh
+# UNISRC_ID: @(#)shar.sh 27.1 84/12/17
+: Make a shell archive package
+
+# Usage: $0 [-b] [-c] [-t] [-v] files... > package
+# See the manual entry for details.
+
+
+# Initialize:
+
+diagnostic='eval echo >&2' # diagnostics to stderr by default.
+trap '$diagnostic "$0: quitting early"; exit 1' 1 2 3 15
+base_option=FALSE # use pathnames, not basenames.
+check_option=FALSE # don't generate integrity check.
+USAGE='Usage: $0 \[-b] \[-c] \[-t] \[-v] files... \> package'
+
+
+# Extract and digest options, if any:
+#
+# Un-comment the "-)" line below to treat single dashes as a no-op.
+# Commented means single dashes elicit a usage diagnostic.
+
+while [ -n "$1" ] # while there are more arguments,
+do # digest them; stop when you find a non-option.
+ case "$1" in
+ -b) base_option=TRUE; shift;;
+ -c) check_option=TRUE; shift;;
+ -v) verbose=TRUE; shift;;
+ -t) verbose=TRUE; diagnostic='eval echo >/dev/tty'; shift;;
+### -) shift;; # if uncommented, eat single dashes.
+ -*) $diagnostic $USAGE; exit 1;; # die at illegal options.
+ *) break;; # non-option found.
+ esac
+done
+
+
+# Check remaining arguments, which should be just a list of files:
+
+if [ $# = 0 ]
+then # no arguments left!
+ $diagnostic $USAGE
+ exit 1
+fi
+
+
+# Check the cupboard to see if the ingredients are all there:
+
+contents='' # no files so far.
+contdirs='' # no directories so far.
+
+for arg # for all files specified,
+do # establish the archive name.
+ if [ -f "$arg" ]
+ then # file exists and is not a directory.
+ case $base_option in
+ TRUE) unpack_name=`basename "$arg"` ;;
+ FALSE) unpack_name="$arg" ;;
+ esac
+
+ contents="$contents $unpack_name"
+
+ elif [ -d "$arg" ]
+ then # file exists and is a directory.
+ case $base_option in
+ TRUE) $diagnostic '$0: cannot archive directory "$arg" with -b option.'
+ exit 1 ;;
+ FALSE) contdirs="$contdirs $arg/ " ;;
+ esac
+
+ else # not a plain file and not a directory.
+ $diagnostic '$0: cannot archive "$arg"'
+ exit 1
+ fi
+done
+
+
+# Emit the prologue:
+# (The leading newline is for those who type csh instead of sh.)
+
+cat <<!!!
+
+# This is a shell archive. Remove anything before this line,
+# then unpack it by saving it in a file and typing "sh file".
+#
+# Wrapped by `who am i | sed 's/[ ].*//'` on `date`
+!!!
+
+
+# Emit the list of ingredients:
+
+# Simple version (breaks if you shar lots of files at once):
+# echo "# Contents: $contdirs$contents"
+#
+# Complex and cosmetic version to pack contents list onto lines that fit on
+# one terminal line ("expr string : .*" prints the length of the string):
+
+MAX=80
+line='# Contents: '
+for item in $contdirs $contents
+do
+ if [ `expr "$line" : '.*' + 1 + "$item" : '.*'` -lt $MAX ]
+ then # length of old line + new item is short enough,
+ line="$line $item" # so just append it.
+
+ else # new element makes line too long,
+ echo "$line" # so put it on a new line.
+ line="# $item" # start a new line.
+ MAX=74 # compensate for tab width.
+ fi
+done
+
+echo "$line"
+echo " "
+
+
+# Emit the files and their separators:
+
+for arg
+do
+ # Decide which name to archive under.
+ case $base_option in
+ TRUE) unpack_name=`basename "$arg"`
+ test $verbose && $diagnostic "a - $unpack_name [from $arg]" ;;
+ FALSE) unpack_name="$arg"
+ test $verbose && $diagnostic "a - $arg" ;;
+ esac
+
+ # Emit either a mkdir or a cat/sed to extract the file.
+ if [ -d "$arg" ]
+ then
+ echo "echo mkdir - $arg"
+ echo "mkdir $arg"
+ else
+ echo "echo x - $unpack_name"
+ separator="@//E*O*F $unpack_name//"
+ echo "sed 's/^@//' > \"$unpack_name\" <<'$separator'"
+ sed -e 's/^[.~@]/@&/' -e 's/^From/@&/' "$arg"
+ echo $separator
+ fi
+
+ # Emit chmod to set permissions on the extracted file;
+ # this keels over if the filename contains "?".
+ ls -ld $arg | sed \
+ -e 's/^.\(...\)\(...\)\(...\).*/u=\1,g=\2,o=\3/' \
+ -e 's/-//g' \
+ -e 's?.*?chmod & '"$unpack_name?"
+ echo " "
+done
+
+
+# If the -c option was given, emit the checking epilogue:
+# (The sed script converts files to basenames so it works regardless of -b.)
+
+if [ $check_option = TRUE ]
+then
+ echo 'echo Inspecting for damage in transit...'
+ echo 'temp=/tmp/shar$$; dtemp=/tmp/.shar$$'
+ echo 'trap "rm -f $temp $dtemp; exit" 0 1 2 3 15'
+ echo 'cat > $temp <<\!!!'
+ case $base_option in
+ TRUE) wc $@ | sed 's=[^ ]*/==' ;;
+ FALSE) wc $contents | sed 's=[^ ]*/==' ;;
+ esac
+ echo '!!!'
+ echo "wc $contents | sed 's=[^ ]*/==' | "'diff -b $temp - >$dtemp'
+ echo 'if [ -s $dtemp ]'
+ echo 'then echo "Ouch [diff of wc output]:" ; cat $dtemp'
+ echo 'else echo "No problems found."'
+ echo 'fi'
+fi
+
+
+# Finish up:
+
+echo 'exit 0' # sharchives unpack even if junk follows.
+exit 0
diff --git a/contrib/shar2.sh b/contrib/shar2.sh
new file mode 100644
index 0000000..e7a6b6a
--- /dev/null
+++ b/contrib/shar2.sh
@@ -0,0 +1,74 @@
+#!/bin/sh -
+#
+# Copyright (c) 1990 The Regents of the University of California.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the University of
+# California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# @(#)shar.sh 5.2 (Berkeley) 5/23/90
+#
+
+if [ $# -eq 0 ]; then
+ echo 'usage: shar file ...'
+ exit 1
+fi
+
+cat << EOF
+# This is a shell archive. Save it in a file, remove anything before
+# this line, and then unpack it by entering "sh file". Note, it may
+# create directories; files and directories will be owned by you and
+# have default permissions.
+#
+# This archive contains:
+#
+EOF
+
+for i
+do
+ echo "# $i"
+done
+
+echo "#"
+
+for i
+do
+ if [ -d $i ]; then
+ echo "echo c - $i"
+ echo "mkdir $i > /dev/null 2>&1"
+ else
+ echo "echo x - $i"
+ echo "sed 's/^X//' >$i << 'END-of-$i'"
+ sed 's/^/X/' $i
+ echo "END-of-$i"
+ fi
+done
+echo exit
+echo ""
+
+exit 0
diff --git a/contrib/uudecode.bas b/contrib/uudecode.bas
new file mode 100644
index 0000000..ff7fc30
--- /dev/null
+++ b/contrib/uudecode.bas
@@ -0,0 +1,78 @@
+1000 KEY OFF
+1001 DEFINT A-Z
+1010 REM Trap error opening input file
+1020 ON ERROR GOTO 1600
+1030 CLS
+1040 LOCATE 5,11
+1050 PRINT STRING$(40," ")
+1060 LOCATE 5,11
+1070 INPUT "Enter name of input file: ", INFILE$
+1080 OPEN INFILE$ FOR INPUT AS #1
+1090 LOCATE 8,10
+1100 PRINT STRING$(40," ")
+1110 REM Trap error opening output file
+1120 ON ERROR GOTO 1640
+1130 LOCATE 8,10
+1140 INPUT "Enter name of output file: ", OUTFILE$
+1150 OPEN "R", #2,OUTFILE$, 1
+1160 FIELD #2, 1 AS N$
+1170 REM Trap error at end of file
+1180 ON ERROR GOTO 1680
+1190 REM Search for header line
+1200 LINE INPUT #1,A$
+1210 IF LEFT$(A$,5) <>"begin" THEN 1200
+1220 LOCATE 11,10
+1230 PRINT "Header = ";A$
+1240 SP = ASC(" ")
+1250 DIM BUF(100)
+1260 RECNO# = 1
+1270 REM Main loop
+1280 LINE INPUT #1, A$
+1290 P = 0
+1300 COUNT = ASC(LEFT$(A$,1)) - SP
+1310 IF COUNT = 64 THEN COUNT = 0
+1320 IF COUNT = 0 THEN 1560
+1330 ADJ = COUNT MOD 4
+1340 FOR I = 2 TO LEN(A$) STEP 4
+1350 X1 = ASC(MID$(A$,I,I)) - SP
+1360 IF X1 = 64 THEN X1 = 0
+1370 X2 = ASC(MID$(A$,I+1,I+1)) - SP
+1380 IF X2 = 64 THEN X2 = 0
+1390 X3 = ASC(MID$(A$,I+2,I+2)) - SP
+1400 IF X3 = 64 THEN X3 = 0
+1410 X4 = ASC(MID$(A$,I+3,I+3)) - SP
+1420 IF X4 = 64 THEN X4 = 0
+1430 P = P + 1
+1440 BUF(P) = (X2\16) + (X1*4)
+1450 P = P + 1
+1460 BUF(P) = (X3\4) + ((X2 MOD 16) * 16)
+1470 P = P + 1
+1480 BUF(P) = X4 + ((X3 MOD 4) * 64)
+1490 NEXT I
+1500 FOR I = 1 TO P
+1510 LSET N$ = CHR$(BUF(I))
+1520 PUT #2, RECNO#
+1530 RECNO# = RECNO# + 1
+1540 NEXT I
+1550 GOTO 1280
+1560 END
+1570 REM
+1580 REM Error trapping routines
+1590 REM
+1600 LOCATE 22,20
+1610 PRINT "Can't open input file"
+1620 GOSUB 1740
+1630 RESUME 1020
+1640 LOCATE 22,20
+1650 PRINT "Can't open output file"
+1660 GOSUB 1740
+1670 RESUME 1090
+1680 LOCATE 22,20
+1690 PRINT "Header line not found"
+1700 GOSUB 1740
+1710 LOCATE 24,1
+1720 END
+1740 FOR I = 1 TO 5000: NEXT I
+1750 LOCATE 22,20
+1760 PRINT STRING$(30," ")
+1770 RETURN
diff --git a/contrib/uudecode.pas b/contrib/uudecode.pas
new file mode 100644
index 0000000..2c80fef
--- /dev/null
+++ b/contrib/uudecode.pas
@@ -0,0 +1,224 @@
+program uudecode;
+
+ CONST defaultSuffix = '.uue';
+ offset = 32;
+
+ TYPE string80 = string[80];
+
+ VAR infile: text;
+ fi : file of byte;
+ outfile: file of byte;
+ lineNum: integer;
+ line: string80;
+ size,remaining :real;
+
+ procedure Abort(message: string80);
+
+ begin {abort}
+ writeln;
+ if lineNum > 0 then write('Line ', lineNum, ': ');
+ writeln(message);
+ halt
+ end; {Abort}
+
+ procedure NextLine(var s: string80);
+
+ begin {NextLine}
+ LineNum := succ(LineNum);
+ {write('.');}
+ readln(infile, s);
+ remaining:=remaining-length(s)-2; {-2 is for CR/LF}
+ write('bytes remaining: ',remaining:7:0,' (',
+ remaining/size*100.0:3:0,'%)',chr(13));
+ end; {NextLine}
+
+ procedure Init;
+
+ procedure GetInFile;
+
+ VAR infilename: string80;
+
+ begin {GetInFile}
+ if ParamCount = 0 then abort ('Usage: uudecode <filename>');
+ infilename := ParamStr(1);
+ if pos('.', infilename) = 0
+ then infilename := concat(infilename, defaultSuffix);
+ assign(infile, infilename);
+ {$i-}
+ reset(infile);
+ {$i+}
+ if IOresult > 0 then abort (concat('Can''t open ', infilename));
+ writeln ('Decoding ', infilename);
+ assign(fi,infilename); reset(fi);
+ size:=FileSize(fi); close(fi);
+ if size < 0 then size:=size+65536.0;
+ remaining:=size;
+ end; {GetInFile}
+
+ procedure GetOutFile;
+
+ var header, mode, outfilename: string80;
+ ch: char;
+
+ procedure ParseHeader;
+
+ VAR index: integer;
+
+ Procedure NextWord(var word:string80; var index: integer);
+
+ begin {nextword}
+ word := '';
+ while header[index] = ' ' do
+ begin
+ index := succ(index);
+ if index > length(header) then abort ('Incomplete header')
+ end;
+ while header[index] <> ' ' do
+ begin
+ word := concat(word, header[index]);
+ index := succ(index)
+ end
+ end; {NextWord}
+
+ begin {ParseHeader}
+ header := concat(header, ' ');
+ index := 7;
+ NextWord(mode, index);
+ NextWord(outfilename, index)
+ end; {ParseHeader}
+
+ begin {GetOutFile}
+ if eof(infile) then abort('Nothing to decode.');
+ NextLine (header);
+ while not ((copy(header, 1, 6) = 'begin ') or eof(infile)) do
+ NextLine(header);
+ writeln;
+ if eof(infile) then abort('Nothing to decode.');
+ ParseHeader;
+ assign(outfile, outfilename);
+ writeln ('Destination is ', outfilename);
+ {$i-}
+ reset(outfile);
+ {$i+}
+ if IOresult = 0 then
+ begin
+ write ('Overwrite current ', outfilename, '? [Y/N] ');
+ repeat
+ read (kbd, ch);
+ ch := UpCase(ch)
+ until ch in ['Y', 'N'];
+ writeln(ch);
+ if ch = 'N' then abort ('Overwrite cancelled.')
+ end;
+ rewrite (outfile);
+ end; {GetOutFile}
+
+ begin {init}
+ lineNum := 0;
+ GetInFile;
+ GetOutFile;
+ end; { init}
+
+ Function CheckLine: boolean;
+
+ begin {CheckLine}
+ if line = '' then abort ('Blank line in file');
+ CheckLine := not (line[1] in [' ', '`'])
+ end; {CheckLine}
+
+
+ procedure DecodeLine;
+
+ VAR lineIndex, byteNum, count, i: integer;
+ chars: array [0..3] of byte;
+ hunk: array [0..2] of byte;
+
+{ procedure debug;
+
+ var i: integer;
+
+ procedure writebin(x: byte);
+
+ var i: integer;
+
+ begin
+ for i := 1 to 8 do
+ begin
+ write ((x and $80) shr 7);
+ x := x shl 1
+ end;
+ write (' ')
+ end;
+
+ begin
+ writeln;
+ for i := 0 to 3 do writebin(chars[i]);
+ writeln;
+ for i := 0 to 2 do writebin(hunk[i]);
+ writeln
+ end; }
+
+ function nextch: char;
+
+ begin {nextch}
+ lineIndex := succ(lineIndex);
+ if lineIndex > length(line) then abort('Line too short.');
+ if not (line[lineindex] in [' '..'`'])
+ then abort('Illegal character in line.');
+{ write(line[lineindex]:2);}
+ if line[lineindex] = '`' then nextch := ' '
+ else nextch := line[lineIndex]
+ end; {nextch}
+
+ procedure DecodeByte;
+
+ procedure GetNextHunk;
+
+ VAR i: integer;
+
+ begin {GetNextHunk}
+ for i := 0 to 3 do chars[i] := ord(nextch) - offset;
+ hunk[0] := (chars[0] shl 2) + (chars[1] shr 4);
+ hunk[1] := (chars[1] shl 4) + (chars[2] shr 2);
+ hunk[2] := (chars[2] shl 6) + chars[3];
+ byteNum := 0 {;
+ debug }
+ end; {GetNextHunk}
+
+ begin {DecodeByte}
+ if byteNum = 3 then GetNextHunk;
+ write (outfile, hunk[byteNum]);
+ {writeln(bytenum, ' ', hunk[byteNum]);}
+ byteNum := succ(byteNum)
+ end; {DecodeByte}
+
+ begin {DecodeLine}
+ lineIndex := 0;
+ byteNum := 3;
+ count := (ord(nextch) - offset);
+ for i := 1 to count do DecodeByte
+ end; {DecodeLine}
+
+ procedure terminate;
+
+ var trailer: string80;
+
+ begin {terminate}
+ if eof(infile) then abort ('Abnormal end.');
+ NextLine (trailer);
+ if length (trailer) < 3 then abort ('Abnormal end.');
+ if copy (trailer, 1, 3) <> 'end' then abort ('Abnormal end.');
+ close (infile);
+ close (outfile)
+ end;
+
+ begin {uudecode}
+ init;
+ NextLine(line);
+ while CheckLine do
+ begin
+ DecodeLine;
+ NextLine(line)
+ end;
+ terminate
+ end.
diff --git a/contrib/uudecode.pl b/contrib/uudecode.pl
new file mode 100644
index 0000000..42f090f
--- /dev/null
+++ b/contrib/uudecode.pl
@@ -0,0 +1,24 @@
+# uuencode in Perl.
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# François Pinard <pinard@iro.umontreal.ca>, 1995.
+
+# `perl uudecode.pl FILES' will decode all uuencoded files found in
+# all input FILES, stripping headers and other non uuencoded data.
+
+while (<>)
+{
+ if (/^begin [0-7][0-7][0-7] ([^\n ]+)$/)
+ {
+ open (OUTPUT, ">$1") || die "Cannot create $1\n";
+ binmode OUTPUT;
+ while (<>)
+ {
+ last if /^end$/;
+ $block = unpack ("u", $_);
+ print OUTPUT $block;
+ }
+ close OUTPUT;
+ }
+}
+
+exit 0;
diff --git a/contrib/uuencode.pas b/contrib/uuencode.pas
new file mode 100644
index 0000000..c30a289
--- /dev/null
+++ b/contrib/uuencode.pas
@@ -0,0 +1,202 @@
+Program uuencode;
+
+ CONST header = 'begin';
+ trailer = 'end';
+ defaultMode = '644';
+ defaultExtension = '.uue';
+ offset = 32;
+ charsPerLine = 60;
+ bytesPerHunk = 3;
+ sixBitMask = $3F;
+
+ TYPE string80 = string[80];
+
+ VAR infile: file of byte;
+ outfile: text;
+ infilename, outfilename, mode: string80;
+ lineLength, numbytes, bytesInLine: integer;
+ line: array [0..59] of char;
+ hunk: array [0..2] of byte;
+ chars: array [0..3] of byte;
+ size,remaining :real;
+
+{ procedure debug;
+
+ var i: integer;
+
+ procedure writebin(x: byte);
+
+ var i: integer;
+
+ begin
+ for i := 1 to 8 do
+ begin
+ write ((x and $80) shr 7);
+ x := x shl 1
+ end;
+ write (' ')
+ end;
+
+ begin
+ for i := 0 to 2 do writebin(hunk[i]);
+ writeln;
+ for i := 0 to 3 do writebin(chars[i]);
+ writeln;
+ for i := 0 to 3 do writebin(chars[i] and sixBitMask);
+ writeln
+ end; }
+
+ procedure Abort (message: string80);
+
+ begin {abort}
+ writeln(message);
+ close(infile);
+ close(outfile);
+ halt
+ end; {abort}
+
+ procedure Init;
+
+ procedure GetFiles;
+
+ VAR i: integer;
+ temp: string80;
+ ch: char;
+
+ begin {GetFiles}
+ if ParamCount < 1 then abort ('No input file specified.');
+ infilename := ParamStr(1);
+ {$I-}
+ assign (infile, infilename);
+ reset (infile);
+ {$i+}
+ if IOResult > 0 then abort (concat ('Can''t open file ', infilename));
+ size:=FileSize(infile);
+ if size < 0 then size:=size+65536.0;
+ remaining:=size;
+ write('Uuencoding file ', infilename);
+
+ i := pos('.', infilename);
+ if i = 0
+ then outfilename := infilename
+ else outfilename := copy (infilename, 1, pred(i));
+ mode := defaultMode;
+ if ParamCount > 1 then
+ for i := 2 to ParamCount do
+ begin
+ temp := Paramstr(i);
+ if temp[1] in ['0'..'9']
+ then mode := temp
+ else outfilename := temp
+ end;
+ if pos ('.', outfilename) = 0
+ then outfilename := concat(outfilename, defaultExtension);
+ assign (outfile, outfilename);
+ writeln (' to file ', outfilename, '.');
+
+ {$i-}
+ reset(outfile);
+ {$i+}
+ if IOresult = 0 then
+ begin
+ Write ('Overwrite current ', outfilename, '? [Y/N] ');
+ repeat
+ read (kbd, ch);
+ ch := Upcase(ch)
+ until ch in ['Y', 'N'];
+ writeln (ch);
+ if ch = 'N' then abort(concat (outfilename, ' not overwritten.'))
+ end;
+ close(outfile);
+
+ {$i-}
+ rewrite(outfile);
+ {$i+}
+ if ioresult > 0 then abort(concat('Can''t open ', outfilename));
+ end; {getfiles}
+
+ begin {Init}
+ GetFiles;
+ bytesInLine := 0;
+ lineLength := 0;
+ numbytes := 0;
+ writeln (outfile, header, ' ', mode, ' ', infilename);
+ end; {init}
+
+ procedure FlushLine;
+
+ VAR i: integer;
+
+ procedure writeout(ch: char);
+
+ begin {writeout}
+ if ch = ' ' then write(outfile, '`')
+ else write(outfile, ch)
+ end; {writeout}
+
+ begin {FlushLine}
+ {write ('.');}
+ write('bytes remaining: ',remaining:7:0,' (',
+ remaining/size*100.0:3:0,'%)',chr(13));
+ writeout(chr(bytesInLine + offset));
+ for i := 0 to pred(lineLength) do
+ writeout(line[i]);
+ writeln (outfile);
+ lineLength := 0;
+ bytesInLine := 0
+ end; {FlushLine}
+
+ procedure FlushHunk;
+
+ VAR i: integer;
+
+ begin {FlushHunk}
+ if lineLength = charsPerLine then FlushLine;
+ chars[0] := hunk[0] shr 2;
+ chars[1] := (hunk[0] shl 4) + (hunk[1] shr 4);
+ chars[2] := (hunk[1] shl 2) + (hunk[2] shr 6);
+ chars[3] := hunk[2] and sixBitMask;
+ {debug;}
+ for i := 0 to 3 do
+ begin
+ line[lineLength] := chr((chars[i] and sixBitMask) + offset);
+ {write(line[linelength]:2);}
+ lineLength := succ(lineLength)
+ end;
+ {writeln;}
+ bytesInLine := bytesInLine + numbytes;
+ numbytes := 0
+ end; {FlushHunk}
+
+ procedure encode1;
+
+ begin {encode1};
+ if numbytes = bytesperhunk then flushhunk;
+ read (infile, hunk[numbytes]);
+ remaining:=remaining-1;
+ numbytes := succ(numbytes)
+ end; {encode1}
+
+ procedure terminate;
+
+ begin {terminate}
+ if numbytes > 0 then flushhunk;
+ if lineLength > 0
+ then
+ begin
+ flushLine;
+ flushLine;
+ end
+ else flushline;
+ writeln (outfile, trailer);
+ close (outfile);
+ close (infile);
+ end; {terminate}
+
+
+ begin {uuencode}
+ init;
+ while not eof (infile) do encode1;
+ terminate;
+ writeln;
+ end. {uuencode}
diff --git a/contrib/uuencode.pl b/contrib/uuencode.pl
new file mode 100644
index 0000000..e15f71d
--- /dev/null
+++ b/contrib/uuencode.pl
@@ -0,0 +1,10 @@
+# uuencode in Perl - non tested.
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# François Pinard <pinard@iro.umontreal.ca>, 1995.
+
+print "begin 644 $ARGV[0]\n";
+print pack ("u", $bloc) while read (STDIN, $bloc, 45);
+print "`\n";
+print "end\n";
+
+exit 0;
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..ca5ea4e
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,584 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2006-10-15.18
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
+# Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by `PROGRAMS ARGS'.
+ object Object file output by `PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputing dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts `$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-M
+ else
+ "$@" -M
+ fi
+ stat=$?
+
+ if test -f "$tmpdepfile"; then :
+ else
+ stripped=`echo "$stripped" | sed 's,^.*/,,'`
+ tmpdepfile="$stripped.u"
+ fi
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ outname="$stripped.o"
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler understands `-MD -MF file'. However on
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want:
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using \ :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+ sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add `dependent.h:' lines.
+ sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in `foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for `:'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+ "$@" $dashmflag |
+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no
+ for arg in "$@"; do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o,
+ # because we must use -o when running libtool.
+ "$@" || exit $?
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..91b43f1
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,47 @@
+## Makefile for the doc subdirectory of the GNU NLS Utilities
+##
+## Copyright (C) 1995, 1996, 2005, 2007 Free Software Foundation, Inc.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License along
+## with this program; if not, write to the Free Software Foundation, Inc.,
+## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+## Process this file with automake to produce Makefile.in.
+
+info_TEXINFOS = sharutils.texi
+
+dist_man1_MANS = shar.1 unshar.1 compress-dummy.1
+dist_man5_MANS =
+
+if UUCODE
+ dist_man1_MANS += uuencode.1
+ dist_man5_MANS += uuencode.5
+ man1_MANS = uudecode.1
+endif
+
+CLEANFILES = $(man1_MANS)
+
+EXTRA_DIST = doclicense.texi
+
+uudecode.1: Makefile
+ man1base=`echo $(man1dir) | sed 's@.*/\(.*\)@\1@'`; \
+ echo ".so $$man1base/uuencode.1" > $@
+
+sharutils.txt :
+ makeinfo --no-split --fill-column=70 --paragraph-indent=0 --no-headers \
+ --output=$@ sharutils.texi
+
+gnudocs: sharutils.txt sharutils.info
+ @chmod +x ${top_srcdir}/doc/mkgnudoc.sh ; \
+ MAKE=$(MAKE) ; export MAKE ; \
+ ${top_srcdir}/doc/mkgnudoc.sh $(PACKAGE_STRING)
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..ad67689
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,745 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@UUCODE_TRUE@am__append_1 = uuencode.1
+@UUCODE_TRUE@am__append_2 = uuencode.5
+subdir = doc
+DIST_COMMON = $(dist_man1_MANS) $(dist_man5_MANS) \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/stamp-vti $(srcdir)/version.texi ansi2knr.1 mdate-sh \
+ texinfo.tex
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/realloc.m4 \
+ $(top_srcdir)/m4/sharutils.m4 $(top_srcdir)/m4/signed.m4 \
+ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrtoimax.m4 \
+ $(top_srcdir)/version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+INFO_DEPS = $(srcdir)/sharutils.info
+am__TEXINFO_TEX_DIR = $(srcdir)
+DVIS = sharutils.dvi
+PDFS = sharutils.pdf
+PSS = sharutils.ps
+HTMLS = sharutils.html
+TEXINFOS = sharutils.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \
+ "$(DESTDIR)$(man5dir)"
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+man1dir = $(mandir)/man1
+man5dir = $(mandir)/man5
+NROFF = nroff
+MANS = $(dist_man1_MANS) $(dist_man5_MANS) $(man1_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_SCRIPT = @ADD_SCRIPT@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMPRESS = @COMPRESS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DIFF = @DIFF@
+DIRENT_HEADER = @DIRENT_HEADER@
+DIST_ALPHA = @DIST_ALPHA@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+INSTALL = @INSTALL@
+INSTALL_COMPRESS_LINK = @INSTALL_COMPRESS_LINK@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAILER = @MAILER@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SH = @SH@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TAR = @TAR@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+info_TEXINFOS = sharutils.texi
+dist_man1_MANS = shar.1 unshar.1 compress-dummy.1 $(am__append_1)
+dist_man5_MANS = $(am__append_2)
+@UUCODE_TRUE@man1_MANS = uudecode.1
+CLEANFILES = $(man1_MANS)
+EXTRA_DIST = doclicense.texi
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .html .info .pdf .ps .texi
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnits doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+.texi.info:
+ restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && cd $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ $<; \
+ then \
+ rc=0; \
+ cd $(srcdir); \
+ else \
+ rc=$$?; \
+ cd $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+.texi.dvi:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $<
+
+.texi.pdf:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) $<
+
+.texi.html:
+ rm -rf $(@:.html=.htp)
+ if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) $<; \
+ then \
+ rm -rf $@; \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ else \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+ exit 1; \
+ fi
+$(srcdir)/sharutils.info: sharutils.texi $(srcdir)/version.texi
+sharutils.dvi: sharutils.texi $(srcdir)/version.texi
+sharutils.pdf: sharutils.texi $(srcdir)/version.texi
+sharutils.html: sharutils.texi $(srcdir)/version.texi
+$(srcdir)/version.texi: $(srcdir)/stamp-vti
+$(srcdir)/stamp-vti: sharutils.texi $(top_srcdir)/configure
+ @(dir=.; test -f ./sharutils.texi || dir=$(srcdir); \
+ set `$(SHELL) $(srcdir)/mdate-sh $$dir/sharutils.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp
+ @cmp -s vti.tmp $(srcdir)/version.texi \
+ || (echo "Updating $(srcdir)/version.texi"; \
+ cp vti.tmp $(srcdir)/version.texi)
+ -@rm -f vti.tmp
+ @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp
+
+maintainer-clean-vti:
+ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
+.dvi.ps:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && \
+ (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f $(distdir)/$$relfile || \
+ cp -p $$file $(distdir)/$$relfile; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf sharutils.aux sharutils.cp sharutils.cps sharutils.fn sharutils.fns \
+ sharutils.ky sharutils.kys sharutils.log sharutils.pg \
+ sharutils.pgs sharutils.tmp sharutils.toc sharutils.tp \
+ sharutils.tps sharutils.vr sharutils.vrs sharutils.dvi \
+ sharutils.pdf sharutils.ps sharutils.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+install-man5: $(man5_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.5*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 5*) ;; \
+ *) ext='5' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+ done
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.5*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 5*) ;; \
+ *) ext='5' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+ done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-info
+check-am: all-am
+check: check-am
+all-am: Makefile $(INFO_DEPS) $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am: $(DVIS)
+
+html: html-am
+
+html-am: $(HTMLS)
+
+info: info-am
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-info-am install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+ @list='$(DVIS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+ @list='$(HTMLS)'; for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ if test -d "$$d$$p"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
+ else \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
+ fi; \
+ done
+install-info: install-info-am
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
+ echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
+ $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
+ else : ; fi; \
+ done; \
+ done
+ @$(POST_INSTALL)
+ @if (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man: install-man1 install-man5
+
+install-pdf: install-pdf-am
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+ @list='$(PDFS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+install-ps: install-ps-am
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+ @list='$(PSS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \
+ done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
+
+pdf: pdf-am
+
+pdf-am: $(PDFS)
+
+ps: ps-am
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-man uninstall-pdf-am uninstall-ps-am
+
+uninstall-man: uninstall-man1 uninstall-man5
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic dist-info \
+ distclean distclean-generic distdir dvi dvi-am html html-am \
+ info info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-man1 install-man5 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti mostlyclean mostlyclean-aminfo \
+ mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-dvi-am uninstall-html-am \
+ uninstall-info-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-pdf-am uninstall-ps-am
+
+
+uudecode.1: Makefile
+ man1base=`echo $(man1dir) | sed 's@.*/\(.*\)@\1@'`; \
+ echo ".so $$man1base/uuencode.1" > $@
+
+sharutils.txt :
+ makeinfo --no-split --fill-column=70 --paragraph-indent=0 --no-headers \
+ --output=$@ sharutils.texi
+
+gnudocs: sharutils.txt sharutils.info
+ @chmod +x ${top_srcdir}/doc/mkgnudoc.sh ; \
+ MAKE=$(MAKE) ; export MAKE ; \
+ ${top_srcdir}/doc/mkgnudoc.sh $(PACKAGE_STRING)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/ansi2knr.1 b/doc/ansi2knr.1
new file mode 100644
index 0000000..d52e743
--- /dev/null
+++ b/doc/ansi2knr.1
@@ -0,0 +1,25 @@
+.TH ANSI2KNR 1 "31 December 1990"
+.SH NAME
+ansi2knr \- convert ANSI C to Kernighan & Ritchie C
+.SH SYNOPSIS
+.I ansi2knr
+input_file output_file
+.SH DESCRIPTION
+If no output_file is supplied, output goes to stdout.
+.br
+There are no error messages.
+.sp
+.I ansi2knr
+recognizes functions by seeing a non-keyword identifier at the left margin, followed by a left parenthesis, with a right parenthesis as the last character on the line. It will recognize a multi-line header if the last character on each line but the last is a left parenthesis or comma. These algorithms ignore whitespace and comments, except that the function name must be the first thing on the line.
+.sp
+The following constructs will confuse it:
+.br
+ - Any other construct that starts at the left margin and follows the above syntax (such as a macro or function call).
+.br
+ - Macros that tinker with the syntax of the function header.
+.SH REPORTING BUGS
+Report bugs to <bug-gnu-utils@gnu.org>. Please put
+.I sharutils
+or
+.I ansi2knr
+in the subject line. It helps to spot the message.
diff --git a/doc/compress-dummy.1 b/doc/compress-dummy.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/doc/compress-dummy.1
diff --git a/doc/doclicense.texi b/doc/doclicense.texi
new file mode 100644
index 0000000..99822ff
--- /dev/null
+++ b/doc/doclicense.texi
@@ -0,0 +1,395 @@
+@c -*-texinfo-*-
+@node GNU Free Documentation License, , resync, top
+@appendix GNU Free Documentation License
+@center Version 1.1, March 2000
+@ifnottex
+@menu
+* How to use this License for your documents::
+@end menu
+@end ifnottex
+@display
+Copyright (C) 2000 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+@iftex
+@sp1
+@end iftex
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document ``free'' in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+@iftex
+@sp1
+@end iftex
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License. The ``Document'', below, refers to any
+such manual or work. Any member of the public is a licensee, and is
+addressed as ``you''.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent. A copy that is
+not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification. Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+@iftex
+@sp1
+@end iftex
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+@iftex
+@sp1
+@end iftex
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols. If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+@iftex
+@sp1
+@end iftex
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.@*
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).@*
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.@*
+D. Preserve all the copyright notices of the Document.@*
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.@*
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.@*
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.@*
+H. Include an unaltered copy of this License.@*
+I. Preserve the section entitled ``History'', and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section entitled ``History'' in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.@*
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the ``History'' section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.@*
+K. In any section entitled ``Acknowledgements'' or ``Dedications'',
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.@*
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.@*
+M. Delete any section entitled ``Endorsements''. Such a section
+ may not be included in the Modified Version.@*
+N. Do not retitle any existing section as ``Endorsements''
+ or to conflict in title with any Invariant Section.@*
+@iftex
+@sp1
+@end iftex
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+@iftex
+@sp1
+@end iftex
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled ``History''
+in the various original documents, forming one section entitled
+``History''; likewise combine any sections entitled ``Acknowledgements'',
+and any sections entitled ``Dedications''. You must delete all sections
+entitled ``Endorsements.''
+@iftex
+@sp1
+@end iftex
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+@iftex
+@sp1
+@end iftex
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation. Such a compilation is called an ``aggregate'', and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+@iftex
+@sp1
+@end iftex
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License provided that you also include the
+original English version of this License. In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+@iftex
+@sp1
+@end iftex
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+@iftex
+@sp1
+@end iftex
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+@end enumerate
+
+@node How to use this License for your documents
+@unnumberedsec ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being @var{list their titles}, with the
+ Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}.
+ A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+If you have no Invariant Sections, write ``with no Invariant Sections''
+instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write ``no Front-Cover Texts'' instead of
+``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/doc/mdate-sh b/doc/mdate-sh
new file mode 100755
index 0000000..cd916c0
--- /dev/null
+++ b/doc/mdate-sh
@@ -0,0 +1,201 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2005-06-29.22
+
+# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software
+# Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+ '')
+ echo "$0: No file. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification time of FILE.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# GNU ls changes its time format in response to the TIME_STYLE
+# variable. Since we cannot assume `unset' works, revert this
+# variable to its documented default.
+if test "${TIME_STYLE+set}" = set; then
+ TIME_STYLE=posix-long-iso
+ export TIME_STYLE
+fi
+
+save_arg1=$1
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ ls_command='ls -L -l -d'
+else
+ ls_command='ls -l -d'
+fi
+
+# A `ls -l' line looks as follows on OS/2.
+# drwxrwx--- 0 Aug 11 2001 foo
+# This differs from Unix, which adds ownership information.
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month. This cannot work with files whose owner is a
+# user named `Jan', or `Feb', etc. However, it's unlikely that `/'
+# will be owned by a user whose name is a month. So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`ls -l -d /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+ shift
+ # Add another shift to the command.
+ command="$command shift;"
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+ ???*) day=$1;;
+ *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/doc/shar.1 b/doc/shar.1
new file mode 100644
index 0000000..a53effc
--- /dev/null
+++ b/doc/shar.1
@@ -0,0 +1,258 @@
+.TH SHAR 1 "July 1, 2005"
+.SH NAME
+shar \- create shell archives
+.SH SYNOPSIS
+.nf
+shar [ options ] file ...
+shar \-S [ options ]
+.fi
+.SH DESCRIPTION
+Shar
+creates "shell archives" (or shar files) which are in text format
+and can be mailed. These files may be unpacked later by executing them
+with /bin/sh. The resulting archive is sent to standard out unless the
+\f2\-o\f1 option is given. A wide range of features provide extensive
+flexibility in manufacturing shars and in specifying shar "smartness".
+Archives may be "vanilla" or comprehensive.
+.SH OPTIONS
+.PP
+Options have a one letter version starting with \- or a long version starting
+with \-\-. The exception is \f2\-\-help\f1, \f2\-\-version\f1,
+\f2\-\-no-i18n\f1 and \f2\-\-print-text-domain-dir\f1 which does not
+have short versions.
+Mandatory arguments to long options are mandatory for short options too.
+Options can be given in any order. Some options depend on each other:
+.nf
+ The \f2\-o\f1 option is required if the \f2\-l\f1 or \f2\-L\f1 option is used.
+ The \f2\-n\f1 option is required if the \f2\-a\f1 option is used.
+ See \f2\-V\f1 below.
+.fi
+.SS "Giving feedback:"
+.IP "\f2\-\-help\f1"
+Print a help summary on standard output, then immediately exits.
+.IP "\f2\-\-version\f1"
+Print the version number of the program on standard output,
+then immediately exits.
+.IP "\f2\-q\f1 \f2\-\-quiet\f1 \f2\-\-silent\f1"
+Do not output verbose messages locally when producing the archive.
+.SS "Selecting files:"
+.IP "\f2\-p\f1 \f2\-\-intermix-type\f1"
+Allow positional parameter options. The options \f2\-B\f1, \f2\-T\f1,
+\f2-z\f1 and \f2\-Z\f1 may be embedded, and files to the right of the
+option will be processed in the specified mode.
+.IP "\f2\-S\f1 \f2\-\-stdin-file-list\f1"
+Read list of files to be packed from the standard input rather
+than from the command line. Input must be in a form similar to
+that generated by the find command, one filename per line. This
+switch is especially useful when the command line will not hold
+the list of files to be packed. For example:
+.nf
+
+find . \-type f \-print | \\
+ sort | \\
+ shar \-S \-Z \-L50 \-o /somewhere/big
+
+.fi
+If \f2\-p\f1 is specified on the command line, then the options
+\f2\-B\f1, \f2\-T\f1, \f2\-z\f1 and \f2\-Z\f1 may be
+included in the standard input (on a line separate from filenames).
+The maximum number of lines of standard input, file names and
+options, may not exceed 1024.
+.SS "Splitting output:"
+.IP "\f2\-o\f1 XXX \f2\-\-output-prefix=\f1XXX"
+Save the archive to files XXX.01 thru XXX.nn instead of sending it to
+standard out.
+Must be used when the \f2\-l\f1 or the \f2\-L\f1 switches are used.
+.IP "\f2\-l\f1 XX \f2\-\-whole-size-limit=\f1XX"
+Limit the output file size to XXk bytes but don't split input files.
+.IP "\f2\-L\f1 XX \f2\-\-split-size-limit=\f1XX"
+Limit output file size to XXk bytes and split files if necessary. The archive
+parts created with this option must be unpacked in correct order.
+.SS "Controlling the shar headers:"
+.IP "\f2\-n\f1 name \f2\-\-archive-name=\f1name"
+Name of archive to be included in the header of the shar files.
+See the \f2\-a\f1 switch.
+.IP "\f2\-s\f1 who@where \f2\-\-submitter=\f1who@where"
+Override automatically determined submitter name.
+.IP "\f2\-a\f1 \f2\-\-net-headers\f1"
+Allows automatic generation of headers:
+.nf
+ Submitted-by: who@where
+ Archive-name: <name>/part##
+.fi
+The <name> must be given with the \f2\-n\f1 switch.
+If name includes a '/' "/part" isn't used. Thus:
+.RS 10m
+.nf
+.ta 30n
+\-n xyzzy produces:
+ xyzzy/part01
+ xyzzy/part02
+
+\-n xyzzy/patch produces:
+ xyzzy/patch01
+ xyzzy/patch02
+
+\-n xyzzy/patch01. produces:
+ xyzzy/patch01.01
+ xyzzy/patch01.02
+.RE
+.fi
+.IP ""
+The who@where can be
+explicitly stated with the \f2\-s\f1 switch if the default isn't appropriate.
+Who@where is essentially built as `whoami`@`uname`.
+.IP "\f2\-c\f1 \f2\-\-cut-mark\f1"
+Start the shar with a cut line. A line saying 'Cut here' is placed at the
+start of each output file.
+.IP "\f2\-t\f1 \f2\-\-translate\f1"
+Translate messages in the script. If you have set the \f2LANG\f1 environment
+variable, messages printed by \f2shar\f1 will be in the specified language.
+The produced script will still be emitted using messages in the lingua
+franca of the computer world: English. This option will cause the script
+messages to appear in the languages specified by the \f2LANG\f1 environment
+variable set when the script is produced.
+.SS "Selecting how files are stocked:"
+.IP "\f2\-M\f1 \f2\-\-mixed-uuencode\f1"
+Mixed mode. Determine if the files are text or binary and archive
+correctly (default). Files found to be binary are uudecoded prior to packing
+(USE OF UUENCODE IS NOT APPRECIATED BY MANY ON THE NET).
+.IP "\f2\-T\f1 \f2\-\-text-files\f1"
+Treat all files as text.
+.IP "\f2\-B\f1 \f2\-\-uuencode\f1"
+Treat all files as binary, use uuencode prior to packing. This increases the
+size of the archive. The recipient must have uudecode in order to unpack.
+(USE OF UUENCODE IS NOT APPRECIATED BY MANY ON THE NET).
+.IP "\f2\-z\f1 \f2\-\-gzip\f1"
+Gzip and uuencode all files prior to packing. The recipient must have
+uudecode and gzip in order to unpack
+(USE OF UUENCODE AND GZIP IS NOT APPRECIATED BY MANY ON THE NET).
+.IP "\f2\-g\f1 LEVEL \f2\-\-level-for-gzip=\f1LEVEL"
+When doing compression, use '\-LEVEL' as a parameter to gzip. Default is 9.
+The \f2\-g\f1 option turns on the \f2\-z\f1 option by default.
+.IP "\f2\-Z\f1 \f2\-\-compress\f1"
+Compress and uuencode all files prior to packing. The recipient must have
+uudecode and compress in order to unpack
+(USE OF UUENCODE AND COMPRESS IS NOT APPRECIATED BY MANY ON THE NET).
+Option \f2\-C\f1 is synonymous to \f2\-Z\f1, but is being deprecated.
+.IP "\f2\-b\f1 BITS \f2\-\-bits-per-code=\f1BITS"
+When doing compression, use '\-bBITS' as a parameter to compress.
+The \f2\-B\f1 option turns on the \f2\-Z\f1 option by default. Default value
+is 12.
+.SS "Protecting against transmission errors:"
+.IP "\f2\-w\f1 \f2\-\-no-character-count\f1"
+Do NOT check each file with 'wc \-c' after unpack. The default is to check.
+.IP "\f2\-D\f1 \f2\-\-no-md5-digest\f1"
+Do NOT use 'md5sum' digest to verify the unpacked files. The default is to
+check.
+.IP "\f2\-F\f1 \f2\-\-force-prefix\f1"
+Forces the prefix character (normally 'X' unless the parameter to the \f2\-d\f1
+option starts with 'X') to be prepended to every line even if
+not required. This option may slightly increase the size of the archive,
+especially if \f2\-B\f1 or \f2\-Z\f1 is used.
+.IP "\f2\-d\f1 XXX \f2\-\-here-delimiter=\f1XXX"
+Use XXX to delimit the files in the shar instead of SHAR_EOF.
+This is for those who want to personalize their shar files.
+.SS "Producing different kinds of shars:"
+.IP "\f2\-V\f1 \f2\-\-vanilla-operation\f1"
+Produce "vanilla" shars which rely only upon the existence of sed and
+echo in the unsharing environment. In addition, "if test" must also
+be supported unless the \f2\-x\f1 option is used. The \f2\-V\f1 silently
+disables options offensive to the "network cop" (or "brown shirt"),
+but does warn you if it is specified with \f2\-B\f1, \f2-z\f1,
+\f2\-Z\f1, \f2\-p\f1 or \f2\-M\f1 (any of which does or might
+require uudecode, gzip or compress in the unsharing environment).
+.IP "\f2\-P\f1 \f2\-\-no-piping\f1"
+Use temporary files instead of pipes in the shar file.
+.IP "\f2\-x\f1 \f2\-\-no-check-existing\f1"
+Overwrite existing files without checking.
+If neither \f2\-x\f1 nor \f2\-X\f1 is specified, the unpack will
+check for and not overwrite existing files when unpacking the archive.
+If \f2\-c\f1 is passed as a parameter to the script when unpacking:
+
+.RS 10m
+sh archive -c
+.RE
+.IP ""
+then existing files will be overwritten unconditionally.
+.IP "\f2\-X\f1 \f2\-\-query-user\f1"
+When unpacking, interactively ask the user if files should be overwritten.
+(DO NOT USE FOR SHARS SUBMITTED TO THE NET).
+.IP "\f2\-m\f1 \f2\-\-no-timestamp\f1"
+Avoid generating 'touch' commands to restore the file modification
+dates when unpacking files from the archive.
+.IP "\f2\-Q\f1 \f2\-\-quiet-unshar\f1"
+Verbose OFF. Disables the inclusion of comments to be output when the archive
+is unpacked.
+.IP "\f2\-f\f1 \f2\-\-basename\f1"
+Restore by filename only, rather than path. This option causes only file
+names to be used, which is useful when building a shar from several
+directories, or another directory. Note that if a directory name is passed
+to shar, the substructure of that directory will be restored whether \f2\-f\f1
+is specified or not.
+.SS "Internationalization:"
+.IP "\f2\-\-no-i18n\f1"
+Do not produce internationalized shell archives, use default english messages.
+By default, shar produces archives that will try to output messages in
+the unpackers preferred language (as determined by the LANG/LC_MESSAGES
+environmental variables) when they are unpacked.
+If no message file for the unpackers language is found at unpack time,
+messages will be in english.
+.IP "\f2\-\-print-text-domain-dir\f1"
+Prints the directory shar looks in to find messages files for different
+languages, then immediately exits.
+.SH EXAMPLES
+.nf
+.ta 37n
+shar *.c > cprog.shar # all C prog sources
+shar \-Q *.[ch] > cprog.shar # non-verbose, .c and .h files
+shar \-B \-l28 \-oarc.sh *.arc # all binary .arc files, into
+ # files arc.sh.01 thru arc.sh.NN
+shar \-f /lcl/src/u*.c > u.sh # use only the filenames
+.ta
+.fi
+.SH WARNINGS
+.PP
+No chmod or touch is ever generated for directories created when unpacking.
+Thus, if a directory is given to shar, the protection and
+modification dates of corresponding unpacked directory
+may not match those of the original.
+.PP
+If a directory is passed to shar, it may be scanned more than once. Therefore,
+one should be careful not change the directory while shar is running.
+.PP
+Be careful that the output file(s) are not included in the inputs or shar
+may loop until the disk fills up. Be particularly careful when a directory
+is passed to shar that the output files are not in that directory
+(or a subdirectory of that directory).
+.PP
+Use of the \f2\-B\f1, \f2\-z\f1 or \f2\-Z\f1, and especially
+\f2\-M\f1, may slow the archive process considerably, depending on
+the number of files.
+.PP
+Use of \f2\-X\f1 produces shars which \f2WILL\f1 cause problems
+with many unshar procedures. Use this feature only for archives
+to be passed among agreeable parties. Certainly, \f2\-X\f1 is NOT
+for shell archives which are to be submitted to Usenet. Usage of
+\f2\-B\f1, \f2\-z\f1 or \f2\-Z\f1 in net shars will cause you to
+be flamed off the earth. Not using \f2\-m\f1 or not using \f2\-F\f1
+may also get you occasional complaints.
+.SH SEE ALSO
+.PP
+unshar(1)
+.SH DIAGNOSTICS
+.PP
+Error messages for illegal or incompatible options,
+for non-regular, missing or inaccessible files or for (unlikely)
+memory allocation failure.
+.SH AUTHORS
+The shar and unshar programs is the collective work of many authors.
+Many people contributed by reporting problems, suggesting
+various improvements or submitting actual code. A list of
+these people is in the THANKS file in the sharutils distribution.
+.SH REPORTING BUGS
+Report bugs to <bug-gnu-utils@gnu.org>. Please put
+.I sharutils
+or
+.I uuencode
+in the subject line. It helps to spot the message.
diff --git a/doc/sharutils.info b/doc/sharutils.info
new file mode 100644
index 0000000..391c496
--- /dev/null
+++ b/doc/sharutils.info
@@ -0,0 +1,1924 @@
+This is sharutils.info, produced by makeinfo version 4.8 from
+sharutils.texi.
+
+INFO-DIR-SECTION Archiving
+START-INFO-DIR-ENTRY
+* Shar utilities: (sharutils). Shell archiver, uuencode/uudecode.
+END-INFO-DIR-ENTRY
+INFO-DIR-SECTION Individual utilities
+START-INFO-DIR-ENTRY
+* mail-files: (sharutils)mail-files invocation. Send files to remote site.
+* mailshar: (sharutils)mailshar invocation. Make and send a shell archive.
+* shar: (sharutils)shar invocation. Make a shell archive.
+* unshar: (sharutils)unshar invocation. Explode a shell archive.
+* uudecode: (sharutils)uudecode invocation. Restore file from 7-bits.
+* uuencode: (sharutils)uuencode invocation. Force binary file to 7-bits.
+END-INFO-DIR-ENTRY
+
+ This manual documents version 4.7 of the GNU shar utilities.
+
+ Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+2003, 2004, 2005 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with no Front-Cover Texts,
+ and with no Back-Cover Texts. A copy of the license is included
+ in the section entitled "GNU Free Documentation License".
+
+
+File: sharutils.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
+
+GNU `shar' utilities
+********************
+
+This manual documents version 4.7 of the GNU shar utilities.
+
+ Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+2003, 2004, 2005 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with no Front-Cover Texts,
+ and with no Back-Cover Texts. A copy of the license is included
+ in the section entitled "GNU Free Documentation License".
+
+ GNU `shar' makes so-called shell archives out of many files,
+preparing them for transmission by electronic mail services, while
+`unshar' helps unpacking shell archives after reception. Other tools
+help using `shar' with the electronic mail system, and even allow
+synchronization of remote directory trees. This is release 4.7.
+
+* Menu:
+
+* Introduction:: Introduction to this toolset
+* Basic:: The basic `shar' utilities
+* Wrappers:: Simple wrappers around `shar'
+* Remsync:: Remote synchronisation of directories
+* GNU Free Documentation License:: The license for this documentation.
+
+ --- The Detailed Node Listing ---
+
+The basic `shar' utilities
+
+* shar invocation:: Invoking the `shar' program
+* unshar invocation:: Invoking the `unshar' program
+* Miscellaneous:: Miscellaneous considerations
+
+Invoking the `shar' program
+
+* Selecting:: Selecting files
+* Splitting:: Splitting output
+* Headers:: Controlling the shar headers
+* Stocking:: Selecting how files are stocked
+* Transmission:: Protecting against transmission
+* Kinds:: Producing different kinds of shar
+
+Simple wrappers around `shar'
+
+* Invoking mailshar:: The `mailshar' command and arguments
+* Invoking mail-files:: The `mail-files' command and arguments
+* Invoking find-mailer:: The `find-mailer' command and arguments
+
+Remote synchronisation of directories
+
+* Quick start:: Quick start at using `remsync'
+* Invoking remsync:: The `remsync' command and arguments
+* Conveniences:: Automatic mechanisms in the `remsync' program
+* Commands:: Commands for `remsync'
+* Internals:: How `remsync' works
+* Formats:: Related file formats
+* Xremsync:: Format of the `.remsync' file
+* Package:: Format of transiting packages
+* Alternatives:: Other means to synchronization
+* Previous:: Documentation for obsolete scripts
+
+The `remsync' command and arguments
+
+* Conveniences:: Automatic mechanisms in the `remsync' program
+* Commands:: Commands for `remsync'
+
+Related file formats
+
+* Xremsync:: Format of the `.remsync' file
+* Package:: Format of transiting packages
+
+Documentation for obsolete scripts
+
+* mailsync:: mailsync
+* resync:: resync
+
+GNU Free Documentation License
+
+* How to use this License for your documents::
+
+
+File: sharutils.info, Node: Introduction, Next: Basic, Prev: Top, Up: Top
+
+1 Introduction to this toolset
+******************************
+
+GNU `uuencode' and `uudecode' have an history which roots are lost in
+ages, and we will not even try to trace it. The current versions were
+brought into GNU by Ian Lance Taylor, and later modernized by Ulrich
+Drepper. GNU `shar' surely has a long history, too. All along this
+long road, numerous users contributed various improvements. The file
+`THANKS' in the distribution, as far as we know, contain the names of
+all contributors we could identify, and for which email addresses are
+seemingly valid.
+
+ Please help us getting the history straight, for the following
+information is somewhat approximative. James Gosling wrote the public
+domain `shar 1.x'. William Davidsen rewrote it as `shar 2.x'. Warren
+Tucker implemented modifications and called it `shar 3.x'. Richard
+Gumpertz maintained it until 1990. Franc,ois Pinard, from the public
+domain `shar 3.49', made `GNU shar 4.x', in 1994. Some modules and
+other code sections were freely borrowed from other GNU distributions,
+bringing this `shar' under the terms of the GNU General Public License.
+
+ The few wrapper scripts and the `remsync' program have been
+contributed more recently by Franc,ois Pinard, just as an attempt for
+making this GNU `sharutils' toolset more useful.
+
+ Your feedback helps us to make a better and more portable product.
+Mail suggestions and bug reports (including documentation errors) for
+these programs to `bug-gnu-utils@prep.ai.mit.edu'.
+
+
+File: sharutils.info, Node: Basic, Next: Wrappers, Prev: Introduction, Up: Top
+
+2 The basic `shar' utilities
+****************************
+
+GNU `shar' makes so-called shell archives out of many files, preparing
+them for transmission by electronic mail services. A "shell archive"
+is a collection of files that can be unpacked by `/bin/sh'. A wide
+range of features provide extensive flexibility in manufacturing shars
+and in specifying shar _smartness_. For example, `shar' may compress
+files, uuencode binary files, split long files and construct multi-part
+mailings, ensure correct unsharing order, and provide simplistic
+checksums. *Note shar invocation::.
+
+ GNU `unshar' scans a set of mail messages looking for the start of
+shell archives. It will automatically strip off the mail headers and
+other introductory text. The archive bodies are then unpacked by a
+copy of the shell. `unshar' may also process files containing
+concatenated shell archives. *Note unshar invocation::.
+
+* Menu:
+
+* shar invocation:: Invoking the `shar' program
+* unshar invocation:: Invoking the `unshar' program
+* Miscellaneous:: Miscellaneous considerations
+
+
+File: sharutils.info, Node: shar invocation, Next: unshar invocation, Prev: Basic, Up: Basic
+
+2.1 Invoking the `shar' program
+===============================
+
+The format of the `shar' command is one of:
+
+ shar [ OPTION ] ... FILE ...
+ shar -S [ OPTION ] ...
+
+ In the first form, the file list is given as command arguments. In
+the second form, the file list is read from standard input. The
+resulting archive is sent to standard output unless the `-o' option is
+given.
+
+ Options can be given in any order. Some options depend on each
+other: the `-o' option is required if the `-l' or `-L' option is used.
+The `-n' option is required if the `-a' option is used. Also see `-V'
+below.
+
+ Some options are special purpose:
+
+`--help'
+ Print a help summary on standard output, then immediately exits.
+
+`--version'
+ Print the version number of the program on standard output, then
+ immediately exits.
+
+`-q'
+`--quiet'
+ Verbose _off_ at `shar' time. Messages are usually issued on
+ standard error to let the user follow the progress, while making
+ the archives. This option inhibits these messages.
+
+
+* Menu:
+
+* Selecting:: Selecting files
+* Splitting:: Splitting output
+* Headers:: Controlling the shar headers
+* Stocking:: Selecting how files are stocked
+* Transmission:: Protecting against transmission
+* Kinds:: Producing different kinds of shar
+
+
+File: sharutils.info, Node: Selecting, Next: Splitting, Prev: shar invocation, Up: shar invocation
+
+2.1.1 Selecting files
+---------------------
+
+`-p'
+`--intermix-type'
+ Allow positional parameter options. The options `-M', `-B', `-T',
+ `-z' and `-Z' may be embedded, and files to the right of the
+ option will be processed in the specified mode. Without the `-p'
+ option, embedded options would be interpreted as file names.
+ *Note Stocking::.
+
+`-S'
+`--stdin-file-list'
+ Read list of files to be packed from the standard input rather
+ than from the command line. Input must be one file name per line.
+ This switch is especially useful when the command line will not
+ hold the list of files to be packed. For example:
+
+ find . -type f -print | \
+ shar -S -o /somewhere/big.shar
+
+ If `-p' is specified on the command line, then the options `-M',
+ `-B', `-T', `-z' and `-Z' may be included in the standard input
+ (on a line separate from file names). The maximum number of lines
+ of standard input, file names and options, may not exceed 1024.
+
+
+
+File: sharutils.info, Node: Splitting, Next: Headers, Prev: Selecting, Up: shar invocation
+
+2.1.2 Splitting output
+----------------------
+
+`-o PREFIX'
+`--output-prefix=PREFIX'
+ Save the archive to files `PREFIX.01' through `PREFIX.NNN' instead
+ of standard output. This option _must_ be used when the `-l' or
+ the `-L' switches are used.
+
+ When PREFIX contains any `%' character, PREFIX is then interpreted
+ as a `sprintf' format, which should be able to display a single
+ decimal number. When PREFIX does not contain such a `%'
+ character, the string `.%02d' is internally appended.
+
+`-l SIZE'
+`--whole-size-limit=SIZE'
+ Limit the output file size to SIZE times 1024 bytes but don't
+ split input files. This allows the recipient of the shell archives
+ to unpack them in any order.
+
+`-L SIZE'
+`--split-size-limit=SIZE'
+ Limit output file size to SIZE times 1024 bytes and split files if
+ necessary. The archives created with this option must be unpacked
+ in the correct order. If the recipient of the shell archives
+ wants to put all of them in a single folder, she shall save them
+ in the correct order for `unshar', used with option `-e', to
+ unpack them all at once. *Note unshar invocation::.
+
+ For people used to saving all the shell archives into a single mail
+ folder, care must be taken to save them in the appropriate order.
+ For those having the appropriate tools (like Masanobu Umeda's
+ `rmailsort' package for GNU Emacs), shell archives can be saved in
+ any order, then sorted by increasing date (or send time) before
+ massive unpacking.
+
+
+
+File: sharutils.info, Node: Headers, Next: Stocking, Prev: Splitting, Up: shar invocation
+
+2.1.3 Controlling the shar headers
+----------------------------------
+
+`-n NAME'
+`--archive-name=NAME'
+ Name of archive to be included in the header of the shar files.
+ Also see the `-a' switch further down.
+
+`-s ADDRESS'
+`--submitter=ADDRESS'
+ The `-s' option allows for overriding the email address for the
+ submitter, for when the default is not appropriate. The
+ automatically determined address looks like `USERNAME@HOSTNAME'.
+
+`-a'
+`--net-headers'
+ Allows automatic generation of headers:
+
+ Submitted-by: ADDRESS
+ Archive-name: NAME/partNN
+
+ The NAME must be given with the `-n' switch. If name includes a
+ `/', then `/part' isn't used. Thus `-n xyzzy' produces:
+ xyzzy/part01
+ xyzzy/part02
+
+ while `-n xyzzy/patch' produces:
+ xyzzy/patch01
+ xyzzy/patch02
+
+ and `-n xyzzy/patch01.' produces:
+ xyzzy/patch01.01
+ xyzzy/patch01.02
+
+`-c'
+`--cut-mark'
+ Start the shar with a cut line. A line saying `Cut here' is
+ placed at the start of each output file.
+
+`-t'
+`--translate'
+ Translate messages in the script. If you have set the `LANG'
+ environment variable, messages printed by `shar' will be in the
+ specified language. The produced script will still be emitted
+ using messages in the lingua franca of the computer world:
+ English. This option will cause the script messages to appear in
+ the languages specified by the `LANG' environment variable set
+ when the script is produced.
+
+
+
+File: sharutils.info, Node: Stocking, Next: Transmission, Prev: Headers, Up: shar invocation
+
+2.1.4 Selecting how files are stocked
+-------------------------------------
+
+`-T'
+`--text-files'
+ Treat all files as text, regardless of their contents.
+
+`-B'
+`--uuencode'
+ Treat all files as binary, use `uuencode' prior to packing. This
+ increases the size of the archive. The recipient must have
+ `uudecode' in order to unpack.
+
+ Use of `uuencode' is not appreciated by many on the net, because
+ people like to readily see, by mere inspection of a shell archive,
+ what it is about.
+
+`-M'
+`--mixed-uuencode'
+ Mixed mode. Automatically determine if the files are text or
+ binary and archive correctly. Files found to be binary are
+ uuencoded prior to packing. This option is selected by default.
+
+ For a file is considered to be a text file, instead of a binary
+ file, all the following should be true simultaneously:
+ 1. The file does not contain any ASCII control character besides
+ <BS> (backspace), <HT> (horizontal tab), <LF> (new line) or
+ <FF> (form feed).
+
+ 2. The file does not contains a <DEL> (delete).
+
+ 3. The file contains no character with its eighth-bit set.
+
+ 4. The file, unless totally empty, terminates with a <LF>
+ (newline).
+
+ 5. No line in the file contains more than 200 characters. For
+ counting purpose, lines are separated by a <LF> (newline).
+
+`-z'
+`--gzip'
+ Use `gzip' and `uuencode' on all files prior to packing. The
+ recipient must have `uudecode' and `gzip' (used with `-d') in
+ order to unpack.
+
+ Usage of `-z' in net shars will cause you to be flamed off the
+ earth.
+
+`-g LEVEL'
+`--level-for-gzip=LEVEL'
+ When doing compression, use `-LEVEL' as a parameter to `gzip'.
+ The `-g' option turns on the `-z' option by default. The default
+ value is 9, that is, maximum compression.
+
+`-j'
+`--bzip2'
+ Use `bzip2' and `uuencode' on all files prior to packing. The
+ recipient must have `uudecode' and `bzip2' (used with `-d') in
+ order to unpack.
+
+ Usage of `-j' in net shars will cause you to be flamed off to hell.
+
+`-Z'
+`--compress'
+ Use `compress' and `uuencode' on all files prior to packing. The
+ recipient must have `uudecode' and `compress' (used with `-d') in
+ order to unpack. Option `-C' is a synonymous for `-Z', but is
+ deprecated.
+
+ Usage of `-Z' in net shars will cause you to be flamed off the
+ earth.
+
+`-b BITS'
+`--bits-per-code=BITS'
+ When doing compression, use `-bX' as a parameter to `compress'.
+ The `-b' option turns on the `-Z' option by default. The default
+ value is 12, foreseeing the memory limitations of some `compress'
+ programs on smallish systems, at `unshar' time.
+
+
+
+File: sharutils.info, Node: Transmission, Next: Kinds, Prev: Stocking, Up: shar invocation
+
+2.1.5 Protecting against transmission errors
+--------------------------------------------
+
+Transmission of shell archives is not always free of errors. So one
+should make consistency checks on the receiving site. A very simple
+(and unreliable) method is running the UNIX `wc' tool on the output
+file. This can report the number of characters in the file.
+
+ As one can guess this does not catch all errors. Especially
+changing of a character value does not change the computed check sum.
+To achieve this goal better method were invented and standardized. One
+very strong is MD5 (MD = message digests). This is standardized in RFC
+1321. The produced shell scripts do not force the `md5sum' program to
+be installed on the system. This is necessary because it is not yet
+part of every UNIX. The program is however not necessary for producing
+the shell archive.
+
+`-w'
+`--no-character-count'
+ Do _not_ check with `wc -c' after unpack. The default is to check.
+
+`-D'
+`--no-md5-digest'
+ Do _not_ check with `md5sum' after unpack. The default is to
+ check.
+
+`-F'
+`--force-prefix'
+ Prepend the prefix character to every line even if not required.
+ This option may slightly increase the size of the archive,
+ especially if `-B' or `-Z' is used. Normally, the prefix character
+ is `X'. If the parameter to the `-d' option starts with `X', then
+ the prefix character becomes `Y'.
+
+`-d STRING'
+`--here-delimiter=STRING'
+ Use STRING to delimit the files in the shar instead of `SHAR_EOF'.
+ This is for those who want to personalize their shar files.
+
+
+
+File: sharutils.info, Node: Kinds, Prev: Transmission, Up: shar invocation
+
+2.1.6 Producing different kinds of shars
+----------------------------------------
+
+`-V'
+`--vanilla-operation'
+ This option produces "vanilla" shars which rely only upon the
+ existence of `echo', `test' and `sed' in the unpacking environment.
+
+ The `-V' disables options offensive to the "network cop" (or
+ "brown shirt"). It also changes the default from mixed mode `-M'
+ to text mode `-T'. Warnings are produced if option `-B', `-z',
+ `-j', `-Z', `-p' or `-M' is specified (any of which does or might
+ require `uudecode', `gzip', `bzip2' or `compress' in the unpacking
+ environment).
+
+`-P'
+`--no-piping'
+ In the shar file, use a temporary file to hold the file to
+ `uudecode', instead of using pipes. This option is mandatory when
+ you know the unpacking `uudecode' is unwilling to merely read its
+ standard input. Richard Marks wrote what is certainly the most
+ (in)famous of these, for MSDOS :-).
+
+ (Here is a side note from the maintainer. Why isnt't this option
+ the default? In the past history of `shar', it was decided that
+ piping was better, surely because it is less demanding on disk
+ space, and people seem to be happy with this. Besides, I think
+ that the `uudecode' from Richard Marks, on MSDOS, is wrong in
+ refusing to handle `stdin'. So far that I remember, he has the
+ strong opinion that a program without any parameters should give
+ its `--help' output. Besides that, should I say, his `uuencode'
+ and `uudecode' programs are full-featured, one of the most
+ complete set I ever saw. But Richard will not release his
+ sources, he wants to stay in control.)
+
+`-x'
+`--no-check-existing'
+ Overwrite existing files without checking. If neither `-x' nor
+ `-X' is specified, when unpacking itself, the shell archive will
+ check for and not overwrite existing files (unless `-c' is passed
+ as a parameter to the script when unpacking).
+
+`-X'
+`--query-user'
+ Interactively overwrite existing files.
+
+ Use of `-X' produces shars which _will_ cause problems with some
+ `unshar'-style procedures, particularily when used together with
+ vanilla mode (`-V'). Use this feature mainly for archives to be
+ passed among agreeable parties. Certainly, `-X' is _not_ for
+ shell archives which are to be submitted to Usenet or other public
+ networks.
+
+ The problem is that `unshar' programs or procedures often feed
+ `/bin/sh' from its standard input, thus putting `/bin/sh' and the
+ shell archive script in competition for input lines. As an
+ attempt to alleviate this problem, `shar' will try to detect if
+ `/dev/tty' exists at the receiving site and will use it to read
+ user replies. But this does not work in all cases, it may happen
+ that the receiving user will have to avoid using `unshar' programs
+ or procedures, and call `/bin/sh' directly. In vanilla mode,
+ using `/dev/tty' is not even attempted.
+
+`-m'
+`--no-timestamp'
+ Avoid generating `touch' commands to restore the file modification
+ dates when unpacking files from the archive.
+
+ When the timestamp relationship is not preserved, some files like
+ `configure' or `*.info' may be uselessly remade after unpacking.
+ This is why, when this option is not used, a special effort is
+ made to restore timestamps,
+
+`-Q'
+`--quiet-unshar'
+ Verbose _off_ at `unshar' time. Disables the inclusion of
+ comments to be output when the archive is unpacked.
+
+`-f'
+`--basename'
+ Use only the last file name component of each input file name,
+ ignoring any prefix directories. This is sometimes useful when
+ building a shar from several directories, or another directory.
+ If a directory name is passed to `shar', the substructure of that
+ directory will be restored whether `-f' is specified or not.
+
+
+
+File: sharutils.info, Node: unshar invocation, Next: Miscellaneous, Prev: shar invocation, Up: Basic
+
+2.2 Invoking the `unshar' program
+=================================
+
+The format of the `unshar' command is:
+
+ unshar [ OPTION ] ... [ FILE ... ]
+
+ Each FILE is processed in turn, as a shell archive or a collection
+of shell archives. If no files are given, then standard input is
+processed instead.
+
+ Options:
+
+`--version'
+ Print the version number of the program on standard output, then
+ immediately exits.
+
+`--help'
+ Print an help summary on standard output, then immediately exits.
+
+`-d DIRECTORY'
+`--directory=DIRECTORY'
+ Change directory to DIRECTORY before unpacking any files.
+
+`-c'
+`--overwrite'
+
+`-f'
+`--force'
+ Passed as an option to the shar file. Many shell archive scripts
+ (including those produced by `shar' 3.40 and newer) accepts a `-c'
+ argument to indicate that existing files should be overwritten.
+
+ The option `-f' is provided for a more unique interface. Many
+ programs (such as `cp' and `mv') use this option to trigger the
+ very same action.
+
+`-e'
+`--exit-0'
+ This option exists mainly for people who collect many shell
+ archives into a single mail folder. With this option, `unshar'
+ isolates each different shell archive from the others which have
+ been put in the same file, unpacking each in turn, from the
+ beginning of the file towards its end. Its proper operation
+ relies on the fact that many shar files are terminated by a
+ `exit 0' at the beginning of a line.
+
+ Option `-e' is internally equivalent to `-E "exit 0"'.
+
+`-E STRING'
+`--split-at=STRING'
+ This option works like `-e', but it allows you to specify the
+ string that separates archives if `exit 0' isn't appropriate.
+
+ For example, noticing that most `.signatures' have a `--' on a
+ line right before them, one can sometimes use `--split-at=--' for
+ splitting shell archives which lack the `exit 0' line at end. The
+ signature will then be skipped altogether with the headers of the
+ following message.
+
+
+
+File: sharutils.info, Node: Miscellaneous, Prev: unshar invocation, Up: Basic
+
+2.3 Miscellaneous considerations
+================================
+
+Here is a place-holder for many considerations which do not fit
+elsewhere, while not worth a section for themselves.
+
+ Be careful that the output file(s) are not included in the inputs or
+`shar' may loop until the disk fills up. Be particularly careful when
+a directory is passed to `shar' that the output files are not in that
+directory (or a subdirectory of that directory).
+
+ When a directory is passed to `shar', it may be scanned more than
+once, to conserve memory. Therefore, one should be careful to not
+change the directory contents while `shar' is running.
+
+ No attempt is made to restore the protection and modification dates
+for directories, even if this is done by default for files. Thus, if a
+directory is given to `shar', the protection and modification dates of
+corresponding unpacked directory may not match those of the original.
+
+ Use of the `-M' or `-B' options will slow down the archive process.
+Use of the `-z' or `-Z' options may slow the archive process
+considerably.
+
+ Let us conclude by a showing a few examples of `shar' usage:
+
+ shar *.c > cprog.shar
+ shar -Q *.[ch] > cprog.shar
+ shar -B -l28 -oarc.sh. *.arc
+ shar -f /lcl/src/u*.c > u.sh
+
+The first shows how to make a shell archive out of all C program
+sources. The second produces a shell archive with all `.c' and `.h'
+files, which unpacks silently. The third gives a shell archive of all
+uuencoded `.arc' files, into files `arc.sh.01' through to `arc.sh.NNN'.
+The last example gives a shell archive which will use only the file
+names at unpack time.
+
+
+File: sharutils.info, Node: Wrappers, Next: Remsync, Prev: Basic, Up: Top
+
+3 Simple wrappers around `shar'
+*******************************
+
+* Menu:
+
+* Invoking mailshar:: The `mailshar' command and arguments
+* Invoking mail-files:: The `mail-files' command and arguments
+* Invoking find-mailer:: The `find-mailer' command and arguments
+
+
+File: sharutils.info, Node: Invoking mailshar, Next: Invoking mail-files, Prev: Wrappers, Up: Wrappers
+
+3.1 The `mailshar' command and arguments
+========================================
+
+
+File: sharutils.info, Node: Invoking mail-files, Next: Invoking find-mailer, Prev: Invoking mailshar, Up: Wrappers
+
+3.2 The `mail-files' command and arguments
+==========================================
+
+
+File: sharutils.info, Node: Invoking find-mailer, Prev: Invoking mail-files, Up: Wrappers
+
+3.3 The `find-mailer' command and arguments
+===========================================
+
+
+File: sharutils.info, Node: Remsync, Prev: Wrappers, Up: Top
+
+4 Remote synchronisation of directories
+***************************************
+
+For using the `remsync' facility, besides `sharutils' of course, you
+also need `perl', GNU `tar', GNU `findutils' and `gzip', all installed.
+You also need a `sum' program which is BSD-compatible, for example the
+one from GNU `textutils'.
+
+ The `remsync' program tries to maintain up-to-date copies of whole
+hierarchy of files over many loosely connected sites, provided there is
+at least some slow electronic mail between them. It prepares and sends
+out specially packaged files called "synchronization packages", and is
+able to processes them after reception.
+
+ There is no _master_ site, each site has an equal opportunity to
+modify files, and modified files are propagated. Among many other
+commands, the `broadcast' command prepares and sends a synchronization
+package from the current site to all others, while the `process'
+command is used to apply synchronization packages locally after
+reception from remote sites. `remsync' will never send a file to
+another site without being asked to with the `broadcast' command, and
+besides the project synchronization state files (always named
+`.remsync'), it will never modify a file locally without being asked to
+with the `process' command.
+
+ The unit of transmission is a file, whatever its size may be.
+Nothing less than whole files are being transmitted. People deciding
+to cooperate in keeping a synchronized set of files must have trust
+each other, as each participant has the power of modifying the contents
+of files at other sites. When `remsync' is used by a single individual
+travelling between many sites, as it is often the case, this confidence
+problem should be easier to resolve :-).
+
+ The `process' command will modify a file without asking
+confirmation, as long as there is no reason to believe that the file
+has been modified at more than one place. When some confusion arises
+from the fact many people independently modified a single file, the
+receiving user of conflicting files will have the duty of resolving
+them into a merged version. So, the merging has to be done at the site
+where the discrepancy is observed, from where it is propagated again to
+others participants. There is no locking mechanism, so people should
+use other means, like electronic mail, for telling each other what they
+do, and which part of a project they are working on.
+
+* Menu:
+
+* Quick start:: Quick start at using `remsync'
+* Invoking remsync:: The `remsync' command and arguments
+* Conveniences:: Automatic mechanisms in the `remsync' program
+* Commands:: Commands for `remsync'
+* Internals:: How `remsync' works
+* Formats:: Related file formats
+* Xremsync:: Format of the `.remsync' file
+* Package:: Format of transiting packages
+* Alternatives:: Other means to synchronization
+* Previous:: Documentation for obsolete scripts
+
+
+File: sharutils.info, Node: Quick start, Next: Invoking remsync, Prev: Remsync, Up: Remsync
+
+4.1 Quick start at using `remsync'
+==================================
+
+If you are in a real hurry, you can follow the recipe given here, and
+postpone studying this manual further. However, we will consider only
+a simple case. In any case, it is good to read the full example, as it
+gives a good picture of the overall usage of `remsync'.
+
+ For any sizeable project, it might not be convenient to start with
+one site having it all and the other site having nothing, because this
+would cause the first synchronization to be huge. It is more practical
+to move over a copy of the project by other means, might it be
+diskettes, tapes, or `mailshar'. So let's presume both sites have a
+copy of the project, not necessarily identical, but close.
+
+ For the following example, we presume that under the same domain
+`champignac.land', there are two machines named `spirou' and
+`fantasio'. Further, the participating user on
+`spirou@spirou.champignac.land' has `spirou' for a login name, and
+similarily, the participating user on `fantasio.champignac.land' has
+`fantasio' for a login name. On the `spirou' machine, user `spirou'
+keeps the project under his home, in directory `spirou-copy', while on
+the `fantasio' machine, user `fantasio' keeps the project under his
+home, in directory `fantasio-copy'. Of course, user names might be the
+same, as well as the directories containing the project. We use
+different names here just to make the example clearer.
+
+ Here is a full transcript of the initialization session, normally
+executed only once, and slightly edited to make it more suitable for
+this manual. The example is broken down in little parts, allowing
+explanations and comments.
+
+ % cd ~/spirou-copy
+ % remsync
+ remsync (format *.*) - GNU sharutils *.*
+
+ >> mode init
+
+ init>> remote fantasio@fantasio.champignac.land ~/fantasio-copy
+ * Directory `~/spirou-copy is not ready for synchronization
+ Should I prepare it for its first time (y/n)? [y]
+ Please enter a short project description: Zorglub project
+ What is your full email address, here? [spirou@spirou.champignac.land]
+
+These commands prepare the `~/spirou-copy' hierarchy for
+synchronization. You should be located at the top directory of the
+hierarchy at the time the command `remsync' is called.
+
+ The `mode init' command instructs `remsync' that no files should be
+sent in the synchronization package, only their checksum. The goal
+here is to inform the other site of what we have, and what we don't,
+somewhat disregarding the fact the other site still looks like it has
+nothing yet.
+
+ The `remote' command is the key in establishing a synchronization
+link. It has two parameters, the first being the email address of the
+partner at the other site (as seen from here, if this matters), the
+second being the location of the directory where the package should
+reside on the remote site (as seen from there).
+
+ Because there is no `.remsync' file in the project's top-level
+directory, `remsync' concludes this is a first synchronization, and
+so, ask a few questions, often telling in square brackets what answer
+would be implied by a mere <Return> or <Enter>. If the default reply
+seems inappropriate, just give the correct information.
+
+ init>> broadcast
+
+ Broadcasting to address `fantasio@fantasio.champignac.land'
+ Studying local files for their signature
+ Registering file `file1'
+ Registering file `file2'
+ Registering file `file3'
+ * There were new registrations, please check them
+ Should I resume the current command (y/n)? [y]
+ Mailing shar to fantasio@fantasio.champignac.land
+ Message queued
+ Command `broadcast' done
+
+ init>> quit
+
+ %
+
+ The `broadcast' command produces an inventory of the project's files
+at this end, and mail it to the other partners. But before doing so,
+because some new files were registered into the synchronization, the
+user is given the opportunity of interrupting the command, if it is
+felt that some registered file should really not be there.
+
+ The `quit' command exits `remsync', but only once it created the
+`.remsync' file on disk.
+
+ _Then_, on `fantasio.champignac.land', user `fantasio' will receive
+the synchronization package, easily recognizable by the fact the string
+`.remsync.tar.gz' appears in the `Subject' header of the message.
+Let's assume `fantasio' saves the whole message as file
+`/tmp/synchro-message'. Then, `fantasio' might use the following
+recipe:
+
+ % cd /tmp
+ % unshar synchro-message
+ uudecoding file .remsync.tar.gz
+ % remsync process
+ Exploding archive `/tmp/.remsync.tar.gz'
+
+ Package being received:
+ from address `spirou@spirou.champignac.land'
+ for project `Zorglub project'
+ Visiting directory `~/fantasio-copy', remote was `~/spirou-copy'
+ Initializing file `.remsync' from received information
+ Studying local files for their signature
+ Command `process' done
+
+ In that `remsync process' call, the `process' command is being given
+non-interactively, so `remsync' avoids unneeded interactions and exits
+right away once the command is done. But equivalently, `remsync' might
+be called without arguments, the `process' command given interactively,
+and a `quit' command later required to get out of `remsync'.
+
+ When receiving a synchronization package, `remsync' should be
+executed in the directory where the file `.remsync.tar.gz' has been
+unpacked, which might be quite unrelated to the project itself. Here,
+`fantasio' executed `remsync' in `/tmp/', while the project resides in
+`~/fantasio-project'. The synchronization package itself contains
+enough information for `remsync' to automatically visit the proper
+directory.
+
+ After this operation, `fantasio.champignac.land' has a `.remsync'
+file in `~/fantasio-copy', and the remote synchronization
+initialization is completed. Either `spirou' or `fantasio' may then
+modify files on their respective machine. If `spirou' modifies `file2'
+in the project, `spirou' may execute:
+
+ % cd ~/spirou-copy
+ % remsync broadcast
+ Reading configuration for project `Zorglub project'
+
+ Broadcasting to address `fantasio@fantasio.champignac.land'
+ Studying local files for their signature
+ Packaging file `file2'
+ shar: Saving file2 (gzipped)
+ Mailing shar to fantasio@fantasio.champignac.land
+ Message queued
+ Command `broadcast' done
+
+ In fact, any time a participant later feel like sending modified
+files to all partners, s/he just have to change the directory to the
+top of the project hierarchy, then call `remsync broadcast'. Any time a
+synchronization package is later received, at either end, the receiving
+user should apply `unshar' to related electronic messages for
+reconstructing the synchronization package `.remsync.tar.gz', then call
+`remsync process' in the directory containing this package.
+
+
+File: sharutils.info, Node: Invoking remsync, Next: Conveniences, Prev: Quick start, Up: Remsync
+
+4.2 The `remsync' command and arguments
+=======================================
+
+At the shell prompt, calling the command `remsync' without any
+parameters initiates an interactive dialog, in which the user types
+commands and receives feedback from the program.
+
+ The command `remsync', given at the shell prompt, may have
+arguments, in which case these arguments taken together form one
+`remsync' interactive command. However, `--help' and `--version'
+options are interpreted especially, with their usual effect in GNU.
+Once this command has been executed, no more commands are taken from
+the user and `remsync' terminates execution. This allows for using
+`remsync' in some kind of batch mode. It is unwise to redirect
+`remsync' standard input, because user interactions might often be
+needed in ways difficult to predict in advance.
+
+ The two most common usages of `remsync' are the commands:
+
+ remsync b
+ remsync p
+
+ The first example executes the `broadcast' command, which sends
+synchronization packages to all connected remote sites for the current
+local directory tree.
+
+ The second example executes the `process' command, which studies and
+complies with a synchronisation package saved in the current directory
+(not necessarily into the synchronized directory tree), under the usual
+file name `remsync.tar.gz'.
+
+* Menu:
+
+* Conveniences:: Automatic mechanisms in the `remsync' program
+* Commands:: Commands for `remsync'
+
+
+File: sharutils.info, Node: Conveniences, Next: Commands, Prev: Invoking remsync, Up: Remsync
+
+4.3 Automatic mechanisms in the `remsync' program
+=================================================
+
+The following points apply to many of the `remsync' commands. We
+describe them here once and for all.
+
+ * The file `.remsync' describes the various properties for the
+ current synchronization. It is kept right in the top directory of
+ a synchronized directory tree. Some commands may be executed
+ without any need for this file. The program waits as far as
+ possible before reading it.
+
+ * If the `.remsync' file is not found when required, and only then,
+ the user is interactively asked to fill a questionnaire about it.
+
+ * If the `.remsync' file has been logically modified after having
+ been read, or if it just has been created, the program will save
+ it back on disk. But it will do so only before reading another
+ `.remsync' file, or just before exit. A preexisting `.remsync'
+ will be renamed to `.remsync.bak' before it is rewritten, when
+ this is done, any previous `.remsync.bak' file is discarded.
+
+ * Many commands refer to previously entered information by repeating
+ this information. For example, one can refer to a particular
+ `scan' statement by entering the wildcard to be scanned by this
+ statement. An alternative method of specifying a statement
+ consists in using the decimal number which appears between square
+ brackets in the result of a `list' command.
+
+ * Whenever a site list must be given, it is a space separated list of
+ remote sites. If the list is preceeded by a bang (<!>), the list
+ is complemented, that is, the sites that will be operated upon are
+ all those _not_ appearing in the list. As a special case, if the
+ site list is completely empty, then all sites are selected.
+
+
+
+File: sharutils.info, Node: Commands, Next: Internals, Prev: Conveniences, Up: Remsync
+
+4.4 Commands for `remsync'
+==========================
+
+Program commands to `remsync' may be given interactively by the user
+sitten at a terminal. They can come from the arguments of the
+`remsync' call at the shell level. Internally, the `process' command
+might obey many sub-commands found in a received synchronization
+package.
+
+ Program commands are given one per line. Lines beginning with a
+sharp (<#>) and white lines are ignored, they are meant to increase
+clarity or to introduce user comments. With only a few exceptions,
+commands are introduced by a keyword and often contains other keywords.
+In all cases, the keywords specific to `remsync' may be abbreviated to
+their first letter. When there are many keywords in succession, the
+space separating them may be omitted. So the following commands are
+all equivalent:
+
+ list remote
+ l remote
+ list r
+ l r
+ listremote
+ lr
+
+while the following are not legal:
+
+ l rem
+ lisremote
+
+ Below, for clarity, keywords are written in full and separated by
+spaces. Commands often accept parameters, which are then separated by
+spaces. All available commands are given in the table. The first few
+commands do not pre-require the file `.remsync'. The last three
+commands are almost never used interactively, but rather automatically
+triggered while `process''ing received synchronization packages.
+
+`?'
+ Display a quick help summary of available commands.
+
+`!' [ SHELL-COMMAND ]
+ If SHELL-COMMAND has been given, execute it right now as a shell
+ command. When not given, rather start an interactive shell.
+ Exiting from the shell will return to this program. The started
+ shell is taken from the `SHELL' environment variable if set, else
+ `sh' is used.
+
+`quit'
+ Leave the program normally and return to the shell.
+
+`abort'
+ Leave the program with a nonzero exit status and return to the
+ shell. No attempt is made to save a logically modified `.remsync'
+ file.
+
+`visit' DIRECTORY
+ Select another synchronized directory tree for any subsequent
+ operation. DIRECTORY is the top directory of the synchronized
+ directory tree.
+
+`process' [ FILE ]
+
+`list' [ TYPE ]
+ List all known statements about some information TYPE. Allowable
+ keywords for TYPE are `local', `remote', `scan', `ignore' and
+ `files'. The keyword `files' asks for all empty statements (see
+ later). If TYPE is omitted, then list all known statements for
+ all types, except those given by `files'.
+
+[ `create' ] TYPE VALUE
+ Create a new statement introducing a VALUE for a given TYPE.
+ Allowable keywords for TYPE are `remote', `scan' and `ignore'.
+ The `create' keyword may be omitted.
+
+ For `create' `ignore', when the pattern is preceeded by a bang
+ (<!>), the condition is reversed. That is, only those files which
+ do match the pattern will be kept for synchronization.
+
+`delete' TYPE VALUE
+ Delete an existing statement supporting some VALUE for a given
+ TYPE. Allowable keywords for TYPE are `remote', `scan' and
+ `ignore'.
+
+`email' REMOTE VALUE
+ Modify the electronic mail address associated with some REMOTE
+ site, giving it a new VALUE. The special `local' keyword for
+ REMOTE may be used to modify the local electronic mail address.
+
+`home' REMOTE VALUE
+ Modify the top directory of the synchronized directory tree
+ associated with some REMOTE site, giving it a new VALUE. The
+ special `local' keyword for REMOTE may be used to modify the local
+ top directory.
+
+`broadcast' SITE_LIST
+ Send by electronic mail an update package to all sites from
+ SITE_LIST, containing for each site all and only those files which
+ are known to be different between the remote site and here.
+
+`version' VERSION
+ This command is not meant for interactive use. It establishes the
+ `remsync' version needed to process the incoming commands.
+
+`from' SITE_LIST
+ This command is not really meant for interactive use. The first
+ site from the SITE_LIST is the remote site which originated the
+ synchronization package. All the others are all the sites,
+ including here, which were meant to be synchronized by the
+ `broadcast' command that was issued at the originating remote site.
+
+`sum' FILE CHECKSUM
+ This command is not really meant for interactive use. It declares
+ the CHECKSUM value of a particular FILE at the originating remote
+ site. Also, if at least one `sum' command is received, then it is
+ guaranteed that the originating remote site sent one `sum' command
+ for each and every file to be synchronized, so any found local
+ file which was not subject of any `sum' command does not exist
+ remotely.
+
+`if' FILE CHECKSUM PACKAGED
+ This command is not really meant for interactive use. It directs
+ the `remsync' program to check if a local FILE has a given
+ CHECKSUM. If the checksum agrees, then the local file will be
+ replaced by the PACKAGED file, as found in the received
+ synchronization invoice.
+
+
+
+File: sharutils.info, Node: Internals, Next: Formats, Prev: Commands, Up: Remsync
+
+4.5 How `remsync' works
+=======================
+
+How does `remsync' keep track of what is in sync, and what isn't?
+*Note Xremsync::, for a the documentation on the `.remsync' file
+format. I understand that a mere description of the format does not
+replace an explanation, but in the meantime, you might guess from the
+format how the program works.
+
+ All files are summarized by a checksum, computed by the `sum'
+program. There are a few variants of `sum' computing checksums in
+incompatible ways, under the control of options. `remsync' attempts to
+retrieve on each site a compatible way to do it, and complains if it
+cannot.
+
+ `remsync' does not compare dates or sizes. Experience shown that the
+best version of a file is not necessarily the one with the latest
+timestamp. The best version for a site is the current version on this
+site, as decided by its maintainer there, and this is this version that
+will be propagated.
+
+ Each site has an idea of the checksum of a file for all other sites.
+These checksums are not necessarily identical, for sites do not
+necessarily propagate to all others, and the propagation network maybe
+incomplete or asymmetrical in various ways.
+
+ Propagation is never done unattended. The user on a site has to call
+`remsync broadcast' to issue synchronization packages for other sites.
+If this is never done, the local modifications will never leave the
+site. The user also has to call `remsync process' to apply received
+synchronization packages. Applying a package does not automatically
+broadcast it further (maybe this could change?).
+
+ If a site A propagates some files to sites B and D, but not C, site
+B is informed that site D also received these files, and site D is
+informed that site B also received these files, so they will not
+propagate again the same files to one another. However, both site B
+and D are susceptible to propagate further the same files to site C.
+
+ It may happen that a site refuses to update a file, or modifies a
+file after having been received, or merges versions, or whatever. So,
+sites may have a wrong opinion of the file contents on other sites.
+These differences level down after a few exchanges, and it is very
+unlikely that a file would not be propagated when it should have.
+
+ This scheme works only when the various people handling the various
+files have confidence in one each other. If site B modifies a file
+after having received it from site A, the file will eventually be
+propagated back to site A. If the original file stayed undisturbed on
+site A, that is, if `remsync' proves that site B correctly knew the
+checksum of the original file, then the file will be replaced on site A
+without any user confirmation. So, the user on site A has to trust the
+changes made by the user on site B.
+
+ If the original file on site A had been modified after having been
+sent in a synchronization package, than it is the responsibility of the
+user on site A to correctly merge the local modifications with the
+modifications observed in the file as received from site B. This
+responsibility is real, since the merged file will later be propagated
+to the other sites in an authoritative way.
+
+
+File: sharutils.info, Node: Formats, Next: Xremsync, Prev: Internals, Up: Remsync
+
+4.6 Related file formats
+========================
+
+* Menu:
+
+* Xremsync:: Format of the `.remsync' file
+* Package:: Format of transiting packages
+
+
+File: sharutils.info, Node: Xremsync, Next: Package, Prev: Formats, Up: Remsync
+
+4.7 Format of the `.remsync' file
+=================================
+
+The `.remsync' file saves all the information a site needs for properly
+synchronizing a directory tree with remote sites. Even if it is meant
+to be editable using any ASCII editor, it has a very precise format and
+one should be very careful while modifying it directly, if ever. The
+`.remsync' file is better handled through the `remsync' program and
+commands.
+
+ The `.remsync' file is made up of statements, one per line. Each
+line begins with a statement keyword followed by a single <TAB>, then
+by one or more parameters. The keyword may be omitted, in this case,
+the keyword is said to be _empty_, and the line begins immediately with
+the <TAB>. After the <TAB>, if there are two parameters or more, they
+should all be separated with a single space. There should not be any
+space between the last parameter and the end of line (unless there are
+explicit empty parameters).
+
+ The following table gives the possible keywords. Their order of
+presentation in the table is also the order of appearance in the
+`.remsync' file.
+
+`remsync'
+ This statement identifies the `.remsync' format. The only
+ parameter states the file format version.
+
+`local'
+ This statement should appear exactly once, and has exactly two
+ parameters. The first parameter gives the electronic mail address
+ the other sites should use for sending synchronization packages
+ here. The second parameter gives the name of the local directory
+ tree to synchronize, in absolute notation.
+
+`remote'
+ This statement may appear zero, one or more times. Each occurrence
+ connects the synchronized directory tree to another tree on a
+ remote site. The first parameter gives one electronic mail
+ address where to send remote synchronization packages. The second
+ parameter gives the name of the corresponding directory tree for
+ this remote electronic mail address, in absolute notation.
+
+`scan'
+ This statement may appear zero, one or more times. When it does
+ not appear at all, the whole local directory tree will always be
+ scanned, searching for files to synchronize. When the statement
+ appears at least once, the whole local directory tree will not be
+ scanned, but only those files or directories appearing in one of
+ these statements. Each `scan' statement has exactly one
+ parameter, giving one file or directory to be studied. These are
+ usually given relative to top directory of the local
+ synchronization directory tree. Shell wildcards are acceptable.
+
+`ignore'
+ This statement may appear zero, one or more times. Each
+ occurrence has one parameter giving a regular expression,
+ according to Perl syntax for regular expressions. These REGEXPs
+ are applied against each file resulting from the scan. If any of
+ the `ignore' expression matches one of resulting file, the file is
+ discarded and is not subject to remote synchronization.
+
+
+ After all the statements beginning by the previous keywords, the
+`.remsync' file usually contains many statements having the empty
+keyword. The empty keyword statement may appear zero, one or more
+times. Each occurrence list one file being remotely synchronized. The
+first parameter gives an explicit file name, usually given relative to
+the top directory of the local synchronized directory tree. Shell
+wildcards are _not_ acceptable.
+
+ Besides the file name parameter, there are supplementary parameters
+to each empty keyword statement, each corresponding to one remote
+statement in the `.remsync' file. The second parameter corresponds to
+the first remote, the third parameter corresponds to the second remote,
+etc. If there are more remote statements than supplementary parameters,
+missing parameters are considered to be empty.
+
+ Each supplementary parameter usually gives the last known checksum
+value for this particular file, as computed on its corresponding
+_remote_ site. The parameter contains a dash `-' while the remote
+checksum is unknown. The checksum value for the _local_ copy of the
+file is never kept anywhere in the `.remsync' file. The special value
+`666' indicates a checksum from hell, used when the remote file is
+known to exist, but for which contradictory information has been
+received from various sources.
+
+
+File: sharutils.info, Node: Package, Next: Alternatives, Prev: Xremsync, Up: Remsync
+
+4.8 Format of synchronisation packages
+======================================
+
+Each synchronisation package is transmitted as a file named
+`.remsync.tar.gz', which has the format of a `tar' archive, further
+compressed with the `gzip' program. This archive always contains a
+file named `.remsync-work/orders', and zero or more files named
+`.remsync-work/1', `.remsync-work/2', etc. It contains no other files.
+Each numbered file is actually a full, non-modified file pertaining to
+the hierarchy of the project, as sent from the remote site.
+
+ The `.remsync-work/orders' file drives the processing of the
+received synchronization package. This ASCII file format quite closely
+resembles the `.remsync' format, which we do not explain again here.
+Only the keywords and their associated parameters are different, and
+there is no empty keyword. The following table gives the possible
+keywords, in the order where they normally appear.
+
+`format'
+`title'
+`here'
+`remote'
+`ignore'
+`scan'
+ All those keywords are used exactly the same way as within the
+ `.remsync' file, and their format is not explained again here.
+ They state the file format, project title, local and possibly many
+ remote identifications and directories, zero or more ignores, zero
+ or more scans; all of these exactly as known to the remote site who
+ created the synchronization package. In particular, the `here'
+ line states the originating site of the package rather than the
+ receiving one; the receiving site should still be described by one
+ of the `remote' lines.
+
+`visit'
+ This statement appears exactly once, and has one numeric parameter.
+ It specifies the zero-based index in the list of remote lines
+ above. The index identifies the receiving site, that is, the site
+ to which this package was sent.
+
+`copy'
+ This statement appears exactly once, and has one or more numeric
+ parameters. Each specifies a zero-based index in the list of
+ remote lines above. All indices specify the set of all sites who
+ where broadcasted simultaneously, at the time this synchronization
+ package was issued. The index specified by the `visit' line
+ should also be one of the indices of the `copy' lines. The order
+ in which the indices are given is important, as it also
+ establishes the order in which file signatures are listed on the
+ `check' lines below.
+
+`check'
+ This statement may appear zero, one or more times. Each occurrence
+ describes one file known to the project at the originating site,
+ and there is exactly one occurrence for each known file in the
+ project. Each `check' line has exactly N+2 parameters, where N is
+ the number of parameters of the `copy' command. The first
+ parameter gives a file name, relative to the top directory. The
+ second parameter gives the file signature for this file, as
+ computed at the originating site. For each remote site presented
+ in the `copy' command, and exactly in the same order, each
+ supplementary parameter gives the originator's idea of the
+ signature for the said file at this remote site. A dash (`-')
+ replaces the signature for a file known _not_ to exist.
+
+`update'
+ This statement may appear zero, one or more times. Each occurrence
+ describes what to do with one of the `.remsync-work/N' files,
+ distributed within the synchronization package. In fact, there
+ should be exactly as many `update' lines that there are numbered
+ files in the synchronization package. Usually, each `update' line
+ immediately follows the corresponding `check' line, and has
+ exactly three parameters. The first parameter gives a file name
+ in the project, relative to the top level directory of the
+ hierarchy. The second parameter gives a file signature which the
+ said file should have at the receiving site, for it to be replaced
+ safely, with no questions asked (this is the originator's idea of
+ what the file signature _was_, on the receiving site, prior to its
+ replacement). A dash (`-') replaces this signature for a file
+ known _not_ to exist. The third parameter is the number N, which
+ indicates the file `.remsync-work/N' in the synchronization
+ package distribution which should replace the corresponding
+ project file at the receiving site.
+
+
+
+File: sharutils.info, Node: Alternatives, Next: Previous, Prev: Package, Up: Remsync
+
+4.9 Other means to synchronization
+==================================
+
+One correspondent thinks that perhaps the news distribution mechanism
+could be pressed into service for this job. I could have started from
+C-news, say, instead of from scratch, and have progressively bent
+C-news to behave like I wanted.
+
+ My feeling is that the route was shorter as I did it, from scratch,
+that it would have been from C-news. Of course, I could have removed
+the heavy administrative details of C-news: the history and `expire',
+the daemons, the `cron' entries, etc., then added the interactive
+features and specialized behaviors, but all this clean up would
+certainly have took energies. Right now, non counting the subsidiary
+scripts and shar/unshar sources, the heart of the result is a single
+(1200 lines) script written in Perl, which I find fairly more smaller
+and maintainable than a patched C-news distribution would have been.
+
+
+File: sharutils.info, Node: Previous, Prev: Alternatives, Up: Remsync
+
+4.10 Documentation for obsolete scripts
+=======================================
+
+This is merely a place holder for previous documentation, waiting that I
+clean it up. You have no interest in reading further down.
+
+* Menu:
+
+* mailsync:: mailsync
+* resync:: resync
+
+
+File: sharutils.info, Node: mailsync, Next: resync, Prev: Previous, Up: Previous
+
+4.10.1 mailsync
+---------------
+
+ Usage: mailsync [ OPTION ] ... [ EMAIL_ADDRESS ] [ DIRECTORY ]
+ or: mailsync [ OPTION ] ... SYNC_DIRECTORY
+
+ Option -i simply sends a `ihave' package, with no bulk files.
+Option -n inhibits any destructive operation and mailing.
+
+ In the first form of the call, find a synchronisation directory in
+DIRECTORY aimed towards some EMAIL_ADDRESS, then proceed with this
+synchronisation directory. EMAIL_ADDRESS may be the name of a file
+containing a distribution list. If EMAIL_ADDRESS is not specified, all
+the synchronisation directories at the top level in DIRECTORY are
+processed in turn. If DIRECTORY is not specified, the current
+directory is used.
+
+ In the second form of the call, proceed only with the given
+synchronisation directory SYNC_DIRECTORY.
+
+ For proceeding with a synchronisation directory, whatever the form of
+the call was, this script reads the `ident' files it contains to set
+the local user and directory and the remote user and directory. Then,
+selected files under the local directory which are modified in regard
+to the corresponding files in the remote directory are turned into a
+synchronisation package which is mailed to the remote user.
+
+ The list of selected files or directories to synchronize from the
+local directory are given in the `list' file in the synchronisation
+directory. If this `list' file is missing, all files under the local
+directory are synchronized.
+
+ What I usually do is to `cd' at the top of the directory tree to be
+synchronized, then to type `mailsync' without parameters. This will
+automatically prepare as many synchronisation packages as there are
+mirror systems, then email multipart shars to each of them. Note that
+the synchronisation package is not identical for each mirror system,
+because they do not usually have the same state of synchronisation.
+
+ `mailsync' will refuse to work if anything needs to be hand cleaned
+from a previous execution of `mailsync' or `resync'. Check for some
+remaining `_syncbulk' or `_synctemp' directory, or for a `_syncrm'
+script.
+
+ TODO:
+ - interrogate the user if `ident' file missing.
+ - automatically construct the local user address.
+ - create the synchronisation directory on the fly.
+ - avoid duplicating work as far as possible for multiple sends.
+ - have a quicker mode, depending on stamps, not on checksums.
+ - never send core, executables, backups, `.nsf*', `*/_synctemp/*', etc.
+
+
+File: sharutils.info, Node: resync, Next: GNU Free Documentation License, Prev: mailsync, Up: Previous
+
+4.10.2 resync
+-------------
+
+ Usage: resync [ OPTION ]... TAR_FILE
+ or: resync [ OPTION ]... UNTARED_DIRECTORY
+
+ Given a tar file produced by mailsync at some remote end and already
+reconstructed on this end using unshar, or a directory containing the
+already untared invoice, apply the synchronization package locally.
+
+ Option -n inhibits destroying or creating files, but does everything
+else. It will in particular create a synchronization directory if
+necessary, produce the `_syncbulk' directory and the `_syncrm' script.
+
+ The synchronization directory for the package is automatically
+retrieved or, if not found, created and initialized. `resync' keeps
+telling you what it is doing.
+
+ There are a few cases when a resync should not complete without
+manual intervention. The common case is that several sites update the
+very same files differently since they were last resync'ed, and then
+mailsync to each other. The prerequisite checksum will then fail, and
+the files are then kept into the `_syncbulk' tree, which has a shape
+similar to the directory tree in which the files where supposed to go.
+For GNU Emacs users, a very handy package, called emerge, written by
+Dale Worley <drw@kutta.mit.edu>, helps reconciling two files
+interactiveley. The `_syncbulk' tree should be explicitely deleted
+after the hand synchronisation.
+
+ Another case of human intervention is when files are deleted at the
+mailsync'ing site. By choice, all deletions on the receiving side are
+accumulated in a `_syncrm' script, which is not executed automatically.
+Explicitely executed, `_syncrm' will remove any file in the receiving
+tree which does not exist anymore on the sender system. I often edit
+`_syncrm' before executing it, to remove the unwanted deletions (beware
+the double negation :-). The script removes itself.
+
+ All the temporary files, while resynchronizing, are held in
+`_synctemp', which is deleted afterwards; if something goes wrong, this
+directory should also be cleaned out by hand. `resync' will refuse to
+work if anything remains to be hand cleaned.
+
+ TODO:
+ - interrogates the user if missing receiving directory in `ident'.
+ - allow `remote.sum' to be empty or non-existent.
+
+
+File: sharutils.info, Node: GNU Free Documentation License, Prev: resync, Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+ Version 1.1, March 2000
+* Menu:
+
+* How to use this License for your documents::
+
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ written document "free" in the sense of freedom: to assure everyone
+ the effective freedom to copy and redistribute it, with or without
+ modifying it, either commercially or noncommercially. Secondarily,
+ this License preserves for the author and publisher a way to get
+ credit for their work, while not being considered responsible for
+ modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work that contains a
+ notice placed by the copyright holder saying it can be distributed
+ under the terms of this License. The "Document", below, refers to
+ any such manual or work. Any member of the public is a licensee,
+ and is addressed as "you".
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter
+ section of the Document that deals exclusively with the
+ relationship of the publishers or authors of the Document to the
+ Document's overall subject (or to related matters) and contains
+ nothing that could fall directly within that overall subject.
+ (For example, if the Document is in part a textbook of
+ mathematics, a Secondary Section may not explain any mathematics.)
+ The relationship could be a matter of historical connection with
+ the subject or with related matters, or of legal, commercial,
+ philosophical, ethical or political position regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, whose contents can be viewed and edited directly
+ and straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup has been designed
+ to thwart or discourage subsequent modification by readers is not
+ Transparent. A copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML designed for human modification.
+ Opaque formats include PostScript, PDF, proprietary formats that
+ can be read and edited only by proprietary word processors, SGML
+ or XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies of the Document numbering more than
+ 100, and the Document's license notice requires Cover Texts, you
+ must enclose the copies in covers that carry, clearly and legibly,
+ all these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a publicly-accessible
+ computer-network location containing a complete Transparent copy
+ of the Document, free of added material, which the general
+ network-using public has access to download anonymously at no
+ charge using public-standard network protocols. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that version
+ gives permission.
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in the
+ Modified Version, together with at least five of the principal
+ authors of the Document (all of its principal authors, if it
+ has less than five).
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified Version
+ under the terms of this License, in the form shown in the
+ Addendum below.
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page.
+ If there is no section entitled "History" in the Document,
+ create one stating the title, year, authors, and publisher of
+ the Document as given on its Title Page, then add an item
+ describing the Modified Version as stated in the previous
+ sentence.
+ J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to
+ conflict in title with any Invariant Section.
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties-for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition
+ of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections entitled
+ "History" in the various original documents, forming one section
+ entitled "History"; likewise combine any sections entitled
+ "Acknowledgements", and any sections entitled "Dedications". You
+ must delete all sections entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, does not as a whole count as a
+ Modified Version of the Document, provided no compilation
+ copyright is claimed for the compilation. Such a compilation is
+ called an "aggregate", and this License does not apply to the
+ other self-contained works thus compiled with the Document, on
+ account of their being thus compiled, if they are not themselves
+ derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one
+ quarter of the entire aggregate, the Document's Cover Texts may be
+ placed on covers that surround only the Document within the
+ aggregate. Otherwise they must appear on covers around the whole
+ aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License provided that you also include the
+ original English version of this License. In case of a
+ disagreement between the translation and the original English
+ version of this License, the original English version will prevail.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided for under this License. Any other
+ attempt to copy, modify, sublicense or distribute the Document is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ http://www.gnu.org/copyleft/.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation.
+
+
+
+File: sharutils.info, Node: How to use this License for your documents, Up: GNU Free Documentation License
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+If you have no Invariant Sections, write "with no Invariant
+Sections" instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover
+Texts being LIST"; likewise for Back-Cover Texts.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+
+Tag Table:
+Node: Top1335
+Node: Introduction4775
+Node: Basic6359
+Node: shar invocation7551
+Node: Selecting9054
+Node: Splitting10180
+Node: Headers11832
+Node: Stocking13471
+Node: Transmission16325
+Node: Kinds18015
+Node: unshar invocation21993
+Node: Miscellaneous24115
+Node: Wrappers25833
+Node: Invoking mailshar26201
+Node: Invoking mail-files26394
+Node: Invoking find-mailer26603
+Node: Remsync26788
+Node: Quick start29903
+Node: Invoking remsync36948
+Node: Conveniences38533
+Node: Commands40447
+Node: Internals45634
+Node: Formats48910
+Node: Xremsync49184
+Node: Package53638
+Node: Alternatives58123
+Node: Previous59146
+Node: mailsync59527
+Node: resync62095
+Node: GNU Free Documentation License64436
+Node: How to use this License for your documents82913
+
+End Tag Table
diff --git a/doc/sharutils.texi b/doc/sharutils.texi
new file mode 100644
index 0000000..110eac4
--- /dev/null
+++ b/doc/sharutils.texi
@@ -0,0 +1,1573 @@
+\input texinfo
+@c %**start of header
+@setfilename sharutils.info
+@settitle GNU @code{shar} utilities
+@dircategory Archiving
+@direntry
+* Shar utilities: (sharutils). Shell archiver, uuencode/uudecode.
+@end direntry
+@dircategory Individual utilities
+@direntry
+* mail-files: (sharutils)mail-files invocation. Send files to remote site.
+* mailshar: (sharutils)mailshar invocation. Make and send a shell archive.
+* shar: (sharutils)shar invocation. Make a shell archive.
+* unshar: (sharutils)unshar invocation. Explode a shell archive.
+* uudecode: (sharutils)uudecode invocation. Restore file from 7-bits.
+* uuencode: (sharutils)uuencode invocation. Force binary file to 7-bits.
+@end direntry
+
+@finalout
+@c %**end of header
+
+@include version.texi
+
+@copying
+This manual documents version @value{VERSION} of the GNU shar utilities.
+
+Copyright @copyright{} 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+@end quotation
+@end copying
+
+@titlepage
+@title GNU sharutils, version @value{VERSION}
+@subtitle A set of shell archiver utilities
+@subtitle Edition @value{EDITION}, @value{UPDATED}
+@author Jan Dj@"arv
+@author Fran@,cois Pinard
+
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@c If your makeinfo doesn't grok this @ifnottex directive, then either
+@c get a newer version of makeinfo or do s/ifnottex/ifinfo/ here and on
+@c the matching @end directive below.
+@ifnottex
+@node Top, Introduction, (dir), (dir)
+@top GNU @code{shar} utilities
+
+@insertcopying
+@end ifnottex
+
+@c @item @b{@code{sharutils}} @value{hfillkludge} (UtilD, SrcCD (??))
+@c
+GNU @code{shar} makes so-called shell archives out of many files,
+preparing them for transmission by electronic mail services,
+while @code{unshar} helps unpacking shell archives after reception.
+Other tools help using @code{shar} with the electronic mail system,
+and even allow synchronization of remote directory trees.
+This is release @value{VERSION}.
+
+@menu
+* Introduction:: Introduction to this toolset
+* Basic:: The basic @code{shar} utilities
+* Wrappers:: Simple wrappers around @code{shar}
+* Remsync:: Remote synchronisation of directories
+* GNU Free Documentation License:: The license for this documentation.
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+The basic @code{shar} utilities
+
+* shar invocation:: Invoking the @code{shar} program
+* unshar invocation:: Invoking the @code{unshar} program
+* Miscellaneous:: Miscellaneous considerations
+
+Invoking the @code{shar} program
+
+* Selecting:: Selecting files
+* Splitting:: Splitting output
+* Headers:: Controlling the shar headers
+* Stocking:: Selecting how files are stocked
+* Transmission:: Protecting against transmission
+* Kinds:: Producing different kinds of shar
+
+Simple wrappers around @code{shar}
+
+* Invoking mailshar:: The @code{mailshar} command and arguments
+* Invoking mail-files:: The @code{mail-files} command and arguments
+* Invoking find-mailer:: The @code{find-mailer} command and arguments
+
+Remote synchronisation of directories
+
+* Quick start:: Quick start at using @code{remsync}
+* Invoking remsync:: The @code{remsync} command and arguments
+* Conveniences:: Automatic mechanisms in the @code{remsync} program
+* Commands:: Commands for @code{remsync}
+* Internals:: How @code{remsync} works
+* Formats:: Related file formats
+* Xremsync:: Format of the @file{.remsync} file
+* Package:: Format of transiting packages
+* Alternatives:: Other means to synchronization
+* Previous:: Documentation for obsolete scripts
+
+The @code{remsync} command and arguments
+
+* Conveniences:: Automatic mechanisms in the @code{remsync} program
+* Commands:: Commands for @code{remsync}
+
+Related file formats
+
+* Xremsync:: Format of the @file{.remsync} file
+* Package:: Format of transiting packages
+
+Documentation for obsolete scripts
+
+* mailsync:: mailsync
+* resync:: resync
+
+GNU Free Documentation License
+
+* How to use this License for your documents::
+
+@end detailmenu
+@end menu
+
+@node Introduction, Basic, Top, Top
+@chapter Introduction to this toolset
+
+GNU @code{uuencode} and @code{uudecode} have an history which roots
+are lost in ages, and we will not even try to trace it. The current
+versions were brought into GNU by Ian Lance Taylor, and later
+modernized by Ulrich Drepper. GNU @code{shar} surely has a long
+history, too. All along this long road, numerous users contributed
+various improvements. The file @file{THANKS} in the distribution,
+as far as we know, contain the names of all contributors we could
+identify, and for which email addresses are seemingly valid.
+
+Please help us getting the history straight, for the following
+information is somewhat approximative. James Gosling wrote the
+public domain @code{shar 1.x}. William Davidsen rewrote it as
+@code{shar 2.x}. Warren Tucker implemented modifications and called
+it @code{shar 3.x}. Richard Gumpertz maintained it until 1990.
+Fran@,cois Pinard, from the public domain @code{shar 3.49}, made
+@code{GNU shar 4.x}, in 1994. Some modules and other code sections
+were freely borrowed from other GNU distributions, bringing this
+@code{shar} under the terms of the GNU General Public License.
+
+The few wrapper scripts and the @code{remsync} program have been
+contributed more recently by Fran@,cois Pinard, just as an
+attempt for making this GNU @code{sharutils} toolset more useful.
+
+Your feedback helps us to make a better and more portable product.
+Mail suggestions and bug reports (including documentation errors)
+for these programs to @file{bug-gnu-utils@@prep.ai.mit.edu}.
+
+@node Basic, Wrappers, Introduction, Top
+@chapter The basic @code{shar} utilities
+
+GNU @code{shar} makes so-called shell archives out of many files,
+preparing them for transmission by electronic mail services.
+A @dfn{shell archive} is a collection of files that can be unpacked by
+@code{/bin/sh}. A wide range of features provide extensive flexibility
+in manufacturing shars and in specifying shar @emph{smartness}. For
+example, @code{shar} may compress files, uuencode binary files, split
+long files and construct multi-part mailings, ensure correct unsharing
+order, and provide simplistic checksums. @xref{shar invocation}.
+
+GNU @code{unshar} scans a set of mail messages looking for the start
+of shell archives. It will automatically strip off the mail headers
+and other introductory text. The archive bodies are then unpacked by
+a copy of the shell. @code{unshar} may also process files containing
+concatenated shell archives. @xref{unshar invocation}.
+
+@menu
+* shar invocation:: Invoking the @code{shar} program
+* unshar invocation:: Invoking the @code{unshar} program
+* Miscellaneous:: Miscellaneous considerations
+@end menu
+
+@node shar invocation, unshar invocation, Basic, Basic
+@section Invoking the @code{shar} program
+@pindex shar
+
+The format of the @code{shar} command is one of:
+
+@example
+shar [ @var{option} ] @dots{} @var{file} @dots{}
+shar -S [ @var{option} ] @dots{}
+@end example
+
+In the first form, the file list is given as command arguments. In the
+second form, the file list is read from standard input. The resulting
+archive is sent to standard output unless the @code{-o} option is given.
+
+Options can be given in any order. Some options depend on each other:
+the @code{-o} option is required if the @code{-l} or @code{-L} option
+is used. The @code{-n} option is required if the @code{-a} option
+is used. Also see @code{-V} below.
+
+Some options are special purpose:
+
+@table @code
+
+@item --help
+Print a help summary on standard output, then immediately exits.
+
+@item --version
+Print the version number of the program on standard output, then
+immediately exits.
+
+@item -q
+@itemx --quiet
+Verbose @emph{off} at @code{shar} time. Messages are usually issued
+on standard error to let the user follow the progress, while making
+the archives. This option inhibits these messages.
+
+@end table
+
+@menu
+* Selecting:: Selecting files
+* Splitting:: Splitting output
+* Headers:: Controlling the shar headers
+* Stocking:: Selecting how files are stocked
+* Transmission:: Protecting against transmission
+* Kinds:: Producing different kinds of shar
+@end menu
+
+@node Selecting, Splitting, shar invocation, shar invocation
+@subsection Selecting files
+
+@table @code
+
+@item -p
+@itemx --intermix-type
+Allow positional parameter options. The options @code{-M}, @code{-B},
+@code{-T}, @code{-z} and @code{-Z} may be embedded, and files to
+the right of the option will be processed in the specified mode.
+Without the @code{-p} option, embedded options would be interpreted
+as file names.
+@c for more information on these options.
+@xref{Stocking}.
+
+@item -S
+@itemx --stdin-file-list
+Read list of files to be packed from the standard input rather
+than from the command line. Input must be one file name per line.
+This switch is especially useful when the command line will not hold
+the list of files to be packed. For example:
+
+@example
+find . -type f -print | \
+ shar -S -o /somewhere/big.shar
+@end example
+
+If @code{-p} is specified on the command line, then the options
+@code{-M}, @code{-B}, @code{-T}, @code{-z} and @code{-Z} may be
+included in the standard input (on a line separate from file names).
+The maximum number of lines of standard input, file names and options,
+may not exceed 1024.
+
+@end table
+
+@node Splitting, Headers, Selecting, shar invocation
+@subsection Splitting output
+
+@table @code
+
+@item -o @var{@var{prefix}}
+@itemx --output-prefix=@var{prefix}
+Save the archive to files @file{@var{prefix}.01} through
+@file{@var{prefix}.@var{nnn}} instead of standard output. This option
+@emph{must} be used when the @code{-l} or the @code{-L} switches
+are used.
+
+When @var{prefix} contains any @samp{%} character, @var{prefix} is then
+interpreted as a @code{sprintf} format, which should be able to display
+a single decimal number. When @var{prefix} does not contain such a
+@samp{%} character, the string @samp{.%02d} is internally appended.
+
+@item -l @var{size}
+@itemx --whole-size-limit=@var{size}
+Limit the output file size to @var{size} times 1024 bytes but don't
+split input files. This allows the recipient of the shell archives
+to unpack them in any order.
+
+@item -L @var{size}
+@itemx --split-size-limit=@var{size}
+Limit output file size to @var{size} times 1024 bytes and split files
+if necessary. The archives created with this option must be unpacked
+in the correct order. If the recipient of the shell archives wants to
+put all of them in a single folder, she shall save them in the correct
+order for @code{unshar}, used with option @code{-e}, to unpack them
+all at once. @xref{unshar invocation}.
+
+For people used to saving all the shell archives into a single mail
+folder, care must be taken to save them in the appropriate order.
+For those having the appropriate tools (like Masanobu Umeda's
+@code{rmailsort} package for GNU Emacs), shell archives can be saved
+in any order, then sorted by increasing date (or send time) before
+massive unpacking.
+
+@end table
+
+@node Headers, Stocking, Splitting, shar invocation
+@subsection Controlling the shar headers
+
+@table @code
+
+@item -n @var{name}
+@itemx --archive-name=@var{name}
+Name of archive to be included in the header of the shar files.
+Also see the @code{-a} switch further down.
+
+@item -s @var{address}
+@itemx --submitter=@var{address}
+The @code{-s} option allows for overriding the email address for the
+submitter, for when the default is not appropriate. The automatically
+determined address looks like @file{@var{username}@@@var{hostname}}.
+
+@item -a
+@itemx --net-headers
+Allows automatic generation of headers:
+
+@example
+Submitted-by: @var{address}
+Archive-name: @var{name}/part@var{nn}
+@end example
+
+The @var{name} must be given with the @code{-n} switch. If name
+includes a @samp{/}, then @samp{/part} isn't used. Thus
+@samp{-n xyzzy} produces:
+@example
+xyzzy/part01
+xyzzy/part02
+@end example
+
+@noindent
+while @samp{-n xyzzy/patch} produces:
+@example
+xyzzy/patch01
+xyzzy/patch02
+@end example
+
+@noindent
+and @samp{-n xyzzy/patch01.} produces:
+@example
+xyzzy/patch01.01
+xyzzy/patch01.02
+@end example
+
+@item -c
+@itemx --cut-mark
+Start the shar with a cut line. A line saying @samp{Cut here} is
+placed at the start of each output file.
+
+@item -t
+@itemx --translate
+Translate messages in the script. If you have set the @code{LANG} environment
+variable, messages printed by @code{shar} will be in the specified language.
+The produced script will still be emitted using messages in the lingua
+franca of the computer world: English. This option will cause the script
+messages to appear in the languages specified by the @code{LANG} environment
+variable set when the script is produced.
+
+@end table
+
+@node Stocking, Transmission, Headers, shar invocation
+@subsection Selecting how files are stocked
+
+@table @code
+
+@item -T
+@itemx --text-files
+Treat all files as text, regardless of their contents.
+
+@item -B
+@itemx --uuencode
+Treat all files as binary, use @code{uuencode} prior to packing. This
+increases the size of the archive. The recipient must have
+@code{uudecode} in order to unpack.
+
+@display
+Use of @code{uuencode} is not appreciated by many on the net, because
+people like to readily see, by mere inspection of a shell archive,
+what it is about.
+@end display
+
+@item -M
+@itemx --mixed-uuencode
+Mixed mode. Automatically determine if the files are text or binary
+and archive correctly. Files found to be binary are uuencoded prior
+to packing. This option is selected by default.
+
+For a file is considered to be a text file, instead of a binary file,
+all the following should be true simultaneously:
+@enumerate
+@item
+The file does not contain any ASCII control character besides @key{BS}
+(backspace), @key{HT} (horizontal tab), @key{LF} (new line) or @key{FF}
+(form feed).
+@item
+The file does not contains a @key{DEL} (delete).
+@item
+The file contains no character with its eighth-bit set.
+@item
+The file, unless totally empty, terminates with a @key{LF} (newline).
+@item
+No line in the file contains more than 200 characters. For counting
+purpose, lines are separated by a @key{LF} (newline).
+@end enumerate
+
+@item -z
+@itemx --gzip
+Use @code{gzip} and @code{uuencode} on all files prior to packing.
+The recipient must have @code{uudecode} and @code{gzip} (used with
+@code{-d}) in order to unpack.
+
+Usage of @code{-z} in net shars will cause you to be flamed off
+the earth.
+
+@item -g @var{level}
+@itemx --level-for-gzip=@var{level}
+When doing compression, use @code{-@var{level}} as a parameter to
+@code{gzip}. The @code{-g} option turns on the @code{-z} option
+by default. The default value is 9, that is, maximum compression.
+
+@item -j
+@itemx --bzip2
+Use @code{bzip2} and @code{uuencode} on all files prior to packing.
+The recipient must have @code{uudecode} and @code{bzip2} (used with
+@code{-d}) in order to unpack.
+
+Usage of @code{-j} in net shars will cause you to be flamed off
+to hell.
+
+@item -Z
+@itemx --compress
+Use @code{compress} and @code{uuencode} on all files prior to packing.
+The recipient must have @code{uudecode} and @code{compress} (used
+with @code{-d}) in order to unpack. Option @code{-C} is a synonymous
+for @code{-Z}, but is deprecated.
+
+Usage of @code{-Z} in net shars will cause you to be flamed off
+the earth.
+
+@item -b @var{bits}
+@itemx --bits-per-code=@var{bits}
+When doing compression, use @code{-b@var{x}} as a parameter to
+@code{compress}. The @code{-b} option turns on the @code{-Z}
+option by default. The default value is 12, foreseeing the memory
+limitations of some @code{compress} programs on smallish systems, at
+@code{unshar} time.
+
+@end table
+
+@node Transmission, Kinds, Stocking, shar invocation
+@subsection Protecting against transmission errors
+
+Transmission of shell archives is not always free of errors. So one
+should make consistency checks on the receiving site. A very simple
+(and unreliable) method is running the UNIX @code{wc} tool on the output
+file. This can report the number of characters in the file.
+
+As one can guess this does not catch all errors. Especially changing of
+a character value does not change the computed check sum. To achieve
+this goal better method were invented and standardized. One very strong
+is MD5 (MD = message digests). This is standardized in RFC 1321. The
+produced shell scripts do not force the @code{md5sum} program to be
+installed on the system. This is necessary because it is not yet part
+of every UNIX. The program is however not necessary for producing the
+shell archive.
+
+@table @code
+
+@item -w
+@itemx --no-character-count
+Do @emph{not} check with @samp{wc -c} after unpack. The default is
+to check.
+
+@item -D
+@itemx --no-md5-digest
+Do @emph{not} check with @samp{md5sum} after unpack. The default is
+to check.
+
+@item -F
+@itemx --force-prefix
+Prepend the prefix character to every line even if not required.
+This option may slightly increase the size of the archive, especially
+if @code{-B} or @code{-Z} is used. Normally, the prefix character
+is @samp{X}. If the parameter to the @code{-d} option starts with
+@samp{X}, then the prefix character becomes @samp{Y}.
+
+@item -d @var{string}
+@itemx --here-delimiter=@var{string}
+Use @var{string} to delimit the files in the shar instead of
+@samp{SHAR_EOF}. This is for those who want to personalize their
+shar files.
+
+@end table
+
+@node Kinds, , Transmission, shar invocation
+@subsection Producing different kinds of shars
+
+@table @code
+
+@item -V
+@itemx --vanilla-operation
+This option produces @dfn{vanilla} shars which rely only upon the
+existence of @code{echo}, @code{test} and @code{sed} in the unpacking
+environment.
+
+The @code{-V} disables options offensive to the @dfn{network cop}
+(or @dfn{brown shirt}). It also changes the default from mixed mode
+@code{-M} to text mode @code{-T}. Warnings are produced if option
+@code{-B}, @code{-z}, @code{-j}, @code{-Z}, @code{-p} or @code{-M} is
+specified (any of which does or might require @code{uudecode}, @code{gzip},
+@code{bzip2} or @code{compress} in the unpacking environment).
+
+@item -P
+@itemx --no-piping
+In the shar file, use a temporary file to hold the file to
+@code{uudecode}, instead of using pipes. This option is mandatory
+when you know the unpacking @code{uudecode} is unwilling to merely
+read its standard input. Richard Marks wrote what is certainly the
+most (in)famous of these, for MSDOS :-).
+
+(Here is a side note from the maintainer. Why isnt't this option
+the default? In the past history of @code{shar}, it was decided
+that piping was better, surely because it is less demanding on disk
+space, and people seem to be happy with this. Besides, I think
+that the @code{uudecode} from Richard Marks, on MSDOS, is wrong in
+refusing to handle @code{stdin}. So far that I remember, he has
+the strong opinion that a program without any parameters should
+give its @code{--help} output. Besides that, should I say, his
+@code{uuencode} and @code{uudecode} programs are full-featured, one
+of the most complete set I ever saw. But Richard will not release
+his sources, he wants to stay in control.)
+
+@item -x
+@itemx --no-check-existing
+Overwrite existing files without checking. If neither @code{-x} nor
+@code{-X} is specified, when unpacking itself, the shell archive will
+check for and not overwrite existing files (unless @code{-c} is passed
+as a parameter to the script when unpacking).
+
+@item -X
+@itemx --query-user
+Interactively overwrite existing files.
+
+Use of @code{-X} produces shars which @emph{will} cause problems
+with some @code{unshar}-style procedures, particularily when used
+together with vanilla mode (@code{-V}). Use this feature mainly for
+archives to be passed among agreeable parties. Certainly, @code{-X}
+is @emph{not} for shell archives which are to be submitted to Usenet
+or other public networks.
+
+The problem is that @code{unshar} programs or procedures often feed
+@file{/bin/sh} from its standard input, thus putting @file{/bin/sh}
+and the shell archive script in competition for input lines. As an
+attempt to alleviate this problem, @code{shar} will try to detect if
+@file{/dev/tty} exists at the receiving site and will use it to read
+user replies. But this does not work in all cases, it may happen that
+the receiving user will have to avoid using @code{unshar} programs
+or procedures, and call @code{/bin/sh} directly. In vanilla mode,
+using @file{/dev/tty} is not even attempted.
+
+@item -m
+@itemx --no-timestamp
+Avoid generating @code{touch} commands to restore the file modification
+dates when unpacking files from the archive.
+
+When the timestamp relationship is not preserved, some files like
+@file{configure} or @file{*.info} may be uselessly remade after
+unpacking. This is why, when this option is not used, a special
+effort is made to restore timestamps,
+
+@item -Q
+@itemx --quiet-unshar
+Verbose @emph{off} at @code{unshar} time. Disables the inclusion of
+comments to be output when the archive is unpacked.
+
+@item -f
+@itemx --basename
+Use only the last file name component of each input file name, ignoring
+any prefix directories. This is sometimes useful when building a shar
+from several directories, or another directory. If a directory name
+is passed to @code{shar}, the substructure of that directory will be
+restored whether @code{-f} is specified or not.
+
+@end table
+
+@node unshar invocation, Miscellaneous, shar invocation, Basic
+@section Invoking the @code{unshar} program
+@pindex unshar
+
+The format of the @code{unshar} command is:
+
+@example
+unshar [ @var{option} ] @dots{} [ @var{file} @dots{} ]
+@end example
+
+Each @var{file} is processed in turn, as a shell archive or a
+collection of shell archives. If no files are given, then standard
+input is processed instead.
+
+Options:
+
+@table @code
+
+@item --version
+Print the version number of the program on standard output, then
+immediately exits.
+
+@item --help
+Print an help summary on standard output, then immediately exits.
+
+@item -d @var{directory}
+@itemx --directory=@var{directory}
+Change directory to @var{directory} before unpacking any files.
+
+@item -c
+@itemx --overwrite
+@item -f
+@itemx --force
+Passed as an option to the shar file. Many shell archive scripts
+(including those produced by @code{shar} 3.40 and newer) accepts
+a @code{-c} argument to indicate that existing files should be
+overwritten.
+
+The option @code{-f} is provided for a more unique interface. Many
+programs (such as @code{cp} and @code{mv}) use this option to trigger
+the very same action.
+
+@item -e
+@itemx --exit-0
+This option exists mainly for people who collect many shell archives
+into a single mail folder. With this option, @code{unshar} isolates
+each different shell archive from the others which have been put in the
+same file, unpacking each in turn, from the beginning of the file
+towards its end. Its proper operation relies on the fact that many shar
+files are terminated by a @w{@samp{exit 0}} at the beginning of a line.
+
+Option @code{-e} is internally equivalent to @w{@code{-E "exit 0"}}.
+
+@item -E @var{string}
+@itemx --split-at=@var{string}
+This option works like @code{-e}, but it allows you to specify the
+string that separates archives if @samp{exit 0} isn't appropriate.
+
+For example, noticing that most @file{.signatures} have a @samp{--} on
+a line right before them, one can sometimes use @samp{--split-at=--}
+for splitting shell archives which lack the @samp{exit 0} line at end.
+The signature will then be skipped altogether with the headers of
+the following message.
+
+@end table
+
+@node Miscellaneous, , unshar invocation, Basic
+@section Miscellaneous considerations
+
+Here is a place-holder for many considerations which do not fit
+elsewhere, while not worth a section for themselves.
+
+Be careful that the output file(s) are not included in the inputs
+or @code{shar} may loop until the disk fills up. Be particularly
+careful when a directory is passed to @code{shar} that the output
+files are not in that directory (or a subdirectory of that directory).
+
+When a directory is passed to @code{shar}, it may be scanned more
+than once, to conserve memory. Therefore, one should be careful to
+not change the directory contents while @code{shar} is running.
+
+No attempt is made to restore the protection and modification dates
+for directories, even if this is done by default for files. Thus, if
+a directory is given to @code{shar}, the protection and modification
+dates of corresponding unpacked directory may not match those of
+the original.
+
+Use of the @code{-M} or @code{-B} options will slow down the archive
+process. Use of the @code{-z} or @code{-Z} options may slow the
+archive process considerably.
+
+Let us conclude by a showing a few examples of @code{shar} usage:
+
+@example
+shar *.c > cprog.shar
+shar -Q *.[ch] > cprog.shar
+shar -B -l28 -oarc.sh. *.arc
+shar -f /lcl/src/u*.c > u.sh
+@end example
+
+@noindent
+The first shows how to make a shell archive out of all C program
+sources. The second produces a shell archive with all @file{.c}
+and @file{.h} files, which unpacks silently. The third gives a shell
+archive of all uuencoded @file{.arc} files, into files @file{arc.sh.01}
+through to @file{arc.sh.@var{nnn}}. The last example gives a shell
+archive which will use only the file names at unpack time.
+
+@node Wrappers, Remsync, Basic, Top
+@chapter Simple wrappers around @code{shar}
+
+@menu
+* Invoking mailshar:: The @code{mailshar} command and arguments
+* Invoking mail-files:: The @code{mail-files} command and arguments
+* Invoking find-mailer:: The @code{find-mailer} command and arguments
+@end menu
+
+@node Invoking mailshar, Invoking mail-files, Wrappers, Wrappers
+@section The @code{mailshar} command and arguments
+
+@node Invoking mail-files, Invoking find-mailer, Invoking mailshar, Wrappers
+@section The @code{mail-files} command and arguments
+
+@node Invoking find-mailer, , Invoking mail-files, Wrappers
+@section The @code{find-mailer} command and arguments
+
+@node Remsync, , Wrappers, Top
+@chapter Remote synchronisation of directories
+
+For using the @code{remsync} facility, besides @code{sharutils} of
+course, you also need @code{perl}, GNU @code{tar}, GNU @code{findutils}
+and @code{gzip}, all installed. You also need a @code{sum} program
+which is BSD-compatible, for example the one from GNU @code{textutils}.
+
+The @code{remsync} program tries to maintain up-to-date copies of
+whole hierarchy of files over many loosely connected sites, provided
+there is at least some slow electronic mail between them. It prepares
+and sends out specially packaged files called @dfn{synchronization
+packages}, and is able to processes them after reception.
+
+There is no @emph{master} site, each site has an equal opportunity
+to modify files, and modified files are propagated. Among many
+other commands, the @code{broadcast} command prepares and sends a
+synchronization package from the current site to all others, while
+the @code{process} command is used to apply synchronization packages
+locally after reception from remote sites. @code{remsync} will
+never send a file to another site without being asked to with the
+@code{broadcast} command, and besides the project synchronization
+state files (always named @file{.remsync}), it will never modify a
+file locally without being asked to with the @code{process} command.
+
+The unit of transmission is a file, whatever its size may be.
+Nothing less than whole files are being transmitted. People deciding
+to cooperate in keeping a synchronized set of files must have trust
+each other, as each participant has the power of modifying the
+contents of files at other sites. When @code{remsync} is used by a
+single individual travelling between many sites, as it is often the
+case, this confidence problem should be easier to resolve :-).
+
+The @code{process} command will modify a file without asking
+confirmation, as long as there is no reason to believe that the file
+has been modified at more than one place. When some confusion arises
+from the fact many people independently modified a single file, the
+receiving user of conflicting files will have the duty of resolving
+them into a merged version. So, the merging has to be done at the
+site where the discrepancy is observed, from where it is propagated
+again to others participants. There is no locking mechanism, so people
+should use other means, like electronic mail, for telling each other
+what they do, and which part of a project they are working on.
+
+@menu
+* Quick start:: Quick start at using @code{remsync}
+* Invoking remsync:: The @code{remsync} command and arguments
+* Conveniences:: Automatic mechanisms in the @code{remsync} program
+* Commands:: Commands for @code{remsync}
+* Internals:: How @code{remsync} works
+* Formats:: Related file formats
+* Xremsync:: Format of the @file{.remsync} file
+* Package:: Format of transiting packages
+* Alternatives:: Other means to synchronization
+* Previous:: Documentation for obsolete scripts
+@end menu
+
+@node Quick start, Invoking remsync, Remsync, Remsync
+@section Quick start at using @code{remsync}
+
+If you are in a real hurry, you can follow the recipe given here,
+and postpone studying this manual further. However, we will consider
+only a simple case. In any case, it is good to read the full example,
+as it gives a good picture of the overall usage of @code{remsync}.
+
+For any sizeable project, it might not be convenient to start with
+one site having it all and the other site having nothing, because
+this would cause the first synchronization to be huge. It is more
+practical to move over a copy of the project by other means, might it
+be diskettes, tapes, or @code{mailshar}. So let's presume both sites
+have a copy of the project, not necessarily identical, but close.
+
+For the following example, we presume that under the same
+domain @file{champignac.land}, there are two machines named
+@file{spirou} and @file{fantasio}. Further, the participating
+user on @file{spirou@@spirou.champignac.land} has @file{spirou}
+for a login name, and similarily, the participating user on
+@file{fantasio.champignac.land} has @file{fantasio} for a login name.
+On the @file{spirou} machine, user @file{spirou} keeps the project
+under his home, in directory @file{spirou-copy}, while on the
+@file{fantasio} machine, user @file{fantasio} keeps the project under
+his home, in directory @file{fantasio-copy}. Of course, user names
+might be the same, as well as the directories containing the project.
+We use different names here just to make the example clearer.
+
+Here is a full transcript of the initialization session, normally
+executed only once, and slightly edited to make it more suitable for
+this manual. The example is broken down in little parts, allowing
+explanations and comments.
+
+@example
+% cd ~/spirou-copy
+% remsync
+remsync (format *.*) - GNU sharutils *.*
+
+>> mode init
+
+init>> remote fantasio@@fantasio.champignac.land ~/fantasio-copy
+* Directory `~/spirou-copy is not ready for synchronization
+Should I prepare it for its first time (y/n)? [y]
+Please enter a short project description: Zorglub project
+What is your full email address, here? [spirou@@spirou.champignac.land]
+@end example
+
+@noindent
+These commands prepare the @file{~/spirou-copy} hierarchy for
+synchronization. You should be located at the top directory of
+the hierarchy at the time the command @code{remsync} is called.
+
+The @samp{mode init} command instructs @code{remsync} that no files
+should be sent in the synchronization package, only their checksum.
+The goal here is to inform the other site of what we have, and what
+we don't, somewhat disregarding the fact the other site still looks
+like it has nothing yet.
+
+The @code{remote} command is the key in establishing a synchronization
+link. It has two parameters, the first being the email address of the
+partner at the other site (as seen from here, if this matters), the
+second being the location of the directory where the package should
+reside on the remote site (as seen from there).
+
+Because there is no @file{.remsync} file in the project's top-level
+directory, @code{remsync} concludes this is a first synchronization,
+and so, ask a few questions, often telling in square brackets what
+answer would be implied by a mere @key{Return} or @key{Enter}. If the
+default reply seems inappropriate, just give the correct information.
+
+@example
+init>> broadcast
+
+ Broadcasting to address `fantasio@@fantasio.champignac.land'
+ Studying local files for their signature
+ Registering file `file1'
+ Registering file `file2'
+ Registering file `file3'
+* There were new registrations, please check them
+Should I resume the current command (y/n)? [y]
+Mailing shar to fantasio@@fantasio.champignac.land
+Message queued
+ Command `broadcast' done
+
+init>> quit
+
+%
+@end example
+
+The @code{broadcast} command produces an inventory of the project's
+files at this end, and mail it to the other partners. But before doing
+so, because some new files were registered into the synchronization,
+the user is given the opportunity of interrupting the command, if it
+is felt that some registered file should really not be there.
+
+The @code{quit} command exits @code{remsync}, but only once it created
+the @file{.remsync} file on disk.
+
+@emph{Then}, on @file{fantasio.champignac.land}, user @file{fantasio}
+will receive the synchronization package, easily recognizable by the
+fact the string @samp{.remsync.tar.gz} appears in the @code{Subject}
+header of the message. Let's assume @file{fantasio} saves the whole
+message as file @file{/tmp/synchro-message}. Then, @file{fantasio}
+might use the following recipe:
+
+@example
+% cd /tmp
+% unshar synchro-message
+uudecoding file .remsync.tar.gz
+% remsync process
+ Exploding archive `/tmp/.remsync.tar.gz'
+
+ Package being received:
+ from address `spirou@@spirou.champignac.land'
+ for project `Zorglub project'
+ Visiting directory `~/fantasio-copy', remote was `~/spirou-copy'
+ Initializing file `.remsync' from received information
+ Studying local files for their signature
+ Command `process' done
+@end example
+
+In that @samp{remsync process} call, the @code{process} command is
+being given non-interactively, so @code{remsync} avoids unneeded
+interactions and exits right away once the command is done.
+But equivalently, @code{remsync} might be called without arguments,
+the @code{process} command given interactively, and a @code{quit}
+command later required to get out of @code{remsync}.
+
+When receiving a synchronization package, @code{remsync} should be
+executed in the directory where the file @file{.remsync.tar.gz} has
+been unpacked, which might be quite unrelated to the project itself.
+Here, @file{fantasio} executed @code{remsync} in @file{/tmp/}, while
+the project resides in @file{~/fantasio-project}. The synchronization
+package itself contains enough information for @code{remsync} to
+automatically visit the proper directory.
+
+After this operation, @file{fantasio.champignac.land} has a
+@file{.remsync} file in @file{~/fantasio-copy}, and the remote
+synchronization initialization is completed. Either @file{spirou}
+or @file{fantasio} may then modify files on their respective machine.
+If @file{spirou} modifies @file{file2} in the project, @file{spirou}
+may execute:
+
+@example
+% cd ~/spirou-copy
+% remsync broadcast
+ Reading configuration for project `Zorglub project'
+
+ Broadcasting to address `fantasio@@fantasio.champignac.land'
+ Studying local files for their signature
+ Packaging file `file2'
+shar: Saving file2 (gzipped)
+Mailing shar to fantasio@@fantasio.champignac.land
+Message queued
+ Command `broadcast' done
+@end example
+
+In fact, any time a participant later feel like sending modified files
+to all partners, s/he just have to change the directory to the top of
+the project hierarchy, then call @samp{remsync broadcast}. Any time a
+synchronization package is later received, at either end, the receiving
+user should apply @code{unshar} to related electronic messages for
+reconstructing the synchronization package @file{.remsync.tar.gz}, then
+call @samp{remsync process} in the directory containing this package.
+
+@node Invoking remsync, Conveniences, Quick start, Remsync
+@section The @code{remsync} command and arguments
+
+At the shell prompt, calling the command @code{remsync} without any
+parameters initiates an interactive dialog, in which the user types
+commands and receives feedback from the program.
+
+The command @code{remsync}, given at the shell prompt, may have
+arguments, in which case these arguments taken together form one
+@code{remsync} interactive command. However, @samp{--help} and
+@samp{--version} options are interpreted especially, with their usual
+effect in GNU. Once this command has been executed, no more commands
+are taken from the user and @code{remsync} terminates execution.
+This allows for using @code{remsync} in some kind of batch mode.
+It is unwise to redirect @code{remsync} standard input, because
+user interactions might often be needed in ways difficult to predict
+in advance.
+
+The two most common usages of @code{remsync} are the commands:
+
+@example
+remsync b
+remsync p
+@end example
+
+The first example executes the @code{broadcast} command, which sends
+synchronization packages to all connected remote sites for the current
+local directory tree.
+
+The second example executes the @code{process} command, which studies
+and complies with a synchronisation package saved in the current
+directory (not necessarily into the synchronized directory tree), under
+the usual file name @file{remsync.tar.gz}.
+
+@menu
+* Conveniences:: Automatic mechanisms in the @code{remsync} program
+* Commands:: Commands for @code{remsync}
+@end menu
+
+@node Conveniences, Commands, Invoking remsync, Remsync
+@section Automatic mechanisms in the @code{remsync} program
+
+The following points apply to many of the @code{remsync} commands.
+We describe them here once and for all.
+
+@itemize @bullet
+
+@item
+The file @file{.remsync} describes the various properties for the
+current synchronization. It is kept right in the top directory of a
+synchronized directory tree. Some commands may be executed without any
+need for this file. The program waits as far as possible before reading
+it.
+
+@item
+If the @file{.remsync} file is not found when required, and only then,
+the user is interactively asked to fill a questionnaire about it.
+
+@item
+If the @file{.remsync} file has been logically modified after having
+been read, or if it just has been created, the program will save it back
+on disk. But it will do so only before reading another @file{.remsync}
+file, or just before exit. A preexisting @file{.remsync} will be
+renamed to @file{.remsync.bak} before it is rewritten, when this is
+done, any previous @file{.remsync.bak} file is discarded.
+
+@item
+Many commands refer to previously entered information by repeating this
+information. For example, one can refer to a particular @code{scan}
+statement by entering the wildcard to be scanned by this statement.
+An alternative method of specifying a statement consists in using the
+decimal number which appears between square brackets in the result
+of a @code{list} command.
+
+@item
+Whenever a site list must be given, it is a space separated list of
+remote sites. If the list is preceeded by a bang (@key{!}), the list is
+complemented, that is, the sites that will be operated upon are all
+those @emph{not} appearing in the list. As a special case, if the site
+list is completely empty, then all sites are selected.
+
+@end itemize
+
+@node Commands, Internals, Conveniences, Remsync
+@section Commands for @code{remsync}
+
+Program commands to @code{remsync} may be given interactively by the
+user sitten at a terminal. They can come from the arguments of the
+@code{remsync} call at the shell level. Internally, the @code{process}
+command might obey many sub-commands found in a received synchronization
+package.
+
+Program commands are given one per line. Lines beginning with a sharp
+(@key{#}) and white lines are ignored, they are meant to increase
+clarity or to introduce user comments. With only a few exceptions,
+commands are introduced by a keyword and often contains other keywords.
+In all cases, the keywords specific to @code{remsync} may be abbreviated
+to their first letter. When there are many keywords in succession, the
+space separating them may be omitted. So the following commands are
+all equivalent:
+
+@example
+list remote
+l remote
+list r
+l r
+listremote
+lr
+@end example
+
+@noindent
+while the following are not legal:
+
+@example
+l rem
+lisremote
+@end example
+
+Below, for clarity, keywords are written in full and separated by
+spaces. Commands often accept parameters, which are then separated by
+spaces. All available commands are given in the table. The first few
+commands do not pre-require the file @file{.remsync}. The last three
+commands are almost never used interactively, but rather automatically
+triggered while @code{process}'ing received synchronization packages.
+
+@table @asis
+
+@item @code{?}
+
+Display a quick help summary of available commands.
+
+@item @code{!} [ @var{shell-command} ]
+
+If @var{shell-command} has been given, execute it right now as a shell
+command. When not given, rather start an interactive shell. Exiting
+from the shell will return to this program. The started shell is taken
+from the @code{SHELL} environment variable if set, else @code{sh} is
+used.
+
+@item @code{quit}
+
+Leave the program normally and return to the shell.
+
+@item @code{abort}
+
+Leave the program with a nonzero exit status and return to the shell.
+No attempt is made to save a logically modified @file{.remsync} file.
+
+@item @code{visit} @var{directory}
+
+Select another synchronized directory tree for any subsequent operation.
+@var{directory} is the top directory of the synchronized directory tree.
+
+@item @code{process} [ @var{file} ]
+
+@item @code{list} [ @var{type} ]
+
+List all known statements about some information @var{type}. Allowable
+keywords for @var{type} are @code{local}, @code{remote}, @code{scan},
+@code{ignore} and @code{files}. The keyword @code{files} asks for all
+empty statements (see later). If @var{type} is omitted, then list all
+known statements for all types, except those given by @code{files}.
+
+@item [ @code{create} ] @var{type} @var{value}
+
+Create a new statement introducing a @var{value} for a given @var{type}.
+Allowable keywords for @var{type} are @code{remote}, @code{scan} and
+@code{ignore}. The @code{create} keyword may be omitted.
+
+For @code{create} @code{ignore}, when the pattern is preceeded by a bang
+(@key{!}), the condition is reversed. That is, only those files which
+do match the pattern will be kept for synchronization.
+
+@item @code{delete} @var{type} @var{value}
+
+Delete an existing statement supporting some @var{value} for a given
+@var{type}. Allowable keywords for @var{type} are @code{remote},
+@code{scan} and @code{ignore}.
+
+@item @code{email} @var{remote} @var{value}
+
+Modify the electronic mail address associated with some @var{remote}
+site, giving it a new @var{value}. The special @code{local} keyword for
+@var{remote} may be used to modify the local electronic mail address.
+
+@item @code{home} @var{remote} @var{value}
+
+Modify the top directory of the synchronized directory tree associated
+with some @var{remote} site, giving it a new @var{value}. The special
+@code{local} keyword for @var{remote} may be used to modify the local
+top directory.
+
+@item @code{broadcast} @var{site_list}
+
+Send by electronic mail an update package to all sites from
+@var{site_list}, containing for each site all and only those files which
+are known to be different between the remote site and here.
+
+@item @code{version} @var{version}
+
+This command is not meant for interactive use. It establishes the
+@code{remsync} version needed to process the incoming commands.
+
+@item @code{from} @var{site_list}
+
+This command is not really meant for interactive use. The first site
+from the @var{site_list} is the remote site which originated the
+synchronization package. All the others are all the sites, including
+here, which were meant to be synchronized by the @code{broadcast}
+command that was issued at the originating remote site.
+
+@item @code{sum} @var{file} @var{checksum}
+
+This command is not really meant for interactive use. It declares the
+@var{checksum} value of a particular @var{file} at the originating
+remote site. Also, if at least one @code{sum} command is received, then
+it is guaranteed that the originating remote site sent one @code{sum}
+command for each and every file to be synchronized, so any found local
+file which was not subject of any @code{sum} command does not exist
+remotely.
+
+@item @code{if} @var{file} @var{checksum} @var{packaged}
+
+This command is not really meant for interactive use. It directs the
+@code{remsync} program to check if a local @var{file} has a given
+@var{checksum}. If the checksum agrees, then the local file will be
+replaced by the @var{packaged} file, as found in the received
+synchronization invoice.
+
+@end table
+
+@node Internals, Formats, Commands, Remsync
+@section How @code{remsync} works
+
+How does @code{remsync} keep track of what is in sync, and what isn't?
+@xref{Xremsync}, for a the documentation on the @file{.remsync} file
+format. I understand that a mere description of the format does not
+replace an explanation, but in the meantime, you might guess from the
+format how the program works.
+
+All files are summarized by a checksum, computed by the @code{sum} program.
+There are a few variants of @code{sum} computing checksums in incompatible
+ways, under the control of options. @code{remsync} attempts to retrieve on
+each site a compatible way to do it, and complains if it cannot.
+
+@code{remsync} does not compare dates or sizes. Experience shown that the
+best version of a file is not necessarily the one with the latest
+timestamp. The best version for a site is the current version on this
+site, as decided by its maintainer there, and this is this version
+that will be propagated.
+
+Each site has an idea of the checksum of a file for all other sites.
+These checksums are not necessarily identical, for sites do not
+necessarily propagate to all others, and the propagation network maybe
+incomplete or asymmetrical in various ways.
+
+Propagation is never done unattended. The user on a site has to call
+@code{remsync broadcast} to issue synchronization packages for other sites.
+If this is never done, the local modifications will never leave the
+site. The user also has to call @code{remsync process} to apply received
+synchronization packages. Applying a package does not automatically
+broadcast it further (maybe this could change?).
+
+If a site @var{A} propagates some files to sites @var{B} and @var{D},
+but not @var{C}, site @var{B} is informed that site @var{D} also
+received these files, and site @var{D} is informed that site @var{B}
+also received these files, so they will not propagate again the same
+files to one another. However, both site @var{B} and @var{D} are
+susceptible to propagate further the same files to site @var{C}.
+
+It may happen that a site refuses to update a file, or modifies a file
+after having been received, or merges versions, or whatever. So,
+sites may have a wrong opinion of the file contents on other sites.
+These differences level down after a few exchanges, and it is very
+unlikely that a file would not be propagated when it should have.
+
+This scheme works only when the various people handling the various
+files have confidence in one each other. If site @var{B} modifies a
+file after having received it from site @var{A}, the file will
+eventually be propagated back to site @var{A}. If the original file
+stayed undisturbed on site @var{A}, that is, if @code{remsync} proves
+that site @var{B} correctly knew the checksum of the original file, then
+the file will be replaced on site @var{A} without any user confirmation.
+So, the user on site A has to trust the changes made by the user on site
+@var{B}.
+
+If the original file on site @var{A} had been modified after having been
+sent in a synchronization package, than it is the responsibility of the
+user on site @var{A} to correctly merge the local modifications with the
+modifications observed in the file as received from site @var{B}. This
+responsibility is real, since the merged file will later be propagated
+to the other sites in an authoritative way.
+
+@node Formats, Xremsync, Internals, Remsync
+@section Related file formats
+
+@menu
+* Xremsync:: Format of the @file{.remsync} file
+* Package:: Format of transiting packages
+@end menu
+
+@node Xremsync, Package, Formats, Remsync
+@section Format of the @file{.remsync} file
+
+The @file{.remsync} file saves all the information a site needs for
+properly synchronizing a directory tree with remote sites. Even if it
+is meant to be editable using any ASCII editor, it has a very precise
+format and one should be very careful while modifying it directly,
+if ever. The @file{.remsync} file is better handled through the
+@code{remsync} program and commands.
+
+The @file{.remsync} file is made up of statements, one per line. Each
+line begins with a statement keyword followed by a single @key{TAB},
+then by one or more parameters. The keyword may be omitted, in this
+case, the keyword is said to be @emph{empty}, and the line begins
+immediately with the @key{TAB}. After the @key{TAB}, if there are two
+parameters or more, they should all be separated with a single space.
+There should not be any space between the last parameter and the end of
+line (unless there are explicit empty parameters).
+
+The following table gives the possible keywords. Their order of
+presentation in the table is also the order of appearance in the
+@file{.remsync} file.
+
+@table @code
+
+@item remsync
+This statement identifies the @file{.remsync} format. The only
+parameter states the file format version.
+
+@item local
+This statement should appear exactly once, and has exactly two
+parameters. The first parameter gives the electronic mail address the
+other sites should use for sending synchronization packages here. The
+second parameter gives the name of the local directory tree to
+synchronize, in absolute notation.
+
+@item remote
+This statement may appear zero, one or more times. Each occurrence
+connects the synchronized directory tree to another tree on a remote
+site. The first parameter gives one electronic mail address where to
+send remote synchronization packages. The second parameter gives the
+name of the corresponding directory tree for this remote electronic mail
+address, in absolute notation.
+
+@item scan
+This statement may appear zero, one or more times. When it does not
+appear at all, the whole local directory tree will always be scanned,
+searching for files to synchronize. When the statement appears at least
+once, the whole local directory tree will not be scanned, but only those
+files or directories appearing in one of these statements. Each
+@code{scan} statement has exactly one parameter, giving one file or
+directory to be studied. These are usually given relative to top
+directory of the local synchronization directory tree. Shell wildcards
+are acceptable.
+
+@item ignore
+This statement may appear zero, one or more times. Each occurrence has
+one parameter giving a regular expression, according to Perl syntax for
+regular expressions. These @var{regexp}s are applied against each file
+resulting from the scan. If any of the @code{ignore} expression matches
+one of resulting file, the file is discarded and is not subject to
+remote synchronization.
+
+@end table
+
+After all the statements beginning by the previous keywords, the
+@file{.remsync} file usually contains many statements having the empty
+keyword. The empty keyword statement may appear zero, one or more
+times. Each occurrence list one file being remotely synchronized. The
+first parameter gives an explicit file name, usually given relative to
+the top directory of the local synchronized directory tree. Shell
+wildcards are @emph{not} acceptable.
+
+Besides the file name parameter, there are supplementary parameters to
+each empty keyword statement, each corresponding to one remote statement
+in the @file{.remsync} file. The second parameter corresponds to the
+first remote, the third parameter corresponds to the second remote, etc.
+If there are more remote statements than supplementary parameters,
+missing parameters are considered to be empty.
+
+Each supplementary parameter usually gives the last known checksum
+value for this particular file, as computed on its corresponding
+@emph{remote} site. The parameter contains a dash @kbd{-} while the
+remote checksum is unknown. The checksum value for the @emph{local}
+copy of the file is never kept anywhere in the @file{.remsync} file.
+The special value @samp{666} indicates a checksum from hell, used
+when the remote file is known to exist, but for which contradictory
+information has been received from various sources.
+
+@node Package, Alternatives, Xremsync, Remsync
+@section Format of synchronisation packages
+
+Each synchronisation package is transmitted as a file named
+@file{.remsync.tar.gz}, which has the format of a @code{tar} archive,
+further compressed with the @code{gzip} program. This archive always
+contains a file named @file{.remsync-work/orders}, and zero or more
+files named @file{.remsync-work/1}, @file{.remsync-work/2}, etc.
+It contains no other files. Each numbered file is actually a full,
+non-modified file pertaining to the hierarchy of the project, as sent
+from the remote site.
+
+The @file{.remsync-work/orders} file drives the processing of the
+received synchronization package. This ASCII file format quite
+closely resembles the @file{.remsync} format, which we do not explain
+again here. Only the keywords and their associated parameters are
+different, and there is no empty keyword. The following table gives
+the possible keywords, in the order where they normally appear.
+
+@table @code
+
+@item format
+@itemx title
+@itemx here
+@itemx remote
+@itemx ignore
+@itemx scan
+All those keywords are used exactly the same way as within the
+@file{.remsync} file, and their format is not explained again here.
+They state the file format, project title, local and possibly many
+remote identifications and directories, zero or more ignores, zero
+or more scans; all of these exactly as known to the remote site who
+created the synchronization package. In particular, the @code{here}
+line states the originating site of the package rather than the
+receiving one; the receiving site should still be described by one
+of the @code{remote} lines.
+
+@item visit
+This statement appears exactly once, and has one numeric parameter.
+It specifies the zero-based index in the list of remote lines above.
+The index identifies the receiving site, that is, the site to which
+this package was sent.
+
+@item copy
+This statement appears exactly once, and has one or more numeric
+parameters. Each specifies a zero-based index in the list of remote
+lines above. All indices specify the set of all sites who where
+broadcasted simultaneously, at the time this synchronization package
+was issued. The index specified by the @code{visit} line should also
+be one of the indices of the @code{copy} lines. The order in which
+the indices are given is important, as it also establishes the order
+in which file signatures are listed on the @code{check} lines below.
+
+@item check
+This statement may appear zero, one or more times. Each occurrence
+describes one file known to the project at the originating site, and
+there is exactly one occurrence for each known file in the project.
+Each @code{check} line has exactly @var{n}+2 parameters, where @var{n}
+is the number of parameters of the @code{copy} command. The first
+parameter gives a file name, relative to the top directory. The second
+parameter gives the file signature for this file, as computed at the
+originating site. For each remote site presented in the @code{copy}
+command, and exactly in the same order, each supplementary parameter
+gives the originator's idea of the signature for the said file at
+this remote site. A dash (@kbd{-}) replaces the signature for a file
+known @emph{not} to exist.
+
+@item update
+This statement may appear zero, one or more times. Each occurrence
+describes what to do with one of the @file{.remsync-work/@var{n}}
+files, distributed within the synchronization package. In fact,
+there should be exactly as many @code{update} lines that there
+are numbered files in the synchronization package. Usually, each
+@code{update} line immediately follows the corresponding @code{check}
+line, and has exactly three parameters. The first parameter gives
+a file name in the project, relative to the top level directory of
+the hierarchy. The second parameter gives a file signature which the
+said file should have at the receiving site, for it to be replaced
+safely, with no questions asked (this is the originator's idea of
+what the file signature @emph{was}, on the receiving site, prior to
+its replacement). A dash (@kbd{-}) replaces this signature for a
+file known @emph{not} to exist. The third parameter is the number
+@var{n}, which indicates the file @file{.remsync-work/@var{n}} in
+the synchronization package distribution which should replace the
+corresponding project file at the receiving site.
+
+@end table
+
+@node Alternatives, Previous, Package, Remsync
+@section Other means to synchronization
+
+One correspondent thinks that perhaps the news distribution mechanism
+could be pressed into service for this job. I could have started
+from C-news, say, instead of from scratch, and have progressively
+bent C-news to behave like I wanted.
+
+My feeling is that the route was shorter as I did it, from scratch,
+that it would have been from C-news. Of course, I could have
+removed the heavy administrative details of C-news: the history and
+@code{expire}, the daemons, the @code{cron} entries, etc., then added
+the interactive features and specialized behaviors, but all this clean
+up would certainly have took energies. Right now, non counting the
+subsidiary scripts and shar/unshar sources, the heart of the result
+is a single (1200 lines) script written in Perl, which I find fairly
+more smaller and maintainable than a patched C-news distribution
+would have been.
+
+@node Previous, , Alternatives, Remsync
+@section Documentation for obsolete scripts
+
+This is merely a place holder for previous documentation, waiting that I
+clean it up. You have no interest in reading further down.
+
+@menu
+* mailsync:: mailsync
+* resync:: resync
+@end menu
+
+@node mailsync, resync, Previous, Previous
+@subsection mailsync
+
+@example
+Usage: mailsync [ OPTION ] ... [ EMAIL_ADDRESS ] [ DIRECTORY ]
+ or: mailsync [ OPTION ] ... SYNC_DIRECTORY
+@end example
+
+Option -i simply sends a @code{ihave} package, with no bulk files.
+Option -n inhibits any destructive operation and mailing.
+
+In the first form of the call, find a synchronisation directory in
+DIRECTORY aimed towards some EMAIL_ADDRESS, then proceed with this
+synchronisation directory. EMAIL_ADDRESS may be the name of a file
+containing a distribution list. If EMAIL_ADDRESS is not specified,
+all the synchronisation directories at the top level in DIRECTORY are
+processed in turn. If DIRECTORY is not specified, the current
+directory is used.
+
+In the second form of the call, proceed only with the given
+synchronisation directory SYNC_DIRECTORY.
+
+For proceeding with a synchronisation directory, whatever the form of
+the call was, this script reads the @code{ident} files it contains to set
+the local user and directory and the remote user and directory. Then,
+selected files under the local directory which are modified in regard
+to the corresponding files in the remote directory are turned into a
+synchronisation package which is mailed to the remote user.
+
+The list of selected files or directories to synchronize from the
+local directory are given in the @code{list} file in the synchronisation
+directory. If this @code{list} file is missing, all files under the
+local directory are synchronized.
+
+What I usually do is to @code{cd} at the top of the directory tree to be
+synchronized, then to type @code{mailsync} without parameters. This will
+automatically prepare as many synchronisation packages as there are
+mirror systems, then email multipart shars to each of them. Note that
+the synchronisation package is not identical for each mirror system,
+because they do not usually have the same state of synchronisation.
+
+@code{mailsync} will refuse to work if anything needs to be hand cleaned
+from a previous execution of @code{mailsync} or @code{resync}. Check
+for some remaining @file{_syncbulk} or @file{_synctemp} directory, or
+for a @file{_syncrm} script.
+
+@example
+TODO:
+- interrogate the user if @file{ident} file missing.
+- automatically construct the local user address.
+- create the synchronisation directory on the fly.
+- avoid duplicating work as far as possible for multiple sends.
+- have a quicker mode, depending on stamps, not on checksums.
+- never send core, executables, backups, @file{.nsf*}, @file{*/_synctemp/*}, etc.
+@end example
+
+@node resync, GNU Free Documentation License, mailsync, Previous
+@subsection resync
+
+@example
+Usage: resync [ OPTION ]... TAR_FILE
+ or: resync [ OPTION ]... UNTARED_DIRECTORY
+@end example
+
+Given a tar file produced by mailsync at some remote end and already
+reconstructed on this end using unshar, or a directory containing the
+already untared invoice, apply the synchronization package locally.
+
+Option -n inhibits destroying or creating files, but does everything
+else. It will in particular create a synchronization directory if
+necessary, produce the @file{_syncbulk} directory and the @file{_syncrm}
+script.
+
+The synchronization directory for the package is automatically
+retrieved or, if not found, created and initialized. @code{resync} keeps
+telling you what it is doing.
+
+There are a few cases when a resync should not complete without manual
+intervention. The common case is that several sites update the very
+same files differently since they were last resync'ed, and then
+mailsync to each other. The prerequisite checksum will then fail, and
+the files are then kept into the @file{_syncbulk} tree, which has a shape
+similar to the directory tree in which the files where supposed to go.
+For GNU Emacs users, a very handy package, called emerge, written by
+Dale Worley <drw@@kutta.mit.edu>, helps reconciling two files
+interactiveley. The @file{_syncbulk} tree should be explicitely deleted
+after the hand synchronisation.
+
+Another case of human intervention is when files are deleted at the
+mailsync'ing site. By choice, all deletions on the receiving side are
+accumulated in a @file{_syncrm} script, which is not executed automatically.
+Explicitely executed, @file{_syncrm} will remove any file in the receiving
+tree which does not exist anymore on the sender system. I often edit
+@file{_syncrm} before executing it, to remove the unwanted deletions (beware
+the double negation :-). The script removes itself.
+
+All the temporary files, while resynchronizing, are held in @file{_synctemp},
+which is deleted afterwards; if something goes wrong, this directory
+should also be cleaned out by hand. @code{resync} will refuse to work if
+anything remains to be hand cleaned.
+
+@display
+TODO:
+- interrogates the user if missing receiving directory in @file{ident}.
+- allow @file{remote.sum} to be empty or non-existent.
+@end display
+
+@include doclicense.texi
+
+@contents
+@bye
+
+@c Local variables:
+@c texinfo-column-for-description: 32
+@c End:
diff --git a/doc/stamp-vti b/doc/stamp-vti
new file mode 100644
index 0000000..5457c21
--- /dev/null
+++ b/doc/stamp-vti
@@ -0,0 +1,4 @@
+@set UPDATED 20 November 2005
+@set UPDATED-MONTH November 2005
+@set EDITION 4.7
+@set VERSION 4.7
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
new file mode 100644
index 0000000..8083622
--- /dev/null
+++ b/doc/texinfo.tex
@@ -0,0 +1,7482 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2006-10-04.17}
+%
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
+% Software Foundation, Inc.
+%
+% This texinfo.tex file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at
+% your option) any later version.
+%
+% This texinfo.tex file 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 texinfo.tex file; see the file COPYING. If not, write
+% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+% Boston, MA 02110-1301, USA.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. (This has been our intent since Texinfo was invented.)
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+% ftp://tug.org/tex/texinfo.tex
+% (and all CTAN mirrors, see http://www.ctan.org).
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+\message{Basics,}
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexstar=\*
+\let\ptext=\t
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% sometimes characters are active, so we need control sequences.
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dashChar = `\-
+\chardef\dotChar = `\.
+\chardef\exclamChar= `\!
+\chardef\lquoteChar= `\`
+\chardef\questChar = `\?
+\chardef\rquoteChar= `\'
+\chardef\semiChar = `\;
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\undefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument. Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+ %
+ {%
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \indexdummies % don't expand commands in the output.
+ \normalturnoffactive % \ in index entries must not stay \, e.g., if
+ % the page break happens to be in the middle of an example.
+ % We don't want .vr (or whatever) entries like this:
+ % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+ % "\acronym" won't work when it's read back in;
+ % it needs to be
+ % {\code {{\tt \backslashcurfont }acronym}
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
+ \ifcropmarks \vbox to \outervsize\bgroup
+ \hsize = \outerhsize
+ \vskip-\topandbottommargin
+ \vtop to0pt{%
+ \line{\ewtop\hfil\ewtop}%
+ \nointerlineskip
+ \line{%
+ \vbox{\moveleft\cornerthick\nstop}%
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}%
+ }%
+ \vss}%
+ \vskip\topandbottommargin
+ \line\bgroup
+ \hfil % center the page within the outer (page) hsize.
+ \ifodd\pageno\hskip\bindingoffset\fi
+ \vbox\bgroup
+ \fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingyyy.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 24pt
+ \unvbox\footlinebox
+ \fi
+ %
+ \ifcropmarks
+ \egroup % end of \vbox\bgroup
+ \hfil\egroup % end of (centering) \line\bgroup
+ \vskip\topandbottommargin plus1fill minus1fill
+ \boxmaxdepth = \cornerthick
+ \vbox to0pt{\vss
+ \line{%
+ \vbox{\moveleft\cornerthick\nsbot}%
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}%
+ }%
+ \nointerlineskip
+ \line{\ewbot\hfil\ewbot}%
+ }%
+ \egroup % \vbox from first cropmarks clause
+ \fi
+ }% end of \shipout\vbox
+ }% end of group with \indexdummies
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1 \unvbox#1
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\argtorun{#2}%
+ \begingroup
+ \obeylines
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ \argremovecomment #1\comment\ArgTerm%
+ }%
+}
+
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+% @end itemize @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick. --kasal, 16nov03
+
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+ \obeyspaces
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as enviroments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At runtime, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
+ \else
+ \badenverr
+ \fi
+}
+
+% Evironment mismatch, #1 expected:
+\def\badenverr{%
+ \errhelp = \EMsimple
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+ \ifx#1\empty
+ out of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
+}
+
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
+\def\@{{\tt\char64}}
+
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
+
+% Used to generate quoted braces.
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+\begingroup
+ % Definitions to produce \{ and \} commands for indices,
+ % and @{ and @} for the aux/toc files.
+ \catcode`\{ = \other \catcode`\} = \other
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\! = 0 \catcode`\\ = \other
+ !gdef!lbracecmd[\{]%
+ !gdef!rbracecmd[\}]%
+ !gdef!lbraceatcmd[@{]%
+ !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ptexi
+ \else\ifx\temp\jmacro \j
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
+ \kern-.15em
+ \TeX
+}
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+ \def\temp{#1}%
+ \ifx\temp\onword \plainfrenchspacing
+ \else\ifx\temp\offword \plainnonfrenchspacing
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
+ \fi\fi
+}
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ \startsavinginserts
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\pageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+% Old definition--didn't work.
+%\parseargdef\need{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+%\prevdepth=-1000pt
+%}}
+
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @include file insert text of that file as input.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable
+ \def\temp{\input #1 }%
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+}
+
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\next\centerH
+ \else
+ \let\next\centerV
+ \fi
+ \next{\hfil \ignorespaces#1\unskip \hfil}%
+}
+\def\centerH#1{%
+ {%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+ }%
+}
+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
+
+% @sp n outputs n lines of vertical space
+
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+
+\let\c=\comment
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
+
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent{%
+ \restorefirstparagraphindent
+ \indent
+ }%
+ \gdef\noindent{%
+ \restorefirstparagraphindent
+ \noindent
+ }%
+ \global\everypar = {%
+ \kern -\parindent
+ \restorefirstparagraphindent
+ }%
+}
+
+\gdef\restorefirstparagraphindent{%
+ \global \let \indent = \ptexindent
+ \global \let \noindent = \ptexnoindent
+ \global \everypar = {}%
+}
+
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode`\_ = \active
+ \gdef\mathunderscore{%
+ \catcode`\_=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care. Texinfo does not
+% otherwise define @\.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ $\finishmath
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ }
+}
+
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{$\ptexbullet$}
+\def\minus{$-$}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em. So do
+% whichever is larger.
+%
+\def\dots{%
+ \leavevmode
+ \setbox0=\hbox{...}% get width of three periods
+ \ifdim\wd0 > 1.5em
+ \dimen0 = \wd0
+ \else
+ \dimen0 = 1.5em
+ \fi
+ \hbox to \dimen0{%
+ \hskip 0pt plus.25fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=\endofsentencespacefactor
+}
+
+% @comma{} is so commas can be inserted into text without messing up
+% Texinfo's parsing.
+%
+\let\comma = ,
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
+ \iflinks
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
+ \fi % \openindices needs to do some work in any case.
+ \openindices
+ \let\setfilename=\comment % Ignore extra @setfilename cmds.
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc.
+ \openin 1 texinfo.cnf
+ \ifeof 1 \else \input texinfo.cnf \fi
+ \closein 1
+ %
+ \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+ \newindex{cp}%
+ \newcodeindex{fn}%
+ \newcodeindex{vr}%
+ \newcodeindex{tp}%
+ \newcodeindex{ky}%
+ \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as \undefined,
+% borrowed from ifpdf.sty.
+\ifx\pdfoutput\undefined
+\else
+ \ifx\pdfoutput\relax
+ \else
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
+ \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places. Thus, we have to
+% double any backslashes. Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e. Not good.
+% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
+% (and related messages, the final outcome is that it is up to the TeX
+% user to double the backslashes and otherwise make the string valid, so
+% that's what we do).
+
+% double active backslashes.
+%
+{\catcode`\@=0 \catcode`\\=\active
+ @gdef@activebackslashdouble{%
+ @catcode`@\=@active
+ @let\=@doublebackslash}
+}
+
+% To handle parens, we must adopt a different approach, since parens are
+% not active characters. hyperref.dtx (which has the same problem as
+% us) handles it with this amazing macro to replace tokens. I've
+% tinkered with it a little for texinfo, but it's definitely from there.
+%
+% #1 is the tokens to replace.
+% #2 is the replacement.
+% #3 is the control sequence with the string.
+%
+\def\HyPsdSubst#1#2#3{%
+ \def\HyPsdReplace##1#1##2\END{%
+ ##1%
+ \ifx\\##2\\%
+ \else
+ #2%
+ \HyReturnAfterFi{%
+ \HyPsdReplace##2\END
+ }%
+ \fi
+ }%
+ \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
+}
+\long\def\HyReturnAfterFi#1\fi{\fi#1}
+
+% #1 is a control sequence in which to do the replacements.
+\def\backslashparens#1{%
+ \xdef#1{#1}% redefine it as its expansion; the definition is simply
+ % \lastnode when called from \setref -> \pdfmkdest.
+ \HyPsdSubst{(}{\realbackslash(}{#1}%
+ \HyPsdSubst{)}{\realbackslash)}{#1}%
+}
+
+\ifpdf
+ \input pdfcolor
+ \pdfcatalog{/PageMode /UseOutlines}%
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\dopdfimage#1#2#3{%
+ \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ % without \immediate, pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifdim \wd0 >0pt width \imagewidth \fi
+ \ifdim \wd2 >0pt height \imageheight \fi
+ \ifnum\pdftexversion<13
+ #1.pdf%
+ \else
+ {#1.pdf}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ \def\pdfmkdest#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \atdummies
+ \activebackslashdouble
+ \def\pdfdestname{#1}%
+ \backslashparens\pdfdestname
+ \pdfdest name{\pdfdestname} xyz%
+ }}%
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}%
+ %
+ \let\linkcolor = \Blue % was Cyan, but that seems light?
+ \def\endlink{\Black\pdfendlink}
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text, which is what will be displayed in the
+ % outline by the pdf viewer. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node text,
+ % which might be empty if this toc entry had no corresponding node.
+ % #4 is the page number
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worth the trouble, since most documents are normally structured.
+ \def\pdfoutlinedest{#3}%
+ \ifx\pdfoutlinedest\empty
+ \def\pdfoutlinedest{#4}%
+ \else
+ % Doubled backslashes in the name.
+ {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
+ \backslashparens\pdfoutlinedest}%
+ \fi
+ %
+ % Also double the backslashes in the display string.
+ {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
+ \backslashparens\pdfoutlinetext}%
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Thanh's hack / proper braces in bookmarks
+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+ %
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \readdatafile{toc}%
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % xx to do this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Right
+ % now, I guess we'll just let the pdf reader have its way.
+ \indexnofonts
+ \setupdatafile
+ \catcode`\\=\active \otherbackslash
+ \input \jobname.toc
+ \endgroup
+ }
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \ifx\p\space\else\addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \fi
+ \nextsp}
+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ \leavevmode\Red
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \linkcolor #1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\linkcolor = \relax
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
+
+
+\message{fonts,}
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname ten#1\endcsname % change the current font
+}
+
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% Default leading.
+\newdimen\textleading \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+\def\setleading#1{%
+ \normalbaselineskip = #1\relax
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\undefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt. This is the default in
+% Texinfo.
+%
+\def\definetextfontsizexi{
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}
+\setfont\deftt\ttshape{10}{\magstep1}
+\setfont\defttsl\ttslshape{10}{\magstep1}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}
+\setfont\chapit\itbshape{10}{\magstep3}
+\setfont\chapsl\slbshape{10}{\magstep3}
+\setfont\chaptt\ttbshape{12}{\magstep2}
+\setfont\chapttsl\ttslshape{10}{\magstep3}
+\setfont\chapsf\sfbshape{17}{1000}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}
+\setfont\secit\itbshape{10}{\magstep2}
+\setfont\secsl\slbshape{10}{\magstep2}
+\setfont\sectt\ttbshape{12}{\magstep1}
+\setfont\secttsl\ttslshape{10}{\magstep2}
+\setfont\secsf\sfbshape{12}{\magstep1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
+\setfont\ssecit\itbshape{10}{1315}
+\setfont\ssecsl\slbshape{10}{1315}
+\setfont\ssectt\ttbshape{12}{\magstephalf}
+\setfont\ssecttsl\ttslshape{10}{1315}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}
+\setfont\reducedtt\ttshape{10}{1000}
+\setfont\reducedbf\bfshape{10}{1000}
+\setfont\reducedit\itshape{10}{1000}
+\setfont\reducedsl\slshape{10}{1000}
+\setfont\reducedsf\sfshape{10}{1000}
+\setfont\reducedsc\scshape{10}{1000}
+\setfont\reducedttsl\ttslshape{10}{1000}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+
+% reset the current fonts
+\textfonts
+\rm
+} % end of 11pt text font size definitions
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit. This is for the GNU
+% Press printing of the Emacs 22 manual. Maybe other manuals in the
+% future. Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}
+\setfont\deftt\ttshape{10}{\magstephalf}
+\setfont\defttsl\ttslshape{10}{\magstephalf}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}
+\setfont\chapit\itbshape{10}{\magstep2}
+\setfont\chapsl\slbshape{10}{\magstep2}
+\setfont\chaptt\ttbshape{12}{\magstep1}
+\setfont\chapttsl\ttslshape{10}{\magstep2}
+\setfont\chapsf\sfbshape{12}{\magstep1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}
+\setfont\secit\itbshape{10}{\magstep1}
+\setfont\secsl\slbshape{10}{\magstep1}
+\setfont\sectt\ttbshape{12}{1000}
+\setfont\secttsl\ttslshape{10}{\magstep1}
+\setfont\secsf\sfbshape{12}{1000}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}
+\setfont\ssecit\itbshape{10}{1000}
+\setfont\ssecsl\slbshape{10}{1000}
+\setfont\ssectt\ttbshape{10}{1000}
+\setfont\ssecttsl\ttslshape{10}{1000}
+\setfont\ssecsf\sfbshape{10}{1000}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}
+\setfont\reducedtt\ttshape{9}{1000}
+\setfont\reducedbf\bfshape{10}{900}
+\setfont\reducedit\itshape{9}{1000}
+\setfont\reducedsl\slshape{9}{1000}
+\setfont\reducedsf\sfshape{9}{1000}
+\setfont\reducedsc\scshape{10}{900}
+\setfont\reducedttsl\ttslshape{10}{900}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+
+% reduce space between paragraphs
+\divide\parskip by 2
+
+% reset the current fonts
+\textfonts
+\rm
+} % end of 10pt text font size definitions
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xword{10}
+\def\xiword{11}
+%
+\parseargdef\fonttextsize{%
+ \def\textsizearg{#1}%
+ \wlog{doing @fonttextsize \textsizearg}%
+ %
+ % Set \globaldefs so that documents can use this inside @tex, since
+ % makeinfo 4.8 does not support it, but we need it nonetheless.
+ %
+ \begingroup \globaldefs=1
+ \ifx\textsizearg\xword \definetextfontsizex
+ \else \ifx\textsizearg\xiword \definetextfontsizexi
+ \else
+ \errhelp=\EMsimple
+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+ \fi\fi
+ \endgroup
+}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. Since
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE. We do this because \STYLE needs to also set the
+% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+\def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+ \let\tenttsl=\textttsl
+ \def\curfontsize{text}%
+ \def\lsize{reduced}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+ \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+ \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+ \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+ \let\tenttsl=\titlettsl
+ \def\curfontsize{title}%
+ \def\lsize{chap}\def\lllsize{subsec}%
+ \resetmathfonts \setleading{25pt}}
+\def\titlefont#1{{\titlefonts\rm #1}}
+\def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+ \let\tenttsl=\chapttsl
+ \def\curfontsize{chap}%
+ \def\lsize{sec}\def\lllsize{text}%
+ \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+ \let\tenttsl=\secttsl
+ \def\curfontsize{sec}%
+ \def\lsize{subsec}\def\lllsize{reduced}%
+ \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+ \let\tenttsl=\ssecttsl
+ \def\curfontsize{ssec}%
+ \def\lsize{text}\def\lllsize{small}%
+ \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+ \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+ \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+ \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+ \let\tenttsl=\reducedttsl
+ \def\curfontsize{reduced}%
+ \def\lsize{small}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+ \let\tenttsl=\smallttsl
+ \def\curfontsize{small}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+ \let\tenttsl=\smallerttsl
+ \def\curfontsize{smaller}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{9.5pt}}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+%
+% I wish the USA used A4 paper.
+% --karl, 24jan03.
+
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+% Define these so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}
+\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+ \ptexslash\fi\fi\fi}
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally uses \ttsl.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\var=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% @b, explicit bold.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\plainfrenchspacing{%
+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+ \def\endofsentencespacefactor{1000}% for @. and friends
+ }
+ \def\plainnonfrenchspacing{%
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+ \def\endofsentencespacefactor{3000}% for @. and friends
+ }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+\def\t#1{%
+ {\tt \rawbackslash \plainfrenchspacing #1}%
+ \null
+}
+\def\samp#1{`\tclose{#1}'\null}
+\setfont\keyrm\rmshape{8}{1000}
+\font\keysy=cmsy9
+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+ \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+ \vbox{\hrule\kern-0.4pt
+ \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+ \kern-0.4pt\hrule}%
+ \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+% The old definition, with no lozenge:
+%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @file, @option are the same as @samp.
+\let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \plainfrenchspacing
+ #1%
+ }%
+ \null
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+% -- rms.
+{
+ \catcode`\-=\active \catcode`\_=\active
+ \catcode`\'=\active \catcode`\`=\active
+ %
+ \global\def\code{\begingroup
+ \catcode\rquoteChar=\active \catcode\lquoteChar=\active
+ \let'\codequoteright \let`\codequoteleft
+ %
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\realdash
+ \let_\realunder
+ \fi
+ \codex
+ }
+}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+\def\codex #1{\tclose{#1}\endgroup}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is undesirable in
+% some manuals, especially if they don't have long identifiers in
+% general. @allowcodebreaks provides a way to control this.
+%
+\newif\ifallowcodebreaks \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\keywordtrue
+ \allowcodebreakstrue
+ \else\ifx\txiarg\keywordfalse
+ \allowcodebreaksfalse
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
+ \fi\fi
+}
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\txiarg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\txiarg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct.'
+\kbdinputstyle distinct
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\look}}\fi
+\else{\tclose{\kbdfont\look}}\fi}
+
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+\let\indicateurl=\code
+\let\env=\code
+\let\command=\code
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself. First (mandatory) arg is the url. Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \code{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find. We need it for
+% Polish suppressed-l. --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\selectfonts\lsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\plainfrenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbol don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\undefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \let\page = \oldpage
+ \page
+ \null
+ }%
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+ %
+ % If they want short, they certainly want long too.
+ \ifsetshortcontentsaftertitlepage
+ \shortcontents
+ \contents
+ \global\let\shortcontents = \relax
+ \global\let\contents = \relax
+ \fi
+ %
+ \ifsetcontentsaftertitlepage
+ \contents
+ \global\let\contents = \relax
+ \global\let\shortcontents = \relax
+ \fi
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+%%% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+ \let\tt=\authortt}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \leftline{\titlefonts\rm #1}
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\authorfont \leftline{#1}}%
+ \fi
+}
+
+
+%%% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\pageheight by -12pt
+ \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\HEADINGSoff{%
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\undefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemindicate{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ \def\itemcontents{#1}%
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ \vadjust{\penalty 1200}}% not good to break after first line of item.
+ \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry. Note that \everycr resets \everytab.
+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
+%
+% A \tab used to include \hskip1sp. But then the space in a template
+% line is not enough. That is bad. So let's go back to just `&' until
+% we encounter the problem it was intended to solve again.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
+ \vskip\parskip
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ %
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}%
+ \global\colcount=0 % Reset the column counter.
+ % Check for saved footnotes, etc.
+ \checkinserts
+ % Keeps underfull box messages off when table breaks over pages.
+ %\filbreak
+ % Maybe so, but it also creates really weird page breaks when the
+ % table breaks over pages. Wouldn't \vfil be better? Wait until the
+ % problem manifests itself, so it can be fixed for real --karl.
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \multistrut
+ \vtop{%
+ % Use the current \colcount to find the correct column width:
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively
+ % marking characters.
+ \noindent\ignorespaces##\unskip\multistrut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+ \def\multistrut{\strut}% just use the standard line spacing
+ %
+ % Compute \multitablelinespace (if not defined by user) for use in
+ % \multitableparskip calculation. We used define \multistrut based on
+ % this, but (ironically) that caused the spacing to be off.
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+%% Test to see if parskip is larger than space between lines of
+%% table. If not, do nothing.
+%% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+ % Scan in ``verbatim'' mode:
+ \obeylines
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching `@end #1'.
+ \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
+ %
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
+ %
+ % Define a command to find the next `@end #1'.
+ \long\def\doignoretext##1^^M@end #1{%
+ \doignoretextyyy##1^^M@#1\_STOP_}%
+ %
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line `@c @ifset', for
+ % example, to count as an @ifset for nesting.)
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+ %
+ % And now expand that command.
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+ % Ignore anything after the last `@end #1'; this matters in verbatim
+ % environments, where otherwise the newline after an ignored conditional
+ % would result in a blank line in the output.
+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+ \catcode`\- = \active \catcode`\_ = \active
+ %
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
+ % So \let them to their normal equivalents.
+ \let-\realdash \let_\normalunderscore
+ }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file. This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ % Only do \closeout if we haven't already done it, else we'll end up
+ % closing the target index.
+ \expandafter \ifx\csname donesynindex#2\endcsname \undefined
+ % The \closeout helps reduce unnecessary open files; the limit on the
+ % Acorn RISC OS is a mere 16 files.
+ \expandafter\closeout\csname#2indfile\endcsname
+ \expandafter\let\csname\donesynindex#2\endcsname = 1
+ \fi
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
+\def\indexdummies{%
+ \escapechar = `\\ % use backslash in output files.
+ \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+ \def\ {\realbackslash\space }%
+ %
+ % Need these in case \tex is in effect and \{ is a \delimiter again.
+ % But can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters.
+ \let\{ = \mylbrace
+ \let\} = \myrbrace
+ %
+ % I don't entirely understand this, but when an index entry is
+ % generated from a macro call, the \endinput which \scanmacro inserts
+ % causes processing to be prematurely terminated. This is,
+ % apparently, because \indexsorttmp is fully expanded, and \endinput
+ % is an expandable command. The redefinition below makes \endinput
+ % disappear altogether for that purpose -- although logging shows that
+ % processing continues to some further point. On the other hand, it
+ % seems \endinput does not hurt in the printed index arg, since that
+ % is still getting written without apparent harm.
+ %
+ % Sample source (mac-idx3.tex, reported by Graham Percival to
+ % help-texinfo, 22may06):
+ % @macro funindex {WORD}
+ % @findex xyz
+ % @end macro
+ % ...
+ % @funindex commtest
+ %
+ % The above is not enough to reproduce the bug, but it gives the flavor.
+ %
+ % Sample whatsit resulting:
+ % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
+ %
+ % So:
+ \let\endinput = \empty
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% For the aux and toc files, @ is the escape character. So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files). When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+ \def\@{@@}%
+ \def\ {@ }%
+ \let\{ = \lbraceatcmd
+ \let\} = \rbraceatcmd
+ %
+ % Do the redefinitions.
+ \commondummies
+ \otherbackslash
+}
+
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+ %
+ % \definedummyword defines \#1 as \string\#1\space, thus effectively
+ % preventing its expansion. This is used only for control% words,
+ % not control letters, because the \space would be incorrect for
+ % control characters, but is needed to separate the control word
+ % from whatever follows.
+ %
+ % For control letters, we have \definedummyletter, which omits the
+ % space.
+ %
+ % These can be used both for control words that take an argument and
+ % those that do not. If it is followed by {arg} in the input, then
+ % that will dutifully get written to the index (or wherever).
+ %
+ \def\definedummyword ##1{\def##1{\string##1\space}}%
+ \def\definedummyletter##1{\def##1{\string##1}}%
+ \let\definedummyaccent\definedummyletter
+ %
+ \commondummiesnofonts
+ %
+ \definedummyletter\_%
+ %
+ % Non-English letters.
+ \definedummyword\AA
+ \definedummyword\AE
+ \definedummyword\L
+ \definedummyword\OE
+ \definedummyword\O
+ \definedummyword\aa
+ \definedummyword\ae
+ \definedummyword\l
+ \definedummyword\oe
+ \definedummyword\o
+ \definedummyword\ss
+ \definedummyword\exclamdown
+ \definedummyword\questiondown
+ \definedummyword\ordf
+ \definedummyword\ordm
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword\bf
+ \definedummyword\gtr
+ \definedummyword\hat
+ \definedummyword\less
+ \definedummyword\sf
+ \definedummyword\sl
+ \definedummyword\tclose
+ \definedummyword\tt
+ %
+ \definedummyword\LaTeX
+ \definedummyword\TeX
+ %
+ % Assorted special characters.
+ \definedummyword\bullet
+ \definedummyword\comma
+ \definedummyword\copyright
+ \definedummyword\registeredsymbol
+ \definedummyword\dots
+ \definedummyword\enddots
+ \definedummyword\equiv
+ \definedummyword\error
+ \definedummyword\euro
+ \definedummyword\expansion
+ \definedummyword\minus
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \definedummyword\result
+ \definedummyword\textdegree
+ %
+ % We want to disable all macros so that they are not expanded by \write.
+ \macrolist
+ %
+ \normalturnoffactive
+ %
+ % Handle some cases of @value -- where it does not contain any
+ % (non-fully-expandable) commands.
+ \makevalueexpandable
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+\def\commondummiesnofonts{%
+ % Control letters and accents.
+ \definedummyletter\!%
+ \definedummyaccent\"%
+ \definedummyaccent\'%
+ \definedummyletter\*%
+ \definedummyaccent\,%
+ \definedummyletter\.%
+ \definedummyletter\/%
+ \definedummyletter\:%
+ \definedummyaccent\=%
+ \definedummyletter\?%
+ \definedummyaccent\^%
+ \definedummyaccent\`%
+ \definedummyaccent\~%
+ \definedummyword\u
+ \definedummyword\v
+ \definedummyword\H
+ \definedummyword\dotaccent
+ \definedummyword\ringaccent
+ \definedummyword\tieaccent
+ \definedummyword\ubaraccent
+ \definedummyword\udotaccent
+ \definedummyword\dotless
+ %
+ % Texinfo font commands.
+ \definedummyword\b
+ \definedummyword\i
+ \definedummyword\r
+ \definedummyword\sc
+ \definedummyword\t
+ %
+ % Commands that take arguments.
+ \definedummyword\acronym
+ \definedummyword\cite
+ \definedummyword\code
+ \definedummyword\command
+ \definedummyword\dfn
+ \definedummyword\emph
+ \definedummyword\env
+ \definedummyword\file
+ \definedummyword\kbd
+ \definedummyword\key
+ \definedummyword\math
+ \definedummyword\option
+ \definedummyword\pxref
+ \definedummyword\ref
+ \definedummyword\samp
+ \definedummyword\strong
+ \definedummyword\tie
+ \definedummyword\uref
+ \definedummyword\url
+ \definedummyword\var
+ \definedummyword\verb
+ \definedummyword\w
+ \definedummyword\xref
+}
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+ % Accent commands should become @asis.
+ \def\definedummyaccent##1{\let##1\asis}%
+ % We can just ignore other control letters.
+ \def\definedummyletter##1{\let##1\empty}%
+ % Hopefully, all control words can become @asis.
+ \let\definedummyword\definedummyaccent
+ %
+ \commondummiesnofonts
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ \def\ { }%
+ \def\@{@}%
+ % how to handle braces?
+ \def\_{\normalunderscore}%
+ %
+ % Non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\o{o}%
+ \def\ss{ss}%
+ \def\exclamdown{!}%
+ \def\questiondown{?}%
+ \def\ordf{a}%
+ \def\ordm{o}%
+ %
+ \def\LaTeX{LaTeX}%
+ \def\TeX{TeX}%
+ %
+ % Assorted special characters.
+ % (The following {} will end up in the sort string, but that's ok.)
+ \def\bullet{bullet}%
+ \def\comma{,}%
+ \def\copyright{copyright}%
+ \def\registeredsymbol{R}%
+ \def\dots{...}%
+ \def\enddots{...}%
+ \def\equiv{==}%
+ \def\error{error}%
+ \def\euro{euro}%
+ \def\expansion{==>}%
+ \def\minus{-}%
+ \def\pounds{pounds}%
+ \def\point{.}%
+ \def\print{-|}%
+ \def\result{=>}%
+ \def\textdegree{degrees}%
+ %
+ % We need to get rid of all macros, leaving only the arguments (if present).
+ % Of course this is not nearly correct, but it is the best we can do for now.
+ % makeinfo does not expand macros in the argument to @deffn, which ends up
+ % writing an index entry, and texindex isn't prepared for an index sort entry
+ % that starts with \.
+ %
+ % Since macro invocations are followed by braces, we can just redefine them
+ % to take a single TeX argument. The case of a macro invocation that
+ % goes to end-of-line is not handled.
+ %
+ \macrolist
+}
+
+\let\indexbackslash=0 %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+ \iflinks
+ {%
+ % Store the main index entry text (including the third arg).
+ \toks0 = {#2}%
+ % If third arg is present, precede it with a space.
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\empty \else
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \ifvmode
+ \dosubindsanitize
+ \else
+ \dosubindwrite
+ \fi
+ }%
+ \fi
+}
+
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+ \fi
+ %
+ % Remember, we are within a group.
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+ % so it will be output as is; and it will print as backslash.
+ %
+ % Process the index entry with all font commands turned off, to
+ % get the string to sort by.
+ {\indexnofonts
+ \edef\temp{\the\toks0}% need full expansion
+ \xdef\indexsorttmp{\temp}%
+ }%
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+ }%
+ \temp
+}
+
+% Take care of unwanted page breaks:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write will make \lastskip zero. The result is that sequences
+% like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+% ..., ready, GO:
+%
+\def\dosubindsanitize{%
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \skip0 = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \count255 = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\skip0 glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\skip0
+ \fi
+ %
+ \dosubindwrite
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ %
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\count255>9999 \penalty\count255 \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\skip0
+ \fi
+}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+ %
+ % See if the index file exists and is nonempty.
+ % Change catcode of @ here so that if the index file contains
+ % \initial {@}
+ % as its first line, TeX doesn't complain about mismatched braces
+ % (because it thinks @} is a control sequence).
+ \catcode`\@ = 11
+ \openin 1 \jobname.#1s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \temp
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \def\indexbackslash{\backslashcurfont}%
+ \catcode`\\ = 0
+ \escapechar = `\\
+ \begindoublecolumns
+ \input \jobname.#1s
+ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\initial#1{{%
+ % Some minor font changes for the special characters.
+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+ %
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ \nobreak
+ \vskip 0pt plus 3\baselineskip
+ \penalty 0
+ \vskip 0pt plus -3\baselineskip
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus .5\baselineskip
+ \leftline{\secbf #1}%
+ % Do our best not to break after the initial.
+ \nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
+}}
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+% A straightforward implementation would start like this:
+% \def\entry#1#2{...
+% But this frozes the catcodes in the argument, and can cause problems to
+% @code, which sets - active. This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+%
+% The right solution is to prevent \entry from swallowing the whole text.
+% --kasal, 21nov03
+\def\entry{%
+ \begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % Do not fill out the last line with white space.
+ \parfillskip = 0in
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % \hangindent is only relevant when the entry text and page number
+ % don't both fit on one line. In that case, bob suggests starting the
+ % dots pretty far over on the line. Unfortunately, a large
+ % indentation looks wrong when the entry text itself is broken across
+ % lines. So we use a small indentation and put up with long leaders.
+ %
+ % \hangafter is reset to 1 (which is the value we want) at the start
+ % of each paragraph, so we need not do anything with that.
+ \hangindent = 2em
+ %
+ % When the entry text needs to be broken, just fill out the first line
+ % with blank space.
+ \rightskip = 0pt plus1fil
+ %
+ % A bit of stretch before each entry for the benefit of balancing
+ % columns.
+ \vskip 0pt plus1pt
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\doentry{%
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+ % #1 is the page number.
+ %
+ % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \def\tempa{{\rm }}%
+ \def\tempb{#1}%
+ \edef\tempc{\tempa}%
+ \edef\tempd{\tempb}%
+ \ifx\tempc\tempd
+ \ %
+ \else
+ %
+ % If we must, put the page number on a line of its own, and fill out
+ % this line with blank space. (The \hfil is overwhelmed with the
+ % fill leaders glue in \indexdotfill if the page number does fit.)
+ \hfil\penalty50
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
+ % part of (the primitive) \par. Without it, a spurious underfull
+ % \hbox ensues.
+ \ifpdf
+ \pdfgettoks#1.%
+ \ \the\toksA
+ \else
+ \ #1%
+ \fi
+ \fi
+ \par
+ \endgroup
+}
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ #2
+ \fi
+ \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+ \output = {%
+ %
+ % Here is a possibility not foreseen in manmac: if we accumulate a
+ % whole lot of material, we might end up calling this \output
+ % routine twice in a row (see the doublecol-lose test, which is
+ % essentially a couple of indexes with @setchapternewpage off). In
+ % that case we just ship out what is in \partialpage with the normal
+ % output routine. Generally, \partialpage will be empty when this
+ % runs and this will be a no-op. See the indexspread.tex test case.
+ \ifvoid\partialpage \else
+ \onepageout{\pagecontents\partialpage}%
+ \fi
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \vsize = 2\vsize
+}
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ \advance\dimen@ by -\ht\partialpage
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\pagewidth{\box0\hfil\box2}%
+}
+%
+% All done with double columns.
+\def\enddoublecolumns{%
+ \output = {%
+ % Split the last of the double-column material. Leave it on the
+ % current page, no automatic page break.
+ \balancecolumns
+ %
+ % If we end up splitting too much material for the current page,
+ % though, there will be another page break right after this \output
+ % invocation ends. Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away. (We hope \balancecolumns will never be
+ % called on to balance too much material, but if it is, this makes
+ % the output somewhat more palatable.)
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
+ }%
+ \eject
+ \endgroup % started in \begindoublecolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize (after the
+ % \endgroup where \vsize got restored).
+ \pagegoal = \vsize
+}
+%
+% Called at the end of the double column material.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2 % target to split to
+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+ \splittopskip = \topskip
+ % Loop until we get a decent breakpoint.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht3>\dimen@
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+ \setbox0=\vbox to\dimen@{\unvbox1}%
+ \setbox2=\vbox to\dimen@{\unvbox3}%
+ %
+ \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% \unnumberedno is an oxymoron, of course. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines this as the name of the chapter.
+% page headings and footings can use it. @section does likewise.
+% However, they are not reliable, because we don't use marks.
+\def\thischapter{}
+\def\thissection{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achive this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unmlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
+ \else
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
+ \fi
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unmlevel
+ \chardef\unmlevel = \absseclevel
+ \fi
+ \else
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ \errmessage{@appendix... within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unmlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unmlevel = 3
+ \fi
+ \fi
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
+ \else
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
+ \fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ \message{\putwordChapter\space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ \def\appendixnum{\putwordAppendix\space \appendixletter}%
+ \message{\appendixnum}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+ % Well, we could do the following in a group, but that would break
+ % an assumption that \chapmacro is called at the outermost level.
+ % Thus we are safer this way: --kasal, 24feb04
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+% 1) We use \vbox rather than the earlier \line to permit
+% overlong headings to fold.
+% 2) \hyphenpenalty is set to 10000 because hyphenation in a
+% heading is obnoxious; this forbids it.
+% 3) Likewise, headings look best if no \parindent is used, and
+% if justification is not attempted. Hence \raggedright.
+
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}%
+ \bigskip \par\penalty 200\relax
+ \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip\chapheadingskip
+
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ %
+ % Have to define \thissection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \gdef\thischapternum{}%
+ \gdef\thischapter{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \gdef\thischapternum{}%
+ \gdef\thischapter{}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \xdef\thischapternum{\appendixletter}%
+ % We don't substitute the actual chapter name into \thischapter
+ % because we don't want its macros evaluated now. And we don't
+ % use \thissection because that changes with each section.
+ %
+ \xdef\thischapter{\putwordAppendix{} \appendixletter:
+ \noexpand\thischaptername}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \xdef\thischapternum{\the\chapno}%
+ \xdef\thischapter{\putwordChapter{} \the\chapno:
+ \noexpand\thischaptername}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
+
+
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\nobreak
+}
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt
+ \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+}
+\def\CHAPFopen{%
+ \global\let\chapmacro=\chfopen
+ \global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rm
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Only insert the space after the number if we have a section number.
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\thissection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \thissection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\thissection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\thissection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chapmacro.
+ \donoderef{#3}%
+ %
+ % Interline glue will be inserted when the vbox is completed.
+ % That glue will be a valid breakpoint for the page, since it'll be
+ % preceded by a whatsit (usually from the \donoderef, or from the
+ % \writetocentry if there was no node). We don't want to allow that
+ % break, since then the whatsits could end up on page n while the
+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
+ \nobreak
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
+ }%
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.)
+ \vskip-\parskip
+ %
+ % This is purely so the last item on the list is a known \penalty >
+ % 10000. This is so \startdefun can avoid allowing breakpoints after
+ % section headings. Otherwise, it would insert a valid breakpoint between:
+ %
+ % @section sec-whatever
+ % @deffn def-whatever
+ \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ {\atdummies
+ \edef\temp{%
+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+ \temp
+ }%
+ \fi
+ \fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care. This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+ \catcode`\"=\active
+ \catcode`\$=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\\=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+ \setupdatafile
+ \activecatcodes
+ \input \jobname.toc
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \def\thischapter{}%
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+
+% Normal (long) toc.
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @tex ... @end tex escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\envdef\tex{%
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \escapechar=`\\
+ %
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\/=\ptexslash
+ \let\*=\ptexstar
+ \let\t=\ptext
+ \let\frenchspacing=\plainfrenchspacing
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ % side, and for 6pt waste from
+ % each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing = t%
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \kern3pt
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+ \comment % For explanation, see the end of \def\group.
+}
+\def\Ecartouche{%
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\def\nonfillstart{%
+ \aboveenvbreak
+ \hfuzz = 12pt % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ \parindent = 0pt
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \let\exdent=\nofillexdent
+}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \smallexamplefonts \rm
+ \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it by one command:
+\def\makedispenv #1#2{
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two synonyms:
+\def\maketwodispenvs #1#2#3{
+ \makedispenv{#1}{#3}
+ \makedispenv{#2}{#3}
+}
+
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvs {lisp}{example}{%
+ \nonfillstart
+ \tt\quoteexpand
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenv {display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenv{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\envdef\quotation{%
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \advance\rightskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\undefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% [Knuth] pp. 380,381,391
+% Disable Spanish ligatures ?` and !` of \tt font
+\begingroup
+ \catcode`\`=\active\gdef`{\relax\lq}
+\endgroup
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \catcode`\`=\active
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+
+% Allow an option to not replace quotes with a regular directed right
+% quote/apostrophe (char 0x27), but instead use the undirected quote
+% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it
+% the default, but it works for pasting with more pdf viewers (at least
+% evince), the lilypond developers report. xpdf does work with the
+% regular 0x27.
+%
+\def\codequoteright{%
+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+ '%
+ \else
+ \char'15
+ \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+ `%
+ \else
+ \char'22
+ \fi
+}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen0=\wd0 % the width so far, or since the previous tab
+ \divide\dimen0 by\tabw
+ \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+ \advance\dimen0 by\tabw % advance to next multiple of \tabw
+ \wd0=\dimen0 \box0 \starttabbox
+ }%
+ }
+ \catcode`\'=\active
+ \gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}%
+ %
+ \catcode`\`=\active
+ \gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}%
+ %
+ \gdef\quoteexpand{\rquoteexpand \lquoteexpand}%
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ % Easiest (and conventionally used) font for verbatim
+ \tt
+ \def\par{\leavevmode\egroup\box0\endgraf}%
+ \catcode`\`=\active
+ \tabexpand
+ \quoteexpand
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+ \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ \input #1
+ \afterenvbreak
+ }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \defargscommonending, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ \ifnum\lastpenalty=10002 \penalty2000 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As above, allow line break if we have multiple x headers in a row.
+ % It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \fi
+ %
+ % And now, it's time to reuse the body of the original defun:
+ \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ % call \deffnheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty 10002 % signal to \startdefun and \dodefunx
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remainnig is to define \deffnheader.
+%
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
+}
+
+%%% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+ \dosubind{fn}{\code{#3}}{#1}%
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+%%% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{fn}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{vr}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+%%% Type:
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % How we'll format the type name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape.
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ % (plain.tex says that \dimen1 should be used only as global.)
+ \parshape 2 0in \dimen0 \defargsindent \dimen2
+ %
+ % Put the type name to the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% return value type
+ \ifx\temp\empty\else \tclose{\temp} \fi
+ #3% output function name
+ }%
+ {\rm\enskip}% hskip 0.5 em of \tenrm
+ %
+ \boldbrax
+ % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name. This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable. Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+ % use sl by default (not ttsl),
+ % tt for the names.
+ \df \sl \hyphenchar\font=0
+ %
+ % On the other hand, if an argument has two dashes (for instance), we
+ % want a way to get ttsl. Let's try @var for that.
+ \let\var=\ttslanted
+ #1%
+ \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ \global\let& = \&
+
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
+}
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
+}
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+\def\badparencount{%
+ \errmessage{Unbalanced parentheses in @def}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \errmessage{Unbalanced square braces in @def}%
+ \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
+\fi
+
+\def\scanmacro#1{%
+ \begingroup
+ \newlinechar`\^^M
+ \let\xeatspaces\eatspaces
+ % Undo catcode changes of \startcontents and \doprintindex
+ % When called from @insertcopying or (short)caption, we need active
+ % backslash to get it printed correctly. Previously, we had
+ % \catcode`\\=\other instead. We'll see whether a problem appears
+ % with macro expansion. --kasal, 19aug04
+ \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+ % ... and \example
+ \spaceisspace
+ %
+ % Append \endinput to make sure that TeX does not see the ending newline.
+ % I've verified that it is necessary both for e-TeX and for ordinary TeX
+ % --kasal, 29nov03
+ \scantokens{#1\endinput}%
+ \endgroup
+}
+
+\def\scanexp#1{%
+ \edef\temp{\noexpand\scanmacro{#1}}%
+ \temp
+}
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+
+% List of all defined macros in the form
+% \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+ \toks0 = \expandafter{\macrolist\definedummyword#1}%
+ \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\scanctxt{%
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\@=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+}
+
+\def\scanargctxt{%
+ \scanctxt
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{%
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+\def\macroargctxt{%
+ \scanctxt
+ \catcode`\\=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0%
+ \else
+ \expandafter\parsemargdef \argl;%
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ \addtomacrolist{\the\macname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\parseargdef\unmacro{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\definedummyword\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx #1\relax
+ % remove this
+ \else
+ \noexpand\definedummyword \noexpand#1%
+ \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list. Set up \paramno and \paramlist
+% so \defmacro knows what to do. Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX: let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1%
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifrecursive
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\scanmacro{\temp}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup\noexpand\scanmacro{\temp}}%
+ \else % many
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+ \fi
+ \else
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % many
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \fi
+ \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {. If so it reads up to the closing }, if not, it reads the whole
+% line. Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup\else
+ \expandafter\parsearg
+ \fi \macnamexxx}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Just make them active and then expand them all to nothing.
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \addtomacrolist{#1}%
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
+\let\nwnode=\node
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
+ \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \thissection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \atdummies % preserve commands, but don't expand them
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\thissection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \writexrdef{pg}{\folio}% will be written later, during \shipout
+ }%
+ \fi
+}
+
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ \def\printedmanual{\ignorespaces #5}%
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox1=\hbox{\printedmanual\unskip}%
+ \setbox0=\hbox{\printedrefname\unskip}%
+ \ifdim \wd0 = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+ % Use the node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Use the actual chapter/section title appear inside
+ % the square brackets. Use the real section title if we have it.
+ \ifdim \wd1 > 0pt
+ % It is in another manual, so we don't have it.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % Make link in pdf output.
+ \ifpdf
+ \leavevmode
+ \getfilename{#4}%
+ {\turnoffactive
+ % See comments at \activebackslashdouble.
+ {\activebackslashdouble \xdef\pdfxrefdest{#1}%
+ \backslashparens\pdfxrefdest}%
+ %
+ \ifnum\filenamelength>0
+ \startlink attr{/Border [0 0 0]}%
+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
+ \else
+ \startlink attr{/Border [0 0 0]}%
+ goto name{\pdfmkpgn{\pdfxrefdest}}%
+ \fi
+ }%
+ \linkcolor
+ \fi
+ %
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". We distinguish them by the
+ % LABEL-title being set to a magic string.
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd0 = 0pt
+ \refx{#1-snt}{}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % if the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd1 > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+ % insert empty discretionaries after hyphens, which means that it will
+ % not find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens, this
+ % is a loss. Therefore, we give the text of the node name again, so it
+ % is as if TeX is seeing it for the first time.
+ \ifdim \wd1 > 0pt
+ \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+ \else
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % output the `[mynode]' via a macro so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ % But we always want a comma and a space:
+ ,\space
+ %
+ % output the `page 3'.
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+ {%
+ \indexnofonts
+ \otherbackslash
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ \message{\linenumber Undefined cross reference `#1'.}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file. Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions). But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+ \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR#1\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
+ \fi
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readdatafile{aux}%
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\setupdatafile{%
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
+ % supported in the main text, it doesn't seem desirable. Furthermore,
+ % that is not enough: for node names that actually contain a ^
+ % character, we would end up writing a line like this: 'xrdef {'hat
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+ % argument, and \hat is not an expandable control sequence. It could
+ % all be worked out, but why? Either we support ^^ or we don't.
+ %
+ % The other change necessary for this was to define \auxhat:
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+ % and then to call \auxhat in \setq.
+ %
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ % This is to support \ in node names and titles, since the \
+ % characters end up in a \csname. It's easier than
+ % leaving it active and making its active definition an actual \
+ % character. What I don't understand is why it works in the *value*
+ % of the xrdef. Seems like it should be a catcode12 \, and that
+ % should not typeset properly. But it works, so I'm moving on for
+ % now. --karl, 15jan04.
+ \catcode`\\=\other
+ %
+ % Make the characters 128-255 be printing characters.
+ {%
+ \count1=128
+ \def\loop{%
+ \catcode\count1=\other
+ \advance\count1 by 1
+ \ifnum \count1<256 \loop \fi
+ }%
+ }%
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+ \setupdatafile
+ \input\jobname.#1
+\endgroup}
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\gdef\dofootnote{%
+ \insert\footins\bgroup
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\pagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarily, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\undefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing this stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \nobreak\bigskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \line\bgroup
+ \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode \egroup \bigbreak \fi % space after the image
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \thissection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\thissection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
+ \fi
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \atdummies
+ %
+ % since we read the caption text in the macro world, where ^^M
+ % is turned into a normal character, we have to scan it back, so
+ % we don't write the literal three characters "^^M" into the aux file.
+ \scanexp{%
+ \xdef\noexpand\gtemp{%
+ \ifx\thisshortcaption\empty
+ \thiscaption
+ \else
+ \thisshortcaption
+ \fi
+ }%
+ }%
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ % place the captured inserts
+ %
+ % BEWARE: when the floats start floating, we have to issue warning
+ % whenever an insert appears inside a float which could possibly
+ % float. --kasal, 26may04
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \thissection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
+ \else
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
+ \fi
+}
+
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
+\message{localization,}
+% and i18n.
+
+% @documentlanguage is usually given very early, just after
+% @setfilename. If done too late, it may not override everything
+% properly. Single argument is the language abbreviation.
+% It would be nice if we could set up a hyphenation file here.
+%
+\parseargdef\documentlanguage{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file if it exists.
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup
+}
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? In the current directory
+should work if nowhere else does.}
+
+
+% @documentencoding should change something in TeX eventually, most
+% likely, but for now just recognize it.
+\let\documentencoding = \comment
+
+
+% Page size parameters.
+%
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
+
+% Following George Bush, just get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \pageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \pagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{46\baselineskip}{6in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+ \parskip = 1.5pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.4in}{4.8in}%
+ {-.2in}{-.4in}%
+ {0pt}{14pt}%
+ {9in}{6in}%
+ %
+ \lispnarrowing = 0.25in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .4cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{51\baselineskip}{160mm}
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \hfuzz = 1.2pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1
+ \advance\dimen0 by \voffset
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\catcode`\$=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+\def\normaldollar{$}%$ font-lock fix
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+ \normalturnoffactive
+ \otherbackslash
+}
+
+\catcode`\@=0
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active
+@def@normalbackslash{{@tt@backslashcurfont}}
+% On startup, @fixbackslash assigns:
+% @let \ = @normalbackslash
+
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+@def@normalturnoffactive{%
+ @let\=@normalbackslash
+ @let"=@normaldoublequote
+ @let~=@normaltilde
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let<=@normalless
+ @let>=@normalgreater
+ @let+=@normalplus
+ @let$=@normaldollar %$ font-lock fix
+ @unsepspaces
+}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\' in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also turn back on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{%
+ @ifx\@eatinput @let\ = @normalbackslash @fi
+ @catcode`+=@active
+ @catcode`@_=@active
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
+
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@ignore
+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore
diff --git a/doc/unshar.1 b/doc/unshar.1
new file mode 100644
index 0000000..f356391
--- /dev/null
+++ b/doc/unshar.1
@@ -0,0 +1,60 @@
+.TH UNSHAR 1 "September 10, 1995"
+.SH NAME
+unshar \- unpack a shar file
+.SH SYNOPSIS
+unshar [ options ] [ file ... ]
+.SH DESCRIPTION
+.PP
+Unshar scans mail messages looking for the start of a shell archive. It
+then passes the archive through a copy of the shell to unpack it. It
+will accept multiple files. If no files are given, standard input is used.
+.SH OPTIONS
+.PP
+Options have a one letter version starting with \- or a long version starting
+with \-\-. The exception is \f2\-\-help\f1 and \f2\-\-version\f1,
+which does not have a short version.
+.IP "\f2\-\-version\f1"
+Print the version number of the program on standard output,
+then immediately exits.
+.IP "\f2\-\-help\f1"
+Print a help summary on standard output, then immediately exits.
+.IP "\f2\-d\f1 DIRECTORY \f2\-\-directory=\f1DIRECTORY"
+Change directory to DIRECTORY before unpacking any files.
+.IP "\f2\-c\f1 \f2\-\-overwrite\f1"
+Passed as an option to the shar file. Many shell archive scripts
+(including those produced by `shar' 3.40 and newer) accepts a \f2\-c\f1
+argument to indicate that existing files should be overwritten.
+.IP "\f2\-e\f1 \f2\-\-exit-0\f1"
+This option exists mainly for people who collect many shell
+archives into a single mail folder. With this option, `unshar'
+isolates each different shell archive from the others which have
+been put in the same file, unpacking each in turn, from the
+beginning of the file towards its end. Its proper operation
+relies on the fact that many shar files are terminated by a
+`exit 0' at the beginning of a line.
+
+Option \f2\-e\f1 is internally equivalent to \f2\-E\f1 "exit 0".
+.IP "\f2\-E\f1 STRING \f2\-\-split-at=\f1STRING"
+This option works like \f2\-e\f1, but it allows you to specify the
+string that separates archives if `exit 0' isn't appropriate.
+
+For example, noticing that most `.signatures' have a `\-\-' on a
+line right before them, one can sometimes use `\f2\-\-split-at\f1=\-\-' for
+splitting shell archives which lack the `exit 0' line at end. The
+signature will then be skipped altogether with the headers of the
+following message.
+.IP "\f2\-f\f1 \f2\-\-force\f1"
+The same as \f2\-c\f1.
+.SH SEE ALSO
+shar(1)
+.SH DIAGNOSTICS
+Any message from the shell may be displayed.
+.SH AUTHORS
+The shar and unshar programs is the collective work of many authors.
+Many people contributed by reporting problems, suggesting
+various improvements or submitting actual code. A list of
+these people is in the THANKS file in the sharutils distribution.
+.SH REPORTING BUGS
+Report bugs to <bug-gnu-utils@gnu.org>. Please put
+.I sharutils
+in the subject line. It helps to spot the message.
diff --git a/doc/uuencode.1 b/doc/uuencode.1
new file mode 100644
index 0000000..456a1ad
--- /dev/null
+++ b/doc/uuencode.1
@@ -0,0 +1,138 @@
+'.\" Copyright (c) 1980, 1990 The Regents of the University of California.
+'.\" All rights reserved.
+'.\"
+'.\" Redistribution and use in source and binary forms, with or without
+'.\" modification, are permitted provided that the following conditions
+'.\" are met:
+'.\" 1. Redistributions of source code must retain the above copyright
+'.\" notice, this list of conditions and the following disclaimer.
+'.\" 2. Redistributions in binary form must reproduce the above copyright
+'.\" notice, this list of conditions and the following disclaimer in the
+'.\" documentation and/or other materials provided with the distribution.
+'.\" 3. All advertising materials mentioning features or use of this software
+'.\" must display the following acknowledgement:
+'.\" This product includes software developed by the University of
+'.\" California, Berkeley and its contributors.
+'.\" 4. Neither the name of the University nor the names of its contributors
+'.\" may be used to endorse or promote products derived from this software
+'.\" without specific prior written permission.
+'.\"
+'.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+'.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+'.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+'.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+'.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+'.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+'.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+'.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+'.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+'.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+'.\" SUCH DAMAGE.
+'.\"
+'.\" Modified from
+'.\" @(#)uuencode.1 6.9 (Berkeley) 4/23/91
+'.\"
+.TH uuencode 1
+.SH NAME
+uuencode, uudecode \- encode a binary file, or decode its representation
+.SH SYNOPSIS
+.B uuencode
+[\-m] [ file ] name
+.PP
+.B uudecode
+[-o outfile] [ file ]...
+.SH DESCRIPTION
+.I Uuencode
+and
+.I uudecode
+are used to transmit binary files over transmission mediums
+that do not support other than simple
+ASCII
+data.
+.PP
+.I Uuencode
+reads
+.I file
+(or by default the standard input) and writes an encoded version
+to the standard output.
+The encoding uses only printing
+ASCII
+characters and includes the
+mode of the file and the operand
+.I name
+for use by
+.I uudecode.
+If
+.I name
+is
+.I /dev/stdout
+the result will be written to standard output. By default the standard
+UU encoding format will be used. If the option
+.I \-m
+is given on the command line
+.B base64
+encoding is used instead.
+.PP
+.B Note:
+.I uuencode
+uses buffered input and assumes that it is not hand typed from a tty.
+The consequence is that at a tty, you may need to hit Ctl-D several times
+to terminate input.
+.PP
+.I Uudecode
+transforms
+uuencoded
+.I files
+(or by default, the standard input) into the original form.
+The resulting file is named
+.I name
+(or
+.I outfile
+if the \-o option is given)
+and will have the mode of the original file except that setuid
+and execute bits are not retained. If
+.I outfile
+or
+.I name
+is /dev/stdout the result will be written to standard output.
+.I Uudecode
+ignores any leading and trailing lines. The program can automatically decide
+which of the two supported encoding schemes are used.
+.SH EXAMPLES
+The following example packages up a source tree, compresses it,
+uuencodes it and mails it to a user on another system.
+When
+.I uudecode
+is run on the target system, the file ``src_tree.tar.Z'' will be
+created which may then be uncompressed and extracted into the original
+tree.
+.PP
+.IP
+.NF
+tar cf \- src_tree \&| compress \&|
+uuencode src_tree.tar.Z \&| mail sys1!sys2!user
+.FI
+.LP
+.SH SEE ALSO
+compress(1), mail(1), uucp(1), uuencode(5)
+.SH STANDARDS
+This implementation is compliant with P1003.2b/D11.
+.SH BUGS
+If more than one file is given to
+.I uudecode
+and the \-o option is given or more than one
+.I name
+in the encoded files are the same the result is probably not what is expected.
+.PP
+The encoded form of the file is expanded by 37% for UU encoding and by 35%
+for base64 encoding (3 bytes become 4 plus control information).
+.SH REPORTING BUGS
+Report bugs to <bug-gnu-utils@gnu.org>. Please put
+.I sharutils
+or
+.I uuencode
+in the subject line. It helps to spot the message.
+.SH HISTORY
+The
+.I uuencode
+command appeared in BSD 4.0.
diff --git a/doc/uuencode.5 b/doc/uuencode.5
new file mode 100644
index 0000000..852121d
--- /dev/null
+++ b/doc/uuencode.5
@@ -0,0 +1,90 @@
+'.\" Copyright (c) 1989, 1991 The Regents of the University of California.
+'.\" All rights reserved.
+'.\"
+'.\" Redistribution and use in source and binary forms, with or without
+'.\" modification, are permitted provided that the following conditions
+'.\" are met:
+'.\" 1. Redistributions of source code must retain the above copyright
+'.\" notice, this list of conditions and the following disclaimer.
+'.\" 2. Redistributions in binary form must reproduce the above copyright
+'.\" notice, this list of conditions and the following disclaimer in the
+'.\" documentation and/or other materials provided with the distribution.
+'.\" 3. All advertising materials mentioning features or use of this software
+'.\" must display the following acknowledgement:
+'.\" This product includes software developed by the University of
+'.\" California, Berkeley and its contributors.
+'.\" 4. Neither the name of the University nor the names of its contributors
+'.\" may be used to endorse or promote products derived from this software
+'.\" without specific prior written permission.
+'.\"
+'.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+'.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+'.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+'.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+'.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+'.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+'.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+'.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+'.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+'.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+'.\" SUCH DAMAGE.
+'.\"
+'.\" @(#)uuencode.format.5 6.4 (Berkeley) 5/10/91
+'.\"
+.TH UUENCODE 5
+.SH NAME
+uuencode \- format of an encoded uuencode file
+.SH DESCRIPTION
+Files output by
+uuencode(1)
+consist of a header line,
+followed by a number of body lines,
+and a trailer line.
+The
+uudecode(1)
+command
+will ignore any lines preceding the header or
+following the trailer.
+Lines preceding a header must not, of course,
+look like a header.
+.PP
+The header line is distinguished by having the first
+6 characters
+.I begin\ \&
+The word
+.I begin
+is followed by a mode (in octal),
+and a string which names the remote file.
+A space separates the three items in the header line.
+.PP
+The body consists of a number of lines, each at most 62 characters
+long (including the trailing newline).
+These consist of a character count,
+followed by encoded characters,
+followed by a newline.
+The character count is a single printing character,
+and represents an integer, the number of bytes
+the rest of the line represents.
+Such integers are always in the range from 0 to 63 and can
+be determined by subtracting the character space (octal 40)
+from the character.
+.PP
+Groups of 3 bytes are stored in 4 characters, 6 bits per character.
+All are offset by a space to make the characters printing.
+The last line may be shorter than the normal 45 bytes.
+If the size is not a multiple of 3, this fact can be determined
+by the value of the count on the last line.
+Extra garbage will be included to make the character count a multiple
+of 4.
+The body is terminated by a line with a count of zero.
+This line consists of one ASCII space.
+.PP
+The trailer line consists of
+.I end
+on a line by itself.
+.SH SEE ALSO
+uuencode(1), uudecode(1), uusend(1), uucp(1), mail(1)
+.SH HISTORY
+The
+.I uuencode
+file format appeared in BSD 4.0 .
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644
index 0000000..5457c21
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,4 @@
+@set UPDATED 20 November 2005
+@set UPDATED-MONTH November 2005
+@set EDITION 4.7
+@set VERSION 4.7
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..4fbbae7
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,507 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-10-14.15
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+posix_glob=
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chmodcmd=$chmodprog
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c (ignored)
+-d create directories instead of installing files.
+-g GROUP $chgrpprog installed files to GROUP.
+-m MODE $chmodprog installed files to MODE.
+-o USER $chownprog installed files to USER.
+-s $stripprog installed files.
+-t DIRECTORY install into DIRECTORY.
+-T report an error if DSTFILE is a directory.
+--help display this help and exit.
+--version display version info and exit.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ shift
+ shift
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd=$stripprog
+ shift
+ continue;;
+
+ -t) dstarg=$2
+ shift
+ shift
+ continue;;
+
+ -T) no_target_directory=true
+ shift
+ continue;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dstarg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dstarg"
+ shift # fnord
+ fi
+ shift # arg
+ dstarg=$arg
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src ;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dstarg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dstarg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst ;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix=/ ;;
+ -*) prefix=./ ;;
+ *) prefix= ;;
+ esac
+
+ case $posix_glob in
+ '')
+ if (set -f) 2>/dev/null; then
+ posix_glob=true
+ else
+ posix_glob=false
+ fi ;;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob && set -f
+ set fnord $dstdir
+ shift
+ $posix_glob && set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # Now rename the file to the real destination.
+ { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
+ || {
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ if test -f "$dst"; then
+ $doit $rmcmd -f "$dst" 2>/dev/null \
+ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
+ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
+ || {
+ echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ else
+ :
+ fi
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ } || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/intl/ChangeLog b/intl/ChangeLog
new file mode 100644
index 0000000..5229816
--- /dev/null
+++ b/intl/ChangeLog
@@ -0,0 +1,4 @@
+2005-05-23 GNU <bug-gnu-gettext@gnu.org>
+
+ * Version 0.14.5 released.
+
diff --git a/intl/Makefile.in b/intl/Makefile.in
new file mode 100644
index 0000000..060ef49
--- /dev/null
+++ b/intl/Makefile.in
@@ -0,0 +1,500 @@
+# Makefile for directory with message catalog handling library of GNU gettext
+# Copyright (C) 1995-1998, 2000-2005 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = $(srcdir)
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+transform = @program_transform_name@
+libdir = @libdir@
+includedir = @includedir@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/intl
+aliaspath = $(localedir)
+subdir = intl
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+l = @INTL_LIBTOOL_SUFFIX_PREFIX@
+
+AR = ar
+CC = @CC@
+LIBTOOL = @LIBTOOL@
+RANLIB = @RANLIB@
+YACC = @INTLBISON@ -y -d
+YFLAGS = --name-prefix=__gettext
+
+DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
+-DLIBDIR=\"$(libdir)\" -DIN_LIBINTL \
+-DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
+-Dset_relocation_prefix=libintl_set_relocation_prefix \
+-Drelocate=libintl_relocate \
+-DDEPENDS_ON_LIBICONV=1 @DEFS@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+HEADERS = \
+ gmo.h \
+ gettextP.h \
+ hash-string.h \
+ loadinfo.h \
+ plural-exp.h \
+ eval-plural.h \
+ localcharset.h \
+ relocatable.h \
+ xsize.h \
+ printf-args.h printf-args.c \
+ printf-parse.h wprintf-parse.h printf-parse.c \
+ vasnprintf.h vasnwprintf.h vasnprintf.c \
+ os2compat.h \
+ libgnuintl.h.in
+SOURCES = \
+ bindtextdom.c \
+ dcgettext.c \
+ dgettext.c \
+ gettext.c \
+ finddomain.c \
+ loadmsgcat.c \
+ localealias.c \
+ textdomain.c \
+ l10nflist.c \
+ explodename.c \
+ dcigettext.c \
+ dcngettext.c \
+ dngettext.c \
+ ngettext.c \
+ plural.y \
+ plural-exp.c \
+ localcharset.c \
+ relocatable.c \
+ langprefs.c \
+ localename.c \
+ log.c \
+ printf.c \
+ osdep.c \
+ os2compat.c \
+ intl-compat.c
+OBJECTS = \
+ bindtextdom.$lo \
+ dcgettext.$lo \
+ dgettext.$lo \
+ gettext.$lo \
+ finddomain.$lo \
+ loadmsgcat.$lo \
+ localealias.$lo \
+ textdomain.$lo \
+ l10nflist.$lo \
+ explodename.$lo \
+ dcigettext.$lo \
+ dcngettext.$lo \
+ dngettext.$lo \
+ ngettext.$lo \
+ plural.$lo \
+ plural-exp.$lo \
+ localcharset.$lo \
+ relocatable.$lo \
+ langprefs.$lo \
+ localename.$lo \
+ log.$lo \
+ printf.$lo \
+ osdep.$lo \
+ intl-compat.$lo
+DISTFILES.common = Makefile.in \
+config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
+DISTFILES.generated = plural.c
+DISTFILES.normal = VERSION
+DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \
+libgnuintl.h_vms Makefile.vms \
+libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
+DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
+COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
+
+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:
+
+libintl.a libgnuintl.a: $(OBJECTS)
+ rm -f $@
+ $(AR) cru $@ $(OBJECTS)
+ $(RANLIB) $@
+
+libintl.la libgnuintl.la: $(OBJECTS)
+ $(LIBTOOL) --mode=link \
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
+ $(OBJECTS) @LTLIBICONV@ @INTL_MACOSX_LIBS@ $(LIBS) -lc \
+ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
+ -rpath $(libdir) \
+ -no-undefined
+
+# Libtool's library version information for libintl.
+# Before making a gettext release, the gettext maintainer must change this
+# according to the libtool documentation, section "Library interface versions".
+# Maintainers of other packages that include the intl directory must *not*
+# change these values.
+LTV_CURRENT=7
+LTV_REVISION=3
+LTV_AGE=4
+
+.SUFFIXES:
+.SUFFIXES: .c .y .o .lo .sin .sed
+
+.c.o:
+ $(COMPILE) $<
+
+.y.c:
+ $(YACC) $(YFLAGS) --output $@ $<
+ rm -f $*.h
+
+bindtextdom.lo: $(srcdir)/bindtextdom.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c
+dcgettext.lo: $(srcdir)/dcgettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c
+dgettext.lo: $(srcdir)/dgettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c
+gettext.lo: $(srcdir)/gettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c
+finddomain.lo: $(srcdir)/finddomain.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c
+loadmsgcat.lo: $(srcdir)/loadmsgcat.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c
+localealias.lo: $(srcdir)/localealias.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c
+textdomain.lo: $(srcdir)/textdomain.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c
+l10nflist.lo: $(srcdir)/l10nflist.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c
+explodename.lo: $(srcdir)/explodename.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c
+dcigettext.lo: $(srcdir)/dcigettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c
+dcngettext.lo: $(srcdir)/dcngettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c
+dngettext.lo: $(srcdir)/dngettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c
+ngettext.lo: $(srcdir)/ngettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c
+plural.lo: $(srcdir)/plural.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c
+plural-exp.lo: $(srcdir)/plural-exp.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c
+localcharset.lo: $(srcdir)/localcharset.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c
+relocatable.lo: $(srcdir)/relocatable.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c
+langprefs.lo: $(srcdir)/langprefs.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/langprefs.c
+localename.lo: $(srcdir)/localename.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
+log.lo: $(srcdir)/log.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
+printf.lo: $(srcdir)/printf.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c
+osdep.lo: $(srcdir)/osdep.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
+intl-compat.lo: $(srcdir)/intl-compat.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
+
+ref-add.sed: $(srcdir)/ref-add.sin
+ sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
+ mv t-ref-add.sed ref-add.sed
+ref-del.sed: $(srcdir)/ref-del.sin
+ sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
+ mv t-ref-del.sed ref-del.sed
+
+INCLUDES = -I. -I$(srcdir) -I..
+
+libgnuintl.h: $(srcdir)/libgnuintl.h.in
+ sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \
+ -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \
+ -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \
+ -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \
+ < $(srcdir)/libgnuintl.h.in > libgnuintl.h
+
+libintl.h: libgnuintl.h
+ cp libgnuintl.h libintl.h
+
+charset.alias: $(srcdir)/config.charset
+ $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
+ mv t-$@ $@
+
+check: all
+
+# We must not install the libintl.h/libintl.a files if we are on a
+# system which has the GNU gettext() function in its C library or in a
+# separate library.
+# If you want to use the one which comes with this version of the
+# package, you have to use `configure --with-included-gettext'.
+install: install-exec install-data
+install-exec: all
+ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
+ $(LIBTOOL) --mode=install \
+ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
+ if test "@RELOCATABLE@" = yes; then \
+ dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
+ if test -n "$$dependencies"; then \
+ rm -f $(DESTDIR)$(libdir)/libintl.la; \
+ fi; \
+ fi; \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools" \
+ && test '@USE_INCLUDED_LIBINTL@' = no \
+ && test @GLIBC2@ != no; then \
+ $(mkinstalldirs) $(DESTDIR)$(libdir); \
+ $(LIBTOOL) --mode=install \
+ $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \
+ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+ $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+ $(LIBTOOL) --mode=uninstall \
+ rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \
+ else \
+ : ; \
+ fi
+ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
+ temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+ dest=$(DESTDIR)$(libdir)/charset.alias; \
+ if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+ orig=$(DESTDIR)$(libdir)/charset.alias; \
+ sed -f ref-add.sed $$orig > $$temp; \
+ $(INSTALL_DATA) $$temp $$dest; \
+ rm -f $$temp; \
+ else \
+ if test @GLIBC21@ = no; then \
+ orig=charset.alias; \
+ sed -f ref-add.sed $$orig > $$temp; \
+ $(INSTALL_DATA) $$temp $$dest; \
+ rm -f $$temp; \
+ fi; \
+ fi; \
+ $(mkinstalldirs) $(DESTDIR)$(localedir); \
+ test -f $(DESTDIR)$(localedir)/locale.alias \
+ && orig=$(DESTDIR)$(localedir)/locale.alias \
+ || orig=$(srcdir)/locale.alias; \
+ temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+ dest=$(DESTDIR)$(localedir)/locale.alias; \
+ sed -f ref-add.sed $$orig > $$temp; \
+ $(INSTALL_DATA) $$temp $$dest; \
+ rm -f $$temp; \
+ else \
+ : ; \
+ fi
+install-data: all
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
+ $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
+ dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \
+ for file in $$dists; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
+ dists="$(DISTFILES.generated)"; \
+ for file in $$dists; do \
+ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+ $(INSTALL_DATA) $$dir/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ dists="$(DISTFILES.obsolete)"; \
+ for file in $$dists; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+
+install-strip: install
+
+installdirs:
+ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools" \
+ && test '@USE_INCLUDED_LIBINTL@' = no \
+ && test @GLIBC2@ != no; then \
+ $(mkinstalldirs) $(DESTDIR)$(libdir); \
+ else \
+ : ; \
+ fi
+ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
+ $(mkinstalldirs) $(DESTDIR)$(localedir); \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ rm -f $(DESTDIR)$(includedir)/libintl.h; \
+ $(LIBTOOL) --mode=uninstall \
+ rm -f $(DESTDIR)$(libdir)/libintl.$la; \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools" \
+ && test '@USE_INCLUDED_LIBINTL@' = no \
+ && test @GLIBC2@ != no; then \
+ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+ else \
+ : ; \
+ fi
+ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+ temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+ dest=$(DESTDIR)$(libdir)/charset.alias; \
+ sed -f ref-del.sed $$dest > $$temp; \
+ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+ rm -f $$dest; \
+ else \
+ $(INSTALL_DATA) $$temp $$dest; \
+ fi; \
+ rm -f $$temp; \
+ fi; \
+ if test -f $(DESTDIR)$(localedir)/locale.alias; then \
+ temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+ dest=$(DESTDIR)$(localedir)/locale.alias; \
+ sed -f ref-del.sed $$dest > $$temp; \
+ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+ rm -f $$dest; \
+ else \
+ $(INSTALL_DATA) $$temp $$dest; \
+ fi; \
+ rm -f $$temp; \
+ fi; \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+
+info dvi ps pdf html:
+
+$(OBJECTS): ../config.h libgnuintl.h
+bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h
+dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h
+explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h
+dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
+dcigettext.$lo: $(srcdir)/eval-plural.h
+localcharset.$lo: $(srcdir)/localcharset.h
+localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
+printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES)
+ here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+
+ctags: CTAGS
+
+CTAGS: $(HEADERS) $(SOURCES)
+ here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
+
+id: ID
+
+ID: $(HEADERS) $(SOURCES)
+ here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+
+
+mostlyclean:
+ rm -f *.a *.la *.o *.obj *.lo core core.*
+ rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed
+ rm -f -r .libs _libs
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile ID TAGS
+ if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
+ rm -f ChangeLog.inst $(DISTFILES.normal); \
+ else \
+ : ; \
+ fi
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+
+# GNU gettext needs not contain the file `VERSION' but contains some
+# other files which should not be distributed in other packages.
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ : ; \
+ else \
+ if test "$(PACKAGE)" = "gettext-runtime"; then \
+ additional="$(DISTFILES.gettext)"; \
+ else \
+ additional="$(DISTFILES.normal)"; \
+ fi; \
+ $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
+ for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
+ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+ cp -p $$dir/$$file $(distdir) || test $$file = Makefile.in || exit 1; \
+ done; \
+ fi
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status
+# This would be more efficient, but doesn't work any more with autoconf-2.57,
+# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used.
+# cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/intl/VERSION b/intl/VERSION
new file mode 100644
index 0000000..ea89761
--- /dev/null
+++ b/intl/VERSION
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.14.5
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
new file mode 100644
index 0000000..7a26062
--- /dev/null
+++ b/intl/bindtextdom.c
@@ -0,0 +1,363 @@
+/* Implementation of the bindtextdomain(3) function
+ Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_dirname 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 @@ */
+
+/* Contains the default location of the message catalogs. */
+extern const char _nl_default_dirname[];
+#ifdef _LIBC
+extern const char _nl_default_dirname_internal[] attribute_hidden;
+#else
+# define INTUSE(name) name
+#endif
+
+/* List with bindings of specific domains. */
+extern struct binding *_nl_domain_bindings;
+
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
+#else
+# define BINDTEXTDOMAIN libintl_bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
+#endif
+
+/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
+ to be used for the DOMAINNAME message catalog.
+ If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
+ modified, only the current value is returned.
+ If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
+ modified nor returned. */
+static void
+set_binding_values (const char *domainname,
+ const char **dirnamep, const char **codesetp)
+{
+ struct binding *binding;
+ int modified;
+
+ /* Some sanity checks. */
+ if (domainname == NULL || domainname[0] == '\0')
+ {
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ return;
+ }
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ modified = 0;
+
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding != NULL)
+ {
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+
+ if (dirname == NULL)
+ /* The current binding has be to returned. */
+ *dirnamep = binding->dirname;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->dirname;
+ if (strcmp (dirname, result) != 0)
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ result = (char *) INTUSE(_nl_default_dirname);
+ else
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (dirname);
+#else
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, dirname, len);
+#endif
+ }
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->dirname != INTUSE(_nl_default_dirname))
+ free (binding->dirname);
+
+ binding->dirname = result;
+ modified = 1;
+ }
+ }
+ *dirnamep = result;
+ }
+ }
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset == NULL)
+ /* The current binding has be to returned. */
+ *codesetp = binding->codeset;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->codeset;
+ if (result == NULL || strcmp (codeset, result) != 0)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, codeset, len);
+#endif
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->codeset != NULL)
+ free (binding->codeset);
+
+ binding->codeset = result;
+ binding->codeset_cntr++;
+ modified = 1;
+ }
+ }
+ *codesetp = result;
+ }
+ }
+ }
+ else if ((dirnamep == NULL || *dirnamep == NULL)
+ && (codesetp == NULL || *codesetp == NULL))
+ {
+ /* Simply return the default values. */
+ if (dirnamep)
+ *dirnamep = INTUSE(_nl_default_dirname);
+ if (codesetp)
+ *codesetp = NULL;
+ }
+ else
+ {
+ /* We have to create a new binding. */
+ size_t len = strlen (domainname) + 1;
+ struct binding *new_binding =
+ (struct binding *) malloc (offsetof (struct binding, domainname) + len);
+
+ if (__builtin_expect (new_binding == NULL, 0))
+ goto failed;
+
+ memcpy (new_binding->domainname, domainname, len);
+
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+
+ if (dirname == NULL)
+ /* The default value. */
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ char *result;
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (dirname);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+#else
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+ memcpy (result, dirname, len);
+#endif
+ dirname = result;
+ }
+ }
+ *dirnamep = dirname;
+ new_binding->dirname = (char *) dirname;
+ }
+ else
+ /* The default value. */
+ new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
+
+ new_binding->codeset_cntr = 0;
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset != NULL)
+ {
+ char *result;
+
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+ memcpy (result, codeset, len);
+#endif
+ codeset = result;
+ new_binding->codeset_cntr++;
+ }
+ *codesetp = codeset;
+ new_binding->codeset = (char *) codeset;
+ }
+ else
+ new_binding->codeset = NULL;
+
+ /* Now enqueue it. */
+ if (_nl_domain_bindings == NULL
+ || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+ {
+ new_binding->next = _nl_domain_bindings;
+ _nl_domain_bindings = new_binding;
+ }
+ else
+ {
+ binding = _nl_domain_bindings;
+ while (binding->next != NULL
+ && strcmp (domainname, binding->next->domainname) > 0)
+ binding = binding->next;
+
+ new_binding->next = binding->next;
+ binding->next = new_binding;
+ }
+
+ modified = 1;
+
+ /* Here we deal with memory allocation failures. */
+ if (0)
+ {
+ failed_codeset:
+ if (new_binding->dirname != INTUSE(_nl_default_dirname))
+ free (new_binding->dirname);
+ failed_dirname:
+ free (new_binding);
+ failed:
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ }
+ }
+
+ /* If we modified any binding, we flush the caches. */
+ if (modified)
+ ++_nl_msg_cat_cntr;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+}
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+char *
+BINDTEXTDOMAIN (const char *domainname, const char *dirname)
+{
+ set_binding_values (domainname, &dirname, NULL);
+ return (char *) dirname;
+}
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+char *
+BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
+{
+ set_binding_values (domainname, NULL, &codeset);
+ return (char *) codeset;
+}
+
+#ifdef _LIBC
+/* Aliases for function names in GNU C Library. */
+weak_alias (__bindtextdomain, bindtextdomain);
+weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
+#endif
diff --git a/intl/config.charset b/intl/config.charset
new file mode 100755
index 0000000..9090c80
--- /dev/null
+++ b/intl/config.charset
@@ -0,0 +1,638 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+# Copyright (C) 2000-2004 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+# The table consists of lines of the form
+# ALIAS CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+# name MIME? used by which systems
+# ASCII, ANSI_X3.4-1968 glibc solaris freebsd darwin
+# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-3 Y glibc solaris
+# ISO-8859-4 Y osf solaris freebsd darwin
+# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-6 Y glibc aix hpux solaris
+# ISO-8859-7 Y glibc aix hpux irix osf solaris darwin
+# ISO-8859-8 Y glibc aix hpux osf solaris
+# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin
+# ISO-8859-13 glibc darwin
+# ISO-8859-14 glibc
+# ISO-8859-15 glibc aix osf solaris freebsd darwin
+# KOI8-R Y glibc solaris freebsd darwin
+# KOI8-U Y glibc freebsd darwin
+# KOI8-T glibc
+# CP437 dos
+# CP775 dos
+# CP850 aix osf dos
+# CP852 dos
+# CP855 dos
+# CP856 aix
+# CP857 dos
+# CP861 dos
+# CP862 dos
+# CP864 dos
+# CP865 dos
+# CP866 freebsd darwin dos
+# CP869 dos
+# CP874 woe32 dos
+# CP922 aix
+# CP932 aix woe32 dos
+# CP943 aix
+# CP949 osf woe32 dos
+# CP950 woe32 dos
+# CP1046 aix
+# CP1124 aix
+# CP1125 dos
+# CP1129 aix
+# CP1250 woe32
+# CP1251 glibc solaris darwin woe32
+# CP1252 aix woe32
+# CP1253 woe32
+# CP1254 woe32
+# CP1255 glibc woe32
+# CP1256 woe32
+# CP1257 woe32
+# GB2312 Y glibc aix hpux irix solaris freebsd darwin
+# EUC-JP Y glibc aix hpux irix osf solaris freebsd darwin
+# EUC-KR Y glibc aix hpux irix osf solaris freebsd darwin
+# EUC-TW glibc aix hpux irix osf solaris
+# BIG5 Y glibc aix hpux osf solaris freebsd darwin
+# BIG5-HKSCS glibc solaris
+# GBK glibc aix osf solaris woe32 dos
+# GB18030 glibc solaris
+# SHIFT_JIS Y hpux osf solaris freebsd darwin
+# JOHAB glibc solaris woe32
+# TIS-620 glibc aix hpux osf solaris
+# VISCII Y glibc
+# TCVN5712-1 glibc
+# GEORGIAN-PS glibc
+# HP-ROMAN8 hpux
+# HP-ARABIC8 hpux
+# HP-GREEK8 hpux
+# HP-HEBREW8 hpux
+# HP-TURKISH8 hpux
+# HP-KANA8 hpux
+# DEC-KANJI osf
+# DEC-HANYU osf
+# UTF-8 Y glibc aix hpux osf solaris darwin
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+ linux-gnulibc1*)
+ # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ echo "C ASCII"
+ echo "POSIX ASCII"
+ for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
+ en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
+ en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
+ es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
+ et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
+ fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
+ it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
+ sv_FI sv_SE; do
+ echo "$l ISO-8859-1"
+ echo "$l.iso-8859-1 ISO-8859-1"
+ echo "$l.iso-8859-15 ISO-8859-15"
+ echo "$l.iso-8859-15@euro ISO-8859-15"
+ echo "$l@euro ISO-8859-15"
+ echo "$l.cp-437 CP437"
+ echo "$l.cp-850 CP850"
+ echo "$l.cp-1252 CP1252"
+ echo "$l.cp-1252@euro CP1252"
+ #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
+ echo "$l.utf-8 UTF-8"
+ echo "$l.utf-8@euro UTF-8"
+ done
+ for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
+ sl_SI sr sr_CS sr_YU; do
+ echo "$l ISO-8859-2"
+ echo "$l.iso-8859-2 ISO-8859-2"
+ echo "$l.cp-852 CP852"
+ echo "$l.cp-1250 CP1250"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in mk mk_MK ru ru_RU; do
+ echo "$l ISO-8859-5"
+ echo "$l.iso-8859-5 ISO-8859-5"
+ echo "$l.koi8-r KOI8-R"
+ echo "$l.cp-866 CP866"
+ echo "$l.cp-1251 CP1251"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in ar ar_SA; do
+ echo "$l ISO-8859-6"
+ echo "$l.iso-8859-6 ISO-8859-6"
+ echo "$l.cp-864 CP864"
+ #echo "$l.cp-868 CP868" # not a commonly used encoding
+ echo "$l.cp-1256 CP1256"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in el el_GR gr gr_GR; do
+ echo "$l ISO-8859-7"
+ echo "$l.iso-8859-7 ISO-8859-7"
+ echo "$l.cp-869 CP869"
+ echo "$l.cp-1253 CP1253"
+ echo "$l.cp-1253@euro CP1253"
+ echo "$l.utf-8 UTF-8"
+ echo "$l.utf-8@euro UTF-8"
+ done
+ for l in he he_IL iw iw_IL; do
+ echo "$l ISO-8859-8"
+ echo "$l.iso-8859-8 ISO-8859-8"
+ echo "$l.cp-862 CP862"
+ echo "$l.cp-1255 CP1255"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in tr tr_TR; do
+ echo "$l ISO-8859-9"
+ echo "$l.iso-8859-9 ISO-8859-9"
+ echo "$l.cp-857 CP857"
+ echo "$l.cp-1254 CP1254"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in lt lt_LT lv lv_LV; do
+ #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
+ echo "$l ISO-8859-13"
+ done
+ for l in ru_UA uk uk_UA; do
+ echo "$l KOI8-U"
+ done
+ for l in zh zh_CN; do
+ #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
+ echo "$l GB2312"
+ done
+ for l in ja ja_JP ja_JP.EUC; do
+ echo "$l EUC-JP"
+ done
+ for l in ko ko_KR; do
+ echo "$l EUC-KR"
+ done
+ for l in th th_TH; do
+ echo "$l TIS-620"
+ done
+ for l in fa fa_IR; do
+ #echo "$l ISIRI-3342" # a broken encoding
+ echo "$l.utf-8 UTF-8"
+ done
+ ;;
+ linux* | *-gnu*)
+ # With glibc-2.1 or newer, we don't need any canonicalization,
+ # because glibc has iconv and both glibc and libiconv support all
+ # GNU canonical names directly. Therefore, the Makefile does not
+ # need to install the alias file at all.
+ # The following applies only to glibc-2.0.x and older libcs.
+ echo "ISO_646.IRV:1983 ASCII"
+ ;;
+ aix*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-6 ISO-8859-6"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "IBM-850 CP850"
+ echo "IBM-856 CP856"
+ echo "IBM-921 ISO-8859-13"
+ echo "IBM-922 CP922"
+ echo "IBM-932 CP932"
+ echo "IBM-943 CP943"
+ echo "IBM-1046 CP1046"
+ echo "IBM-1124 CP1124"
+ echo "IBM-1129 CP1129"
+ echo "IBM-1252 CP1252"
+ echo "IBM-eucCN GB2312"
+ echo "IBM-eucJP EUC-JP"
+ echo "IBM-eucKR EUC-KR"
+ echo "IBM-eucTW EUC-TW"
+ echo "big5 BIG5"
+ echo "GBK GBK"
+ echo "TIS-620 TIS-620"
+ echo "UTF-8 UTF-8"
+ ;;
+ hpux*)
+ echo "iso88591 ISO-8859-1"
+ echo "iso88592 ISO-8859-2"
+ echo "iso88595 ISO-8859-5"
+ echo "iso88596 ISO-8859-6"
+ echo "iso88597 ISO-8859-7"
+ echo "iso88598 ISO-8859-8"
+ echo "iso88599 ISO-8859-9"
+ echo "iso885915 ISO-8859-15"
+ echo "roman8 HP-ROMAN8"
+ echo "arabic8 HP-ARABIC8"
+ echo "greek8 HP-GREEK8"
+ echo "hebrew8 HP-HEBREW8"
+ echo "turkish8 HP-TURKISH8"
+ echo "kana8 HP-KANA8"
+ echo "tis620 TIS-620"
+ echo "big5 BIG5"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "hp15CN GB2312"
+ #echo "ccdc ?" # what is this?
+ echo "SJIS SHIFT_JIS"
+ echo "utf8 UTF-8"
+ ;;
+ irix*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "eucCN GB2312"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ ;;
+ osf*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "cp850 CP850"
+ echo "big5 BIG5"
+ echo "dechanyu DEC-HANYU"
+ echo "dechanzi GB2312"
+ echo "deckanji DEC-KANJI"
+ echo "deckorean EUC-KR"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "GBK GBK"
+ echo "KSC5601 CP949"
+ echo "sdeckanji EUC-JP"
+ echo "SJIS SHIFT_JIS"
+ echo "TACTIS TIS-620"
+ echo "UTF-8 UTF-8"
+ ;;
+ solaris*)
+ echo "646 ASCII"
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-3 ISO-8859-3"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-6 ISO-8859-6"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "koi8-r KOI8-R"
+ echo "ansi-1251 CP1251"
+ echo "BIG5 BIG5"
+ echo "Big5-HKSCS BIG5-HKSCS"
+ echo "gb2312 GB2312"
+ echo "GBK GBK"
+ echo "GB18030 GB18030"
+ echo "cns11643 EUC-TW"
+ echo "5601 EUC-KR"
+ echo "ko_KR.johap92 JOHAB"
+ echo "eucJP EUC-JP"
+ echo "PCK SHIFT_JIS"
+ echo "TIS620.2533 TIS-620"
+ #echo "sun_eu_greek ?" # what is this?
+ echo "UTF-8 UTF-8"
+ ;;
+ freebsd* | os2*)
+ # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+ # reuse FreeBSD's locale data for OS/2.
+ echo "C ASCII"
+ echo "US-ASCII ASCII"
+ for l in la_LN lt_LN; do
+ echo "$l.ASCII ASCII"
+ done
+ for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+ echo "$l.ISO_8859-1 ISO-8859-1"
+ echo "$l.DIS_8859-15 ISO-8859-15"
+ done
+ for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+ echo "$l.ISO_8859-2 ISO-8859-2"
+ done
+ for l in la_LN lt_LT; do
+ echo "$l.ISO_8859-4 ISO-8859-4"
+ done
+ for l in ru_RU ru_SU; do
+ echo "$l.KOI8-R KOI8-R"
+ echo "$l.ISO_8859-5 ISO-8859-5"
+ echo "$l.CP866 CP866"
+ done
+ echo "uk_UA.KOI8-U KOI8-U"
+ echo "zh_TW.BIG5 BIG5"
+ echo "zh_TW.Big5 BIG5"
+ echo "zh_CN.EUC GB2312"
+ echo "ja_JP.EUC EUC-JP"
+ echo "ja_JP.SJIS SHIFT_JIS"
+ echo "ja_JP.Shift_JIS SHIFT_JIS"
+ echo "ko_KR.EUC EUC-KR"
+ ;;
+ netbsd*)
+ echo "646 ASCII"
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "eucCN GB2312"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "BIG5 BIG5"
+ echo "SJIS SHIFT_JIS"
+ ;;
+ darwin[56]*)
+ # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ echo "C ASCII"
+ for l in en_AU en_CA en_GB en_US la_LN; do
+ echo "$l.US-ASCII ASCII"
+ done
+ for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
+ nl_NL no_NO pt_PT sv_SE; do
+ echo "$l ISO-8859-1"
+ echo "$l.ISO8859-1 ISO-8859-1"
+ echo "$l.ISO8859-15 ISO-8859-15"
+ done
+ for l in la_LN; do
+ echo "$l.ISO8859-1 ISO-8859-1"
+ echo "$l.ISO8859-15 ISO-8859-15"
+ done
+ for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
+ echo "$l.ISO8859-2 ISO-8859-2"
+ done
+ for l in la_LN lt_LT; do
+ echo "$l.ISO8859-4 ISO-8859-4"
+ done
+ for l in ru_RU; do
+ echo "$l.KOI8-R KOI8-R"
+ echo "$l.ISO8859-5 ISO-8859-5"
+ echo "$l.CP866 CP866"
+ done
+ for l in bg_BG; do
+ echo "$l.CP1251 CP1251"
+ done
+ echo "uk_UA.KOI8-U KOI8-U"
+ echo "zh_TW.BIG5 BIG5"
+ echo "zh_TW.Big5 BIG5"
+ echo "zh_CN.EUC GB2312"
+ echo "ja_JP.EUC EUC-JP"
+ echo "ja_JP.SJIS SHIFT_JIS"
+ echo "ko_KR.EUC EUC-KR"
+ ;;
+ darwin*)
+ # Darwin 7.5 has nl_langinfo(CODESET), but it is useless:
+ # - It returns the empty string when LANG is set to a locale of the
+ # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
+ # LC_CTYPE file.
+ # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
+ # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
+ # - The documentation says:
+ # "... all code that calls BSD system routines should ensure
+ # that the const *char parameters of these routines are in UTF-8
+ # encoding. All BSD system functions expect their string
+ # parameters to be in UTF-8 encoding and nothing else."
+ # It also says
+ # "An additional caveat is that string parameters for files,
+ # paths, and other file-system entities must be in canonical
+ # UTF-8. In a canonical UTF-8 Unicode string, all decomposable
+ # characters are decomposed ..."
+ # but this is not true: You can pass non-decomposed UTF-8 strings
+ # to file system functions, and it is the OS which will convert
+ # them to decomposed UTF-8 before accessing the file system.
+ # - The Apple Terminal application displays UTF-8 by default.
+ # - However, other applications are free to use different encodings:
+ # - xterm uses ISO-8859-1 by default.
+ # - TextEdit uses MacRoman by default.
+ # We prefer UTF-8 over decomposed UTF-8-MAC because one should
+ # minimize the use of decomposed Unicode. Unfortunately, through the
+ # Darwin file system, decomposed UTF-8 strings are leaked into user
+ # space nevertheless.
+ echo "* UTF-8"
+ ;;
+ beos*)
+ # BeOS has a single locale, and it has UTF-8 encoding.
+ echo "* UTF-8"
+ ;;
+ msdosdjgpp*)
+ # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ echo "#"
+ echo "# The encodings given here may not all be correct."
+ echo "# If you find that the encoding given for your language and"
+ echo "# country is not the one your DOS machine actually uses, just"
+ echo "# correct it in this file, and send a mail to"
+ echo "# Juan Manuel Guerrero <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_CS CP852" # CP852 or CP866 or CP855 ??
+ echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+ # ISO-8859-3 languages
+ echo "mt CP850"
+ echo "mt_MT CP850"
+ # ISO-8859-5 languages
+ echo "be CP866"
+ echo "be_BE CP866"
+ echo "bg CP866" # not CP855 ??
+ echo "bg_BG CP866" # not CP855 ??
+ echo "mk CP866" # not CP855 ??
+ echo "mk_MK CP866" # not CP855 ??
+ echo "ru CP866"
+ echo "ru_RU CP866"
+ echo "uk CP1125"
+ echo "uk_UA CP1125"
+ # ISO-8859-6 languages
+ echo "ar CP864"
+ echo "ar_AE CP864"
+ echo "ar_DZ CP864"
+ echo "ar_EG CP864"
+ echo "ar_IQ CP864"
+ echo "ar_IR CP864"
+ echo "ar_JO CP864"
+ echo "ar_KW CP864"
+ echo "ar_MA CP864"
+ echo "ar_OM CP864"
+ echo "ar_QA CP864"
+ echo "ar_SA CP864"
+ echo "ar_SY CP864"
+ # ISO-8859-7 languages
+ echo "el CP869"
+ echo "el_GR CP869"
+ # ISO-8859-8 languages
+ echo "he CP862"
+ echo "he_IL CP862"
+ # ISO-8859-9 languages
+ echo "tr CP857"
+ echo "tr_TR CP857"
+ # Japanese
+ echo "ja CP932"
+ echo "ja_JP CP932"
+ # Chinese
+ echo "zh_CN GBK"
+ echo "zh_TW CP950" # not CP938 ??
+ # Korean
+ echo "kr CP949" # not CP934 ??
+ echo "kr_KR CP949" # not CP934 ??
+ # Thai
+ echo "th CP874"
+ echo "th_TH CP874"
+ # Other
+ echo "eo CP850"
+ echo "eo_EO CP850"
+ ;;
+esac
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
new file mode 100644
index 0000000..c2a63f0
--- /dev/null
+++ b/intl/dcgettext.c
@@ -0,0 +1,56 @@
+/* Implementation of the dcgettext(3) function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCGETTEXT libintl_dcgettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCGETTEXT (const char *domainname, const char *msgid, int category)
+{
+ return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+INTDEF(__dcgettext)
+weak_alias (__dcgettext, dcgettext);
+#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
new file mode 100644
index 0000000..c7f4506
--- /dev/null
+++ b/intl/dcigettext.c
@@ -0,0 +1,1258 @@
+/* Implementation of the internal dcigettext function.
+ Copyright (C) 1995-1999, 2000-2005 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include <locale.h>
+
+#ifdef _LIBC
+ /* Guess whether integer division by zero raises signal SIGFPE.
+ Set to 1 only if you know for sure. In case of doubt, set to 0. */
+# if defined __alpha__ || defined __arm__ || defined __i386__ \
+ || defined __m68k__ || defined __s390__
+# define INTDIV0_RAISES_SIGFPE 1
+# else
+# define INTDIV0_RAISES_SIGFPE 0
+# endif
+#endif
+#if !INTDIV0_RAISES_SIGFPE
+# include <signal.h>
+#endif
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#include "gettextP.h"
+#include "plural-exp.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Thread safetyness. */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_lock_define_initialized(CLASS, NAME)
+# define __libc_lock_lock(NAME)
+# define __libc_lock_unlock(NAME)
+# define __libc_rwlock_define_initialized(CLASS, NAME)
+# define __libc_rwlock_rdlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* Alignment of types. */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define alignof(TYPE) __alignof__ (TYPE)
+#else
+# define alignof(TYPE) \
+ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+# 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 @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define getcwd __getcwd
+# ifndef stpcpy
+# define stpcpy __stpcpy
+# endif
+# define tfind __tfind
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+# define getcwd(buf, max) getwd (buf)
+# else
+# if VMS
+# define getcwd(buf, max) (getcwd) (buf, max, 0)
+# else
+char *getcwd ();
+# endif
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy (char *dest, const char *src);
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy (void *dest, const void *src, size_t n);
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try. */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h. */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+ PATH_MAX but might cause redefinition warnings when sys/param.h is
+ later included (as on MORE/BSD 4.3). */
+#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined PATH_MAX && defined _PC_PATH_MAX
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been. */
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+#endif
+
+/* This is the type used for the search tree where known translations
+ are stored. */
+struct known_translation_t
+{
+ /* Domain in which to search. */
+ char *domainname;
+
+ /* The category. */
+ int category;
+
+ /* State of the catalog counter at the point the string was found. */
+ int counter;
+
+ /* Catalog where the string was found. */
+ struct loaded_l10nfile *domain;
+
+ /* And finally the translation. */
+ const char *translation;
+ size_t translation_length;
+
+ /* Pointer to the string in question. */
+ char msgid[ZERO];
+};
+
+/* Root of the search tree with known translations. We can use this
+ only if the system provides the `tsearch' function family. */
+#if defined HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+
+static void *root;
+
+# ifdef _LIBC
+# define tsearch __tsearch
+# endif
+
+/* Function to compare two entries in the table of known translations. */
+static int
+transcmp (const void *p1, const void *p2)
+{
+ const struct known_translation_t *s1;
+ const struct known_translation_t *s2;
+ int result;
+
+ s1 = (const struct known_translation_t *) p1;
+ s2 = (const struct known_translation_t *) p2;
+
+ result = strcmp (s1->msgid, s2->msgid);
+ if (result == 0)
+ {
+ result = strcmp (s1->domainname, s2->domainname);
+ if (result == 0)
+ /* We compare the category last (though this is the cheapest
+ operation) since it is hopefully always the same (namely
+ LC_MESSAGES). */
+ result = s1->category - s2->category;
+ }
+
+ return result;
+}
+#endif
+
+#ifndef INTVARDEF
+# define INTVARDEF(name)
+#endif
+#ifndef INTUSE
+# define INTUSE(name) name
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+ textdomain(3). The default value for this is "messages". */
+const char _nl_default_default_domain[] attribute_hidden = "messages";
+
+/* Value used as the default domain for gettext(3). */
+const char *_nl_current_default_domain attribute_hidden
+ = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs. */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
+const char _nl_default_dirname[] = LOCALEDIR;
+INTVARDEF (_nl_default_dirname)
+#endif
+
+/* List with bindings of specific domains created by bindtextdomain()
+ calls. */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions. */
+static char *plural_lookup (struct loaded_l10nfile *domain,
+ unsigned long int n,
+ const char *translation, size_t translation_len)
+ internal_function;
+static const char *guess_category_value (int category,
+ const char *categoryname)
+ internal_function;
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# define category_to_name(category) _nl_category_names[category]
+#else
+static const char *category_to_name (int category) internal_function;
+#endif
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done. */
+# define freea(p) /* nothing */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+ void *address;
+ struct block_list *next;
+};
+# define ADD_BLOCK(list, addr) \
+ do { \
+ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
+ /* If we cannot get a free block we cannot add the new element to \
+ the list. */ \
+ if (newp != NULL) { \
+ newp->address = (addr); \
+ newp->next = (list); \
+ (list) = newp; \
+ } \
+ } while (0)
+# define FREE_BLOCKS(list) \
+ do { \
+ while (list != NULL) { \
+ struct block_list *old = list; \
+ list = list->next; \
+ free (old->address); \
+ free (old); \
+ } \
+ } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+# define freea(p) free (p)
+#endif /* have alloca */
+
+
+#ifdef _LIBC
+/* List of blocks allocated for translations. */
+typedef struct transmem_list
+{
+ struct transmem_list *next;
+ char data[ZERO];
+} transmem_block_t;
+static struct transmem_list *transmem_list;
+#else
+typedef unsigned char transmem_block_t;
+#endif
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCIGETTEXT __dcigettext
+#else
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+#ifdef _LIBC
+__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
+#endif
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+ easier methods therefore we make a difference here. */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+# ifndef HAVE_GETUID
+# define getuid() 0
+# endif
+# ifndef HAVE_GETGID
+# define getgid() 0
+# endif
+# ifndef HAVE_GETEUID
+# define geteuid() getuid()
+# endif
+# ifndef HAVE_GETEGID
+# define getegid() getgid()
+# endif
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+ if (enable_secure == 0) \
+ { \
+ if (getuid () != geteuid () || getgid () != getegid ()) \
+ enable_secure = 1; \
+ else \
+ enable_secure = -1; \
+ }
+#endif
+
+/* Get the function to evaluate the plural expression. */
+#include "eval-plural.h"
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ CATEGORY locale and, if PLURAL is nonzero, search over string
+ depending on the plural form determined by N. */
+char *
+DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
+ int plural, unsigned long int n, int category)
+{
+#ifndef HAVE_ALLOCA
+ struct block_list *block_list = NULL;
+#endif
+ struct loaded_l10nfile *domain;
+ struct binding *binding;
+ const char *categoryname;
+ const char *categoryvalue;
+ char *dirname, *xdomainname;
+ char *single_locale;
+ char *retval;
+ size_t retlen;
+ int saved_errno;
+#if defined HAVE_TSEARCH || defined _LIBC
+ struct known_translation_t *search;
+ struct known_translation_t **foundp = NULL;
+ size_t msgid_len;
+#endif
+ size_t domainname_len;
+
+ /* If no real MSGID is given return NULL. */
+ if (msgid1 == NULL)
+ return NULL;
+
+#ifdef _LIBC
+ if (category < 0 || category >= __LC_LAST || category == LC_ALL)
+ /* Bogus. */
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+#endif
+
+ __libc_rwlock_rdlock (_nl_state_lock);
+
+ /* If DOMAINNAME is NULL, we are interested in the default domain. If
+ CATEGORY is not LC_MESSAGES this might not make much sense but the
+ definition left this undefined. */
+ if (domainname == NULL)
+ domainname = _nl_current_default_domain;
+
+ /* OS/2 specific: backward compatibility with older libintl versions */
+#ifdef LC_MESSAGES_COMPAT
+ if (category == LC_MESSAGES_COMPAT)
+ category = LC_MESSAGES;
+#endif
+
+#if defined HAVE_TSEARCH || defined _LIBC
+ msgid_len = strlen (msgid1) + 1;
+
+ /* Try to find the translation among those which we found at
+ some time. */
+ search = (struct known_translation_t *)
+ alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
+ memcpy (search->msgid, msgid1, msgid_len);
+ search->domainname = (char *) domainname;
+ search->category = category;
+
+ foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+ freea (search);
+ if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
+ {
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
+ (*foundp)->translation_length);
+ else
+ retval = (char *) (*foundp)->translation;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+#endif
+
+ /* Preserve the `errno' value. */
+ saved_errno = errno;
+
+ /* See whether this is a SUID binary or not. */
+ DETERMINE_SECURE;
+
+ /* First find matching binding. */
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding == NULL)
+ dirname = (char *) INTUSE(_nl_default_dirname);
+ else if (IS_ABSOLUTE_PATH (binding->dirname))
+ dirname = binding->dirname;
+ else
+ {
+ /* We have a relative path. Make it absolute now. */
+ size_t dirname_len = strlen (binding->dirname) + 1;
+ size_t path_max;
+ char *ret;
+
+ path_max = (unsigned int) PATH_MAX;
+ path_max += 2; /* The getcwd docs say to do this. */
+
+ for (;;)
+ {
+ dirname = (char *) alloca (path_max + dirname_len);
+ ADD_BLOCK (block_list, dirname);
+
+ __set_errno (0);
+ ret = getcwd (dirname, path_max);
+ if (ret != NULL || errno != ERANGE)
+ break;
+
+ path_max += path_max / 2;
+ path_max += PATH_INCR;
+ }
+
+ if (ret == NULL)
+ /* We cannot get the current working directory. Don't signal an
+ error but simply return the default string. */
+ goto return_untranslated;
+
+ stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+ }
+
+ /* Now determine the symbolic name of CATEGORY and its value. */
+ categoryname = category_to_name (category);
+ categoryvalue = guess_category_value (category, categoryname);
+
+ domainname_len = strlen (domainname);
+ xdomainname = (char *) alloca (strlen (categoryname)
+ + domainname_len + 5);
+ ADD_BLOCK (block_list, xdomainname);
+
+ stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+ domainname, domainname_len),
+ ".mo");
+
+ /* Creating working area. */
+ single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+ ADD_BLOCK (block_list, single_locale);
+
+
+ /* Search for the given string. This is a loop because we perhaps
+ got an ordered list of languages to consider for the translation. */
+ while (1)
+ {
+ /* Make CATEGORYVALUE point to the next element of the list. */
+ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+ ++categoryvalue;
+ if (categoryvalue[0] == '\0')
+ {
+ /* The whole contents of CATEGORYVALUE has been searched but
+ no valid entry has been found. We solve this situation
+ by implicitly appending a "C" entry, i.e. no translation
+ will take place. */
+ single_locale[0] = 'C';
+ single_locale[1] = '\0';
+ }
+ else
+ {
+ char *cp = single_locale;
+ while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+ *cp++ = *categoryvalue++;
+ *cp = '\0';
+
+ /* When this is a SUID binary we must not allow accessing files
+ outside the dedicated directories. */
+ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
+ /* Ingore this entry. */
+ continue;
+ }
+
+ /* If the current locale value is C (or POSIX) we don't load a
+ domain. Return the MSGID. */
+ if (strcmp (single_locale, "C") == 0
+ || strcmp (single_locale, "POSIX") == 0)
+ break;
+
+ /* Find structure describing the message catalog matching the
+ DOMAINNAME and CATEGORY. */
+ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+ if (domain != NULL)
+ {
+ retval = _nl_find_msg (domain, binding, msgid1, &retlen);
+
+ if (retval == NULL)
+ {
+ int cnt;
+
+ for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+ {
+ retval = _nl_find_msg (domain->successor[cnt], binding,
+ msgid1, &retlen);
+
+ if (retval != NULL)
+ {
+ domain = domain->successor[cnt];
+ break;
+ }
+ }
+ }
+
+ if (retval != NULL)
+ {
+ /* Found the translation of MSGID1 in domain DOMAIN:
+ starting at RETVAL, RETLEN bytes. */
+ FREE_BLOCKS (block_list);
+#if defined HAVE_TSEARCH || defined _LIBC
+ if (foundp == NULL)
+ {
+ /* Create a new entry and add it to the search tree. */
+ struct known_translation_t *newp;
+
+ newp = (struct known_translation_t *)
+ malloc (offsetof (struct known_translation_t, msgid)
+ + msgid_len + domainname_len + 1);
+ if (newp != NULL)
+ {
+ newp->domainname =
+ mempcpy (newp->msgid, msgid1, msgid_len);
+ memcpy (newp->domainname, domainname, domainname_len + 1);
+ newp->category = category;
+ newp->counter = _nl_msg_cat_cntr;
+ newp->domain = domain;
+ newp->translation = retval;
+ newp->translation_length = retlen;
+
+ /* Insert the entry in the search tree. */
+ foundp = (struct known_translation_t **)
+ tsearch (newp, &root, transcmp);
+ if (foundp == NULL
+ || __builtin_expect (*foundp != newp, 0))
+ /* The insert failed. */
+ free (newp);
+ }
+ }
+ else
+ {
+ /* We can update the existing entry. */
+ (*foundp)->counter = _nl_msg_cat_cntr;
+ (*foundp)->domain = domain;
+ (*foundp)->translation = retval;
+ (*foundp)->translation_length = retlen;
+ }
+#endif
+ __set_errno (saved_errno);
+
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup (domain, n, retval, retlen);
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+ }
+ }
+
+ return_untranslated:
+ /* Return the untranslated MSGID. */
+ FREE_BLOCKS (block_list);
+ __libc_rwlock_unlock (_nl_state_lock);
+#ifndef _LIBC
+ if (!ENABLE_SECURE)
+ {
+ extern void _nl_log_untranslated (const char *logfilename,
+ const char *domainname,
+ const char *msgid1, const char *msgid2,
+ int plural);
+ const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
+
+ if (logfilename != NULL && logfilename[0] != '\0')
+ _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
+ }
+#endif
+ __set_errno (saved_errno);
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+}
+
+
+char *
+internal_function
+_nl_find_msg (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding, const char *msgid,
+ size_t *lengthp)
+{
+ struct loaded_domain *domain;
+ nls_uint32 nstrings;
+ size_t act;
+ char *result;
+ size_t resultlen;
+
+ if (domain_file->decided == 0)
+ _nl_load_domain (domain_file, domainbinding);
+
+ if (domain_file->data == NULL)
+ return NULL;
+
+ domain = (struct loaded_domain *) domain_file->data;
+
+ nstrings = domain->nstrings;
+
+ /* Locate the MSGID and its translation. */
+ if (domain->hash_tab != NULL)
+ {
+ /* Use the hashing table. */
+ nls_uint32 len = strlen (msgid);
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+ while (1)
+ {
+ nls_uint32 nstr =
+ W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
+
+ if (nstr == 0)
+ /* Hash table entry is empty. */
+ return NULL;
+
+ nstr--;
+
+ /* Compare msgid with the original string at index nstr.
+ We compare the lengths with >=, not ==, because plural entries
+ are represented by strings with an embedded NUL. */
+ if (nstr < nstrings
+ ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
+ && (strcmp (msgid,
+ domain->data + W (domain->must_swap,
+ domain->orig_tab[nstr].offset))
+ == 0)
+ : domain->orig_sysdep_tab[nstr - nstrings].length > len
+ && (strcmp (msgid,
+ domain->orig_sysdep_tab[nstr - nstrings].pointer)
+ == 0))
+ {
+ act = nstr;
+ goto found;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ /* NOTREACHED */
+ }
+ else
+ {
+ /* Try the default method: binary search in the sorted array of
+ messages. */
+ size_t top, bottom;
+
+ bottom = 0;
+ top = nstrings;
+ while (bottom < top)
+ {
+ int cmp_val;
+
+ act = (bottom + top) / 2;
+ cmp_val = strcmp (msgid, (domain->data
+ + W (domain->must_swap,
+ domain->orig_tab[act].offset)));
+ if (cmp_val < 0)
+ top = act;
+ else if (cmp_val > 0)
+ bottom = act + 1;
+ else
+ goto found;
+ }
+ /* No translation was found. */
+ return NULL;
+ }
+
+ found:
+ /* The translation was found at index ACT. If we have to convert the
+ string to use a different character set, this is the time. */
+ if (act < nstrings)
+ {
+ result = (char *)
+ (domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
+ resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+ }
+ else
+ {
+ result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
+ resultlen = domain->trans_sysdep_tab[act - nstrings].length;
+ }
+
+#if defined _LIBC || HAVE_ICONV
+ if (domain->codeset_cntr
+ != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
+ {
+ /* The domain's codeset has changed through bind_textdomain_codeset()
+ since the message catalog was initialized or last accessed. We
+ have to reinitialize the converter. */
+ _nl_free_domain_conv (domain);
+ _nl_init_domain_conv (domain_file, domain, domainbinding);
+ }
+
+ if (
+# ifdef _LIBC
+ domain->conv != (__gconv_t) -1
+# else
+# if HAVE_ICONV
+ domain->conv != (iconv_t) -1
+# endif
+# endif
+ )
+ {
+ /* We are supposed to do a conversion. First allocate an
+ appropriate table with the same structure as the table
+ of translations in the file, where we can put the pointers
+ to the converted strings in.
+ There is a slight complication with plural entries. They
+ are represented by consecutive NUL terminated strings. We
+ handle this case by converting RESULTLEN bytes, including
+ NULs. */
+
+ if (domain->conv_tab == NULL
+ && ((domain->conv_tab =
+ (char **) calloc (nstrings + domain->n_sysdep_strings,
+ sizeof (char *)))
+ == NULL))
+ /* Mark that we didn't succeed allocating a table. */
+ domain->conv_tab = (char **) -1;
+
+ if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
+ /* Nothing we can do, no more memory. */
+ goto converted;
+
+ if (domain->conv_tab[act] == NULL)
+ {
+ /* We haven't used this string so far, so it is not
+ translated yet. Do this now. */
+ /* We use a bit more efficient memory handling.
+ We allocate always larger blocks which get used over
+ time. This is faster than many small allocations. */
+ __libc_lock_define_initialized (static, lock)
+# define INITIAL_BLOCK_SIZE 4080
+ static unsigned char *freemem;
+ static size_t freemem_size;
+
+ const unsigned char *inbuf;
+ unsigned char *outbuf;
+ int malloc_count;
+# ifndef _LIBC
+ transmem_block_t *transmem_list = NULL;
+# endif
+
+ __libc_lock_lock (lock);
+
+ inbuf = (const unsigned char *) result;
+ outbuf = freemem + sizeof (size_t);
+
+ malloc_count = 0;
+ while (1)
+ {
+ transmem_block_t *newmem;
+# ifdef _LIBC
+ size_t non_reversible;
+ int res;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ res = __gconv (domain->conv,
+ &inbuf, inbuf + resultlen,
+ &outbuf,
+ outbuf + freemem_size - sizeof (size_t),
+ &non_reversible);
+
+ if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
+ break;
+
+ if (res != __GCONV_FULL_OUTPUT)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+ inbuf = result;
+# else
+# if HAVE_ICONV
+ const char *inptr = (const char *) inbuf;
+ size_t inleft = resultlen;
+ char *outptr = (char *) outbuf;
+ size_t outleft;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ outleft = freemem_size - sizeof (size_t);
+ if (iconv (domain->conv,
+ (ICONV_CONST char **) &inptr, &inleft,
+ &outptr, &outleft)
+ != (size_t) (-1))
+ {
+ outbuf = (unsigned char *) outptr;
+ break;
+ }
+ if (errno != E2BIG)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+# endif
+# endif
+
+ resize_freemem:
+ /* We must allocate a new buffer or resize the old one. */
+ if (malloc_count > 0)
+ {
+ ++malloc_count;
+ freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) realloc (transmem_list,
+ freemem_size);
+# ifdef _LIBC
+ if (newmem != NULL)
+ transmem_list = transmem_list->next;
+ else
+ {
+ struct transmem_list *old = transmem_list;
+
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+# endif
+ }
+ else
+ {
+ malloc_count = 1;
+ freemem_size = INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) malloc (freemem_size);
+ }
+ if (__builtin_expect (newmem == NULL, 0))
+ {
+ freemem = NULL;
+ freemem_size = 0;
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+# ifdef _LIBC
+ /* Add the block to the list of blocks we have to free
+ at some point. */
+ newmem->next = transmem_list;
+ transmem_list = newmem;
+
+ freemem = newmem->data;
+ freemem_size -= offsetof (struct transmem_list, data);
+# else
+ transmem_list = newmem;
+ freemem = newmem;
+# endif
+
+ outbuf = freemem + sizeof (size_t);
+ }
+
+ /* We have now in our buffer a converted string. Put this
+ into the table of conversions. */
+ *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
+ domain->conv_tab[act] = (char *) freemem;
+ /* Shrink freemem, but keep it aligned. */
+ freemem_size -= outbuf - freemem;
+ freemem = outbuf;
+ freemem += freemem_size & (alignof (size_t) - 1);
+ freemem_size = freemem_size & ~ (alignof (size_t) - 1);
+
+ __libc_lock_unlock (lock);
+ }
+
+ /* Now domain->conv_tab[act] contains the translation of all
+ the plural variants. */
+ result = domain->conv_tab[act] + sizeof (size_t);
+ resultlen = *(size_t *) domain->conv_tab[act];
+ }
+
+ converted:
+ /* The result string is converted. */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+ *lengthp = resultlen;
+ return result;
+}
+
+
+/* Look up a plural variant. */
+static char *
+internal_function
+plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
+ const char *translation, size_t translation_len)
+{
+ struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
+ unsigned long int index;
+ const char *p;
+
+ index = plural_eval (domaindata->plural, n);
+ if (index >= domaindata->nplurals)
+ /* This should never happen. It means the plural expression and the
+ given maximum value do not match. */
+ index = 0;
+
+ /* Skip INDEX strings at TRANSLATION. */
+ p = translation;
+ while (index-- > 0)
+ {
+#ifdef _LIBC
+ p = __rawmemchr (p, '\0');
+#else
+ p = strchr (p, '\0');
+#endif
+ /* And skip over the NUL byte. */
+ p++;
+
+ if (p >= translation + translation_len)
+ /* This should never happen. It means the plural expression
+ evaluated to a value larger than the number of variants
+ available for MSGID1. */
+ return (char *) translation;
+ }
+ return (char *) p;
+}
+
+#ifndef _LIBC
+/* Return string representation of locale CATEGORY. */
+static const char *
+internal_function
+category_to_name (int category)
+{
+ const char *retval;
+
+ switch (category)
+ {
+#ifdef LC_COLLATE
+ case LC_COLLATE:
+ retval = "LC_COLLATE";
+ break;
+#endif
+#ifdef LC_CTYPE
+ case LC_CTYPE:
+ retval = "LC_CTYPE";
+ break;
+#endif
+#ifdef LC_MONETARY
+ case LC_MONETARY:
+ retval = "LC_MONETARY";
+ break;
+#endif
+#ifdef LC_NUMERIC
+ case LC_NUMERIC:
+ retval = "LC_NUMERIC";
+ break;
+#endif
+#ifdef LC_TIME
+ case LC_TIME:
+ retval = "LC_TIME";
+ break;
+#endif
+#ifdef LC_MESSAGES
+ case LC_MESSAGES:
+ retval = "LC_MESSAGES";
+ break;
+#endif
+#ifdef LC_RESPONSE
+ case LC_RESPONSE:
+ retval = "LC_RESPONSE";
+ break;
+#endif
+#ifdef LC_ALL
+ case LC_ALL:
+ /* This might not make sense but is perhaps better than any other
+ value. */
+ retval = "LC_ALL";
+ break;
+#endif
+ default:
+ /* If you have a better idea for a default value let me know. */
+ retval = "LC_XXX";
+ }
+
+ return retval;
+}
+#endif
+
+/* Guess value of current locale from value of the environment variables
+ or system-dependent defaults. */
+static const char *
+internal_function
+guess_category_value (int category, const char *categoryname)
+{
+ const char *language;
+ const char *locale;
+#ifndef _LIBC
+ const char *language_default;
+ int locale_defaulted;
+#endif
+
+ /* We use the settings in the following order:
+ 1. The value of the environment variable 'LANGUAGE'. This is a GNU
+ extension. Its value can be a colon-separated list of locale names.
+ 2. The value of the environment variable 'LC_ALL', 'LC_xxx', or 'LANG'.
+ More precisely, the first among these that is set to a non-empty value.
+ This is how POSIX specifies it. The value is a single locale name.
+ 3. A system-dependent preference list of languages. Its value can be a
+ colon-separated list of locale names.
+ 4. A system-dependent default locale name.
+ This way:
+ - System-dependent settings can be overridden by environment variables.
+ - If the system provides both a list of languages and a default locale,
+ the former is used. */
+
+ /* Fetch the locale name, through the POSIX method of looking to `LC_ALL',
+ `LC_xxx', and `LANG'. On some systems this can be done by the
+ `setlocale' function itself. */
+#ifdef _LIBC
+ locale = __current_locale_name (category);
+#else
+ locale = _nl_locale_name_posix (category, categoryname);
+ locale_defaulted = 0;
+ if (locale == NULL)
+ {
+ locale = _nl_locale_name_default ();
+ locale_defaulted = 1;
+ }
+#endif
+
+ /* Ignore LANGUAGE and its system-dependent analogon if the locale is set
+ to "C" because
+ 1. "C" locale usually uses the ASCII encoding, and most international
+ messages use non-ASCII characters. These characters get displayed
+ as question marks (if using glibc's iconv()) or as invalid 8-bit
+ characters (because other iconv()s refuse to convert most non-ASCII
+ characters to ASCII). In any case, the output is ugly.
+ 2. The precise output of some programs in the "C" locale is specified
+ by POSIX and should not depend on environment variables like
+ "LANGUAGE" or system-dependent information. We allow such programs
+ to use gettext(). */
+ if (strcmp (locale, "C") == 0)
+ return locale;
+
+ /* The highest priority value is the value of the 'LANGUAGE' environment
+ variable. */
+ language = getenv ("LANGUAGE");
+ if (language != NULL && language[0] != '\0')
+ return language;
+#ifndef _LIBC
+ /* The next priority value is the locale name, if not defaulted. */
+ if (locale_defaulted)
+ {
+ /* The next priority value is the default language preferences list. */
+ language_default = _nl_language_preferences_default ();
+ if (language_default != NULL)
+ return language_default;
+ }
+ /* The least priority value is the locale name, if defaulted. */
+#endif
+ return locale;
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (char *dest, const char *src)
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (void *dest, const void *src, size_t n)
+{
+ return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+ program's end. */
+libc_freeres_fn (free_mem)
+{
+ void *old;
+
+ while (_nl_domain_bindings != NULL)
+ {
+ struct binding *oldp = _nl_domain_bindings;
+ _nl_domain_bindings = _nl_domain_bindings->next;
+ if (oldp->dirname != INTUSE(_nl_default_dirname))
+ /* Yes, this is a pointer comparison. */
+ free (oldp->dirname);
+ free (oldp->codeset);
+ free (oldp);
+ }
+
+ if (_nl_current_default_domain != _nl_default_default_domain)
+ /* Yes, again a pointer comparison. */
+ free ((char *) _nl_current_default_domain);
+
+ /* Remove the search tree with the known translations. */
+ __tdestroy (root, free);
+ root = NULL;
+
+ while (transmem_list != NULL)
+ {
+ old = transmem_list;
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+}
+#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
new file mode 100644
index 0000000..eb36833
--- /dev/null
+++ b/intl/dcngettext.c
@@ -0,0 +1,57 @@
+/* Implementation of the dcngettext(3) function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCNGETTEXT __dcngettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCNGETTEXT libintl_dcngettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCNGETTEXT (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n,
+ int category)
+{
+ return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dcngettext, dcngettext);
+#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
new file mode 100644
index 0000000..9b0d0de
--- /dev/null
+++ b/intl/dgettext.c
@@ -0,0 +1,58 @@
+/* Implementation of the dgettext(3) function.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define DGETTEXT libintl_dgettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale. */
+char *
+DGETTEXT (const char *domainname, const char *msgid)
+{
+ return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dgettext, dgettext);
+#endif
diff --git a/intl/dngettext.c b/intl/dngettext.c
new file mode 100644
index 0000000..3278438
--- /dev/null
+++ b/intl/dngettext.c
@@ -0,0 +1,59 @@
+/* Implementation of the dngettext(3) function.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DNGETTEXT __dngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define DNGETTEXT libintl_dngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale and skip message according to the plural form. */
+char *
+DNGETTEXT (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dngettext, dngettext);
+#endif
diff --git a/intl/eval-plural.h b/intl/eval-plural.h
new file mode 100644
index 0000000..dacd003
--- /dev/null
+++ b/intl/eval-plural.h
@@ -0,0 +1,108 @@
+/* Plural expression evaluation.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+/* Evaluate the plural expression and return an index value. */
+STATIC
+unsigned long int
+internal_function
+plural_eval (struct expression *pexp, unsigned long int n)
+{
+ switch (pexp->nargs)
+ {
+ case 0:
+ switch (pexp->operation)
+ {
+ case var:
+ return n;
+ case num:
+ return pexp->val.num;
+ default:
+ break;
+ }
+ /* NOTREACHED */
+ break;
+ case 1:
+ {
+ /* pexp->operation must be lnot. */
+ unsigned long int arg = plural_eval (pexp->val.args[0], n);
+ return ! arg;
+ }
+ case 2:
+ {
+ unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
+ if (pexp->operation == lor)
+ return leftarg || plural_eval (pexp->val.args[1], n);
+ else if (pexp->operation == land)
+ return leftarg && plural_eval (pexp->val.args[1], n);
+ else
+ {
+ unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
+
+ switch (pexp->operation)
+ {
+ case mult:
+ return leftarg * rightarg;
+ case divide:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg / rightarg;
+ case module:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg % rightarg;
+ case plus:
+ return leftarg + rightarg;
+ case minus:
+ return leftarg - rightarg;
+ case less_than:
+ return leftarg < rightarg;
+ case greater_than:
+ return leftarg > rightarg;
+ case less_or_equal:
+ return leftarg <= rightarg;
+ case greater_or_equal:
+ return leftarg >= rightarg;
+ case equal:
+ return leftarg == rightarg;
+ case not_equal:
+ return leftarg != rightarg;
+ default:
+ break;
+ }
+ }
+ /* NOTREACHED */
+ break;
+ }
+ case 3:
+ {
+ /* pexp->operation must be qmop. */
+ unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
+ return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
+ }
+ }
+ /* NOTREACHED */
+ return 0;
+}
diff --git a/intl/explodename.c b/intl/explodename.c
new file mode 100644
index 0000000..1361418
--- /dev/null
+++ b/intl/explodename.c
@@ -0,0 +1,185 @@
+/* Copyright (C) 1995-1998, 2000-2001, 2003 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found. Sigh! */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+# define NULL ((void *) 0)
+# else
+# define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+char *
+_nl_find_language (const char *name)
+{
+ while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+ && name[0] != '+' && name[0] != ',')
+ ++name;
+
+ return (char *) name;
+}
+
+
+int
+_nl_explode_name (char *name,
+ const char **language, const char **modifier,
+ const char **territory, const char **codeset,
+ const char **normalized_codeset, const char **special,
+ const char **sponsor, const char **revision)
+{
+ enum { undecided, xpg, cen } syntax;
+ char *cp;
+ int mask;
+
+ *modifier = NULL;
+ *territory = NULL;
+ *codeset = NULL;
+ *normalized_codeset = NULL;
+ *special = NULL;
+ *sponsor = NULL;
+ *revision = NULL;
+
+ /* Now we determine the single parts of the locale name. First
+ look for the language. Termination symbols are `_' and `@' if
+ we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
+ mask = 0;
+ syntax = undecided;
+ *language = cp = name;
+ cp = _nl_find_language (*language);
+
+ if (*language == cp)
+ /* This does not make sense: language has to be specified. Use
+ this entry as it is without exploding. Perhaps it is an alias. */
+ cp = strchr (*language, '\0');
+ else if (cp[0] == '_')
+ {
+ /* Next is the territory. */
+ cp[0] = '\0';
+ *territory = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+ && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= TERRITORY;
+
+ if (cp[0] == '.')
+ {
+ /* Next is the codeset. */
+ syntax = xpg;
+ cp[0] = '\0';
+ *codeset = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '@')
+ ++cp;
+
+ mask |= XPG_CODESET;
+
+ if (*codeset != cp && (*codeset)[0] != '\0')
+ {
+ *normalized_codeset = _nl_normalize_codeset (*codeset,
+ cp - *codeset);
+ if (strcmp (*codeset, *normalized_codeset) == 0)
+ free ((char *) *normalized_codeset);
+ else
+ mask |= XPG_NORM_CODESET;
+ }
+ }
+ }
+
+ if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+ {
+ /* Next is the modifier. */
+ syntax = cp[0] == '@' ? xpg : cen;
+ cp[0] = '\0';
+ *modifier = ++cp;
+
+ while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+ && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= XPG_MODIFIER | CEN_AUDIENCE;
+ }
+
+ if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+ {
+ syntax = cen;
+
+ if (cp[0] == '+')
+ {
+ /* Next is special application (CEN syntax). */
+ cp[0] = '\0';
+ *special = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= CEN_SPECIAL;
+ }
+
+ if (cp[0] == ',')
+ {
+ /* Next is sponsor (CEN syntax). */
+ cp[0] = '\0';
+ *sponsor = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '_')
+ ++cp;
+
+ mask |= CEN_SPONSOR;
+ }
+
+ if (cp[0] == '_')
+ {
+ /* Next is revision (CEN syntax). */
+ cp[0] = '\0';
+ *revision = ++cp;
+
+ mask |= CEN_REVISION;
+ }
+ }
+
+ /* For CEN syntax values it might be important to have the
+ separator character in the file name, not for XPG syntax. */
+ if (syntax == xpg)
+ {
+ if (*territory != NULL && (*territory)[0] == '\0')
+ mask &= ~TERRITORY;
+
+ if (*codeset != NULL && (*codeset)[0] == '\0')
+ mask &= ~XPG_CODESET;
+
+ if (*modifier != NULL && (*modifier)[0] == '\0')
+ mask &= ~XPG_MODIFIER;
+ }
+
+ return mask;
+}
diff --git a/intl/finddomain.c b/intl/finddomain.c
new file mode 100644
index 0000000..498f858
--- /dev/null
+++ b/intl/finddomain.c
@@ -0,0 +1,192 @@
+/* Handle list of needed message catalogs
+ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains. */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+ the DOMAINNAME and CATEGORY parameters with respect to the currently
+ established bindings. */
+struct loaded_l10nfile *
+internal_function
+_nl_find_domain (const char *dirname, char *locale,
+ const char *domainname, struct binding *domainbinding)
+{
+ struct loaded_l10nfile *retval;
+ const char *language;
+ const char *modifier;
+ const char *territory;
+ const char *codeset;
+ const char *normalized_codeset;
+ const char *special;
+ const char *sponsor;
+ const char *revision;
+ const char *alias_value;
+ int mask;
+
+ /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+ language[_territory[.codeset]][@modifier]
+
+ and six parts for the CEN syntax:
+
+ language[_territory][+audience][+special][,[sponsor][_revision]]
+
+ Beside the first part all of them are allowed to be missing. If
+ the full specified locale is not found, the less specific one are
+ looked for. The various parts will be stripped off according to
+ the following order:
+ (1) revision
+ (2) sponsor
+ (3) special
+ (4) codeset
+ (5) normalized codeset
+ (6) territory
+ (7) audience/modifier
+ */
+
+ /* If we have already tested for this locale entry there has to
+ be one data set in the list of loaded domains. */
+ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+ strlen (dirname) + 1, 0, locale, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, domainname, 0);
+ if (retval != NULL)
+ {
+ /* We know something about this locale. */
+ int cnt;
+
+ if (retval->decided == 0)
+ _nl_load_domain (retval, domainbinding);
+
+ if (retval->data != NULL)
+ return retval;
+
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+ _nl_load_domain (retval->successor[cnt], domainbinding);
+
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+ return cnt >= 0 ? retval : NULL;
+ /* NOTREACHED */
+ }
+
+ /* See whether the locale value is an alias. If yes its value
+ *overwrites* the alias name. No test for the original value is
+ done. */
+ alias_value = _nl_expand_alias (locale);
+ if (alias_value != NULL)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ locale = strdup (alias_value);
+ if (locale == NULL)
+ return NULL;
+#else
+ size_t len = strlen (alias_value) + 1;
+ locale = (char *) malloc (len);
+ if (locale == NULL)
+ return NULL;
+
+ memcpy (locale, alias_value, len);
+#endif
+ }
+
+ /* Now we determine the single parts of the locale name. First
+ look for the language. Termination symbols are `_' and `@' if
+ we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
+ mask = _nl_explode_name (locale, &language, &modifier, &territory,
+ &codeset, &normalized_codeset, &special,
+ &sponsor, &revision);
+
+ /* Create all possible locale entries which might be interested in
+ generalization. */
+ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+ strlen (dirname) + 1, mask, language, territory,
+ codeset, normalized_codeset, modifier, special,
+ sponsor, revision, domainname, 1);
+ if (retval == NULL)
+ /* This means we are out of core. */
+ return NULL;
+
+ if (retval->decided == 0)
+ _nl_load_domain (retval, domainbinding);
+ if (retval->data == NULL)
+ {
+ int cnt;
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+ _nl_load_domain (retval->successor[cnt], domainbinding);
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+ }
+
+ /* The room for an alias was dynamically allocated. Free it now. */
+ if (alias_value != NULL)
+ free (locale);
+
+ /* The space for normalized_codeset is dynamically allocated. Free it. */
+ if (mask & XPG_NORM_CODESET)
+ free ((void *) normalized_codeset);
+
+ return retval;
+}
+
+
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+ struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+ while (runp != NULL)
+ {
+ struct loaded_l10nfile *here = runp;
+ if (runp->data != NULL)
+ _nl_unload_domain ((struct loaded_domain *) runp->data);
+ runp = runp->next;
+ free ((char *) here->filename);
+ free (here);
+ }
+}
+#endif
diff --git a/intl/gettext.c b/intl/gettext.c
new file mode 100644
index 0000000..d82d439
--- /dev/null
+++ b/intl/gettext.c
@@ -0,0 +1,63 @@
+/* Implementation of gettext(3) function.
+ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define GETTEXT libintl_gettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+GETTEXT (const char *msgid)
+{
+ return DCGETTEXT (NULL, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__gettext, gettext);
+#endif
diff --git a/intl/gettextP.h b/intl/gettextP.h
new file mode 100644
index 0000000..0816bfb
--- /dev/null
+++ b/intl/gettextP.h
@@ -0,0 +1,218 @@
+/* Header describing internals of libintl library.
+ Copyright (C) 1995-1999, 2000-2005 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include <stddef.h> /* Get size_t. */
+
+#ifdef _LIBC
+# include "../iconv/gconv_int.h"
+#else
+# if HAVE_ICONV
+# include <iconv.h>
+# endif
+#endif
+
+#include "loadinfo.h"
+
+#include "gmo.h" /* Get nls_uint32. */
+
+/* @@ end of prolog @@ */
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
+static inline nls_uint32
+SWAP (i)
+ nls_uint32 i;
+{
+ return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+/* In-memory representation of system dependent string. */
+struct sysdep_string_desc
+{
+ /* Length of addressed string, including the trailing NUL. */
+ size_t length;
+ /* Pointer to addressed string. */
+ const char *pointer;
+};
+
+/* 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 *next;
+ char *dirname;
+ int codeset_cntr; /* Incremented each time codeset changes. */
+ char *codeset;
+ char domainname[ZERO];
+};
+
+/* A counter which is incremented each time some previous translations
+ become invalid.
+ This variable is part of the external ABI of the GNU libintl. */
+extern int _nl_msg_cat_cntr;
+
+#ifndef _LIBC
+const char *_nl_language_preferences_default (void);
+const char *_nl_locale_name_posix (int category, const char *categoryname);
+const char *_nl_locale_name_default (void);
+const char *_nl_locale_name (int category, const char *categoryname);
+#endif
+
+struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
+ const char *__domainname,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_load_domain (struct loaded_l10nfile *__domain,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_unload_domain (struct loaded_domain *__domain)
+ internal_function;
+const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file,
+ struct loaded_domain *__domain,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_free_domain_conv (struct loaded_domain *__domain)
+ internal_function;
+
+char *_nl_find_msg (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding, const char *msgid,
+ size_t *lengthp)
+ internal_function;
+
+#ifdef _LIBC
+extern char *__gettext (const char *__msgid);
+extern char *__dgettext (const char *__domainname, const char *__msgid);
+extern char *__dcgettext (const char *__domainname, const char *__msgid,
+ int __category);
+extern char *__ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n);
+extern char *__dngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int n);
+extern char *__dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category);
+extern char *__dcigettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category);
+extern char *__textdomain (const char *__domainname);
+extern char *__bindtextdomain (const char *__domainname,
+ const char *__dirname);
+extern char *__bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset);
+#else
+/* Declare the exported libintl_* functions, in a way that allows us to
+ call them under their real name. */
+# undef _INTL_REDIRECT_INLINE
+# undef _INTL_REDIRECT_MACROS
+# define _INTL_REDIRECT_MACROS
+# include "libgnuintl.h"
+extern char *libintl_dcigettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category);
+#endif
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h */
diff --git a/intl/gmo.h b/intl/gmo.h
new file mode 100644
index 0000000..26515fe
--- /dev/null
+++ b/intl/gmo.h
@@ -0,0 +1,149 @@
+/* Description of GNU message catalog format: general file layout.
+ Copyright (C) 1995, 1997, 2000-2002, 2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <limits.h>
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format. */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format. */
+#define MO_REVISION_NUMBER 0
+#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
+
+/* The following contortions are an attempt to use the C preprocessor
+ to determine an unsigned integral type that is 32 bits wide. An
+ alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+ as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+ when cross-compiling. */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+ This should be valid for all systems GNU cares about because
+ that doesn't include 16-bit systems, and only modern systems
+ (that certainly have <limits.h>) have 64+-bit integral types. */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+# if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+# else
+ /* The following line is intended to throw an error. Using #error is
+ not portable enough. */
+ "Cannot determine unsigned 32-bit data type."
+# endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format. */
+struct mo_file_header
+{
+ /* The magic number. */
+ nls_uint32 magic;
+ /* The revision number of the file format. */
+ nls_uint32 revision;
+
+ /* The following are only used in .mo files with major revision 0 or 1. */
+
+ /* The number of strings pairs. */
+ nls_uint32 nstrings;
+ /* Offset of table with start offsets of original strings. */
+ nls_uint32 orig_tab_offset;
+ /* Offset of table with start offsets of translated strings. */
+ nls_uint32 trans_tab_offset;
+ /* Size of hash table. */
+ nls_uint32 hash_tab_size;
+ /* Offset of first hash table entry. */
+ nls_uint32 hash_tab_offset;
+
+ /* The following are only used in .mo files with minor revision >= 1. */
+
+ /* The number of system dependent segments. */
+ nls_uint32 n_sysdep_segments;
+ /* Offset of table describing system dependent segments. */
+ nls_uint32 sysdep_segments_offset;
+ /* The number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Offset of table with start offsets of original sysdep strings. */
+ nls_uint32 orig_sysdep_tab_offset;
+ /* Offset of table with start offsets of translated sysdep strings. */
+ nls_uint32 trans_sysdep_tab_offset;
+};
+
+/* Descriptor for static string contained in the binary .mo file. */
+struct string_desc
+{
+ /* Length of addressed string, not including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* The following are only used in .mo files with minor revision >= 1. */
+
+/* Descriptor for system dependent string segment. */
+struct sysdep_segment
+{
+ /* Length of addressed string, including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* 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 */
diff --git a/intl/hash-string.h b/intl/hash-string.h
new file mode 100644
index 0000000..2c9a3a5
--- /dev/null
+++ b/intl/hash-string.h
@@ -0,0 +1,48 @@
+/* Description of GNU message catalog format: string hashing function.
+ Copyright (C) 1995, 1997-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* @@ end of prolog @@ */
+
+/* We assume to have `unsigned long int' value with at least 32 bits. */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+ [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+ 1986, 1987 Bell Telephone Laboratories, Inc.] */
+static inline unsigned long int
+hash_string (const char *str_param)
+{
+ unsigned long int hval, g;
+ const char *str = str_param;
+
+ /* Compute the hash value for the given string. */
+ hval = 0;
+ while (*str != '\0')
+ {
+ hval <<= 4;
+ hval += (unsigned char) *str++;
+ g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+ if (g != 0)
+ {
+ hval ^= g >> (HASHWORDBITS - 8);
+ hval ^= g;
+ }
+ }
+ return hval;
+}
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
new file mode 100644
index 0000000..15be09c
--- /dev/null
+++ b/intl/intl-compat.c
@@ -0,0 +1,131 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+ Library.
+ Copyright (C) 1995, 2000-2003 Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* This file redirects the gettext functions (without prefix) to those
+ defined in the included GNU libintl library (with "libintl_" prefix).
+ It is compiled into libintl in order to make the AM_GNU_GETTEXT test
+ of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
+ has the redirections primarily in the <libintl.h> include file.
+ It is also compiled into libgnuintl so that libgnuintl.so can be used
+ as LD_PRELOADable library on glibc systems, to provide the extra
+ features that the functions in the libc don't have (namely, logging). */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
+#undef textdomain
+#undef bindtextdomain
+#undef bind_textdomain_codeset
+
+
+/* When building a DLL, we must export some functions. Note that because
+ the functions are only defined for binary backward compatibility, we
+ don't need to use __declspec(dllimport) in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+
+DLL_EXPORTED
+char *
+gettext (const char *msgid)
+{
+ return libintl_gettext (msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dgettext (const char *domainname, const char *msgid)
+{
+ return libintl_dgettext (domainname, msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dcgettext (const char *domainname, const char *msgid, int category)
+{
+ return libintl_dcgettext (domainname, msgid, category);
+}
+
+
+DLL_EXPORTED
+char *
+ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return libintl_ngettext (msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dngettext (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return libintl_dngettext (domainname, msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dcngettext (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n,
+ int category)
+{
+ return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
+}
+
+
+DLL_EXPORTED
+char *
+textdomain (const char *domainname)
+{
+ return libintl_textdomain (domainname);
+}
+
+
+DLL_EXPORTED
+char *
+bindtextdomain (const char *domainname, const char *dirname)
+{
+ return libintl_bindtextdomain (domainname, dirname);
+}
+
+
+DLL_EXPORTED
+char *
+bind_textdomain_codeset (const char *domainname, const char *codeset)
+{
+ return libintl_bind_textdomain_codeset (domainname, codeset);
+}
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
new file mode 100644
index 0000000..0501b97
--- /dev/null
+++ b/intl/l10nflist.c
@@ -0,0 +1,421 @@
+/* Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for stpcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+#include <stdlib.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found. Sigh! */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+# define NULL ((void *) 0)
+# else
+# define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# ifndef stpcpy
+# define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy (char *dest, const char *src);
+# endif
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+#endif
+
+/* Define function which are usually not available. */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ. */
+static size_t
+argz_count__ (const char *argz, size_t len)
+{
+ size_t count = 0;
+ while (len > 0)
+ {
+ size_t part_len = strlen (argz);
+ argz += part_len + 1;
+ len -= part_len + 1;
+ count++;
+ }
+ return count;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#else
+# ifdef _LIBC
+# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
+# endif
+#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+ except the last into the character SEP. */
+static void
+argz_stringify__ (char *argz, size_t len, int sep)
+{
+ while (len > 0)
+ {
+ size_t part_len = strlen (argz);
+ argz += part_len;
+ len -= part_len + 1;
+ if (len > 0)
+ *argz++ = sep;
+ }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#else
+# ifdef _LIBC
+# define __argz_stringify(argz, len, sep) \
+ INTUSE(__argz_stringify) (argz, len, sep)
+# endif
+#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *
+argz_next__ (char *argz, size_t argz_len, const char *entry)
+{
+ if (entry)
+ {
+ if (entry < argz + argz_len)
+ entry = strchr (entry, '\0') + 1;
+
+ return entry >= argz + argz_len ? NULL : (char *) entry;
+ }
+ else
+ if (argz_len > 0)
+ return argz;
+ else
+ return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
+
+
+/* Return number of bits set in X. */
+static inline int
+pop (int x)
+{
+ /* We assume that no more than 16 bits are used. */
+ x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+ x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+ x = ((x >> 4) + x) & 0x0f0f;
+ x = ((x >> 8) + x) & 0xff;
+
+ return x;
+}
+
+
+struct loaded_l10nfile *
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+ const char *dirlist, size_t dirlist_len,
+ int mask, const char *language, const char *territory,
+ const char *codeset, const char *normalized_codeset,
+ const char *modifier, const char *special,
+ const char *sponsor, const char *revision,
+ const char *filename, int do_allocate)
+{
+ char *abs_filename;
+ struct loaded_l10nfile **lastp;
+ struct loaded_l10nfile *retval;
+ char *cp;
+ size_t dirlist_count;
+ size_t entries;
+ int cnt;
+
+ /* If LANGUAGE contains an absolute directory specification, we ignore
+ DIRLIST. */
+ if (IS_ABSOLUTE_PATH (language))
+ dirlist_len = 0;
+
+ /* Allocate room for the full file name. */
+ abs_filename = (char *) malloc (dirlist_len
+ + strlen (language)
+ + ((mask & TERRITORY) != 0
+ ? strlen (territory) + 1 : 0)
+ + ((mask & XPG_CODESET) != 0
+ ? strlen (codeset) + 1 : 0)
+ + ((mask & XPG_NORM_CODESET) != 0
+ ? strlen (normalized_codeset) + 1 : 0)
+ + (((mask & XPG_MODIFIER) != 0
+ || (mask & CEN_AUDIENCE) != 0)
+ ? strlen (modifier) + 1 : 0)
+ + ((mask & CEN_SPECIAL) != 0
+ ? strlen (special) + 1 : 0)
+ + (((mask & CEN_SPONSOR) != 0
+ || (mask & CEN_REVISION) != 0)
+ ? (1 + ((mask & CEN_SPONSOR) != 0
+ ? strlen (sponsor) : 0)
+ + ((mask & CEN_REVISION) != 0
+ ? strlen (revision) + 1 : 0)) : 0)
+ + 1 + strlen (filename) + 1);
+
+ if (abs_filename == NULL)
+ return NULL;
+
+ /* Construct file name. */
+ cp = abs_filename;
+ if (dirlist_len > 0)
+ {
+ memcpy (cp, dirlist, dirlist_len);
+ __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
+ cp += dirlist_len;
+ cp[-1] = '/';
+ }
+
+ cp = stpcpy (cp, language);
+
+ if ((mask & TERRITORY) != 0)
+ {
+ *cp++ = '_';
+ cp = stpcpy (cp, territory);
+ }
+ if ((mask & XPG_CODESET) != 0)
+ {
+ *cp++ = '.';
+ cp = stpcpy (cp, codeset);
+ }
+ if ((mask & XPG_NORM_CODESET) != 0)
+ {
+ *cp++ = '.';
+ cp = stpcpy (cp, normalized_codeset);
+ }
+ if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+ {
+ /* This component can be part of both syntaces but has different
+ leading characters. For CEN we use `+', else `@'. */
+ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+ cp = stpcpy (cp, modifier);
+ }
+ if ((mask & CEN_SPECIAL) != 0)
+ {
+ *cp++ = '+';
+ cp = stpcpy (cp, special);
+ }
+ if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+ {
+ *cp++ = ',';
+ if ((mask & CEN_SPONSOR) != 0)
+ cp = stpcpy (cp, sponsor);
+ if ((mask & CEN_REVISION) != 0)
+ {
+ *cp++ = '_';
+ cp = stpcpy (cp, revision);
+ }
+ }
+
+ *cp++ = '/';
+ stpcpy (cp, filename);
+
+ /* Look in list of already loaded domains whether it is already
+ available. */
+ lastp = l10nfile_list;
+ for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+ if (retval->filename != NULL)
+ {
+ int compare = strcmp (retval->filename, abs_filename);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It's not in the list. */
+ retval = NULL;
+ break;
+ }
+
+ lastp = &retval->next;
+ }
+
+ if (retval != NULL || do_allocate == 0)
+ {
+ free (abs_filename);
+ return retval;
+ }
+
+ dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
+
+ /* Allocate a new loaded_l10nfile. */
+ retval =
+ (struct loaded_l10nfile *)
+ malloc (sizeof (*retval)
+ + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
+ * sizeof (struct loaded_l10nfile *)));
+ if (retval == NULL)
+ return NULL;
+
+ retval->filename = abs_filename;
+
+ /* We set retval->data to NULL here; it is filled in later.
+ Setting retval->decided to 1 here means that retval does not
+ correspond to a real file (dirlist_count > 1) or is not worth
+ looking up (if an unnormalized codeset was specified). */
+ retval->decided = (dirlist_count > 1
+ || ((mask & XPG_CODESET) != 0
+ && (mask & XPG_NORM_CODESET) != 0));
+ retval->data = NULL;
+
+ retval->next = *lastp;
+ *lastp = retval;
+
+ entries = 0;
+ /* Recurse to fill the inheritance list of RETVAL.
+ If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
+ entry does not correspond to a real file; retval->filename contains
+ colons. In this case we loop across all elements of DIRLIST and
+ across all bit patterns dominated by MASK.
+ If the DIRLIST is a single directory or entirely redundant (i.e.
+ DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
+ MASK, excluding MASK itself.
+ In either case, we loop down from MASK to 0. This has the effect
+ that the extra bits in the locale name are dropped in this order:
+ first the modifier, then the territory, then the codeset, then the
+ normalized_codeset. */
+ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
+ if ((cnt & ~mask) == 0
+ && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+ && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+ {
+ if (dirlist_count > 1)
+ {
+ /* Iterate over all elements of the DIRLIST. */
+ char *dir = NULL;
+
+ while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+ != NULL)
+ retval->successor[entries++]
+ = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
+ cnt, language, territory, codeset,
+ normalized_codeset, modifier, 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,
+ sponsor, revision, filename, 1);
+ }
+ retval->successor[entries] = NULL;
+
+ return retval;
+}
+
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+const char *
+_nl_normalize_codeset (const char *codeset, size_t name_len)
+{
+ int len = 0;
+ int only_digit = 1;
+ char *retval;
+ char *wp;
+ size_t cnt;
+
+ for (cnt = 0; cnt < name_len; ++cnt)
+ if (isalnum ((unsigned char) codeset[cnt]))
+ {
+ ++len;
+
+ if (isalpha ((unsigned char) codeset[cnt]))
+ only_digit = 0;
+ }
+
+ retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+ if (retval != NULL)
+ {
+ if (only_digit)
+ wp = stpcpy (retval, "iso");
+ else
+ wp = retval;
+
+ for (cnt = 0; cnt < name_len; ++cnt)
+ if (isalpha ((unsigned char) codeset[cnt]))
+ *wp++ = tolower ((unsigned char) codeset[cnt]);
+ else if (isdigit ((unsigned char) codeset[cnt]))
+ *wp++ = codeset[cnt];
+
+ *wp = '\0';
+ }
+
+ return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (char *dest, const char *src)
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
diff --git a/intl/langprefs.c b/intl/langprefs.c
new file mode 100644
index 0000000..20137b6
--- /dev/null
+++ b/intl/langprefs.c
@@ -0,0 +1,130 @@
+/* Determine the user's language preferences.
+ Copyright (C) 2004-2005 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+
+#if HAVE_CFPREFERENCESCOPYAPPVALUE
+# include <string.h>
+# include <CFPreferences.h>
+# include <CFPropertyList.h>
+# include <CFArray.h>
+# include <CFString.h>
+extern void _nl_locale_name_canonicalize (char *name);
+#endif
+
+/* Determine the user's language preferences, as a colon separated list of
+ locale names in XPG syntax
+ language[_territory[.codeset]][@modifier]
+ The result must not be freed; it is statically allocated.
+ The LANGUAGE environment variable does not need to be considered; it is
+ already taken into account by the caller. */
+
+const char *
+_nl_language_preferences_default (void)
+{
+#if HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */
+ {
+ /* Cache the preferences list, since CoreFoundation calls are expensive. */
+ static const char *cached_languages;
+ static int cache_initialized;
+
+ if (!cache_initialized)
+ {
+ CFTypeRef preferences =
+ CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"),
+ kCFPreferencesCurrentApplication);
+ if (preferences != NULL
+ && CFGetTypeID (preferences) == CFArrayGetTypeID ())
+ {
+ CFArrayRef prefArray = (CFArrayRef)preferences;
+ int n = CFArrayGetCount (prefArray);
+ char buf[256];
+ size_t size = 0;
+ int i;
+
+ for (i = 0; i < n; i++)
+ {
+ CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i);
+ if (element != NULL
+ && CFGetTypeID (element) == CFStringGetTypeID ()
+ && CFStringGetCString ((CFStringRef)element,
+ buf, sizeof (buf),
+ kCFStringEncodingASCII))
+ {
+ _nl_locale_name_canonicalize (buf);
+ size += strlen (buf) + 1;
+ /* Most GNU programs use msgids in English and don't ship
+ an en.mo message catalog. Therefore when we see "en"
+ in the preferences list, arrange for gettext() to
+ return the msgid, and ignore all further elements of
+ the preferences list. */
+ if (strcmp (buf, "en") == 0)
+ break;
+ }
+ else
+ break;
+ }
+ if (size > 0)
+ {
+ char *languages = (char *) malloc (size);
+
+ if (languages != NULL)
+ {
+ char *p = languages;
+
+ for (i = 0; i < n; i++)
+ {
+ CFTypeRef element =
+ CFArrayGetValueAtIndex (prefArray, i);
+ if (element != NULL
+ && CFGetTypeID (element) == CFStringGetTypeID ()
+ && CFStringGetCString ((CFStringRef)element,
+ buf, sizeof (buf),
+ kCFStringEncodingASCII))
+ {
+ _nl_locale_name_canonicalize (buf);
+ strcpy (p, buf);
+ p += strlen (buf);
+ *p++ = ':';
+ if (strcmp (buf, "en") == 0)
+ break;
+ }
+ else
+ break;
+ }
+ *--p = '\0';
+
+ cached_languages = languages;
+ }
+ }
+ }
+ cache_initialized = 1;
+ }
+ if (cached_languages != NULL)
+ return cached_languages;
+ }
+#endif
+
+ return NULL;
+}
diff --git a/intl/libgnuintl.h.in b/intl/libgnuintl.h.in
new file mode 100644
index 0000000..d1df17e
--- /dev/null
+++ b/intl/libgnuintl.h.in
@@ -0,0 +1,383 @@
+/* Message catalogs for internationalization.
+ Copyright (C) 1995-1997, 2000-2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H 1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+ gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
+ On systems that don't define it, use an arbitrary value instead.
+ On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
+ then includes <libintl.h> (i.e. this file!) and then only defines
+ LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
+ in this case. */
+#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+ implementation of gettext. */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats. Returns the
+ maximum minor revision number supported for a given major revision. */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+ ((major) == 0 || (major) == 1 ? 1 : -1)
+
+/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
+ precedence over _conio_gettext. */
+#ifdef __DJGPP__
+# undef gettext
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* 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 __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
+# define _INTL_REDIRECT_ASM
+# else
+# ifdef __cplusplus
+# define _INTL_REDIRECT_INLINE
+# else
+# define _INTL_REDIRECT_MACROS
+# endif
+# endif
+#endif
+/* Auxiliary macros. */
+#ifdef _INTL_REDIRECT_ASM
+# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
+# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+# define _INTL_STRINGIFY(prefix) #prefix
+#else
+# define _INTL_ASM(cname)
+#endif
+
+/* 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 (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 (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 (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 (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 (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 (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 (const char *__domainname)
+ _INTL_ASM (libintl_textdomain);
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bindtextdomain (const char *__domainname,
+ const char *__dirname);
+static inline char *bindtextdomain (const char *__domainname,
+ const char *__dirname)
+{
+ return libintl_bindtextdomain (__domainname, __dirname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bindtextdomain libintl_bindtextdomain
+#endif
+extern char *bindtextdomain (const char *__domainname, const char *__dirname)
+ _INTL_ASM (libintl_bindtextdomain);
+#endif
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset);
+static inline char *bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset)
+{
+ return libintl_bind_textdomain_codeset (__domainname, __codeset);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bind_textdomain_codeset libintl_bind_textdomain_codeset
+#endif
+extern char *bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset)
+ _INTL_ASM (libintl_bind_textdomain_codeset);
+#endif
+
+
+/* Support for format strings with positions in *printf(), following the
+ POSIX/XSI specification.
+ Note: These replacements for the *printf() functions are visible only
+ in source files that #include <libintl.h> or #include "gettext.h".
+ Packages that use *printf() in source files that don't refer to _()
+ or gettext() but for which the format string could be the return value
+ of _() or gettext() need to add this #include. Oh well. */
+
+#if !@HAVE_POSIX_PRINTF@
+
+#include <stdio.h>
+#include <stddef.h>
+
+/* Get va_list. */
+#if __STDC__ || defined __cplusplus || defined _MSC_VER
+# include <stdarg.h>
+#else
+# include <varargs.h>
+#endif
+
+#undef fprintf
+#define fprintf libintl_fprintf
+extern int fprintf (FILE *, const char *, ...);
+#undef vfprintf
+#define vfprintf libintl_vfprintf
+extern int vfprintf (FILE *, const char *, va_list);
+
+#undef printf
+#define printf libintl_printf
+extern int printf (const char *, ...);
+#undef vprintf
+#define vprintf libintl_vprintf
+extern int vprintf (const char *, va_list);
+
+#undef sprintf
+#define sprintf libintl_sprintf
+extern int sprintf (char *, const char *, ...);
+#undef vsprintf
+#define vsprintf libintl_vsprintf
+extern int vsprintf (char *, const char *, va_list);
+
+#if @HAVE_SNPRINTF@
+
+#undef snprintf
+#define snprintf libintl_snprintf
+extern int snprintf (char *, size_t, const char *, ...);
+#undef vsnprintf
+#define vsnprintf libintl_vsnprintf
+extern int vsnprintf (char *, size_t, const char *, va_list);
+
+#endif
+
+#if @HAVE_ASPRINTF@
+
+#undef asprintf
+#define asprintf libintl_asprintf
+extern int asprintf (char **, const char *, ...);
+#undef vasprintf
+#define vasprintf libintl_vasprintf
+extern int vasprintf (char **, const char *, va_list);
+
+#endif
+
+#if @HAVE_WPRINTF@
+
+#undef fwprintf
+#define fwprintf libintl_fwprintf
+extern int fwprintf (FILE *, const wchar_t *, ...);
+#undef vfwprintf
+#define vfwprintf libintl_vfwprintf
+extern int vfwprintf (FILE *, const wchar_t *, va_list);
+
+#undef wprintf
+#define wprintf libintl_wprintf
+extern int wprintf (const wchar_t *, ...);
+#undef vwprintf
+#define vwprintf libintl_vwprintf
+extern int vwprintf (const wchar_t *, va_list);
+
+#undef swprintf
+#define swprintf libintl_swprintf
+extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
+#undef vswprintf
+#define vswprintf libintl_vswprintf
+extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
+
+#endif
+
+#endif
+
+
+/* Support for relocatable packages. */
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+#define libintl_set_relocation_prefix libintl_set_relocation_prefix
+extern void
+ libintl_set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
new file mode 100644
index 0000000..d6408f2
--- /dev/null
+++ b/intl/loadinfo.h
@@ -0,0 +1,145 @@
+/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _LOADINFO_H
+#define _LOADINFO_H 1
+
+/* Declarations of locale dependent catalog lookup functions.
+ Implemented in
+
+ localealias.c Possibly replace a locale name by another.
+ explodename.c Split a locale name into its various fields.
+ l10nflist.c Generate a list of filenames of possible message catalogs.
+ finddomain.c Find and open the relevant message catalogs.
+
+ The main function _nl_find_domain() in finddomain.c is declared
+ in gettextP.h.
+ */
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+/* Separator in PATH like lists of pathnames. */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+ /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
+/* Encoding of locale name parts. */
+#define CEN_REVISION 1
+#define CEN_SPONSOR 2
+#define CEN_SPECIAL 4
+#define XPG_NORM_CODESET 8
+#define XPG_CODESET 16
+#define TERRITORY 32
+#define CEN_AUDIENCE 64
+#define XPG_MODIFIER 128
+
+#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+struct loaded_l10nfile
+{
+ const char *filename;
+ int decided;
+
+ const void *data;
+
+ struct loaded_l10nfile *next;
+ struct loaded_l10nfile *successor[1];
+};
+
+
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+extern const char *_nl_normalize_codeset (const char *codeset,
+ size_t name_len);
+
+/* Lookup a locale dependent file.
+ *L10NFILE_LIST denotes a pool of lookup results of locale dependent
+ files of the same kind, sorted in decreasing order of ->filename.
+ DIRLIST and DIRLIST_LEN are an argz list of directories in which to
+ look, containing at least one directory (i.e. DIRLIST_LEN > 0).
+ MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
+ 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 *
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+ const char *dirlist, size_t dirlist_len, int mask,
+ const char *language, const char *territory,
+ const char *codeset, const char *normalized_codeset,
+ const char *modifier, const char *special,
+ const char *sponsor, const char *revision,
+ 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 (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 (char *name, const char **language,
+ const char **modifier, const char **territory,
+ const char **codeset,
+ const char **normalized_codeset,
+ const char **special, const char **sponsor,
+ const char **revision);
+
+/* 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 (const char *name);
+
+#endif /* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
new file mode 100644
index 0000000..0d59ad8
--- /dev/null
+++ b/intl/loadmsgcat.c
@@ -0,0 +1,1420 @@
+/* Load needed message catalogs.
+ Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#ifdef _LIBC
+# include <langinfo.h>
+# include <locale.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+ || (defined _LIBC && defined _POSIX_MAPPED_FILES)
+# include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP 1
+#else
+# undef HAVE_MMAP
+#endif
+
+#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
+# include <stdint.h>
+#endif
+#if defined HAVE_INTTYPES_H || defined _LIBC
+# include <inttypes.h>
+#endif
+
+#include "gmo.h"
+#include "gettextP.h"
+#include "hash-string.h"
+#include "plural-exp.h"
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+#endif
+
+/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
+ Note that our fallback values need not be literal strings, because we don't
+ use them with preprocessor string concatenation. */
+#if !defined PRId8 || PRI_MACROS_BROKEN
+# undef PRId8
+# define PRId8 "d"
+#endif
+#if !defined PRIi8 || PRI_MACROS_BROKEN
+# undef PRIi8
+# define PRIi8 "i"
+#endif
+#if !defined PRIo8 || PRI_MACROS_BROKEN
+# undef PRIo8
+# define PRIo8 "o"
+#endif
+#if !defined PRIu8 || PRI_MACROS_BROKEN
+# undef PRIu8
+# define PRIu8 "u"
+#endif
+#if !defined PRIx8 || PRI_MACROS_BROKEN
+# undef PRIx8
+# define PRIx8 "x"
+#endif
+#if !defined PRIX8 || PRI_MACROS_BROKEN
+# undef PRIX8
+# define PRIX8 "X"
+#endif
+#if !defined PRId16 || PRI_MACROS_BROKEN
+# undef PRId16
+# define PRId16 "d"
+#endif
+#if !defined PRIi16 || PRI_MACROS_BROKEN
+# undef PRIi16
+# define PRIi16 "i"
+#endif
+#if !defined PRIo16 || PRI_MACROS_BROKEN
+# undef PRIo16
+# define PRIo16 "o"
+#endif
+#if !defined PRIu16 || PRI_MACROS_BROKEN
+# undef PRIu16
+# define PRIu16 "u"
+#endif
+#if !defined PRIx16 || PRI_MACROS_BROKEN
+# undef PRIx16
+# define PRIx16 "x"
+#endif
+#if !defined PRIX16 || PRI_MACROS_BROKEN
+# undef PRIX16
+# define PRIX16 "X"
+#endif
+#if !defined PRId32 || PRI_MACROS_BROKEN
+# undef PRId32
+# define PRId32 "d"
+#endif
+#if !defined PRIi32 || PRI_MACROS_BROKEN
+# undef PRIi32
+# define PRIi32 "i"
+#endif
+#if !defined PRIo32 || PRI_MACROS_BROKEN
+# undef PRIo32
+# define PRIo32 "o"
+#endif
+#if !defined PRIu32 || PRI_MACROS_BROKEN
+# undef PRIu32
+# define PRIu32 "u"
+#endif
+#if !defined PRIx32 || PRI_MACROS_BROKEN
+# undef PRIx32
+# define PRIx32 "x"
+#endif
+#if !defined PRIX32 || PRI_MACROS_BROKEN
+# undef PRIX32
+# define PRIX32 "X"
+#endif
+#if !defined PRId64 || PRI_MACROS_BROKEN
+# undef PRId64
+# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
+#endif
+#if !defined PRIi64 || PRI_MACROS_BROKEN
+# undef PRIi64
+# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
+#endif
+#if !defined PRIo64 || PRI_MACROS_BROKEN
+# undef PRIo64
+# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
+#endif
+#if !defined PRIu64 || PRI_MACROS_BROKEN
+# undef PRIu64
+# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
+#endif
+#if !defined PRIx64 || PRI_MACROS_BROKEN
+# undef PRIx64
+# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
+#endif
+#if !defined PRIX64 || PRI_MACROS_BROKEN
+# undef PRIX64
+# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
+#endif
+#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
+# undef PRIdLEAST64
+# define PRIdLEAST64 PRId64
+#endif
+#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
+# undef PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+#endif
+#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
+# undef PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+#endif
+#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
+# undef PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+#endif
+#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
+# undef PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+#endif
+#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
+# undef PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+#endif
+#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
+# undef PRIdFAST8
+# define PRIdFAST8 "d"
+#endif
+#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
+# undef PRIiFAST8
+# define PRIiFAST8 "i"
+#endif
+#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
+# undef PRIoFAST8
+# define PRIoFAST8 "o"
+#endif
+#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
+# undef PRIuFAST8
+# define PRIuFAST8 "u"
+#endif
+#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
+# undef PRIxFAST8
+# define PRIxFAST8 "x"
+#endif
+#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
+# undef PRIXFAST8
+# define PRIXFAST8 "X"
+#endif
+#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
+# undef PRIdFAST16
+# define PRIdFAST16 "d"
+#endif
+#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
+# undef PRIiFAST16
+# define PRIiFAST16 "i"
+#endif
+#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
+# undef PRIoFAST16
+# define PRIoFAST16 "o"
+#endif
+#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
+# undef PRIuFAST16
+# define PRIuFAST16 "u"
+#endif
+#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
+# undef PRIxFAST16
+# define PRIxFAST16 "x"
+#endif
+#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
+# undef PRIXFAST16
+# define PRIXFAST16 "X"
+#endif
+#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
+# undef PRIdFAST32
+# define PRIdFAST32 "d"
+#endif
+#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
+# undef PRIiFAST32
+# define PRIiFAST32 "i"
+#endif
+#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
+# undef PRIoFAST32
+# define PRIoFAST32 "o"
+#endif
+#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
+# undef PRIuFAST32
+# define PRIuFAST32 "u"
+#endif
+#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
+# undef PRIxFAST32
+# define PRIxFAST32 "x"
+#endif
+#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
+# undef PRIXFAST32
+# define PRIXFAST32 "X"
+#endif
+#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
+# undef PRIdFAST64
+# define PRIdFAST64 PRId64
+#endif
+#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
+# undef PRIiFAST64
+# define PRIiFAST64 PRIi64
+#endif
+#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
+# undef PRIoFAST64
+# define PRIoFAST64 PRIo64
+#endif
+#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
+# undef PRIuFAST64
+# define PRIuFAST64 PRIu64
+#endif
+#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
+# undef PRIxFAST64
+# define PRIxFAST64 PRIx64
+#endif
+#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
+# undef PRIXFAST64
+# define PRIXFAST64 PRIX64
+#endif
+#if !defined PRIdMAX || PRI_MACROS_BROKEN
+# undef PRIdMAX
+# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
+#endif
+#if !defined PRIiMAX || PRI_MACROS_BROKEN
+# undef PRIiMAX
+# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
+#endif
+#if !defined PRIoMAX || PRI_MACROS_BROKEN
+# undef PRIoMAX
+# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
+#endif
+#if !defined PRIuMAX || PRI_MACROS_BROKEN
+# undef PRIuMAX
+# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
+#endif
+#if !defined PRIxMAX || PRI_MACROS_BROKEN
+# undef PRIxMAX
+# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
+#endif
+#if !defined PRIXMAX || PRI_MACROS_BROKEN
+# undef PRIXMAX
+# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
+#endif
+#if !defined PRIdPTR || PRI_MACROS_BROKEN
+# undef PRIdPTR
+# define PRIdPTR \
+ (sizeof (void *) == sizeof (long) ? "ld" : \
+ sizeof (void *) == sizeof (int) ? "d" : \
+ "lld")
+#endif
+#if !defined PRIiPTR || PRI_MACROS_BROKEN
+# undef PRIiPTR
+# define PRIiPTR \
+ (sizeof (void *) == sizeof (long) ? "li" : \
+ sizeof (void *) == sizeof (int) ? "i" : \
+ "lli")
+#endif
+#if !defined PRIoPTR || PRI_MACROS_BROKEN
+# undef PRIoPTR
+# define PRIoPTR \
+ (sizeof (void *) == sizeof (long) ? "lo" : \
+ sizeof (void *) == sizeof (int) ? "o" : \
+ "llo")
+#endif
+#if !defined PRIuPTR || PRI_MACROS_BROKEN
+# undef PRIuPTR
+# define PRIuPTR \
+ (sizeof (void *) == sizeof (long) ? "lu" : \
+ sizeof (void *) == sizeof (int) ? "u" : \
+ "llu")
+#endif
+#if !defined PRIxPTR || PRI_MACROS_BROKEN
+# undef PRIxPTR
+# define PRIxPTR \
+ (sizeof (void *) == sizeof (long) ? "lx" : \
+ sizeof (void *) == sizeof (int) ? "x" : \
+ "llx")
+#endif
+#if !defined PRIXPTR || PRI_MACROS_BROKEN
+# undef PRIXPTR
+# define PRIXPTR \
+ (sizeof (void *) == sizeof (long) ? "lX" : \
+ sizeof (void *) == sizeof (int) ? "X" : \
+ "llX")
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions. This is required by the standard
+ because some ISO C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define open __open
+# define close __close
+# define read __read
+# define mmap __mmap
+# define munmap __munmap
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+ O_BINARY is usually declared in <fcntl.h>. */
+#if !defined O_BINARY && defined _O_BINARY
+ /* For MSC-compatible compilers. */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+#ifdef __BEOS__
+ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+/* On reasonable systems, binary I/O is the default. */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+ with all translations. This is important if the translations are
+ cached by one of GCC's features. */
+int _nl_msg_cat_cntr;
+
+
+/* Expand a system dependent string segment. Return NULL if unsupported. */
+static const char *
+get_sysdep_segment_value (const char *name)
+{
+ /* Test for an ISO C 99 section 7.8.1 format string directive.
+ Syntax:
+ P R I { d | i | o | u | x | X }
+ { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */
+ /* We don't use a table of 14 times 6 'const char *' strings here, because
+ data relocations cost startup time. */
+ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
+ {
+ if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
+ || name[3] == 'x' || name[3] == 'X')
+ {
+ if (name[4] == '8' && name[5] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId8;
+ if (name[3] == 'i')
+ return PRIi8;
+ if (name[3] == 'o')
+ return PRIo8;
+ if (name[3] == 'u')
+ return PRIu8;
+ if (name[3] == 'x')
+ return PRIx8;
+ if (name[3] == 'X')
+ return PRIX8;
+ abort ();
+ }
+ if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId16;
+ if (name[3] == 'i')
+ return PRIi16;
+ if (name[3] == 'o')
+ return PRIo16;
+ if (name[3] == 'u')
+ return PRIu16;
+ if (name[3] == 'x')
+ return PRIx16;
+ if (name[3] == 'X')
+ return PRIX16;
+ abort ();
+ }
+ if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId32;
+ if (name[3] == 'i')
+ return PRIi32;
+ if (name[3] == 'o')
+ return PRIo32;
+ if (name[3] == 'u')
+ return PRIu32;
+ if (name[3] == 'x')
+ return PRIx32;
+ if (name[3] == 'X')
+ return PRIX32;
+ abort ();
+ }
+ if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId64;
+ if (name[3] == 'i')
+ return PRIi64;
+ if (name[3] == 'o')
+ return PRIo64;
+ if (name[3] == 'u')
+ return PRIu64;
+ if (name[3] == 'x')
+ return PRIx64;
+ if (name[3] == 'X')
+ return PRIX64;
+ abort ();
+ }
+ if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
+ && name[7] == 'S' && name[8] == 'T')
+ {
+ if (name[9] == '8' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST8;
+ if (name[3] == 'i')
+ return PRIiLEAST8;
+ if (name[3] == 'o')
+ return PRIoLEAST8;
+ if (name[3] == 'u')
+ return PRIuLEAST8;
+ if (name[3] == 'x')
+ return PRIxLEAST8;
+ if (name[3] == 'X')
+ return PRIXLEAST8;
+ abort ();
+ }
+ if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST16;
+ if (name[3] == 'i')
+ return PRIiLEAST16;
+ if (name[3] == 'o')
+ return PRIoLEAST16;
+ if (name[3] == 'u')
+ return PRIuLEAST16;
+ if (name[3] == 'x')
+ return PRIxLEAST16;
+ if (name[3] == 'X')
+ return PRIXLEAST16;
+ abort ();
+ }
+ if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST32;
+ if (name[3] == 'i')
+ return PRIiLEAST32;
+ if (name[3] == 'o')
+ return PRIoLEAST32;
+ if (name[3] == 'u')
+ return PRIuLEAST32;
+ if (name[3] == 'x')
+ return PRIxLEAST32;
+ if (name[3] == 'X')
+ return PRIXLEAST32;
+ abort ();
+ }
+ if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST64;
+ if (name[3] == 'i')
+ return PRIiLEAST64;
+ if (name[3] == 'o')
+ return PRIoLEAST64;
+ if (name[3] == 'u')
+ return PRIuLEAST64;
+ if (name[3] == 'x')
+ return PRIxLEAST64;
+ if (name[3] == 'X')
+ return PRIXLEAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
+ && name[7] == 'T')
+ {
+ if (name[8] == '8' && name[9] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST8;
+ if (name[3] == 'i')
+ return PRIiFAST8;
+ if (name[3] == 'o')
+ return PRIoFAST8;
+ if (name[3] == 'u')
+ return PRIuFAST8;
+ if (name[3] == 'x')
+ return PRIxFAST8;
+ if (name[3] == 'X')
+ return PRIXFAST8;
+ abort ();
+ }
+ if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST16;
+ if (name[3] == 'i')
+ return PRIiFAST16;
+ if (name[3] == 'o')
+ return PRIoFAST16;
+ if (name[3] == 'u')
+ return PRIuFAST16;
+ if (name[3] == 'x')
+ return PRIxFAST16;
+ if (name[3] == 'X')
+ return PRIXFAST16;
+ abort ();
+ }
+ if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST32;
+ if (name[3] == 'i')
+ return PRIiFAST32;
+ if (name[3] == 'o')
+ return PRIoFAST32;
+ if (name[3] == 'u')
+ return PRIuFAST32;
+ if (name[3] == 'x')
+ return PRIxFAST32;
+ if (name[3] == 'X')
+ return PRIXFAST32;
+ abort ();
+ }
+ if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST64;
+ if (name[3] == 'i')
+ return PRIiFAST64;
+ if (name[3] == 'o')
+ return PRIoFAST64;
+ if (name[3] == 'u')
+ return PRIuFAST64;
+ if (name[3] == 'x')
+ return PRIxFAST64;
+ if (name[3] == 'X')
+ return PRIXFAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdMAX;
+ if (name[3] == 'i')
+ return PRIiMAX;
+ if (name[3] == 'o')
+ return PRIoMAX;
+ if (name[3] == 'u')
+ return PRIuMAX;
+ if (name[3] == 'x')
+ return PRIxMAX;
+ if (name[3] == 'X')
+ return PRIXMAX;
+ abort ();
+ }
+ if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdPTR;
+ if (name[3] == 'i')
+ return PRIiPTR;
+ if (name[3] == 'o')
+ return PRIoPTR;
+ if (name[3] == 'u')
+ return PRIuPTR;
+ if (name[3] == 'x')
+ return PRIxPTR;
+ if (name[3] == 'X')
+ return PRIXPTR;
+ abort ();
+ }
+ }
+ }
+ /* Test for a glibc specific printf() format directive flag. */
+ if (name[0] == 'I' && name[1] == '\0')
+ {
+#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+ /* The 'I' flag, in numeric format directives, replaces ASCII digits
+ with the 'outdigits' defined in the LC_CTYPE locale facet. This is
+ used for Farsi (Persian) and maybe Arabic. */
+ return "I";
+#else
+ return "";
+#endif
+ }
+ /* Other system dependent strings are not valid. */
+ return NULL;
+}
+
+/* Initialize the codeset dependent parts of an opened message catalog.
+ Return the header entry. */
+const char *
+internal_function
+_nl_init_domain_conv (struct loaded_l10nfile *domain_file,
+ struct loaded_domain *domain,
+ struct binding *domainbinding)
+{
+ /* Find out about the character set the file is encoded with.
+ This can be found (in textual form) in the entry "". If this
+ entry does not exist or if this does not contain the `charset='
+ information, we will assume the charset matches the one the
+ current locale and we don't have to perform any conversion. */
+ char *nullentry;
+ size_t nullentrylen;
+
+ /* Preinitialize fields, to avoid recursion during _nl_find_msg. */
+ domain->codeset_cntr =
+ (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
+#ifdef _LIBC
+ domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+ domain->conv = (iconv_t) -1;
+# endif
+#endif
+ domain->conv_tab = NULL;
+
+ /* Get the header entry. */
+ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
+
+ if (nullentry != NULL)
+ {
+#if defined _LIBC || HAVE_ICONV
+ const char *charsetstr;
+
+ charsetstr = strstr (nullentry, "charset=");
+ if (charsetstr != NULL)
+ {
+ size_t len;
+ char *charset;
+ const char *outcharset;
+
+ charsetstr += strlen ("charset=");
+ len = strcspn (charsetstr, " \t\n");
+
+ charset = (char *) alloca (len + 1);
+# if defined _LIBC || HAVE_MEMPCPY
+ *((char *) mempcpy (charset, charsetstr, len)) = '\0';
+# else
+ memcpy (charset, charsetstr, len);
+ charset[len] = '\0';
+# endif
+
+ /* The output charset should normally be determined by the
+ locale. But sometimes the locale is not used or not correctly
+ set up, so we provide a possibility for the user to override
+ this. Moreover, the value specified through
+ bind_textdomain_codeset overrides both. */
+ if (domainbinding != NULL && domainbinding->codeset != NULL)
+ outcharset = domainbinding->codeset;
+ else
+ {
+ outcharset = getenv ("OUTPUT_CHARSET");
+ if (outcharset == NULL || outcharset[0] == '\0')
+ {
+# ifdef _LIBC
+ outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
+# else
+# if HAVE_ICONV
+ extern const char *locale_charset (void);
+ outcharset = locale_charset ();
+# endif
+# endif
+ }
+ }
+
+# ifdef _LIBC
+ /* We always want to use transliteration. */
+ outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+ charset = norm_add_slashes (charset, NULL);
+ if (__gconv_open (outcharset, charset, &domain->conv,
+ GCONV_AVOID_NOCONV)
+ != __GCONV_OK)
+ domain->conv = (__gconv_t) -1;
+# else
+# if HAVE_ICONV
+ /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
+ we want to use transliteration. */
+# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
+ || _LIBICONV_VERSION >= 0x0105
+ if (strchr (outcharset, '/') == NULL)
+ {
+ char *tmp;
+
+ len = strlen (outcharset);
+ tmp = (char *) alloca (len + 10 + 1);
+ memcpy (tmp, outcharset, len);
+ memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+ outcharset = tmp;
+
+ domain->conv = iconv_open (outcharset, charset);
+
+ freea (outcharset);
+ }
+ else
+# endif
+ domain->conv = iconv_open (outcharset, charset);
+# endif
+# endif
+
+ freea (charset);
+ }
+#endif /* _LIBC || HAVE_ICONV */
+ }
+
+ return nullentry;
+}
+
+/* Frees the codeset dependent parts of an opened message catalog. */
+void
+internal_function
+_nl_free_domain_conv (struct loaded_domain *domain)
+{
+ if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
+ free (domain->conv_tab);
+
+#ifdef _LIBC
+ if (domain->conv != (__gconv_t) -1)
+ __gconv_close (domain->conv);
+#else
+# if HAVE_ICONV
+ if (domain->conv != (iconv_t) -1)
+ iconv_close (domain->conv);
+# endif
+#endif
+}
+
+/* Load the message catalogs specified by FILENAME. If it is no valid
+ message catalog do nothing. */
+void
+internal_function
+_nl_load_domain (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding)
+{
+ int fd;
+ size_t size;
+#ifdef _LIBC
+ struct stat64 st;
+#else
+ struct stat st;
+#endif
+ struct mo_file_header *data = (struct mo_file_header *) -1;
+ int use_mmap = 0;
+ struct loaded_domain *domain;
+ int revision;
+ const char *nullentry;
+
+ domain_file->decided = 1;
+ domain_file->data = NULL;
+
+ /* Note that it would be useless to store domainbinding in domain_file
+ because domainbinding might be == NULL now but != NULL later (after
+ a call to bind_textdomain_codeset). */
+
+ /* If the record does not represent a valid locale the FILENAME
+ might be NULL. This can happen when according to the given
+ specification the locale file name is different for XPG and CEN
+ syntax. */
+ if (domain_file->filename == NULL)
+ return;
+
+ /* Try to open the addressed file. */
+ fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+ if (fd == -1)
+ return;
+
+ /* We must know about the size of the file. */
+ if (
+#ifdef _LIBC
+ __builtin_expect (fstat64 (fd, &st) != 0, 0)
+#else
+ __builtin_expect (fstat (fd, &st) != 0, 0)
+#endif
+ || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
+ || __builtin_expect (size < sizeof (struct mo_file_header), 0))
+ {
+ /* Something went wrong. */
+ close (fd);
+ return;
+ }
+
+#ifdef HAVE_MMAP
+ /* Now we are ready to load the file. If mmap() is available we try
+ this first. If not available or it failed we try to load it. */
+ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+ MAP_PRIVATE, fd, 0);
+
+ if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
+ {
+ /* mmap() call was successful. */
+ close (fd);
+ use_mmap = 1;
+ }
+#endif
+
+ /* If the data is not yet available (i.e. mmap'ed) we try to load
+ it manually. */
+ if (data == (struct mo_file_header *) -1)
+ {
+ size_t to_read;
+ char *read_ptr;
+
+ data = (struct mo_file_header *) malloc (size);
+ if (data == NULL)
+ return;
+
+ to_read = size;
+ read_ptr = (char *) data;
+ do
+ {
+ long int nb = (long int) read (fd, read_ptr, to_read);
+ if (nb <= 0)
+ {
+#ifdef EINTR
+ if (nb == -1 && errno == EINTR)
+ continue;
+#endif
+ close (fd);
+ return;
+ }
+ read_ptr += nb;
+ to_read -= nb;
+ }
+ while (to_read > 0);
+
+ close (fd);
+ }
+
+ /* Using the magic number we can test whether it really is a message
+ catalog file. */
+ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+ 0))
+ {
+ /* The magic number is wrong: not a message catalog file. */
+#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+#endif
+ free (data);
+ return;
+ }
+
+ domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+ if (domain == NULL)
+ return;
+ domain_file->data = domain;
+
+ domain->data = (char *) data;
+ domain->use_mmap = use_mmap;
+ domain->mmap_size = size;
+ domain->must_swap = data->magic != _MAGIC;
+ domain->malloced = NULL;
+
+ /* Fill in the information about the available tables. */
+ revision = W (domain->must_swap, data->revision);
+ /* We support only the major revisions 0 and 1. */
+ switch (revision >> 16)
+ {
+ case 0:
+ case 1:
+ domain->nstrings = W (domain->must_swap, data->nstrings);
+ domain->orig_tab = (const struct string_desc *)
+ ((char *) data + W (domain->must_swap, data->orig_tab_offset));
+ domain->trans_tab = (const struct string_desc *)
+ ((char *) data + W (domain->must_swap, data->trans_tab_offset));
+ domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+ domain->hash_tab =
+ (domain->hash_size > 2
+ ? (const nls_uint32 *)
+ ((char *) data + W (domain->must_swap, data->hash_tab_offset))
+ : NULL);
+ domain->must_swap_hash_tab = domain->must_swap;
+
+ /* Now dispatch on the minor revision. */
+ switch (revision & 0xffff)
+ {
+ case 0:
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ break;
+ case 1:
+ default:
+ {
+ nls_uint32 n_sysdep_strings;
+
+ if (domain->hash_tab == NULL)
+ /* This is invalid. These minor revisions need a hash table. */
+ goto invalid;
+
+ n_sysdep_strings =
+ W (domain->must_swap, data->n_sysdep_strings);
+ if (n_sysdep_strings > 0)
+ {
+ nls_uint32 n_sysdep_segments;
+ const struct sysdep_segment *sysdep_segments;
+ const char **sysdep_segment_values;
+ const nls_uint32 *orig_sysdep_tab;
+ const nls_uint32 *trans_sysdep_tab;
+ nls_uint32 n_inmem_sysdep_strings;
+ size_t memneed;
+ char *mem;
+ struct sysdep_string_desc *inmem_orig_sysdep_tab;
+ struct sysdep_string_desc *inmem_trans_sysdep_tab;
+ nls_uint32 *inmem_hash_tab;
+ unsigned int i, j;
+
+ /* Get the values of the system dependent segments. */
+ n_sysdep_segments =
+ W (domain->must_swap, data->n_sysdep_segments);
+ sysdep_segments = (const struct sysdep_segment *)
+ ((char *) data
+ + W (domain->must_swap, data->sysdep_segments_offset));
+ sysdep_segment_values =
+ alloca (n_sysdep_segments * sizeof (const char *));
+ for (i = 0; i < n_sysdep_segments; i++)
+ {
+ const char *name =
+ (char *) data
+ + W (domain->must_swap, sysdep_segments[i].offset);
+ nls_uint32 namelen =
+ W (domain->must_swap, sysdep_segments[i].length);
+
+ if (!(namelen > 0 && name[namelen - 1] == '\0'))
+ {
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ sysdep_segment_values[i] = get_sysdep_segment_value (name);
+ }
+
+ orig_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->orig_sysdep_tab_offset));
+ trans_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->trans_sysdep_tab_offset));
+
+ /* Compute the amount of additional memory needed for the
+ system dependent strings and the augmented hash table.
+ At the same time, also drop string pairs which refer to
+ an undefined system dependent segment. */
+ n_inmem_sysdep_strings = 0;
+ memneed = domain->hash_size * sizeof (nls_uint32);
+ for (i = 0; i < n_sysdep_strings; i++)
+ {
+ int valid = 1;
+ size_t needs[2];
+
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ size_t need = 0;
+ const struct segment_pair *p = sysdep_string->segments;
+
+ if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 sysdepref;
+
+ need += W (domain->must_swap, p->segsize);
+
+ sysdepref = W (domain->must_swap, p->sysdepref);
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ if (sysdepref >= n_sysdep_segments)
+ {
+ /* Invalid. */
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ if (sysdep_segment_values[sysdepref] == NULL)
+ {
+ /* This particular string pair is invalid. */
+ valid = 0;
+ break;
+ }
+
+ need += strlen (sysdep_segment_values[sysdepref]);
+ }
+
+ needs[j] = need;
+ if (!valid)
+ break;
+ }
+
+ if (valid)
+ {
+ n_inmem_sysdep_strings++;
+ memneed += needs[0] + needs[1];
+ }
+ }
+ memneed += 2 * n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+
+ if (n_inmem_sysdep_strings > 0)
+ {
+ unsigned int k;
+
+ /* Allocate additional memory. */
+ mem = (char *) malloc (memneed);
+ if (mem == NULL)
+ goto invalid;
+
+ domain->malloced = mem;
+ inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+ inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+ inmem_hash_tab = (nls_uint32 *) mem;
+ mem += domain->hash_size * sizeof (nls_uint32);
+
+ /* Compute the system dependent strings. */
+ k = 0;
+ for (i = 0; i < n_sysdep_strings; i++)
+ {
+ int valid = 1;
+
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ const struct segment_pair *p =
+ sysdep_string->segments;
+
+ if (W (domain->must_swap, p->sysdepref)
+ != SEGMENTS_END)
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 sysdepref;
+
+ sysdepref =
+ W (domain->must_swap, p->sysdepref);
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ if (sysdep_segment_values[sysdepref] == NULL)
+ {
+ /* This particular string pair is
+ invalid. */
+ valid = 0;
+ break;
+ }
+ }
+
+ if (!valid)
+ break;
+ }
+
+ if (valid)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ const char *static_segments =
+ (char *) data
+ + W (domain->must_swap, sysdep_string->offset);
+ const struct segment_pair *p =
+ sysdep_string->segments;
+
+ /* Concatenate the segments, and fill
+ inmem_orig_sysdep_tab[k] (for j == 0) and
+ inmem_trans_sysdep_tab[k] (for j == 1). */
+
+ struct sysdep_string_desc *inmem_tab_entry =
+ (j == 0
+ ? inmem_orig_sysdep_tab
+ : inmem_trans_sysdep_tab)
+ + k;
+
+ if (W (domain->must_swap, p->sysdepref)
+ == SEGMENTS_END)
+ {
+ /* Only one static segment. */
+ inmem_tab_entry->length =
+ W (domain->must_swap, p->segsize);
+ inmem_tab_entry->pointer = static_segments;
+ }
+ else
+ {
+ inmem_tab_entry->pointer = mem;
+
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 segsize =
+ W (domain->must_swap, p->segsize);
+ nls_uint32 sysdepref =
+ W (domain->must_swap, p->sysdepref);
+ size_t n;
+
+ if (segsize > 0)
+ {
+ memcpy (mem, static_segments, segsize);
+ mem += segsize;
+ static_segments += segsize;
+ }
+
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ n = strlen (sysdep_segment_values[sysdepref]);
+ memcpy (mem, sysdep_segment_values[sysdepref], n);
+ mem += n;
+ }
+
+ inmem_tab_entry->length =
+ mem - inmem_tab_entry->pointer;
+ }
+ }
+
+ k++;
+ }
+ }
+ if (k != n_inmem_sysdep_strings)
+ abort ();
+
+ /* Compute the augmented hash table. */
+ for (i = 0; i < domain->hash_size; i++)
+ inmem_hash_tab[i] =
+ W (domain->must_swap_hash_tab, domain->hash_tab[i]);
+ for (i = 0; i < n_inmem_sysdep_strings; i++)
+ {
+ const char *msgid = inmem_orig_sysdep_tab[i].pointer;
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr =
+ 1 + (hash_val % (domain->hash_size - 2));
+
+ for (;;)
+ {
+ if (inmem_hash_tab[idx] == 0)
+ {
+ /* Hash table entry is empty. Use it. */
+ inmem_hash_tab[idx] = 1 + domain->nstrings + i;
+ break;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ }
+
+ domain->n_sysdep_strings = n_inmem_sysdep_strings;
+ domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
+ domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
+
+ domain->hash_tab = inmem_hash_tab;
+ domain->must_swap_hash_tab = 0;
+ }
+ else
+ {
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ }
+
+ freea (sysdep_segment_values);
+ }
+ else
+ {
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ }
+ }
+ break;
+ }
+ break;
+ default:
+ /* This is an invalid revision. */
+ invalid:
+ /* This is an invalid .mo file. */
+ if (domain->malloced)
+ free (domain->malloced);
+#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+#endif
+ free (data);
+ free (domain);
+ domain_file->data = NULL;
+ return;
+ }
+
+ /* Now initialize the character set converter from the character set
+ the file is encoded with (found in the header entry) to the domain's
+ specified character set or the locale's character set. */
+ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
+
+ /* Also look for a plural specification. */
+ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
+}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (struct loaded_domain *domain)
+{
+ if (domain->plural != &__gettext_germanic_plural)
+ __gettext_free_exp (domain->plural);
+
+ _nl_free_domain_conv (domain);
+
+ if (domain->malloced)
+ free (domain->malloced);
+
+# ifdef _POSIX_MAPPED_FILES
+ if (domain->use_mmap)
+ munmap ((caddr_t) domain->data, domain->mmap_size);
+ else
+# endif /* _POSIX_MAPPED_FILES */
+ free ((void *) domain->data);
+
+ free (domain);
+}
+#endif
diff --git a/intl/localcharset.c b/intl/localcharset.c
new file mode 100644
index 0000000..1252f3f
--- /dev/null
+++ b/intl/localcharset.c
@@ -0,0 +1,409 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+ Copyright (C) 2000-2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "localcharset.h"
+
+#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 ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+#if HAVE_DECL_GETC_UNLOCKED
+# undef getc
+# define getc getc_unlocked
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+ possible multithread problem in the function get_charset_aliases. If we
+ are running in a threaded environment, and if two threads initialize
+ 'charset_aliases' simultaneously, both will produce the same value,
+ and everything will be ok if the two assignments to 'charset_aliases'
+ are atomic. But I don't know what will happen if the two assignments mix. */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+ read, else NULL. Its format is:
+ ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file. */
+static const char *
+get_charset_aliases ()
+{
+ const char *cp;
+
+ cp = charset_aliases;
+ if (cp == NULL)
+ {
+#if !(defined VMS || defined WIN32)
+ FILE *fp;
+ const char *dir;
+ const char *base = "charset.alias";
+ char *file_name;
+
+ /* Make it possible to override the charset.alias location. This is
+ necessary for running the testsuite before "make install". */
+ dir = getenv ("CHARSETALIASDIR");
+ if (dir == NULL || dir[0] == '\0')
+ dir = relocate (LIBDIR);
+
+ /* Concatenate dir and base into freshly allocated file_name. */
+ {
+ size_t dir_len = strlen (dir);
+ size_t base_len = strlen (base);
+ int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+ file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+ if (file_name != NULL)
+ {
+ memcpy (file_name, dir, dir_len);
+ if (add_slash)
+ file_name[dir_len] = DIRECTORY_SEPARATOR;
+ memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+ }
+ }
+
+ if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
+ /* Out of memory or file not found, treat it as empty. */
+ cp = "";
+ else
+ {
+ /* Parse the file's contents. */
+ char *res_ptr = NULL;
+ size_t res_size = 0;
+
+ for (;;)
+ {
+ int c;
+ char buf1[50+1];
+ char buf2[50+1];
+ size_t l1, l2;
+ char *old_res_ptr;
+
+ c = getc (fp);
+ if (c == EOF)
+ break;
+ if (c == '\n' || c == ' ' || c == '\t')
+ continue;
+ if (c == '#')
+ {
+ /* Skip comment, to end of line. */
+ do
+ c = getc (fp);
+ while (!(c == EOF || c == '\n'));
+ if (c == EOF)
+ break;
+ continue;
+ }
+ ungetc (c, fp);
+ if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
+ break;
+ l1 = strlen (buf1);
+ l2 = strlen (buf2);
+ old_res_ptr = res_ptr;
+ if (res_size == 0)
+ {
+ res_size = l1 + 1 + l2 + 1;
+ res_ptr = (char *) malloc (res_size + 1);
+ }
+ else
+ {
+ res_size += l1 + 1 + l2 + 1;
+ res_ptr = (char *) realloc (res_ptr, res_size + 1);
+ }
+ if (res_ptr == NULL)
+ {
+ /* Out of memory. */
+ res_size = 0;
+ if (old_res_ptr != NULL)
+ free (old_res_ptr);
+ break;
+ }
+ strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+ strcpy (res_ptr + res_size - (l2 + 1), buf2);
+ }
+ fclose (fp);
+ if (res_size == 0)
+ cp = "";
+ else
+ {
+ *(res_ptr + res_size) = '\0';
+ cp = res_ptr;
+ }
+ }
+
+ if (file_name != NULL)
+ free (file_name);
+
+#else
+
+# if defined VMS
+ /* To avoid the troubles of an extra file charset.alias_vms in the
+ sources of many GNU packages, simply inline the aliases here. */
+ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+ "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+ section 10.7 "Handling Different Character Sets". */
+ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+ "ISO8859-2" "\0" "ISO-8859-2" "\0"
+ "ISO8859-5" "\0" "ISO-8859-5" "\0"
+ "ISO8859-7" "\0" "ISO-8859-7" "\0"
+ "ISO8859-8" "\0" "ISO-8859-8" "\0"
+ "ISO8859-9" "\0" "ISO-8859-9" "\0"
+ /* Japanese */
+ "eucJP" "\0" "EUC-JP" "\0"
+ "SJIS" "\0" "SHIFT_JIS" "\0"
+ "DECKANJI" "\0" "DEC-KANJI" "\0"
+ "SDECKANJI" "\0" "EUC-JP" "\0"
+ /* Chinese */
+ "eucTW" "\0" "EUC-TW" "\0"
+ "DECHANYU" "\0" "DEC-HANYU" "\0"
+ "DECHANZI" "\0" "GB2312" "\0"
+ /* Korean */
+ "DECKOREAN" "\0" "EUC-KR" "\0";
+# endif
+
+# if defined WIN32
+ /* To avoid the troubles of installing a separate file in the same
+ directory as the DLL and of retrieving the DLL's directory at
+ runtime, simply inline the aliases here. */
+
+ cp = "CP936" "\0" "GBK" "\0"
+ "CP1361" "\0" "JOHAB" "\0"
+ "CP20127" "\0" "ASCII" "\0"
+ "CP20866" "\0" "KOI8-R" "\0"
+ "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;
+}
diff --git a/intl/localcharset.h b/intl/localcharset.h
new file mode 100644
index 0000000..129e4a4
--- /dev/null
+++ b/intl/localcharset.h
@@ -0,0 +1,42 @@
+/* Determine a canonical name for the current locale's character encoding.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+ This file is part of the GNU CHARSET Library.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed in config.charset.
+ The result must not be freed; it is statically allocated.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/intl/locale.alias b/intl/locale.alias
new file mode 100644
index 0000000..faa6969
--- /dev/null
+++ b/intl/locale.alias
@@ -0,0 +1,78 @@
+# Locale name alias data base.
+# Copyright (C) 1996-2001,2003 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+# 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 nb_NO.ISO-8859-1
+bokmål nb_NO.ISO-8859-1
+catalan ca_ES.ISO-8859-1
+croatian hr_HR.ISO-8859-2
+czech cs_CZ.ISO-8859-2
+danish da_DK.ISO-8859-1
+dansk da_DK.ISO-8859-1
+deutsch de_DE.ISO-8859-1
+dutch nl_NL.ISO-8859-1
+eesti et_EE.ISO-8859-1
+estonian et_EE.ISO-8859-1
+finnish fi_FI.ISO-8859-1
+français fr_FR.ISO-8859-1
+french fr_FR.ISO-8859-1
+galego gl_ES.ISO-8859-1
+galician gl_ES.ISO-8859-1
+german de_DE.ISO-8859-1
+greek el_GR.ISO-8859-7
+hebrew he_IL.ISO-8859-8
+hrvatski hr_HR.ISO-8859-2
+hungarian hu_HU.ISO-8859-2
+icelandic is_IS.ISO-8859-1
+italian it_IT.ISO-8859-1
+japanese ja_JP.eucJP
+japanese.euc ja_JP.eucJP
+ja_JP ja_JP.eucJP
+ja_JP.ujis ja_JP.eucJP
+japanese.sjis ja_JP.SJIS
+korean ko_KR.eucKR
+korean.euc ko_KR.eucKR
+ko_KR ko_KR.eucKR
+lithuanian lt_LT.ISO-8859-13
+no_NO nb_NO.ISO-8859-1
+no_NO.ISO-8859-1 nb_NO.ISO-8859-1
+norwegian nb_NO.ISO-8859-1
+nynorsk nn_NO.ISO-8859-1
+polish pl_PL.ISO-8859-2
+portuguese pt_PT.ISO-8859-1
+romanian ro_RO.ISO-8859-2
+russian ru_RU.ISO-8859-5
+slovak sk_SK.ISO-8859-2
+slovene sl_SI.ISO-8859-2
+slovenian sl_SI.ISO-8859-2
+spanish es_ES.ISO-8859-1
+swedish sv_SE.ISO-8859-1
+thai th_TH.TIS-620
+turkish tr_TR.ISO-8859-9
diff --git a/intl/localealias.c b/intl/localealias.c
new file mode 100644
index 0000000..7a092a0
--- /dev/null
+++ b/intl/localealias.c
@@ -0,0 +1,414 @@
+/* Handle aliases for locale names.
+ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#if defined _LIBC || defined HAVE___FSETLOCKING
+# include <stdio_ext.h>
+#endif
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettextP.h"
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define strcasecmp __strcasecmp
+
+# ifndef mempcpy
+# define mempcpy __mempcpy
+# endif
+# define HAVE_MEMPCPY 1
+# define HAVE___FSETLOCKING 1
+
+/* We need locking here since we can be called from different places. */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Some optimizations for glibc. */
+#ifdef _LIBC
+# define FEOF(fp) feof_unlocked (fp)
+# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
+#else
+# define FEOF(fp) feof (fp)
+# define FGETS(buf, n, fp) fgets (buf, n, fp)
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+#if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
+
+
+struct alias_map
+{
+ const char *alias;
+ const char *value;
+};
+
+
+#ifndef _LIBC
+# define libc_freeres_ptr(decl) decl
+#endif
+
+libc_freeres_ptr (static char *string_space);
+static size_t string_space_act;
+static size_t string_space_max;
+libc_freeres_ptr (static struct alias_map *map);
+static size_t nmap;
+static size_t maxmap;
+
+
+/* Prototypes for local functions. */
+static size_t read_alias_file (const char *fname, int fname_len)
+ internal_function;
+static int extend_alias_table (void);
+static int alias_compare (const struct alias_map *map1,
+ const struct alias_map *map2);
+
+
+const char *
+_nl_expand_alias (const char *name)
+{
+ static const char *locale_alias_path;
+ struct alias_map *retval;
+ const char *result = NULL;
+ size_t added;
+
+#ifdef _LIBC
+ __libc_lock_lock (lock);
+#endif
+
+ if (locale_alias_path == NULL)
+ locale_alias_path = LOCALE_ALIAS_PATH;
+
+ do
+ {
+ struct alias_map item;
+
+ item.alias = name;
+
+ if (nmap > 0)
+ retval = (struct alias_map *) bsearch (&item, map, nmap,
+ sizeof (struct alias_map),
+ (int (*) (const void *,
+ const void *)
+ ) alias_compare);
+ else
+ retval = NULL;
+
+ /* We really found an alias. Return the value. */
+ if (retval != NULL)
+ {
+ result = retval->value;
+ break;
+ }
+
+ /* Perhaps we can find another alias file. */
+ added = 0;
+ while (added == 0 && locale_alias_path[0] != '\0')
+ {
+ const char *start;
+
+ while (locale_alias_path[0] == PATH_SEPARATOR)
+ ++locale_alias_path;
+ start = locale_alias_path;
+
+ while (locale_alias_path[0] != '\0'
+ && locale_alias_path[0] != PATH_SEPARATOR)
+ ++locale_alias_path;
+
+ if (start < locale_alias_path)
+ added = read_alias_file (start, locale_alias_path - start);
+ }
+ }
+ while (added != 0);
+
+#ifdef _LIBC
+ __libc_lock_unlock (lock);
+#endif
+
+ return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (const char *fname, int fname_len)
+{
+ FILE *fp;
+ char *full_fname;
+ size_t added;
+ static const char aliasfile[] = "/locale.alias";
+
+ full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+#ifdef HAVE_MEMPCPY
+ mempcpy (mempcpy (full_fname, fname, fname_len),
+ aliasfile, sizeof aliasfile);
+#else
+ memcpy (full_fname, fname, fname_len);
+ memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
+
+ fp = fopen (relocate (full_fname), "r");
+ freea (full_fname);
+ if (fp == NULL)
+ return 0;
+
+#ifdef HAVE___FSETLOCKING
+ /* No threads present. */
+ __fsetlocking (fp, FSETLOCKING_BYCALLER);
+#endif
+
+ added = 0;
+ while (!FEOF (fp))
+ {
+ /* It is a reasonable approach to use a fix buffer here because
+ a) we are only interested in the first two fields
+ b) these fields must be usable as file names and so must not
+ be that long
+ We avoid a multi-kilobyte buffer here since this would use up
+ stack space which we might not have if the program ran out of
+ memory. */
+ char buf[400];
+ char *alias;
+ char *value;
+ char *cp;
+
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* EOF reached. */
+ break;
+
+ cp = buf;
+ /* Ignore leading white space. */
+ while (isspace ((unsigned char) cp[0]))
+ ++cp;
+
+ /* A leading '#' signals a comment line. */
+ if (cp[0] != '\0' && cp[0] != '#')
+ {
+ alias = cp++;
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+ ++cp;
+ /* Terminate alias name. */
+ if (cp[0] != '\0')
+ *cp++ = '\0';
+
+ /* Now look for the beginning of the value. */
+ while (isspace ((unsigned char) cp[0]))
+ ++cp;
+
+ if (cp[0] != '\0')
+ {
+ size_t alias_len;
+ size_t value_len;
+
+ value = cp++;
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+ ++cp;
+ /* Terminate value. */
+ if (cp[0] == '\n')
+ {
+ /* This has to be done to make the following test
+ for the end of line possible. We are looking for
+ the terminating '\n' which do not overwrite here. */
+ *cp++ = '\0';
+ *cp = '\n';
+ }
+ else if (cp[0] != '\0')
+ *cp++ = '\0';
+
+ if (nmap >= maxmap)
+ if (__builtin_expect (extend_alias_table (), 0))
+ return added;
+
+ alias_len = strlen (alias) + 1;
+ value_len = strlen (value) + 1;
+
+ if (string_space_act + alias_len + value_len > string_space_max)
+ {
+ /* Increase size of memory pool. */
+ size_t new_size = (string_space_max
+ + (alias_len + value_len > 1024
+ ? alias_len + value_len : 1024));
+ char *new_pool = (char *) realloc (string_space, new_size);
+ if (new_pool == NULL)
+ return added;
+
+ if (__builtin_expect (string_space != new_pool, 0))
+ {
+ size_t i;
+
+ for (i = 0; i < nmap; i++)
+ {
+ map[i].alias += new_pool - string_space;
+ map[i].value += new_pool - string_space;
+ }
+ }
+
+ string_space = new_pool;
+ string_space_max = new_size;
+ }
+
+ map[nmap].alias = memcpy (&string_space[string_space_act],
+ alias, alias_len);
+ string_space_act += alias_len;
+
+ map[nmap].value = memcpy (&string_space[string_space_act],
+ value, value_len);
+ string_space_act += value_len;
+
+ ++nmap;
+ ++added;
+ }
+ }
+
+ /* Possibly not the whole line fits into the buffer. Ignore
+ the rest of the line. */
+ while (strchr (buf, '\n') == NULL)
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* Make sure the inner loop will be left. The outer loop
+ will exit at the `feof' test. */
+ break;
+ }
+
+ /* Should we test for ferror()? I think we have to silently ignore
+ errors. --drepper */
+ fclose (fp);
+
+ if (added > 0)
+ qsort (map, nmap, sizeof (struct alias_map),
+ (int (*) (const void *, const void *)) alias_compare);
+
+ return added;
+}
+
+
+static int
+extend_alias_table ()
+{
+ size_t new_size;
+ struct alias_map *new_map;
+
+ new_size = maxmap == 0 ? 100 : 2 * maxmap;
+ new_map = (struct alias_map *) realloc (map, (new_size
+ * sizeof (struct alias_map)));
+ if (new_map == NULL)
+ /* Simply don't extend: we don't have any more core. */
+ return -1;
+
+ map = new_map;
+ maxmap = new_size;
+ return 0;
+}
+
+
+static int
+alias_compare (const struct alias_map *map1, const struct alias_map *map2)
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+ return strcasecmp (map1->alias, map2->alias);
+#else
+ const unsigned char *p1 = (const unsigned char *) map1->alias;
+ const unsigned char *p2 = (const unsigned char *) map2->alias;
+ unsigned char c1, c2;
+
+ if (p1 == p2)
+ return 0;
+
+ do
+ {
+ /* I know this seems to be odd but the tolower() function in
+ some systems libc cannot handle nonalpha characters. */
+ c1 = isupper (*p1) ? tolower (*p1) : *p1;
+ c2 = isupper (*p2) ? tolower (*p2) : *p2;
+ if (c1 == '\0')
+ break;
+ ++p1;
+ ++p2;
+ }
+ while (c1 == c2);
+
+ return c1 - c2;
+#endif
+}
diff --git a/intl/localename.c b/intl/localename.c
new file mode 100644
index 0000000..b855ace
--- /dev/null
+++ b/intl/localename.c
@@ -0,0 +1,1500 @@
+/* Determine the current selected locale.
+ Copyright (C) 1995-1999, 2000-2005 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */
+/* Win32 code written by Tor Lillqvist <tml@iki.fi>. */
+/* MacOS X code written by Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <locale.h>
+
+#if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
+# include <string.h>
+# include <CFString.h>
+# if HAVE_CFLOCALECOPYCURRENT
+# include <CFLocale.h>
+# elif HAVE_CFPREFERENCESCOPYAPPVALUE
+# include <CFPreferences.h>
+# endif
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#ifdef WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* List of language codes, sorted by value:
+ 0x01 LANG_ARABIC
+ 0x02 LANG_BULGARIAN
+ 0x03 LANG_CATALAN
+ 0x04 LANG_CHINESE
+ 0x05 LANG_CZECH
+ 0x06 LANG_DANISH
+ 0x07 LANG_GERMAN
+ 0x08 LANG_GREEK
+ 0x09 LANG_ENGLISH
+ 0x0a LANG_SPANISH
+ 0x0b LANG_FINNISH
+ 0x0c LANG_FRENCH
+ 0x0d LANG_HEBREW
+ 0x0e LANG_HUNGARIAN
+ 0x0f LANG_ICELANDIC
+ 0x10 LANG_ITALIAN
+ 0x11 LANG_JAPANESE
+ 0x12 LANG_KOREAN
+ 0x13 LANG_DUTCH
+ 0x14 LANG_NORWEGIAN
+ 0x15 LANG_POLISH
+ 0x16 LANG_PORTUGUESE
+ 0x17 LANG_RHAETO_ROMANCE
+ 0x18 LANG_ROMANIAN
+ 0x19 LANG_RUSSIAN
+ 0x1a LANG_CROATIAN == LANG_SERBIAN
+ 0x1b LANG_SLOVAK
+ 0x1c LANG_ALBANIAN
+ 0x1d LANG_SWEDISH
+ 0x1e LANG_THAI
+ 0x1f LANG_TURKISH
+ 0x20 LANG_URDU
+ 0x21 LANG_INDONESIAN
+ 0x22 LANG_UKRAINIAN
+ 0x23 LANG_BELARUSIAN
+ 0x24 LANG_SLOVENIAN
+ 0x25 LANG_ESTONIAN
+ 0x26 LANG_LATVIAN
+ 0x27 LANG_LITHUANIAN
+ 0x28 LANG_TAJIK
+ 0x29 LANG_FARSI
+ 0x2a LANG_VIETNAMESE
+ 0x2b LANG_ARMENIAN
+ 0x2c LANG_AZERI
+ 0x2d LANG_BASQUE
+ 0x2e LANG_SORBIAN
+ 0x2f LANG_MACEDONIAN
+ 0x30 LANG_SUTU
+ 0x31 LANG_TSONGA
+ 0x32 LANG_TSWANA
+ 0x33 LANG_VENDA
+ 0x34 LANG_XHOSA
+ 0x35 LANG_ZULU
+ 0x36 LANG_AFRIKAANS
+ 0x37 LANG_GEORGIAN
+ 0x38 LANG_FAEROESE
+ 0x39 LANG_HINDI
+ 0x3a LANG_MALTESE
+ 0x3b LANG_SAAMI
+ 0x3c LANG_GAELIC
+ 0x3d LANG_YIDDISH
+ 0x3e LANG_MALAY
+ 0x3f LANG_KAZAK
+ 0x40 LANG_KYRGYZ
+ 0x41 LANG_SWAHILI
+ 0x42 LANG_TURKMEN
+ 0x43 LANG_UZBEK
+ 0x44 LANG_TATAR
+ 0x45 LANG_BENGALI
+ 0x46 LANG_PUNJABI
+ 0x47 LANG_GUJARATI
+ 0x48 LANG_ORIYA
+ 0x49 LANG_TAMIL
+ 0x4a LANG_TELUGU
+ 0x4b LANG_KANNADA
+ 0x4c LANG_MALAYALAM
+ 0x4d LANG_ASSAMESE
+ 0x4e LANG_MARATHI
+ 0x4f LANG_SANSKRIT
+ 0x50 LANG_MONGOLIAN
+ 0x51 LANG_TIBETAN
+ 0x52 LANG_WELSH
+ 0x53 LANG_CAMBODIAN
+ 0x54 LANG_LAO
+ 0x55 LANG_BURMESE
+ 0x56 LANG_GALICIAN
+ 0x57 LANG_KONKANI
+ 0x58 LANG_MANIPURI
+ 0x59 LANG_SINDHI
+ 0x5a LANG_SYRIAC
+ 0x5b LANG_SINHALESE
+ 0x5c LANG_CHEROKEE
+ 0x5d LANG_INUKTITUT
+ 0x5e LANG_AMHARIC
+ 0x5f LANG_TAMAZIGHT
+ 0x60 LANG_KASHMIRI
+ 0x61 LANG_NEPALI
+ 0x62 LANG_FRISIAN
+ 0x63 LANG_PASHTO
+ 0x64 LANG_TAGALOG
+ 0x65 LANG_DIVEHI
+ 0x66 LANG_EDO
+ 0x67 LANG_FULFULDE
+ 0x68 LANG_HAUSA
+ 0x69 LANG_IBIBIO
+ 0x6a LANG_YORUBA
+ 0x70 LANG_IGBO
+ 0x71 LANG_KANURI
+ 0x72 LANG_OROMO
+ 0x73 LANG_TIGRINYA
+ 0x74 LANG_GUARANI
+ 0x75 LANG_HAWAIIAN
+ 0x76 LANG_LATIN
+ 0x77 LANG_SOMALI
+ 0x78 LANG_YI
+ 0x79 LANG_PAPIAMENTU
+*/
+/* Mingw headers don't have latest language and sublanguage codes. */
+# ifndef LANG_AFRIKAANS
+# define LANG_AFRIKAANS 0x36
+# endif
+# ifndef LANG_ALBANIAN
+# define LANG_ALBANIAN 0x1c
+# endif
+# ifndef LANG_AMHARIC
+# define LANG_AMHARIC 0x5e
+# endif
+# ifndef LANG_ARABIC
+# define LANG_ARABIC 0x01
+# endif
+# ifndef LANG_ARMENIAN
+# define LANG_ARMENIAN 0x2b
+# endif
+# ifndef LANG_ASSAMESE
+# define LANG_ASSAMESE 0x4d
+# endif
+# ifndef LANG_AZERI
+# define LANG_AZERI 0x2c
+# endif
+# ifndef LANG_BASQUE
+# define LANG_BASQUE 0x2d
+# endif
+# ifndef LANG_BELARUSIAN
+# define LANG_BELARUSIAN 0x23
+# endif
+# ifndef LANG_BENGALI
+# define LANG_BENGALI 0x45
+# endif
+# ifndef LANG_BURMESE
+# define LANG_BURMESE 0x55
+# endif
+# ifndef LANG_CAMBODIAN
+# define LANG_CAMBODIAN 0x53
+# endif
+# ifndef LANG_CATALAN
+# define LANG_CATALAN 0x03
+# endif
+# ifndef LANG_CHEROKEE
+# define LANG_CHEROKEE 0x5c
+# endif
+# ifndef LANG_DIVEHI
+# define LANG_DIVEHI 0x65
+# endif
+# ifndef LANG_EDO
+# define LANG_EDO 0x66
+# endif
+# ifndef LANG_ESTONIAN
+# define LANG_ESTONIAN 0x25
+# endif
+# ifndef LANG_FAEROESE
+# define LANG_FAEROESE 0x38
+# endif
+# ifndef LANG_FARSI
+# define LANG_FARSI 0x29
+# endif
+# ifndef LANG_FRISIAN
+# define LANG_FRISIAN 0x62
+# endif
+# ifndef LANG_FULFULDE
+# define LANG_FULFULDE 0x67
+# endif
+# ifndef LANG_GAELIC
+# define LANG_GAELIC 0x3c
+# endif
+# ifndef LANG_GALICIAN
+# define LANG_GALICIAN 0x56
+# endif
+# ifndef LANG_GEORGIAN
+# define LANG_GEORGIAN 0x37
+# endif
+# ifndef LANG_GUARANI
+# define LANG_GUARANI 0x74
+# endif
+# ifndef LANG_GUJARATI
+# define LANG_GUJARATI 0x47
+# endif
+# ifndef LANG_HAUSA
+# define LANG_HAUSA 0x68
+# endif
+# ifndef LANG_HAWAIIAN
+# define LANG_HAWAIIAN 0x75
+# endif
+# ifndef LANG_HEBREW
+# define LANG_HEBREW 0x0d
+# endif
+# ifndef LANG_HINDI
+# define LANG_HINDI 0x39
+# endif
+# ifndef LANG_IBIBIO
+# define LANG_IBIBIO 0x69
+# endif
+# ifndef LANG_IGBO
+# define LANG_IGBO 0x70
+# endif
+# ifndef LANG_INDONESIAN
+# define LANG_INDONESIAN 0x21
+# endif
+# ifndef LANG_INUKTITUT
+# define LANG_INUKTITUT 0x5d
+# endif
+# ifndef LANG_KANNADA
+# define LANG_KANNADA 0x4b
+# endif
+# ifndef LANG_KANURI
+# define LANG_KANURI 0x71
+# endif
+# ifndef LANG_KASHMIRI
+# define LANG_KASHMIRI 0x60
+# endif
+# ifndef LANG_KAZAK
+# define LANG_KAZAK 0x3f
+# endif
+# ifndef LANG_KONKANI
+# define LANG_KONKANI 0x57
+# endif
+# ifndef LANG_KYRGYZ
+# define LANG_KYRGYZ 0x40
+# endif
+# ifndef LANG_LAO
+# define LANG_LAO 0x54
+# endif
+# ifndef LANG_LATIN
+# define LANG_LATIN 0x76
+# endif
+# ifndef LANG_LATVIAN
+# define LANG_LATVIAN 0x26
+# endif
+# ifndef LANG_LITHUANIAN
+# define LANG_LITHUANIAN 0x27
+# endif
+# ifndef LANG_MACEDONIAN
+# define LANG_MACEDONIAN 0x2f
+# endif
+# ifndef LANG_MALAY
+# define LANG_MALAY 0x3e
+# endif
+# ifndef LANG_MALAYALAM
+# define LANG_MALAYALAM 0x4c
+# endif
+# ifndef LANG_MALTESE
+# define LANG_MALTESE 0x3a
+# endif
+# ifndef LANG_MANIPURI
+# define LANG_MANIPURI 0x58
+# endif
+# ifndef LANG_MARATHI
+# define LANG_MARATHI 0x4e
+# endif
+# ifndef LANG_MONGOLIAN
+# define LANG_MONGOLIAN 0x50
+# endif
+# ifndef LANG_NEPALI
+# define LANG_NEPALI 0x61
+# endif
+# ifndef LANG_ORIYA
+# define LANG_ORIYA 0x48
+# endif
+# ifndef LANG_OROMO
+# define LANG_OROMO 0x72
+# endif
+# ifndef LANG_PAPIAMENTU
+# define LANG_PAPIAMENTU 0x79
+# endif
+# ifndef LANG_PASHTO
+# define LANG_PASHTO 0x63
+# endif
+# ifndef LANG_PUNJABI
+# define LANG_PUNJABI 0x46
+# endif
+# ifndef LANG_RHAETO_ROMANCE
+# define LANG_RHAETO_ROMANCE 0x17
+# endif
+# ifndef LANG_SAAMI
+# define LANG_SAAMI 0x3b
+# endif
+# ifndef LANG_SANSKRIT
+# define LANG_SANSKRIT 0x4f
+# endif
+# ifndef LANG_SERBIAN
+# define LANG_SERBIAN 0x1a
+# endif
+# ifndef LANG_SINDHI
+# define LANG_SINDHI 0x59
+# endif
+# ifndef LANG_SINHALESE
+# define LANG_SINHALESE 0x5b
+# endif
+# ifndef LANG_SLOVAK
+# define LANG_SLOVAK 0x1b
+# endif
+# ifndef LANG_SOMALI
+# define LANG_SOMALI 0x77
+# endif
+# ifndef LANG_SORBIAN
+# define LANG_SORBIAN 0x2e
+# endif
+# ifndef LANG_SUTU
+# define LANG_SUTU 0x30
+# endif
+# ifndef LANG_SWAHILI
+# define LANG_SWAHILI 0x41
+# endif
+# ifndef LANG_SYRIAC
+# define LANG_SYRIAC 0x5a
+# endif
+# ifndef LANG_TAGALOG
+# define LANG_TAGALOG 0x64
+# endif
+# ifndef LANG_TAJIK
+# define LANG_TAJIK 0x28
+# endif
+# ifndef LANG_TAMAZIGHT
+# define LANG_TAMAZIGHT 0x5f
+# endif
+# ifndef LANG_TAMIL
+# define LANG_TAMIL 0x49
+# endif
+# ifndef LANG_TATAR
+# define LANG_TATAR 0x44
+# endif
+# ifndef LANG_TELUGU
+# define LANG_TELUGU 0x4a
+# endif
+# ifndef LANG_THAI
+# define LANG_THAI 0x1e
+# endif
+# ifndef LANG_TIBETAN
+# define LANG_TIBETAN 0x51
+# endif
+# ifndef LANG_TIGRINYA
+# define LANG_TIGRINYA 0x73
+# endif
+# ifndef LANG_TSONGA
+# define LANG_TSONGA 0x31
+# endif
+# ifndef LANG_TSWANA
+# define LANG_TSWANA 0x32
+# endif
+# ifndef LANG_TURKMEN
+# define LANG_TURKMEN 0x42
+# endif
+# ifndef LANG_UKRAINIAN
+# define LANG_UKRAINIAN 0x22
+# endif
+# ifndef LANG_URDU
+# define LANG_URDU 0x20
+# endif
+# ifndef LANG_UZBEK
+# define LANG_UZBEK 0x43
+# endif
+# ifndef LANG_VENDA
+# define LANG_VENDA 0x33
+# endif
+# ifndef LANG_VIETNAMESE
+# define LANG_VIETNAMESE 0x2a
+# endif
+# ifndef LANG_WELSH
+# define LANG_WELSH 0x52
+# endif
+# ifndef LANG_XHOSA
+# define LANG_XHOSA 0x34
+# endif
+# ifndef LANG_YI
+# define LANG_YI 0x78
+# endif
+# ifndef LANG_YIDDISH
+# define LANG_YIDDISH 0x3d
+# endif
+# ifndef LANG_YORUBA
+# define LANG_YORUBA 0x6a
+# endif
+# ifndef LANG_ZULU
+# define LANG_ZULU 0x35
+# endif
+# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
+# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
+# endif
+# ifndef SUBLANG_ARABIC_IRAQ
+# define SUBLANG_ARABIC_IRAQ 0x02
+# endif
+# ifndef SUBLANG_ARABIC_EGYPT
+# define SUBLANG_ARABIC_EGYPT 0x03
+# endif
+# ifndef SUBLANG_ARABIC_LIBYA
+# define SUBLANG_ARABIC_LIBYA 0x04
+# endif
+# ifndef SUBLANG_ARABIC_ALGERIA
+# define SUBLANG_ARABIC_ALGERIA 0x05
+# endif
+# ifndef SUBLANG_ARABIC_MOROCCO
+# define SUBLANG_ARABIC_MOROCCO 0x06
+# endif
+# ifndef SUBLANG_ARABIC_TUNISIA
+# define SUBLANG_ARABIC_TUNISIA 0x07
+# endif
+# ifndef SUBLANG_ARABIC_OMAN
+# define SUBLANG_ARABIC_OMAN 0x08
+# endif
+# ifndef SUBLANG_ARABIC_YEMEN
+# define SUBLANG_ARABIC_YEMEN 0x09
+# endif
+# ifndef SUBLANG_ARABIC_SYRIA
+# define SUBLANG_ARABIC_SYRIA 0x0a
+# endif
+# ifndef SUBLANG_ARABIC_JORDAN
+# define SUBLANG_ARABIC_JORDAN 0x0b
+# endif
+# ifndef SUBLANG_ARABIC_LEBANON
+# define SUBLANG_ARABIC_LEBANON 0x0c
+# endif
+# ifndef SUBLANG_ARABIC_KUWAIT
+# define SUBLANG_ARABIC_KUWAIT 0x0d
+# endif
+# ifndef SUBLANG_ARABIC_UAE
+# define SUBLANG_ARABIC_UAE 0x0e
+# endif
+# ifndef SUBLANG_ARABIC_BAHRAIN
+# define SUBLANG_ARABIC_BAHRAIN 0x0f
+# endif
+# ifndef SUBLANG_ARABIC_QATAR
+# define SUBLANG_ARABIC_QATAR 0x10
+# endif
+# ifndef SUBLANG_AZERI_LATIN
+# define SUBLANG_AZERI_LATIN 0x01
+# endif
+# ifndef SUBLANG_AZERI_CYRILLIC
+# define SUBLANG_AZERI_CYRILLIC 0x02
+# endif
+# ifndef SUBLANG_BENGALI_INDIA
+# define SUBLANG_BENGALI_INDIA 0x00
+# endif
+# ifndef SUBLANG_BENGALI_BANGLADESH
+# define SUBLANG_BENGALI_BANGLADESH 0x01
+# endif
+# ifndef SUBLANG_CHINESE_MACAU
+# define SUBLANG_CHINESE_MACAU 0x05
+# endif
+# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
+# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
+# endif
+# ifndef SUBLANG_ENGLISH_JAMAICA
+# define SUBLANG_ENGLISH_JAMAICA 0x08
+# endif
+# ifndef SUBLANG_ENGLISH_CARIBBEAN
+# define SUBLANG_ENGLISH_CARIBBEAN 0x09
+# endif
+# ifndef SUBLANG_ENGLISH_BELIZE
+# define SUBLANG_ENGLISH_BELIZE 0x0a
+# endif
+# ifndef SUBLANG_ENGLISH_TRINIDAD
+# define SUBLANG_ENGLISH_TRINIDAD 0x0b
+# endif
+# ifndef SUBLANG_ENGLISH_ZIMBABWE
+# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
+# endif
+# ifndef SUBLANG_ENGLISH_PHILIPPINES
+# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
+# endif
+# ifndef SUBLANG_ENGLISH_INDONESIA
+# define SUBLANG_ENGLISH_INDONESIA 0x0e
+# endif
+# ifndef SUBLANG_ENGLISH_HONGKONG
+# define SUBLANG_ENGLISH_HONGKONG 0x0f
+# endif
+# ifndef SUBLANG_ENGLISH_INDIA
+# define SUBLANG_ENGLISH_INDIA 0x10
+# endif
+# ifndef SUBLANG_ENGLISH_MALAYSIA
+# define SUBLANG_ENGLISH_MALAYSIA 0x11
+# endif
+# ifndef SUBLANG_ENGLISH_SINGAPORE
+# define SUBLANG_ENGLISH_SINGAPORE 0x12
+# endif
+# ifndef SUBLANG_FRENCH_LUXEMBOURG
+# define SUBLANG_FRENCH_LUXEMBOURG 0x05
+# endif
+# ifndef SUBLANG_FRENCH_MONACO
+# define SUBLANG_FRENCH_MONACO 0x06
+# endif
+# ifndef SUBLANG_FRENCH_WESTINDIES
+# define SUBLANG_FRENCH_WESTINDIES 0x07
+# endif
+# ifndef SUBLANG_FRENCH_REUNION
+# define SUBLANG_FRENCH_REUNION 0x08
+# endif
+# ifndef SUBLANG_FRENCH_CONGO
+# define SUBLANG_FRENCH_CONGO 0x09
+# endif
+# ifndef SUBLANG_FRENCH_SENEGAL
+# define SUBLANG_FRENCH_SENEGAL 0x0a
+# endif
+# ifndef SUBLANG_FRENCH_CAMEROON
+# define SUBLANG_FRENCH_CAMEROON 0x0b
+# endif
+# ifndef SUBLANG_FRENCH_COTEDIVOIRE
+# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
+# endif
+# ifndef SUBLANG_FRENCH_MALI
+# define SUBLANG_FRENCH_MALI 0x0d
+# endif
+# ifndef SUBLANG_FRENCH_MOROCCO
+# define SUBLANG_FRENCH_MOROCCO 0x0e
+# endif
+# ifndef SUBLANG_FRENCH_HAITI
+# define SUBLANG_FRENCH_HAITI 0x0f
+# endif
+# ifndef SUBLANG_GERMAN_LUXEMBOURG
+# define SUBLANG_GERMAN_LUXEMBOURG 0x04
+# endif
+# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
+# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
+# endif
+# ifndef SUBLANG_KASHMIRI_INDIA
+# define SUBLANG_KASHMIRI_INDIA 0x02
+# endif
+# ifndef SUBLANG_MALAY_MALAYSIA
+# define SUBLANG_MALAY_MALAYSIA 0x01
+# endif
+# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
+# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
+# endif
+# ifndef SUBLANG_NEPALI_INDIA
+# define SUBLANG_NEPALI_INDIA 0x02
+# endif
+# ifndef SUBLANG_PUNJABI_INDIA
+# define SUBLANG_PUNJABI_INDIA 0x00
+# endif
+# ifndef SUBLANG_PUNJABI_PAKISTAN
+# define SUBLANG_PUNJABI_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_ROMANIAN_ROMANIA
+# define SUBLANG_ROMANIAN_ROMANIA 0x00
+# endif
+# ifndef SUBLANG_ROMANIAN_MOLDOVA
+# define SUBLANG_ROMANIAN_MOLDOVA 0x01
+# endif
+# ifndef SUBLANG_SERBIAN_LATIN
+# define SUBLANG_SERBIAN_LATIN 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_CYRILLIC
+# define SUBLANG_SERBIAN_CYRILLIC 0x03
+# endif
+# ifndef SUBLANG_SINDHI_INDIA
+# define SUBLANG_SINDHI_INDIA 0x00
+# endif
+# ifndef SUBLANG_SINDHI_PAKISTAN
+# define SUBLANG_SINDHI_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_SPANISH_GUATEMALA
+# define SUBLANG_SPANISH_GUATEMALA 0x04
+# endif
+# ifndef SUBLANG_SPANISH_COSTA_RICA
+# define SUBLANG_SPANISH_COSTA_RICA 0x05
+# endif
+# ifndef SUBLANG_SPANISH_PANAMA
+# define SUBLANG_SPANISH_PANAMA 0x06
+# endif
+# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
+# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+# endif
+# ifndef SUBLANG_SPANISH_VENEZUELA
+# define SUBLANG_SPANISH_VENEZUELA 0x08
+# endif
+# ifndef SUBLANG_SPANISH_COLOMBIA
+# define SUBLANG_SPANISH_COLOMBIA 0x09
+# endif
+# ifndef SUBLANG_SPANISH_PERU
+# define SUBLANG_SPANISH_PERU 0x0a
+# endif
+# ifndef SUBLANG_SPANISH_ARGENTINA
+# define SUBLANG_SPANISH_ARGENTINA 0x0b
+# endif
+# ifndef SUBLANG_SPANISH_ECUADOR
+# define SUBLANG_SPANISH_ECUADOR 0x0c
+# endif
+# ifndef SUBLANG_SPANISH_CHILE
+# define SUBLANG_SPANISH_CHILE 0x0d
+# endif
+# ifndef SUBLANG_SPANISH_URUGUAY
+# define SUBLANG_SPANISH_URUGUAY 0x0e
+# endif
+# ifndef SUBLANG_SPANISH_PARAGUAY
+# define SUBLANG_SPANISH_PARAGUAY 0x0f
+# endif
+# ifndef SUBLANG_SPANISH_BOLIVIA
+# define SUBLANG_SPANISH_BOLIVIA 0x10
+# endif
+# ifndef SUBLANG_SPANISH_EL_SALVADOR
+# define SUBLANG_SPANISH_EL_SALVADOR 0x11
+# endif
+# ifndef SUBLANG_SPANISH_HONDURAS
+# define SUBLANG_SPANISH_HONDURAS 0x12
+# endif
+# ifndef SUBLANG_SPANISH_NICARAGUA
+# define SUBLANG_SPANISH_NICARAGUA 0x13
+# endif
+# ifndef SUBLANG_SPANISH_PUERTO_RICO
+# define SUBLANG_SPANISH_PUERTO_RICO 0x14
+# endif
+# ifndef SUBLANG_SWEDISH_FINLAND
+# define SUBLANG_SWEDISH_FINLAND 0x02
+# endif
+# ifndef SUBLANG_TAMAZIGHT_ARABIC
+# define SUBLANG_TAMAZIGHT_ARABIC 0x01
+# endif
+# ifndef SUBLANG_TAMAZIGHT_LATIN
+# define SUBLANG_TAMAZIGHT_LATIN 0x02
+# endif
+# ifndef SUBLANG_TIGRINYA_ETHIOPIA
+# define SUBLANG_TIGRINYA_ETHIOPIA 0x00
+# endif
+# ifndef SUBLANG_TIGRINYA_ERITREA
+# define SUBLANG_TIGRINYA_ERITREA 0x01
+# endif
+# ifndef SUBLANG_URDU_PAKISTAN
+# define SUBLANG_URDU_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_URDU_INDIA
+# define SUBLANG_URDU_INDIA 0x02
+# endif
+# ifndef SUBLANG_UZBEK_LATIN
+# define SUBLANG_UZBEK_LATIN 0x01
+# endif
+# ifndef SUBLANG_UZBEK_CYRILLIC
+# define SUBLANG_UZBEK_CYRILLIC 0x02
+# endif
+#endif
+
+# if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
+/* MacOS X 10.2 or newer */
+
+/* Canonicalize a MacOS X locale name to a Unix locale name.
+ NAME is a sufficiently large buffer.
+ On input, it contains the MacOS X locale name.
+ On output, it contains the Unix locale name. */
+void
+_nl_locale_name_canonicalize (char *name)
+{
+ /* This conversion is based on a posting by
+ Deborah GoldSmith <goldsmit@apple.com> on 2005-03-08,
+ http://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */
+
+ /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and
+ ISO 3166) names. Prior to MacOS X 10.3, there is no API for doing this.
+ Therefore we do it ourselves, using a table based on the results of the
+ MacOS X 10.3.8 function
+ CFLocaleCreateCanonicalLocaleIdentifierFromString(). */
+ typedef struct { const char legacy[21+1]; const char unixy[5+1]; }
+ legacy_entry;
+ static const legacy_entry legacy_table[] = {
+ { "Afrikaans", "af" },
+ { "Albanian", "sq" },
+ { "Amharic", "am" },
+ { "Arabic", "ar" },
+ { "Armenian", "hy" },
+ { "Assamese", "as" },
+ { "Aymara", "ay" },
+ { "Azerbaijani", "az" },
+ { "Basque", "eu" },
+ { "Belarusian", "be" },
+ { "Belorussian", "be" },
+ { "Bengali", "bn" },
+ { "Brazilian Portugese", "pt_BR" },
+ { "Brazilian Portuguese", "pt_BR" },
+ { "Breton", "br" },
+ { "Bulgarian", "bg" },
+ { "Burmese", "my" },
+ { "Byelorussian", "be" },
+ { "Catalan", "ca" },
+ { "Chewa", "ny" },
+ { "Chichewa", "ny" },
+ { "Chinese", "zh" },
+ { "Chinese, Simplified", "zh_CN" },
+ { "Chinese, Traditional", "zh_TW" },
+ { "Chinese, Tradtional", "zh_TW" },
+ { "Croatian", "hr" },
+ { "Czech", "cs" },
+ { "Danish", "da" },
+ { "Dutch", "nl" },
+ { "Dzongkha", "dz" },
+ { "English", "en" },
+ { "Esperanto", "eo" },
+ { "Estonian", "et" },
+ { "Faroese", "fo" },
+ { "Farsi", "fa" },
+ { "Finnish", "fi" },
+ { "Flemish", "nl_BE" },
+ { "French", "fr" },
+ { "Galician", "gl" },
+ { "Gallegan", "gl" },
+ { "Georgian", "ka" },
+ { "German", "de" },
+ { "Greek", "el" },
+ { "Greenlandic", "kl" },
+ { "Guarani", "gn" },
+ { "Gujarati", "gu" },
+ { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */
+ { "Hebrew", "he" },
+ { "Hindi", "hi" },
+ { "Hungarian", "hu" },
+ { "Icelandic", "is" },
+ { "Indonesian", "id" },
+ { "Inuktitut", "iu" },
+ { "Irish", "ga" },
+ { "Italian", "it" },
+ { "Japanese", "ja" },
+ { "Javanese", "jv" },
+ { "Kalaallisut", "kl" },
+ { "Kannada", "kn" },
+ { "Kashmiri", "ks" },
+ { "Kazakh", "kk" },
+ { "Khmer", "km" },
+ { "Kinyarwanda", "rw" },
+ { "Kirghiz", "ky" },
+ { "Korean", "ko" },
+ { "Kurdish", "ku" },
+ { "Latin", "la" },
+ { "Latvian", "lv" },
+ { "Lithuanian", "lt" },
+ { "Macedonian", "mk" },
+ { "Malagasy", "mg" },
+ { "Malay", "ms" },
+ { "Malayalam", "ml" },
+ { "Maltese", "mt" },
+ { "Manx", "gv" },
+ { "Marathi", "mr" },
+ { "Moldavian", "mo" },
+ { "Mongolian", "mn" },
+ { "Nepali", "ne" },
+ { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */
+ { "Nyanja", "ny" },
+ { "Nynorsk", "nn" },
+ { "Oriya", "or" },
+ { "Oromo", "om" },
+ { "Panjabi", "pa" },
+ { "Pashto", "ps" },
+ { "Persian", "fa" },
+ { "Polish", "pl" },
+ { "Portuguese", "pt" },
+ { "Portuguese, Brazilian", "pt_BR" },
+ { "Punjabi", "pa" },
+ { "Pushto", "ps" },
+ { "Quechua", "qu" },
+ { "Romanian", "ro" },
+ { "Ruanda", "rw" },
+ { "Rundi", "rn" },
+ { "Russian", "ru" },
+ { "Sami", "se_NO" }, /* Not just "se". */
+ { "Sanskrit", "sa" },
+ { "Scottish", "gd" },
+ { "Serbian", "sr" },
+ { "Simplified Chinese", "zh_CN" },
+ { "Sindhi", "sd" },
+ { "Sinhalese", "si" },
+ { "Slovak", "sk" },
+ { "Slovenian", "sl" },
+ { "Somali", "so" },
+ { "Spanish", "es" },
+ { "Sundanese", "su" },
+ { "Swahili", "sw" },
+ { "Swedish", "sv" },
+ { "Tagalog", "tl" },
+ { "Tajik", "tg" },
+ { "Tajiki", "tg" },
+ { "Tamil", "ta" },
+ { "Tatar", "tt" },
+ { "Telugu", "te" },
+ { "Thai", "th" },
+ { "Tibetan", "bo" },
+ { "Tigrinya", "ti" },
+ { "Tongan", "to" },
+ { "Traditional Chinese", "zh_TW" },
+ { "Turkish", "tr" },
+ { "Turkmen", "tk" },
+ { "Uighur", "ug" },
+ { "Ukrainian", "uk" },
+ { "Urdu", "ur" },
+ { "Uzbek", "uz" },
+ { "Vietnamese", "vi" },
+ { "Welsh", "cy" },
+ { "Yiddish", "yi" }
+ };
+
+ /* Convert new-style locale names with language tags (ISO 639 and ISO 15924)
+ to Unix (ISO 639 and ISO 3166) names. */
+ typedef struct { const char langtag[7+1]; const char unixy[12+1]; }
+ langtag_entry;
+ static const langtag_entry langtag_table[] = {
+ /* MacOS X has "az-Arab", "az-Cyrl", "az-Latn".
+ The default script for az on Unix is Latin. */
+ { "az-Latn", "az" },
+ /* MacOS X has "ga-dots". Does not yet exist on Unix. */
+ { "ga-dots", "ga" },
+ /* MacOS X has "kk-Cyrl". Does not yet exist on Unix. */
+ /* MacOS X has "mn-Cyrl", "mn-Mong".
+ The default script for mn on Unix is Cyrillic. */
+ { "mn-Cyrl", "mn" },
+ /* MacOS X has "ms-Arab", "ms-Latn".
+ The default script for ms on Unix is Latin. */
+ { "ms-Latn", "ms" },
+ /* MacOS X has "tg-Cyrl".
+ The default script for tg on Unix is Cyrillic. */
+ { "tg-Cyrl", "tg" },
+ /* MacOS X has "tk-Cyrl". Does not yet exist on Unix. */
+ /* MacOS X has "tt-Cyrl".
+ The default script for tt on Unix is Cyrillic. */
+ { "tt-Cyrl", "tt" },
+ /* MacOS X has "zh-Hans", "zh-Hant".
+ Country codes are used to distinguish these on Unix. */
+ { "zh-Hans", "zh_CN" },
+ { "zh-Hant", "zh_TW" }
+ };
+
+ /* Convert script names (ISO 15924) to Unix conventions.
+ See http://www.unicode.org/iso15924/iso15924-codes.html */
+ typedef struct { const char script[4+1]; const char unixy[9+1]; }
+ script_entry;
+ static const script_entry script_table[] = {
+ { "Arab", "arabic" },
+ { "Cyrl", "cyrillic" },
+ { "Mong", "mongolian" }
+ };
+
+ /* Step 1: Convert using legacy_table. */
+ if (name[0] >= 'A' && name[0] <= 'Z')
+ {
+ unsigned int i1, i2;
+ i1 = 0;
+ i2 = sizeof (legacy_table) / sizeof (legacy_entry);
+ while (i2 - i1 > 1)
+ {
+ /* At this point we know that if name occurs in legacy_table,
+ its index must be >= i1 and < i2. */
+ unsigned int i = (i1 + i2) >> 1;
+ const legacy_entry *p = &legacy_table[i];
+ if (strcmp (name, p->legacy) < 0)
+ i2 = i;
+ else
+ i1 = i;
+ }
+ if (strcmp (name, legacy_table[i1].legacy) == 0)
+ {
+ strcpy (name, legacy_table[i1].unixy);
+ return;
+ }
+ }
+
+ /* Step 2: Convert using langtag_table and script_table. */
+ if (strlen (name) == 7 && name[2] == '-')
+ {
+ unsigned int i1, i2;
+ i1 = 0;
+ i2 = sizeof (langtag_table) / sizeof (langtag_entry);
+ while (i2 - i1 > 1)
+ {
+ /* At this point we know that if name occurs in langtag_table,
+ its index must be >= i1 and < i2. */
+ unsigned int i = (i1 + i2) >> 1;
+ const langtag_entry *p = &langtag_table[i];
+ if (strcmp (name, p->langtag) < 0)
+ i2 = i;
+ else
+ i1 = i;
+ }
+ if (strcmp (name, langtag_table[i1].langtag) == 0)
+ {
+ strcpy (name, langtag_table[i1].unixy);
+ return;
+ }
+
+ i1 = 0;
+ i2 = sizeof (script_table) / sizeof (script_entry);
+ while (i2 - i1 > 1)
+ {
+ /* At this point we know that if (name + 3) occurs in script_table,
+ its index must be >= i1 and < i2. */
+ unsigned int i = (i1 + i2) >> 1;
+ const script_entry *p = &script_table[i];
+ if (strcmp (name + 3, p->script) < 0)
+ i2 = i;
+ else
+ i1 = i;
+ }
+ if (strcmp (name + 3, script_table[i1].script) == 0)
+ {
+ name[2] = '@';
+ strcpy (name + 3, script_table[i1].unixy);
+ return;
+ }
+ }
+
+ /* Step 3: Convert new-style dash to Unix underscore. */
+ {
+ char *p;
+ for (p = name; *p != '\0'; p++)
+ if (*p == '-')
+ *p = '_';
+ }
+}
+
+#endif
+
+/* XPG3 defines the result of 'setlocale (category, NULL)' as:
+ "Directs 'setlocale()' to query 'category' and return the current
+ setting of 'local'."
+ However it does not specify the exact format. Neither do SUSV2 and
+ ISO C 99. So we can use this feature only on selected systems (e.g.
+ those using GNU C Library). */
+#if defined _LIBC || (defined __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_posix (int category, const char *categoryname)
+{
+ /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
+ On some systems this can be done by the 'setlocale' function itself. */
+#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+ return setlocale (category, NULL);
+#else
+ const char *retval;
+
+ /* Setting of LC_ALL overrides all other. */
+ retval = getenv ("LC_ALL");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ /* Next comes the name of the desired category. */
+ retval = getenv (categoryname);
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ /* Last possibility is the LANG environment variable. */
+ retval = getenv ("LANG");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+
+ return NULL;
+#endif
+}
+
+const char *
+_nl_locale_name_default (void)
+{
+ /* POSIX:2001 says:
+ "All implementations shall define a locale as the default locale, to be
+ invoked when no environment variables are set, or set to the empty
+ string. This default locale can be the POSIX locale or any other
+ implementation-defined locale. Some implementations may provide
+ facilities for local installation administrators to set the default
+ locale, customizing it for each location. POSIX:2001 does not require
+ such a facility. */
+
+#if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined(WIN32))
+
+ /* The system does not have a way of setting the locale, other than the
+ POSIX specified environment variables. We use C as default locale. */
+ return "C";
+
+#else
+
+ /* Return an XPG style locale name language[_territory][@modifier].
+ Don't even bother determining the codeset; it's not useful in this
+ context, because message catalogs are not specific to a single
+ codeset. */
+
+# if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
+ /* MacOS X 10.2 or newer */
+ {
+ /* Cache the locale name, since CoreFoundation calls are expensive. */
+ static const char *cached_localename;
+
+ if (cached_localename == NULL)
+ {
+ char namebuf[256];
+# if HAVE_CFLOCALECOPYCURRENT /* MacOS X 10.3 or newer */
+ CFLocaleRef locale = CFLocaleCopyCurrent ();
+ CFStringRef name = CFLocaleGetIdentifier (locale);
+
+ if (CFStringGetCString (name, namebuf, sizeof(namebuf),
+ kCFStringEncodingASCII))
+ {
+ _nl_locale_name_canonicalize (namebuf);
+ cached_localename = strdup (namebuf);
+ }
+ CFRelease (locale);
+# elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */
+ CFTypeRef value =
+ CFPreferencesCopyAppValue (CFSTR ("AppleLocale"),
+ kCFPreferencesCurrentApplication);
+ if (value != NULL
+ && CFGetTypeID (value) == CFStringGetTypeID ()
+ && CFStringGetCString ((CFStringRef)value, namebuf, sizeof(namebuf),
+ kCFStringEncodingASCII))
+ {
+ _nl_locale_name_canonicalize (namebuf);
+ cached_localename = strdup (namebuf);
+ }
+# endif
+ if (cached_localename == NULL)
+ cached_localename = "C";
+ }
+ return cached_localename;
+ }
+
+# endif
+
+# if defined(WIN32) /* WIN32 */
+ {
+ LCID lcid;
+ LANGID langid;
+ int primary, sub;
+
+ /* Use native Win32 API locale ID. */
+ lcid = GetThreadLocale ();
+
+ /* Strip off the sorting rules, keep only the language part. */
+ langid = LANGIDFROMLCID (lcid);
+
+ /* Split into language and territory part. */
+ primary = PRIMARYLANGID (langid);
+ sub = SUBLANGID (langid);
+
+ /* Dispatch on language.
+ See also http://www.unicode.org/unicode/onlinedat/languages.html .
+ For details about languages, see http://www.ethnologue.com/ . */
+ switch (primary)
+ {
+ case LANG_AFRIKAANS: return "af_ZA";
+ case LANG_ALBANIAN: return "sq_AL";
+ case LANG_AMHARIC: return "am_ET";
+ case LANG_ARABIC:
+ switch (sub)
+ {
+ case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
+ case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
+ case SUBLANG_ARABIC_EGYPT: return "ar_EG";
+ case SUBLANG_ARABIC_LIBYA: return "ar_LY";
+ case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
+ case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
+ case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
+ case SUBLANG_ARABIC_OMAN: return "ar_OM";
+ case SUBLANG_ARABIC_YEMEN: return "ar_YE";
+ case SUBLANG_ARABIC_SYRIA: return "ar_SY";
+ case SUBLANG_ARABIC_JORDAN: return "ar_JO";
+ case SUBLANG_ARABIC_LEBANON: return "ar_LB";
+ case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
+ case SUBLANG_ARABIC_UAE: return "ar_AE";
+ case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
+ case SUBLANG_ARABIC_QATAR: return "ar_QA";
+ }
+ return "ar";
+ case LANG_ARMENIAN: return "hy_AM";
+ case LANG_ASSAMESE: return "as_IN";
+ case LANG_AZERI:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
+ case SUBLANG_AZERI_LATIN: return "az_AZ@latin";
+ case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
+ }
+ return "az";
+ case LANG_BASQUE:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "eu_ES";
+ }
+ return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
+ case LANG_BELARUSIAN: return "be_BY";
+ case LANG_BENGALI:
+ switch (sub)
+ {
+ case SUBLANG_BENGALI_INDIA: return "bn_IN";
+ case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
+ }
+ return "bn";
+ case LANG_BULGARIAN: return "bg_BG";
+ case LANG_BURMESE: return "my_MM";
+ case LANG_CAMBODIAN: return "km_KH";
+ case LANG_CATALAN: return "ca_ES";
+ case LANG_CHEROKEE: return "chr_US";
+ case LANG_CHINESE:
+ switch (sub)
+ {
+ case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
+ case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
+ case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
+ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
+ case SUBLANG_CHINESE_MACAU: return "zh_MO";
+ }
+ return "zh";
+ case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
+ * What used to be called Serbo-Croatian
+ * should really now be two separate
+ * languages because of political reasons.
+ * (Says tml, who knows nothing about Serbian
+ * or Croatian.)
+ * (I can feel those flames coming already.)
+ */
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "hr_HR";
+ case SUBLANG_SERBIAN_LATIN: return "sr_CS";
+ case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic";
+ }
+ return "hr";
+ case LANG_CZECH: return "cs_CZ";
+ case LANG_DANISH: return "da_DK";
+ case LANG_DIVEHI: return "dv_MV";
+ case LANG_DUTCH:
+ switch (sub)
+ {
+ case SUBLANG_DUTCH: return "nl_NL";
+ case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
+ }
+ return "nl";
+ case LANG_EDO: return "bin_NG";
+ case LANG_ENGLISH:
+ switch (sub)
+ {
+ /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
+ * English was the language spoken in England.
+ * Oh well.
+ */
+ case SUBLANG_ENGLISH_US: return "en_US";
+ case SUBLANG_ENGLISH_UK: return "en_GB";
+ case SUBLANG_ENGLISH_AUS: return "en_AU";
+ case SUBLANG_ENGLISH_CAN: return "en_CA";
+ case SUBLANG_ENGLISH_NZ: return "en_NZ";
+ case SUBLANG_ENGLISH_EIRE: return "en_IE";
+ case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
+ case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
+ case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
+ case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
+ case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
+ case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
+ case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
+ case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
+ case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
+ case SUBLANG_ENGLISH_INDIA: return "en_IN";
+ case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
+ case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
+ }
+ return "en";
+ case LANG_ESTONIAN: return "et_EE";
+ case LANG_FAEROESE: return "fo_FO";
+ case LANG_FARSI: return "fa_IR";
+ case LANG_FINNISH: return "fi_FI";
+ case LANG_FRENCH:
+ switch (sub)
+ {
+ case SUBLANG_FRENCH: return "fr_FR";
+ case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
+ case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
+ case SUBLANG_FRENCH_SWISS: return "fr_CH";
+ case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
+ case SUBLANG_FRENCH_MONACO: return "fr_MC";
+ case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
+ case SUBLANG_FRENCH_REUNION: return "fr_RE";
+ case SUBLANG_FRENCH_CONGO: return "fr_CG";
+ case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
+ case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
+ case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
+ case SUBLANG_FRENCH_MALI: return "fr_ML";
+ case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
+ case SUBLANG_FRENCH_HAITI: return "fr_HT";
+ }
+ return "fr";
+ case LANG_FRISIAN: return "fy_NL";
+ case LANG_FULFULDE:
+ /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */
+ return "ff_NG";
+ case LANG_GAELIC:
+ switch (sub)
+ {
+ case 0x01: /* SCOTTISH */ return "gd_GB";
+ case 0x02: /* IRISH */ return "ga_IE";
+ }
+ return "C";
+ case LANG_GALICIAN: return "gl_ES";
+ case LANG_GEORGIAN: return "ka_GE";
+ case LANG_GERMAN:
+ switch (sub)
+ {
+ case SUBLANG_GERMAN: return "de_DE";
+ case SUBLANG_GERMAN_SWISS: return "de_CH";
+ case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
+ case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
+ case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
+ }
+ return "de";
+ case LANG_GREEK: return "el_GR";
+ case LANG_GUARANI: return "gn_PY";
+ case LANG_GUJARATI: return "gu_IN";
+ case LANG_HAUSA: return "ha_NG";
+ case LANG_HAWAIIAN:
+ /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
+ or Hawaii Creole English ("cpe_US", 600000 speakers)? */
+ return "cpe_US";
+ case LANG_HEBREW: return "he_IL";
+ case LANG_HINDI: return "hi_IN";
+ case LANG_HUNGARIAN: return "hu_HU";
+ case LANG_IBIBIO: return "nic_NG";
+ case LANG_ICELANDIC: return "is_IS";
+ case LANG_IGBO: return "ig_NG";
+ case LANG_INDONESIAN: return "id_ID";
+ case LANG_INUKTITUT: return "iu_CA";
+ case LANG_ITALIAN:
+ switch (sub)
+ {
+ case SUBLANG_ITALIAN: return "it_IT";
+ case SUBLANG_ITALIAN_SWISS: return "it_CH";
+ }
+ return "it";
+ case LANG_JAPANESE: return "ja_JP";
+ case LANG_KANNADA: return "kn_IN";
+ case LANG_KANURI: return "kr_NG";
+ case LANG_KASHMIRI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ks_PK";
+ case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
+ }
+ return "ks";
+ case LANG_KAZAK: return "kk_KZ";
+ case LANG_KONKANI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "kok_IN";
+ case LANG_KOREAN: return "ko_KR";
+ case LANG_KYRGYZ: return "ky_KG";
+ case LANG_LAO: return "lo_LA";
+ case LANG_LATIN: return "la_VA";
+ case LANG_LATVIAN: return "lv_LV";
+ case LANG_LITHUANIAN: return "lt_LT";
+ case LANG_MACEDONIAN: return "mk_MK";
+ case LANG_MALAY:
+ switch (sub)
+ {
+ case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
+ case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
+ }
+ return "ms";
+ case LANG_MALAYALAM: return "ml_IN";
+ case LANG_MALTESE: return "mt_MT";
+ case LANG_MANIPURI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "mni_IN";
+ case LANG_MARATHI: return "mr_IN";
+ case LANG_MONGOLIAN:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "mn_MN";
+ }
+ return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
+ case LANG_NEPALI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ne_NP";
+ case SUBLANG_NEPALI_INDIA: return "ne_IN";
+ }
+ return "ne";
+ case LANG_NORWEGIAN:
+ switch (sub)
+ {
+ case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO";
+ case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
+ }
+ return "no";
+ case LANG_ORIYA: return "or_IN";
+ case LANG_OROMO: return "om_ET";
+ case LANG_PAPIAMENTU: return "pap_AN";
+ case LANG_PASHTO:
+ return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
+ case LANG_POLISH: return "pl_PL";
+ case LANG_PORTUGUESE:
+ switch (sub)
+ {
+ case SUBLANG_PORTUGUESE: return "pt_PT";
+ /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
+ Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
+ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
+ }
+ return "pt";
+ case LANG_PUNJABI:
+ switch (sub)
+ {
+ case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
+ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
+ }
+ return "pa";
+ case LANG_RHAETO_ROMANCE: return "rm_CH";
+ case LANG_ROMANIAN:
+ switch (sub)
+ {
+ case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
+ case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
+ }
+ return "ro";
+ case LANG_RUSSIAN:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ru_RU";
+ }
+ return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */
+ case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
+ case LANG_SANSKRIT: return "sa_IN";
+ case LANG_SINDHI:
+ switch (sub)
+ {
+ case SUBLANG_SINDHI_INDIA: return "sd_IN";
+ case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
+ }
+ return "sd";
+ case LANG_SINHALESE: return "si_LK";
+ case LANG_SLOVAK: return "sk_SK";
+ case LANG_SLOVENIAN: return "sl_SI";
+ case LANG_SOMALI: return "so_SO";
+ case LANG_SORBIAN:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "wen_DE";
+ case LANG_SPANISH:
+ switch (sub)
+ {
+ case SUBLANG_SPANISH: return "es_ES";
+ case SUBLANG_SPANISH_MEXICAN: return "es_MX";
+ case SUBLANG_SPANISH_MODERN:
+ return "es_ES@modern"; /* not seen on Unix */
+ case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
+ case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
+ case SUBLANG_SPANISH_PANAMA: return "es_PA";
+ case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
+ case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
+ case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
+ case SUBLANG_SPANISH_PERU: return "es_PE";
+ case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
+ case SUBLANG_SPANISH_ECUADOR: return "es_EC";
+ case SUBLANG_SPANISH_CHILE: return "es_CL";
+ case SUBLANG_SPANISH_URUGUAY: return "es_UY";
+ case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
+ case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
+ case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
+ case SUBLANG_SPANISH_HONDURAS: return "es_HN";
+ case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
+ case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
+ }
+ return "es";
+ case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
+ case LANG_SWAHILI: return "sw_KE";
+ case LANG_SWEDISH:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "sv_SE";
+ case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
+ }
+ return "sv";
+ case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
+ case LANG_TAGALOG: return "tl_PH";
+ case LANG_TAJIK: return "tg_TJ";
+ case LANG_TAMAZIGHT:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Tamazight locales appear on Unix. */
+ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic";
+ case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA@latin";
+ }
+ return "ber_MA";
+ case LANG_TAMIL:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ta_IN";
+ }
+ return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
+ case LANG_TATAR: return "tt_RU";
+ case LANG_TELUGU: return "te_IN";
+ case LANG_THAI: return "th_TH";
+ case LANG_TIBETAN: return "bo_CN";
+ case LANG_TIGRINYA:
+ switch (sub)
+ {
+ case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
+ case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
+ }
+ return "ti";
+ case LANG_TSONGA: return "ts_ZA";
+ case LANG_TSWANA: return "tn_BW";
+ case LANG_TURKISH: return "tr_TR";
+ case LANG_TURKMEN: return "tk_TM";
+ case LANG_UKRAINIAN: return "uk_UA";
+ case LANG_URDU:
+ switch (sub)
+ {
+ case SUBLANG_URDU_PAKISTAN: return "ur_PK";
+ case SUBLANG_URDU_INDIA: return "ur_IN";
+ }
+ return "ur";
+ case LANG_UZBEK:
+ switch (sub)
+ {
+ case SUBLANG_UZBEK_LATIN: return "uz_UZ";
+ case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
+ }
+ return "uz";
+ case LANG_VENDA: return "ve_ZA";
+ case LANG_VIETNAMESE: return "vi_VN";
+ case LANG_WELSH: return "cy_GB";
+ case LANG_XHOSA: return "xh_ZA";
+ case LANG_YI: return "sit_CN";
+ case LANG_YIDDISH: return "yi_IL";
+ case LANG_YORUBA: return "yo_NG";
+ case LANG_ZULU: return "zu_ZA";
+ default: return "C";
+ }
+ }
+# endif
+#endif
+}
+
+const char *
+_nl_locale_name (int category, const char *categoryname)
+{
+ const char *retval;
+
+ retval = _nl_locale_name_posix (category, categoryname);
+ if (retval != NULL)
+ return retval;
+
+ return _nl_locale_name_default ();
+}
diff --git a/intl/log.c b/intl/log.c
new file mode 100644
index 0000000..89f82df
--- /dev/null
+++ b/intl/log.c
@@ -0,0 +1,98 @@
+/* Log file output.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Print an ASCII string with quotes and escape sequences where needed. */
+static void
+print_escaped (FILE *stream, const char *str)
+{
+ putc ('"', stream);
+ for (; *str != '\0'; str++)
+ if (*str == '\n')
+ {
+ fputs ("\\n\"", stream);
+ if (str[1] == '\0')
+ return;
+ fputs ("\n\"", stream);
+ }
+ else
+ {
+ if (*str == '"' || *str == '\\')
+ putc ('\\', stream);
+ putc (*str, stream);
+ }
+ putc ('"', stream);
+}
+
+/* Add to the log file an entry denoting a failed translation. */
+void
+_nl_log_untranslated (const char *logfilename, const char *domainname,
+ const char *msgid1, const char *msgid2, int plural)
+{
+ static char *last_logfilename = NULL;
+ static FILE *last_logfile = NULL;
+ FILE *logfile;
+
+ /* Can we reuse the last opened logfile? */
+ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
+ {
+ /* Close the last used logfile. */
+ if (last_logfilename != NULL)
+ {
+ if (last_logfile != NULL)
+ {
+ fclose (last_logfile);
+ last_logfile = NULL;
+ }
+ free (last_logfilename);
+ last_logfilename = NULL;
+ }
+ /* Open the logfile. */
+ last_logfilename = (char *) malloc (strlen (logfilename) + 1);
+ if (last_logfilename == NULL)
+ return;
+ strcpy (last_logfilename, logfilename);
+ last_logfile = fopen (logfilename, "a");
+ if (last_logfile == NULL)
+ return;
+ }
+ logfile = last_logfile;
+
+ fprintf (logfile, "domain ");
+ print_escaped (logfile, domainname);
+ fprintf (logfile, "\nmsgid ");
+ print_escaped (logfile, msgid1);
+ if (plural)
+ {
+ fprintf (logfile, "\nmsgid_plural ");
+ print_escaped (logfile, msgid2);
+ fprintf (logfile, "\nmsgstr[0] \"\"\n");
+ }
+ else
+ fprintf (logfile, "\nmsgstr \"\"\n");
+ putc ('\n', logfile);
+}
diff --git a/intl/ngettext.c b/intl/ngettext.c
new file mode 100644
index 0000000..a33529c
--- /dev/null
+++ b/intl/ngettext.c
@@ -0,0 +1,65 @@
+/* Implementation of ngettext(3) function.
+ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+#include <locale.h>
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define NGETTEXT __ngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define NGETTEXT libintl_ngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__ngettext, ngettext);
+#endif
diff --git a/intl/os2compat.c b/intl/os2compat.c
new file mode 100644
index 0000000..d041de2
--- /dev/null
+++ b/intl/os2compat.c
@@ -0,0 +1,98 @@
+/* OS/2 compatibility functions.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#define OS2_AWARE
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/param.h>
+
+/* A version of getenv() that works from DLLs */
+extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
+
+char *
+_nl_getenv (const char *name)
+{
+ unsigned char *value;
+ if (DosScanEnv (name, &value))
+ return NULL;
+ else
+ return value;
+}
+
+/* A fixed size buffer. */
+char libintl_nl_default_dirname[MAXPATHLEN+1];
+
+char *_nlos2_libdir = NULL;
+char *_nlos2_localealiaspath = NULL;
+char *_nlos2_localedir = NULL;
+
+static __attribute__((constructor)) void
+nlos2_initialize ()
+{
+ char *root = getenv ("UNIXROOT");
+ char *gnulocaledir = getenv ("GNULOCALEDIR");
+
+ _nlos2_libdir = gnulocaledir;
+ if (!_nlos2_libdir)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
+ memcpy (_nlos2_libdir, root, sl);
+ memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
+ }
+ else
+ _nlos2_libdir = LIBDIR;
+ }
+
+ _nlos2_localealiaspath = gnulocaledir;
+ if (!_nlos2_localealiaspath)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
+ memcpy (_nlos2_localealiaspath, root, sl);
+ memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
+ }
+ else
+ _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
+ }
+
+ _nlos2_localedir = gnulocaledir;
+ if (!_nlos2_localedir)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
+ memcpy (_nlos2_localedir, root, sl);
+ memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
+ }
+ else
+ _nlos2_localedir = LOCALEDIR;
+ }
+
+ if (strlen (_nlos2_localedir) <= MAXPATHLEN)
+ strcpy (libintl_nl_default_dirname, _nlos2_localedir);
+}
diff --git a/intl/os2compat.h b/intl/os2compat.h
new file mode 100644
index 0000000..a18d582
--- /dev/null
+++ b/intl/os2compat.h
@@ -0,0 +1,46 @@
+/* OS/2 compatibility defines.
+ This file is intended to be included from config.h
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* When included from os2compat.h we need all the original definitions */
+#ifndef OS2_AWARE
+
+#undef LIBDIR
+#define LIBDIR _nlos2_libdir
+extern char *_nlos2_libdir;
+
+#undef LOCALEDIR
+#define LOCALEDIR _nlos2_localedir
+extern char *_nlos2_localedir;
+
+#undef LOCALE_ALIAS_PATH
+#define LOCALE_ALIAS_PATH _nlos2_localealiaspath
+extern char *_nlos2_localealiaspath;
+
+#endif
+
+#undef HAVE_STRCASECMP
+#define HAVE_STRCASECMP 1
+#define strcasecmp stricmp
+#define strncasecmp strnicmp
+
+/* We have our own getenv() which works even if library is compiled as DLL */
+#define getenv _nl_getenv
+
+/* Older versions of gettext used -1 as the value of LC_MESSAGES */
+#define LC_MESSAGES_COMPAT (-1)
diff --git a/intl/osdep.c b/intl/osdep.c
new file mode 100644
index 0000000..d2d8575
--- /dev/null
+++ b/intl/osdep.c
@@ -0,0 +1,24 @@
+/* OS dependent parts of libintl.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#if defined __EMX__
+# include "os2compat.c"
+#else
+/* Avoid AIX compiler warning. */
+typedef int dummy;
+#endif
diff --git a/intl/plural-exp.c b/intl/plural-exp.c
new file mode 100644
index 0000000..1873be9
--- /dev/null
+++ b/intl/plural-exp.c
@@ -0,0 +1,154 @@
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "plural-exp.h"
+
+#if (defined __GNUC__ && !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 (const char *nullentry, struct expression **pluralp,
+ unsigned long int *npluralsp)
+{
+ if (nullentry != NULL)
+ {
+ const char *plural;
+ const char *nplurals;
+
+ plural = strstr (nullentry, "plural=");
+ nplurals = strstr (nullentry, "nplurals=");
+ if (plural == NULL || nplurals == NULL)
+ goto no_plural;
+ else
+ {
+ char *endp;
+ unsigned long int n;
+ struct parse_args args;
+
+ /* First get the number. */
+ nplurals += 9;
+ while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
+ ++nplurals;
+ if (!(*nplurals >= '0' && *nplurals <= '9'))
+ goto no_plural;
+#if defined HAVE_STRTOUL || defined _LIBC
+ n = strtoul (nplurals, &endp, 10);
+#else
+ for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
+ n = n * 10 + (*endp - '0');
+#endif
+ if (nplurals == endp)
+ goto no_plural;
+ *npluralsp = n;
+
+ /* Due to the restrictions bison imposes onto the interface of the
+ scanner function we have to put the input string and the result
+ passed up from the parser into the same structure which address
+ is passed down to the parser. */
+ plural += 7;
+ args.cp = plural;
+ if (PLURAL_PARSE (&args) != 0)
+ goto no_plural;
+ *pluralp = args.res;
+ }
+ }
+ else
+ {
+ /* By default we are using the Germanic form: singular form only
+ for `one', the plural form otherwise. Yes, this is also what
+ English is using since English is a Germanic language. */
+ no_plural:
+ INIT_GERMANIC_PLURAL ();
+ *pluralp = &GERMANIC_PLURAL;
+ *npluralsp = 2;
+ }
+}
diff --git a/intl/plural-exp.h b/intl/plural-exp.h
new file mode 100644
index 0000000..f540184
--- /dev/null
+++ b/intl/plural-exp.h
@@ -0,0 +1,118 @@
+/* Expression parsing and evaluation for plural form selection.
+ Copyright (C) 2000-2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _PLURAL_EXP_H
+#define _PLURAL_EXP_H
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+
+/* 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 (struct expression *exp)
+ internal_function;
+extern int PLURAL_PARSE (void *arg);
+extern struct expression GERMANIC_PLURAL attribute_hidden;
+extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
+ struct expression **pluralp,
+ unsigned long int *npluralsp)
+ internal_function;
+
+#if !defined (_LIBC) && !defined (IN_LIBINTL)
+extern unsigned long int plural_eval (struct expression *pexp,
+ unsigned long int n);
+#endif
+
+#endif /* _PLURAL_EXP_H */
diff --git a/intl/plural.c b/intl/plural.c
new file mode 100644
index 0000000..78a223d
--- /dev/null
+++ b/intl/plural.c
@@ -0,0 +1,1490 @@
+/* A Bison parser, made from plural.y
+ by GNU bison 1.35. */
+
+#define YYBISON 1 /* Identify Bison output. */
+
+#define yyparse __gettextparse
+#define yylex __gettextlex
+#define yyerror __gettexterror
+#define yylval __gettextlval
+#define yychar __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+# define EQUOP2 257
+# define CMPOP2 258
+# define ADDOP2 259
+# define MULOP2 260
+# define NUMBER 261
+
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+
+#line 49 "plural.y"
+#ifndef YYSTYPE
+typedef union {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+} yystype;
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+#line 55 "plural.y"
+
+/* Prototypes for local functions. */
+static int yylex (YYSTYPE *lval, const char **pexp);
+static void yyerror (const char *str);
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (int nargs, enum operator op, struct expression * const *args)
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (enum operator op)
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (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 (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 (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);
+}
+
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+
+
+#define YYFINAL 27
+#define YYFLAG -32768
+#define YYNTBASE 16
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
+
+/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+static const char yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 10, 2, 2, 2, 2, 5, 2,
+ 14, 15, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 12, 2,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 4, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 6, 7, 8,
+ 9, 11
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+ 0, 0, 2, 8, 12, 16, 20, 24, 28, 32,
+ 35, 37, 39
+};
+static const short yyrhs[] =
+{
+ 17, 0, 17, 3, 17, 12, 17, 0, 17, 4,
+ 17, 0, 17, 5, 17, 0, 17, 6, 17, 0,
+ 17, 7, 17, 0, 17, 8, 17, 0, 17, 9,
+ 17, 0, 10, 17, 0, 13, 0, 11, 0, 14,
+ 17, 15, 0
+};
+
+#endif
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+ 0, 150, 158, 162, 166, 170, 174, 178, 182, 186,
+ 190, 194, 199
+};
+#endif
+
+
+#if (YYDEBUG) || defined YYERROR_VERBOSE
+
+/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+ "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
+ "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
+ "start", "exp", 0
+};
+#endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+ 0, 16, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+ 0, 1, 5, 3, 3, 3, 3, 3, 3, 2,
+ 1, 1, 3
+};
+
+/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+ doesn't specify something else to do. Zero means the default is an
+ error. */
+static const short yydefact[] =
+{
+ 0, 0, 11, 10, 0, 1, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12, 0, 3, 4, 5,
+ 6, 7, 8, 0, 2, 0, 0, 0
+};
+
+static const short yydefgoto[] =
+{
+ 25, 5
+};
+
+static const short yypact[] =
+{
+ -9, -9,-32768,-32768, -9, 34,-32768, 11, -9, -9,
+ -9, -9, -9, -9, -9,-32768, 24, 39, 43, 16,
+ 26, -3,-32768, -9, 34, 21, 53,-32768
+};
+
+static const short yypgoto[] =
+{
+ -32768, -1
+};
+
+
+#define YYLAST 53
+
+
+static const short yytable[] =
+{
+ 6, 1, 2, 7, 3, 4, 14, 16, 17, 18,
+ 19, 20, 21, 22, 8, 9, 10, 11, 12, 13,
+ 14, 26, 24, 12, 13, 14, 15, 8, 9, 10,
+ 11, 12, 13, 14, 13, 14, 23, 8, 9, 10,
+ 11, 12, 13, 14, 10, 11, 12, 13, 14, 11,
+ 12, 13, 14, 27
+};
+
+static const short yycheck[] =
+{
+ 1, 10, 11, 4, 13, 14, 9, 8, 9, 10,
+ 11, 12, 13, 14, 3, 4, 5, 6, 7, 8,
+ 9, 0, 23, 7, 8, 9, 15, 3, 4, 5,
+ 6, 7, 8, 9, 8, 9, 12, 3, 4, 5,
+ 6, 7, 8, 9, 5, 6, 7, 8, 9, 6,
+ 7, 8, 9, 0
+};
+#define YYPURE 1
+
+/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
+#line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison/bison.simple"
+
+/* Skeleton output parser for bison,
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+/* This is the parser code that is written into each bison parser when
+ the %semantic_parser declaration is not specified in the grammar.
+ It was written by Richard Stallman by simplifying the hairy parser
+ used when %semantic_parser is specified. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# if YYSTACK_USE_ALLOCA
+# define YYSTACK_ALLOC alloca
+# else
+# ifndef YYSTACK_USE_ALLOCA
+# if defined (alloca) || defined (_ALLOCA_H)
+# define YYSTACK_ALLOC alloca
+# else
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+# define YYSTACK_ALLOC malloc
+# define YYSTACK_FREE free
+# endif
+#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
+
+
+#if (! defined (yyoverflow) \
+ && (! defined (__cplusplus) \
+ || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ short yyss;
+ YYSTYPE yyvs;
+# if YYLSP_NEEDED
+ YYLTYPE yyls;
+# endif
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# if YYLSP_NEEDED
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+ + 2 * YYSTACK_GAP_MAX)
+# else
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAX)
+# endif
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ register YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrlab1
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+#define YYFAIL goto yyerrlab
+#define YYRECOVERING() (!!yyerrstatus)
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yychar1 = YYTRANSLATE (yychar); \
+ YYPOPSTACK; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror ("syntax error: cannot back up"); \
+ YYERROR; \
+ } \
+while (0)
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run).
+
+ When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+ first token. By default, to implement support for ranges, extend
+ its range to the last symbol. */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ Current.last_line = Rhs[N].last_line; \
+ Current.last_column = Rhs[N].last_column;
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#if YYPURE
+# if YYLSP_NEEDED
+# ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
+# else
+# define YYLEX yylex (&yylval, &yylloc)
+# endif
+# else /* !YYLSP_NEEDED */
+# ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+# else
+# define YYLEX yylex (&yylval)
+# endif
+# endif /* !YYLSP_NEEDED */
+#else /* !YYPURE */
+# define YYLEX yylex ()
+#endif /* !YYPURE */
+
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+#ifdef YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined (__GLIBC__) && defined (_STRING_H)
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+static YYSIZE_T
+# if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+# else
+yystrlen (yystr)
+ const char *yystr;
+# endif
+{
+ register const char *yys = yystr;
+
+ while (*yys++ != '\0')
+ continue;
+
+ return yys - yystr - 1;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+static char *
+# if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+# else
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+# endif
+{
+ register char *yyd = yydest;
+ register const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+#endif
+
+#line 315 "/home/haible/gnu/arch/linuxlibc6/share/bison/bison.simple"
+
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+ into yyparse. The argument should have type void *.
+ It should actually point to an object.
+ Grammar actions can access the variable by casting it
+ to the proper pointer type. */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL
+# else
+# define YYPARSE_PARAM_ARG YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes. */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
+
+/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+ variables are global, or local to YYPARSE. */
+
+#define YY_DECL_NON_LSP_VARIABLES \
+/* The lookahead symbol. */ \
+int yychar; \
+ \
+/* The semantic value of the lookahead symbol. */ \
+YYSTYPE yylval; \
+ \
+/* Number of parse errors so far. */ \
+int yynerrs;
+
+#if YYLSP_NEEDED
+# define YY_DECL_VARIABLES \
+YY_DECL_NON_LSP_VARIABLES \
+ \
+/* Location data for the lookahead symbol. */ \
+YYLTYPE yylloc;
+#else
+# define YY_DECL_VARIABLES \
+YY_DECL_NON_LSP_VARIABLES
+#endif
+
+
+/* If nonreentrant, generate the variables here. */
+
+#if !YYPURE
+YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+{
+ /* If reentrant, generate the variables here. */
+#if YYPURE
+ YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
+ register int yystate;
+ register int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Lookahead token as an internal (translated) token number. */
+ int yychar1 = 0;
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ short yyssa[YYINITDEPTH];
+ short *yyss = yyssa;
+ register short *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ register YYSTYPE *yyvsp;
+
+#if YYLSP_NEEDED
+ /* The location stack. */
+ YYLTYPE yylsa[YYINITDEPTH];
+ YYLTYPE *yyls = yylsa;
+ YYLTYPE *yylsp;
+#endif
+
+#if YYLSP_NEEDED
+# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
+#else
+# define YYPOPSTACK (yyvsp--, yyssp--)
+#endif
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+#if YYLSP_NEEDED
+ YYLTYPE yyloc;
+#endif
+
+ /* When reducing, the number of symbols on the RHS of the reduced
+ rule. */
+ int yylen;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+#if YYLSP_NEEDED
+ yylsp = yyls;
+#endif
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. so pushing a state here evens the stacks.
+ */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyssp >= yyss + yystacksize - 1)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ short *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. */
+# if YYLSP_NEEDED
+ YYLTYPE *yyls1 = yyls;
+ /* This used to be a conditional around just the two extra args,
+ but that might be undefined if yyoverflow is a macro. */
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yyls1, yysize * sizeof (*yylsp),
+ &yystacksize);
+ yyls = yyls1;
+# else
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+# endif
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyoverflowlab;
+# else
+ /* Extend the stack our own way. */
+ if (yystacksize >= YYMAXDEPTH)
+ goto yyoverflowlab;
+ yystacksize *= 2;
+ if (yystacksize > YYMAXDEPTH)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ short *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyoverflowlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+# if YYLSP_NEEDED
+ YYSTACK_RELOCATE (yyls);
+# endif
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+#if YYLSP_NEEDED
+ yylsp = yyls + yysize - 1;
+#endif
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyssp >= yyss + yystacksize - 1)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state. */
+/* Read a lookahead token if we need one and don't already have one. */
+/* yyresume: */
+
+ /* First try to decide what to do without reference to lookahead token. */
+
+ yyn = yypact[yystate];
+ if (yyn == YYFLAG)
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* yychar is either YYEMPTY or YYEOF
+ or a valid token in external form. */
+
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ /* Convert token to internal form (in yychar1) for indexing tables with */
+
+ if (yychar <= 0) /* This means end of input. */
+ {
+ yychar1 = 0;
+ yychar = YYEOF; /* Don't call YYLEX any more */
+
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yychar1 = YYTRANSLATE (yychar);
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables
+ which are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ YYFPRINTF (stderr, "Next token is %d (%s",
+ yychar, yytname[yychar1]);
+ /* Give the individual parser a way to print the precise
+ meaning of a token, for further debugging info. */
+# ifdef YYPRINT
+ YYPRINT (stderr, yychar, yylval);
+# endif
+ YYFPRINTF (stderr, ")\n");
+ }
+#endif
+ }
+
+ yyn += yychar1;
+ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+ goto yydefault;
+
+ yyn = yytable[yyn];
+
+ /* yyn is what to do for this token type in this state.
+ Negative => reduce, -yyn is rule number.
+ Positive => shift, yyn is new state.
+ New state is final state => don't bother to shift,
+ just return success.
+ 0, or most negative number => error. */
+
+ if (yyn < 0)
+ {
+ if (yyn == YYFLAG)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+ else if (yyn == 0)
+ goto yyerrlab;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Shift the lookahead token. */
+ YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+ yychar, yytname[yychar1]));
+
+ /* Discard the token being shifted unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ *++yyvsp = yylval;
+#if YYLSP_NEEDED
+ *++yylsp = yylloc;
+#endif
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to the semantic value of
+ the lookahead token. This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+#if YYLSP_NEEDED
+ /* Similarly for the default location. Let the user run additional
+ commands if for instance locations are ranges. */
+ yyloc = yylsp[1-yylen];
+ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+#endif
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables which
+ are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ int yyi;
+
+ YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+ yyn, yyrline[yyn]);
+
+ /* Print the symbols being reduced, and their result. */
+ for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
+ YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+ YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+ }
+#endif
+
+ switch (yyn) {
+
+case 1:
+#line 151 "plural.y"
+{
+ if (yyvsp[0].exp == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = yyvsp[0].exp;
+ }
+ break;
+case 2:
+#line 159 "plural.y"
+{
+ yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 3:
+#line 163 "plural.y"
+{
+ yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 4:
+#line 167 "plural.y"
+{
+ yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 5:
+#line 171 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 6:
+#line 175 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 7:
+#line 179 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 8:
+#line 183 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 9:
+#line 187 "plural.y"
+{
+ yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
+ }
+ break;
+case 10:
+#line 191 "plural.y"
+{
+ yyval.exp = new_exp_0 (var);
+ }
+ break;
+case 11:
+#line 195 "plural.y"
+{
+ if ((yyval.exp = new_exp_0 (num)) != NULL)
+ yyval.exp->val.num = yyvsp[0].num;
+ }
+ break;
+case 12:
+#line 200 "plural.y"
+{
+ yyval.exp = yyvsp[-1].exp;
+ }
+ break;
+}
+
+#line 705 "/home/haible/gnu/arch/linuxlibc6/share/bison/bison.simple"
+
+
+ yyvsp -= yylen;
+ yyssp -= yylen;
+#if YYLSP_NEEDED
+ yylsp -= yylen;
+#endif
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+ *++yyvsp = yyval;
+#if YYLSP_NEEDED
+ *++yylsp = yyloc;
+#endif
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+ if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTBASE];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+ yyn = yypact[yystate];
+
+ if (yyn > YYFLAG && yyn < YYLAST)
+ {
+ YYSIZE_T yysize = 0;
+ char *yymsg;
+ int yyx, yycount;
+
+ yycount = 0;
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+ if (yycheck[yyx + yyn] == yyx)
+ yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+ yysize += yystrlen ("parse error, unexpected ") + 1;
+ yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
+ yymsg = (char *) YYSTACK_ALLOC (yysize);
+ if (yymsg != 0)
+ {
+ char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+ yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
+
+ if (yycount < 5)
+ {
+ yycount = 0;
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *));
+ yyx++)
+ if (yycheck[yyx + yyn] == yyx)
+ {
+ const char *yyq = ! yycount ? ", expecting " : " or ";
+ yyp = yystpcpy (yyp, yyq);
+ yyp = yystpcpy (yyp, yytname[yyx]);
+ yycount++;
+ }
+ }
+ yyerror (yymsg);
+ YYSTACK_FREE (yymsg);
+ }
+ else
+ yyerror ("parse error; also virtual memory exhausted");
+ }
+ else
+#endif /* defined (YYERROR_VERBOSE) */
+ yyerror ("parse error");
+ }
+ goto yyerrlab1;
+
+
+/*--------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action |
+`--------------------------------------------------*/
+yyerrlab1:
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ /* return failure if at end of input */
+ if (yychar == YYEOF)
+ YYABORT;
+ YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+ yychar, yytname[yychar1]));
+ yychar = YYEMPTY;
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+
+ yyerrstatus = 3; /* Each real token shifted decrements this */
+
+ goto yyerrhandle;
+
+
+/*-------------------------------------------------------------------.
+| yyerrdefault -- current state does not do anything special for the |
+| error token. |
+`-------------------------------------------------------------------*/
+yyerrdefault:
+#if 0
+ /* This is wrong; only states that explicitly want error tokens
+ should shift them. */
+
+ /* If its default is to accept any token, ok. Otherwise pop it. */
+ yyn = yydefact[yystate];
+ if (yyn)
+ goto yydefault;
+#endif
+
+
+/*---------------------------------------------------------------.
+| yyerrpop -- pop the current state because it cannot handle the |
+| error token |
+`---------------------------------------------------------------*/
+yyerrpop:
+ if (yyssp == yyss)
+ YYABORT;
+ yyvsp--;
+ yystate = *--yyssp;
+#if YYLSP_NEEDED
+ yylsp--;
+#endif
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "Error: state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+/*--------------.
+| yyerrhandle. |
+`--------------*/
+yyerrhandle:
+ yyn = yypact[yystate];
+ if (yyn == YYFLAG)
+ goto yyerrdefault;
+
+ yyn += YYTERROR;
+ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+ goto yyerrdefault;
+
+ yyn = yytable[yyn];
+ if (yyn < 0)
+ {
+ if (yyn == YYFLAG)
+ goto yyerrpop;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+ else if (yyn == 0)
+ goto yyerrpop;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ YYDPRINTF ((stderr, "Shifting error token, "));
+
+ *++yyvsp = yylval;
+#if YYLSP_NEEDED
+ *++yylsp = yylloc;
+#endif
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+/*---------------------------------------------.
+| yyoverflowab -- parser overflow comes here. |
+`---------------------------------------------*/
+yyoverflowlab:
+ yyerror ("parser stack overflow");
+ yyresult = 2;
+ /* Fall through. */
+
+yyreturn:
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+ return yyresult;
+}
+#line 205 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (struct expression *exp)
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (YYSTYPE *lval, const char **pexp)
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (const char *str)
+{
+ /* Do nothing. We don't print error messages here. */
+}
diff --git a/intl/plural.y b/intl/plural.y
new file mode 100644
index 0000000..fe79112
--- /dev/null
+++ b/intl/plural.y
@@ -0,0 +1,381 @@
+%{
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ 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 int yylex (YYSTYPE *lval, const char **pexp);
+static void yyerror (const char *str);
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (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 (enum operator op)
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (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 (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 (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 (struct expression *exp)
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (YYSTYPE *lval, const char **pexp)
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (const char *str)
+{
+ /* Do nothing. We don't print error messages here. */
+}
diff --git a/intl/printf-args.c b/intl/printf-args.c
new file mode 100644
index 0000000..f975901
--- /dev/null
+++ b/intl/printf-args.c
@@ -0,0 +1,119 @@
+/* Decomposed printf argument list.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "printf-args.h"
+
+#ifdef STATIC
+STATIC
+#endif
+int
+printf_fetchargs (va_list args, arguments *a)
+{
+ size_t i;
+ argument *ap;
+
+ for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
+ switch (ap->type)
+ {
+ case TYPE_SCHAR:
+ ap->a.a_schar = va_arg (args, /*signed char*/ int);
+ break;
+ case TYPE_UCHAR:
+ ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
+ break;
+ case TYPE_SHORT:
+ ap->a.a_short = va_arg (args, /*short*/ int);
+ break;
+ case TYPE_USHORT:
+ ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
+ break;
+ case TYPE_INT:
+ ap->a.a_int = va_arg (args, int);
+ break;
+ case TYPE_UINT:
+ ap->a.a_uint = va_arg (args, unsigned int);
+ break;
+ case TYPE_LONGINT:
+ ap->a.a_longint = va_arg (args, long int);
+ break;
+ case TYPE_ULONGINT:
+ ap->a.a_ulongint = va_arg (args, unsigned long int);
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ ap->a.a_longlongint = va_arg (args, long long int);
+ break;
+ case TYPE_ULONGLONGINT:
+ ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
+ break;
+#endif
+ case TYPE_DOUBLE:
+ ap->a.a_double = va_arg (args, double);
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ ap->a.a_longdouble = va_arg (args, long double);
+ break;
+#endif
+ case TYPE_CHAR:
+ ap->a.a_char = va_arg (args, int);
+ break;
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+ ap->a.a_wide_char = va_arg (args, wint_t);
+ break;
+#endif
+ case TYPE_STRING:
+ ap->a.a_string = va_arg (args, const char *);
+ break;
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+ ap->a.a_wide_string = va_arg (args, const wchar_t *);
+ break;
+#endif
+ case TYPE_POINTER:
+ ap->a.a_pointer = va_arg (args, void *);
+ break;
+ case TYPE_COUNT_SCHAR_POINTER:
+ ap->a.a_count_schar_pointer = va_arg (args, signed char *);
+ break;
+ case TYPE_COUNT_SHORT_POINTER:
+ ap->a.a_count_short_pointer = va_arg (args, short *);
+ break;
+ case TYPE_COUNT_INT_POINTER:
+ ap->a.a_count_int_pointer = va_arg (args, int *);
+ break;
+ case TYPE_COUNT_LONGINT_POINTER:
+ ap->a.a_count_longint_pointer = va_arg (args, long int *);
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_COUNT_LONGLONGINT_POINTER:
+ ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
+ break;
+#endif
+ default:
+ /* Unknown type. */
+ return -1;
+ }
+ return 0;
+}
diff --git a/intl/printf-args.h b/intl/printf-args.h
new file mode 100644
index 0000000..625b803
--- /dev/null
+++ b/intl/printf-args.h
@@ -0,0 +1,137 @@
+/* Decomposed printf argument list.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _PRINTF_ARGS_H
+#define _PRINTF_ARGS_H
+
+/* Get size_t. */
+#include <stddef.h>
+
+/* Get wchar_t. */
+#ifdef HAVE_WCHAR_T
+# include <stddef.h>
+#endif
+
+/* Get wint_t. */
+#ifdef HAVE_WINT_T
+# include <wchar.h>
+#endif
+
+/* Get va_list. */
+#include <stdarg.h>
+
+
+/* Argument types */
+typedef enum
+{
+ TYPE_NONE,
+ TYPE_SCHAR,
+ TYPE_UCHAR,
+ TYPE_SHORT,
+ TYPE_USHORT,
+ TYPE_INT,
+ TYPE_UINT,
+ TYPE_LONGINT,
+ TYPE_ULONGINT,
+#ifdef HAVE_LONG_LONG
+ TYPE_LONGLONGINT,
+ TYPE_ULONGLONGINT,
+#endif
+ TYPE_DOUBLE,
+#ifdef HAVE_LONG_DOUBLE
+ TYPE_LONGDOUBLE,
+#endif
+ TYPE_CHAR,
+#ifdef HAVE_WINT_T
+ TYPE_WIDE_CHAR,
+#endif
+ TYPE_STRING,
+#ifdef HAVE_WCHAR_T
+ TYPE_WIDE_STRING,
+#endif
+ TYPE_POINTER,
+ TYPE_COUNT_SCHAR_POINTER,
+ TYPE_COUNT_SHORT_POINTER,
+ TYPE_COUNT_INT_POINTER,
+ TYPE_COUNT_LONGINT_POINTER
+#ifdef HAVE_LONG_LONG
+, TYPE_COUNT_LONGLONGINT_POINTER
+#endif
+} arg_type;
+
+/* Polymorphic argument */
+typedef struct
+{
+ arg_type type;
+ union
+ {
+ signed char a_schar;
+ unsigned char a_uchar;
+ short a_short;
+ unsigned short a_ushort;
+ int a_int;
+ unsigned int a_uint;
+ long int a_longint;
+ unsigned long int a_ulongint;
+#ifdef HAVE_LONG_LONG
+ long long int a_longlongint;
+ unsigned long long int a_ulonglongint;
+#endif
+ float a_float;
+ double a_double;
+#ifdef HAVE_LONG_DOUBLE
+ long double a_longdouble;
+#endif
+ int a_char;
+#ifdef HAVE_WINT_T
+ wint_t a_wide_char;
+#endif
+ const char* a_string;
+#ifdef HAVE_WCHAR_T
+ const wchar_t* a_wide_string;
+#endif
+ void* a_pointer;
+ signed char * a_count_schar_pointer;
+ short * a_count_short_pointer;
+ int * a_count_int_pointer;
+ long int * a_count_longint_pointer;
+#ifdef HAVE_LONG_LONG
+ long long int * a_count_longlongint_pointer;
+#endif
+ }
+ a;
+}
+argument;
+
+typedef struct
+{
+ size_t count;
+ argument *arg;
+}
+arguments;
+
+
+/* Fetch the arguments, putting them into a. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_fetchargs (va_list args, arguments *a);
+
+#endif /* _PRINTF_ARGS_H */
diff --git a/intl/printf-parse.c b/intl/printf-parse.c
new file mode 100644
index 0000000..20240e3
--- /dev/null
+++ b/intl/printf-parse.c
@@ -0,0 +1,537 @@
+/* Formatted output to strings.
+ Copyright (C) 1999-2000, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#if WIDE_CHAR_VERSION
+# include "wprintf-parse.h"
+#else
+# include "printf-parse.h"
+#endif
+
+/* Get size_t, NULL. */
+#include <stddef.h>
+
+/* Get intmax_t. */
+#if HAVE_STDINT_H_WITH_UINTMAX
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+# include <inttypes.h>
+#endif
+
+/* malloc(), realloc(), free(). */
+#include <stdlib.h>
+
+/* Checked size_t computations. */
+#include "xsize.h"
+
+#if WIDE_CHAR_VERSION
+# define PRINTF_PARSE wprintf_parse
+# define CHAR_T wchar_t
+# define DIRECTIVE wchar_t_directive
+# define DIRECTIVES wchar_t_directives
+#else
+# define PRINTF_PARSE printf_parse
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
+{
+ const CHAR_T *cp = format; /* pointer into format */
+ size_t arg_posn = 0; /* number of regular arguments consumed */
+ size_t d_allocated; /* allocated elements of d->dir */
+ size_t a_allocated; /* allocated elements of a->arg */
+ size_t max_width_length = 0;
+ size_t max_precision_length = 0;
+
+ d->count = 0;
+ d_allocated = 1;
+ d->dir = malloc (d_allocated * sizeof (DIRECTIVE));
+ if (d->dir == NULL)
+ /* Out of memory. */
+ return -1;
+
+ a->count = 0;
+ a_allocated = 0;
+ a->arg = NULL;
+
+#define REGISTER_ARG(_index_,_type_) \
+ { \
+ size_t n = (_index_); \
+ if (n >= a_allocated) \
+ { \
+ size_t memory_size; \
+ argument *memory; \
+ \
+ a_allocated = xtimes (a_allocated, 2); \
+ if (a_allocated <= n) \
+ a_allocated = xsum (n, 1); \
+ memory_size = xtimes (a_allocated, sizeof (argument)); \
+ if (size_overflow_p (memory_size)) \
+ /* Overflow, would lead to out of memory. */ \
+ goto error; \
+ memory = (a->arg \
+ ? realloc (a->arg, memory_size) \
+ : malloc (memory_size)); \
+ if (memory == NULL) \
+ /* Out of memory. */ \
+ goto error; \
+ a->arg = memory; \
+ } \
+ while (a->count <= n) \
+ a->arg[a->count++].type = TYPE_NONE; \
+ if (a->arg[n].type == TYPE_NONE) \
+ a->arg[n].type = (_type_); \
+ else if (a->arg[n].type != (_type_)) \
+ /* Ambiguous type for positional argument. */ \
+ goto error; \
+ }
+
+ while (*cp != '\0')
+ {
+ CHAR_T c = *cp++;
+ if (c == '%')
+ {
+ size_t arg_index = ARG_NONE;
+ DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */
+
+ /* Initialize the next directive. */
+ dp->dir_start = cp - 1;
+ dp->flags = 0;
+ dp->width_start = NULL;
+ dp->width_end = NULL;
+ dp->width_arg_index = ARG_NONE;
+ dp->precision_start = NULL;
+ dp->precision_end = NULL;
+ dp->precision_arg_index = ARG_NONE;
+ dp->arg_index = ARG_NONE;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory later. */
+ goto error;
+ arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+
+ /* Read the flags. */
+ for (;;)
+ {
+ if (*cp == '\'')
+ {
+ dp->flags |= FLAG_GROUP;
+ cp++;
+ }
+ else if (*cp == '-')
+ {
+ dp->flags |= FLAG_LEFT;
+ cp++;
+ }
+ else if (*cp == '+')
+ {
+ dp->flags |= FLAG_SHOWSIGN;
+ cp++;
+ }
+ else if (*cp == ' ')
+ {
+ dp->flags |= FLAG_SPACE;
+ cp++;
+ }
+ else if (*cp == '#')
+ {
+ dp->flags |= FLAG_ALT;
+ cp++;
+ }
+ else if (*cp == '0')
+ {
+ dp->flags |= FLAG_ZERO;
+ cp++;
+ }
+ else
+ break;
+ }
+
+ /* Parse the field width. */
+ if (*cp == '*')
+ {
+ dp->width_start = cp;
+ cp++;
+ dp->width_end = cp;
+ if (max_width_length < 1)
+ max_width_length = 1;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory later. */
+ goto error;
+ dp->width_arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+ if (dp->width_arg_index == ARG_NONE)
+ {
+ dp->width_arg_index = arg_posn++;
+ if (dp->width_arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->width_arg_index, TYPE_INT);
+ }
+ else if (*cp >= '0' && *cp <= '9')
+ {
+ size_t width_length;
+
+ dp->width_start = cp;
+ for (; *cp >= '0' && *cp <= '9'; cp++)
+ ;
+ dp->width_end = cp;
+ width_length = dp->width_end - dp->width_start;
+ if (max_width_length < width_length)
+ max_width_length = width_length;
+ }
+
+ /* Parse the precision. */
+ if (*cp == '.')
+ {
+ cp++;
+ if (*cp == '*')
+ {
+ dp->precision_start = cp - 1;
+ cp++;
+ dp->precision_end = cp;
+ if (max_precision_length < 2)
+ max_precision_length = 2;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory
+ later. */
+ goto error;
+ dp->precision_arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+ if (dp->precision_arg_index == ARG_NONE)
+ {
+ dp->precision_arg_index = arg_posn++;
+ if (dp->precision_arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
+ }
+ else
+ {
+ size_t precision_length;
+
+ dp->precision_start = cp - 1;
+ for (; *cp >= '0' && *cp <= '9'; cp++)
+ ;
+ dp->precision_end = cp;
+ precision_length = dp->precision_end - dp->precision_start;
+ if (max_precision_length < precision_length)
+ max_precision_length = precision_length;
+ }
+ }
+
+ {
+ arg_type type;
+
+ /* Parse argument type/size specifiers. */
+ {
+ int flags = 0;
+
+ for (;;)
+ {
+ if (*cp == 'h')
+ {
+ flags |= (1 << (flags & 1));
+ cp++;
+ }
+ else if (*cp == 'L')
+ {
+ flags |= 4;
+ cp++;
+ }
+ else if (*cp == 'l')
+ {
+ flags += 8;
+ cp++;
+ }
+#ifdef HAVE_INTMAX_T
+ else if (*cp == 'j')
+ {
+ if (sizeof (intmax_t) > sizeof (long))
+ {
+ /* intmax_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (intmax_t) > sizeof (int))
+ {
+ /* intmax_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+#endif
+ else if (*cp == 'z' || *cp == 'Z')
+ {
+ /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
+ because the warning facility in gcc-2.95.2 understands
+ only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */
+ if (sizeof (size_t) > sizeof (long))
+ {
+ /* size_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (size_t) > sizeof (int))
+ {
+ /* size_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+ else if (*cp == 't')
+ {
+ if (sizeof (ptrdiff_t) > sizeof (long))
+ {
+ /* ptrdiff_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (ptrdiff_t) > sizeof (int))
+ {
+ /* ptrdiff_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+ else
+ break;
+ }
+
+ /* Read the conversion character. */
+ c = *cp++;
+ switch (c)
+ {
+ case 'd': case 'i':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_LONGLONGINT;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_LONGINT;
+ else if (flags & 2)
+ type = TYPE_SCHAR;
+ else if (flags & 1)
+ type = TYPE_SHORT;
+ else
+ type = TYPE_INT;
+ break;
+ case 'o': case 'u': case 'x': case 'X':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_ULONGLONGINT;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_ULONGINT;
+ else if (flags & 2)
+ type = TYPE_UCHAR;
+ else if (flags & 1)
+ type = TYPE_USHORT;
+ else
+ type = TYPE_UINT;
+ break;
+ case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+ case 'a': case 'A':
+#ifdef HAVE_LONG_DOUBLE
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_LONGDOUBLE;
+ else
+#endif
+ type = TYPE_DOUBLE;
+ break;
+ case 'c':
+ if (flags >= 8)
+#ifdef HAVE_WINT_T
+ type = TYPE_WIDE_CHAR;
+#else
+ goto error;
+#endif
+ else
+ type = TYPE_CHAR;
+ break;
+#ifdef HAVE_WINT_T
+ case 'C':
+ type = TYPE_WIDE_CHAR;
+ c = 'c';
+ break;
+#endif
+ case 's':
+ if (flags >= 8)
+#ifdef HAVE_WCHAR_T
+ type = TYPE_WIDE_STRING;
+#else
+ goto error;
+#endif
+ else
+ type = TYPE_STRING;
+ break;
+#ifdef HAVE_WCHAR_T
+ case 'S':
+ type = TYPE_WIDE_STRING;
+ c = 's';
+ break;
+#endif
+ case 'p':
+ type = TYPE_POINTER;
+ break;
+ case 'n':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_COUNT_LONGLONGINT_POINTER;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_COUNT_LONGINT_POINTER;
+ else if (flags & 2)
+ type = TYPE_COUNT_SCHAR_POINTER;
+ else if (flags & 1)
+ type = TYPE_COUNT_SHORT_POINTER;
+ else
+ type = TYPE_COUNT_INT_POINTER;
+ break;
+ case '%':
+ type = TYPE_NONE;
+ break;
+ default:
+ /* Unknown conversion character. */
+ goto error;
+ }
+ }
+
+ if (type != TYPE_NONE)
+ {
+ dp->arg_index = arg_index;
+ if (dp->arg_index == ARG_NONE)
+ {
+ dp->arg_index = arg_posn++;
+ if (dp->arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->arg_index, type);
+ }
+ dp->conversion = c;
+ dp->dir_end = cp;
+ }
+
+ d->count++;
+ if (d->count >= d_allocated)
+ {
+ size_t memory_size;
+ DIRECTIVE *memory;
+
+ d_allocated = xtimes (d_allocated, 2);
+ memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
+ if (size_overflow_p (memory_size))
+ /* Overflow, would lead to out of memory. */
+ goto error;
+ memory = realloc (d->dir, memory_size);
+ if (memory == NULL)
+ /* Out of memory. */
+ goto error;
+ d->dir = memory;
+ }
+ }
+ }
+ d->dir[d->count].dir_start = cp;
+
+ d->max_width_length = max_width_length;
+ d->max_precision_length = max_precision_length;
+ return 0;
+
+error:
+ if (a->arg)
+ free (a->arg);
+ if (d->dir)
+ free (d->dir);
+ return -1;
+}
+
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T
+#undef PRINTF_PARSE
diff --git a/intl/printf-parse.h b/intl/printf-parse.h
new file mode 100644
index 0000000..e785338
--- /dev/null
+++ b/intl/printf-parse.h
@@ -0,0 +1,75 @@
+/* Parse printf format string.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _PRINTF_PARSE_H
+#define _PRINTF_PARSE_H
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP 1 /* ' flag */
+#define FLAG_LEFT 2 /* - flag */
+#define FLAG_SHOWSIGN 4 /* + flag */
+#define FLAG_SPACE 8 /* space flag */
+#define FLAG_ALT 16 /* # flag */
+#define FLAG_ZERO 32
+
+/* arg_index value indicating that no argument is consumed. */
+#define ARG_NONE (~(size_t)0)
+
+/* A parsed directive. */
+typedef struct
+{
+ const char* dir_start;
+ const char* dir_end;
+ int flags;
+ const char* width_start;
+ const char* width_end;
+ size_t width_arg_index;
+ const char* precision_start;
+ const char* precision_end;
+ size_t precision_arg_index;
+ char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+ size_t arg_index;
+}
+char_directive;
+
+/* A parsed format string. */
+typedef struct
+{
+ size_t count;
+ char_directive *dir;
+ size_t max_width_length;
+ size_t max_precision_length;
+}
+char_directives;
+
+
+/* Parses the format string. Fills in the number N of directives, and fills
+ in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+ to the end of the format string. Also fills in the arg_type fields of the
+ arguments and the needed count of arguments. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_parse (const char *format, char_directives *d, arguments *a);
+
+#endif /* _PRINTF_PARSE_H */
diff --git a/intl/printf.c b/intl/printf.c
new file mode 100644
index 0000000..5e112b6
--- /dev/null
+++ b/intl/printf.c
@@ -0,0 +1,371 @@
+/* Formatted output to strings, using POSIX/XSI format strings with positions.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdio.h>
+
+#if !HAVE_POSIX_PRINTF
+
+#include <stdlib.h>
+#include <string.h>
+
+/* When building a DLL, we must export some functions. Note that because
+ the functions are only defined for binary backward compatibility, we
+ don't need to use __declspec(dllimport) in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+#define STATIC static
+
+/* Define auxiliary functions declared in "printf-args.h". */
+#include "printf-args.c"
+
+/* Define auxiliary functions declared in "printf-parse.h". */
+#include "printf-parse.c"
+
+/* Define functions declared in "vasnprintf.h". */
+#define vasnprintf libintl_vasnprintf
+#include "vasnprintf.c"
+#if 0 /* not needed */
+#define asnprintf libintl_asnprintf
+#include "asnprintf.c"
+#endif
+
+DLL_EXPORTED
+int
+libintl_vfprintf (FILE *stream, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return vfprintf (stream, format, args);
+ else
+ {
+ size_t length;
+ char *result = libintl_vasnprintf (NULL, &length, format, args);
+ int retval = -1;
+ if (result != NULL)
+ {
+ if (fwrite (result, 1, length, stream) == length)
+ retval = length;
+ free (result);
+ }
+ return retval;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_fprintf (FILE *stream, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vfprintf (stream, format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vprintf (const char *format, va_list args)
+{
+ return libintl_vfprintf (stdout, format, args);
+}
+
+DLL_EXPORTED
+int
+libintl_printf (const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vprintf (format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vsprintf (char *resultbuf, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return vsprintf (resultbuf, format, args);
+ else
+ {
+ size_t length = (size_t) ~0 / (4 * sizeof (char));
+ char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_sprintf (char *resultbuf, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vsprintf (resultbuf, format, args);
+ va_end (args);
+ return retval;
+}
+
+#if HAVE_SNPRINTF
+
+# if HAVE_DECL__SNPRINTF
+ /* Windows. */
+# define system_vsnprintf _vsnprintf
+# else
+ /* Unix. */
+# define system_vsnprintf vsnprintf
+# endif
+
+DLL_EXPORTED
+int
+libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return system_vsnprintf (resultbuf, length, format, args);
+ else
+ {
+ size_t maxlength = length;
+ char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ if (maxlength > 0)
+ {
+ if (length < maxlength)
+ abort ();
+ memcpy (resultbuf, result, maxlength - 1);
+ resultbuf[maxlength - 1] = '\0';
+ }
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_snprintf (char *resultbuf, size_t length, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vsnprintf (resultbuf, length, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#if HAVE_ASPRINTF
+
+DLL_EXPORTED
+int
+libintl_vasprintf (char **resultp, const char *format, va_list args)
+{
+ size_t length;
+ char *result = libintl_vasnprintf (NULL, &length, format, args);
+ if (result == NULL)
+ return -1;
+ *resultp = result;
+ return length;
+}
+
+DLL_EXPORTED
+int
+libintl_asprintf (char **resultp, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vasprintf (resultp, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#if HAVE_FWPRINTF
+
+#include <wchar.h>
+
+#define WIDE_CHAR_VERSION 1
+
+/* Define auxiliary functions declared in "wprintf-parse.h". */
+#include "printf-parse.c"
+
+/* Define functions declared in "vasnprintf.h". */
+#define vasnwprintf libintl_vasnwprintf
+#include "vasnprintf.c"
+#if 0 /* not needed */
+#define asnwprintf libintl_asnwprintf
+#include "asnprintf.c"
+#endif
+
+# if HAVE_DECL__SNWPRINTF
+ /* Windows. */
+# define system_vswprintf _vsnwprintf
+# else
+ /* Unix. */
+# define system_vswprintf vswprintf
+# endif
+
+DLL_EXPORTED
+int
+libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args)
+{
+ if (wcschr (format, '$') == NULL)
+ return vfwprintf (stream, format, args);
+ else
+ {
+ size_t length;
+ wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args);
+ int retval = -1;
+ if (result != NULL)
+ {
+ size_t i;
+ for (i = 0; i < length; i++)
+ if (fputwc (result[i], stream) == WEOF)
+ break;
+ if (i == length)
+ retval = length;
+ free (result);
+ }
+ return retval;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_fwprintf (FILE *stream, const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vfwprintf (stream, format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vwprintf (const wchar_t *format, va_list args)
+{
+ return libintl_vfwprintf (stdout, format, args);
+}
+
+DLL_EXPORTED
+int
+libintl_wprintf (const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vwprintf (format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args)
+{
+ if (wcschr (format, '$') == NULL)
+ return system_vswprintf (resultbuf, length, format, args);
+ else
+ {
+ size_t maxlength = length;
+ wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ if (maxlength > 0)
+ {
+ if (length < maxlength)
+ abort ();
+ memcpy (resultbuf, result, (maxlength - 1) * sizeof (wchar_t));
+ resultbuf[maxlength - 1] = 0;
+ }
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vswprintf (resultbuf, length, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#endif
diff --git a/intl/ref-add.sin b/intl/ref-add.sin
new file mode 100644
index 0000000..3678c28
--- /dev/null
+++ b/intl/ref-add.sin
@@ -0,0 +1,31 @@
+# Add this package to a list of references stored in a text file.
+#
+# Copyright (C) 2000 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+ s/# Packages using this file://
+ ta
+ :a
+ s/ @PACKAGE@ / @PACKAGE@ /
+ tb
+ s/ $/ @PACKAGE@ /
+ :b
+ s/^/# Packages using this file:/
+}
diff --git a/intl/ref-del.sin b/intl/ref-del.sin
new file mode 100644
index 0000000..0c12d8e
--- /dev/null
+++ b/intl/ref-del.sin
@@ -0,0 +1,26 @@
+# Remove this package from a list of references stored in a text file.
+#
+# Copyright (C) 2000 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+ s/# Packages using this file://
+ s/ @PACKAGE@ / /
+ s/^/# Packages using this file:/
+}
diff --git a/intl/relocatable.c b/intl/relocatable.c
new file mode 100644
index 0000000..5b43d12
--- /dev/null
+++ b/intl/relocatable.c
@@ -0,0 +1,449 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003-2004 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+
+/* Tell glibc's <stdio.h> to provide a prototype for getline().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* Specification. */
+#include "relocatable.h"
+
+#if ENABLE_RELOCATABLE
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef NO_XMALLOC
+# define xmalloc malloc
+#else
+# include "xalloc.h"
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#if DEPENDS_ON_LIBCHARSET
+# include <libcharset.h>
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV
+# include <iconv.h>
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS
+# include <libintl.h>
+#endif
+
+/* Faked cheap 'bool'. */
+#undef bool
+#undef false
+#undef true
+#define bool int
+#define false 0
+#define true 1
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILE_SYSTEM_PREFIX_LEN(P) 0
+#endif
+
+/* Original installation prefix. */
+static char *orig_prefix;
+static size_t orig_prefix_len;
+/* Current installation prefix. */
+static char *curr_prefix;
+static size_t curr_prefix_len;
+/* These prefixes do not end in a slash. Anything that will be concatenated
+ to them must start with a slash. */
+
+/* Sets the original and the current installation prefix of this module.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+static void
+set_this_relocation_prefix (const char *orig_prefix_arg,
+ const char *curr_prefix_arg)
+{
+ if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
+ /* Optimization: if orig_prefix and curr_prefix are equal, the
+ relocation is a nop. */
+ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
+ {
+ /* Duplicate the argument strings. */
+ char *memory;
+
+ orig_prefix_len = strlen (orig_prefix_arg);
+ curr_prefix_len = strlen (curr_prefix_arg);
+ memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (memory != NULL)
+#endif
+ {
+ memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
+ orig_prefix = memory;
+ memory += orig_prefix_len + 1;
+ memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
+ curr_prefix = memory;
+ return;
+ }
+ }
+ orig_prefix = NULL;
+ curr_prefix = NULL;
+ /* Don't worry about wasted memory here - this function is usually only
+ called once. */
+}
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+void
+set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
+{
+ set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+
+ /* Now notify all dependent libraries. */
+#if DEPENDS_ON_LIBCHARSET
+ libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
+ libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
+ libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+}
+
+#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+#ifdef IN_LIBRARY
+#define compute_curr_prefix local_compute_curr_prefix
+static
+#endif
+const char *
+compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname)
+{
+ const char *curr_installdir;
+ const char *rel_installdir;
+
+ if (curr_pathname == NULL)
+ return NULL;
+
+ /* Determine the relative installation directory, relative to the prefix.
+ This is simply the difference between orig_installprefix and
+ orig_installdir. */
+ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
+ != 0)
+ /* Shouldn't happen - nothing should be installed outside $(prefix). */
+ return NULL;
+ rel_installdir = orig_installdir + strlen (orig_installprefix);
+
+ /* Determine the current installation directory. */
+ {
+ const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname);
+ const char *p = curr_pathname + strlen (curr_pathname);
+ char *q;
+
+ while (p > p_base)
+ {
+ p--;
+ if (ISSLASH (*p))
+ break;
+ }
+
+ q = (char *) xmalloc (p - curr_pathname + 1);
+#ifdef NO_XMALLOC
+ if (q == NULL)
+ return NULL;
+#endif
+ memcpy (q, curr_pathname, p - curr_pathname);
+ q[p - curr_pathname] = '\0';
+ curr_installdir = q;
+ }
+
+ /* Compute the current installation prefix by removing the trailing
+ rel_installdir from it. */
+ {
+ const char *rp = rel_installdir + strlen (rel_installdir);
+ const char *cp = curr_installdir + strlen (curr_installdir);
+ const char *cp_base =
+ curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir);
+
+ while (rp > rel_installdir && cp > cp_base)
+ {
+ bool same = false;
+ const char *rpi = rp;
+ const char *cpi = cp;
+
+ while (rpi > rel_installdir && cpi > cp_base)
+ {
+ rpi--;
+ cpi--;
+ if (ISSLASH (*rpi) || ISSLASH (*cpi))
+ {
+ if (ISSLASH (*rpi) && ISSLASH (*cpi))
+ same = true;
+ break;
+ }
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, Cygwin, OS/2, DOS - case insignificant filesystem */
+ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
+ != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
+ break;
+#else
+ if (*rpi != *cpi)
+ break;
+#endif
+ }
+ if (!same)
+ break;
+ /* The last pathname component was the same. opi and cpi now point
+ to the slash before it. */
+ rp = rpi;
+ cp = cpi;
+ }
+
+ if (rp > rel_installdir)
+ /* Unexpected: The curr_installdir does not end with rel_installdir. */
+ return NULL;
+
+ {
+ size_t curr_prefix_len = cp - curr_installdir;
+ char *curr_prefix;
+
+ curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (curr_prefix == NULL)
+ return NULL;
+#endif
+ memcpy (curr_prefix, curr_installdir, curr_prefix_len);
+ curr_prefix[curr_prefix_len] = '\0';
+
+ return curr_prefix;
+ }
+ }
+}
+
+#endif /* !IN_LIBRARY || PIC */
+
+#if defined PIC && defined INSTALLDIR
+
+/* Full pathname of shared library, or NULL. */
+static char *shared_library_fullname;
+
+#if defined _WIN32 || defined __WIN32__
+
+/* Determine the full pathname of the shared library when it is loaded. */
+
+BOOL WINAPI
+DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
+{
+ (void) reserved;
+
+ if (event == DLL_PROCESS_ATTACH)
+ {
+ /* The DLL is being loaded into an application's address range. */
+ static char location[MAX_PATH];
+
+ if (!GetModuleFileName (module_handle, location, sizeof (location)))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ if (!IS_PATH_WITH_DIR (location))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+}
+
+#else /* Unix */
+
+static void
+find_shared_library_fullname ()
+{
+#if defined __linux__ && __GLIBC__ >= 2
+ /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+ fp = fopen ("/proc/self/maps", "r");
+ if (fp)
+ {
+ unsigned long address = (unsigned long) &find_shared_library_fullname;
+ for (;;)
+ {
+ unsigned long start, end;
+ int c;
+
+ if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
+ break;
+ if (address >= start && address <= end - 1)
+ {
+ /* Found it. Now see if this line contains a filename. */
+ while (c = getc (fp), c != EOF && c != '\n' && c != '/')
+ continue;
+ if (c == '/')
+ {
+ size_t size;
+ int len;
+
+ ungetc (c, fp);
+ shared_library_fullname = NULL; size = 0;
+ len = getline (&shared_library_fullname, &size, fp);
+ if (len >= 0)
+ {
+ /* Success: filled shared_library_fullname. */
+ if (len > 0 && shared_library_fullname[len - 1] == '\n')
+ shared_library_fullname[len - 1] = '\0';
+ }
+ }
+ break;
+ }
+ while (c = getc (fp), c != EOF && c != '\n')
+ continue;
+ }
+ fclose (fp);
+ }
+#endif
+}
+
+#endif /* WIN32 / Unix */
+
+/* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+ Guaranteed to work only on Linux and Woe32. */
+static char *
+get_shared_library_fullname ()
+{
+#if !(defined _WIN32 || defined __WIN32__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+ find_shared_library_fullname ();
+ tried_find_shared_library_fullname = true;
+ }
+#endif
+ return shared_library_fullname;
+}
+
+#endif /* PIC */
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+const char *
+relocate (const char *pathname)
+{
+#if defined PIC && defined INSTALLDIR
+ static int initialized;
+
+ /* Initialization code for a shared library. */
+ if (!initialized)
+ {
+ /* At this point, orig_prefix and curr_prefix likely have already been
+ set through the main program's set_program_name_and_installdir
+ function. This is sufficient in the case that the library has
+ initially been installed in the same orig_prefix. But we can do
+ better, to also cover the cases that 1. it has been installed
+ in a different prefix before being moved to orig_prefix and (later)
+ to curr_prefix, 2. unlike the program, it has not moved away from
+ orig_prefix. */
+ const char *orig_installprefix = INSTALLPREFIX;
+ const char *orig_installdir = INSTALLDIR;
+ const char *curr_prefix_better;
+
+ curr_prefix_better =
+ compute_curr_prefix (orig_installprefix, orig_installdir,
+ get_shared_library_fullname ());
+ if (curr_prefix_better == NULL)
+ curr_prefix_better = curr_prefix;
+
+ set_relocation_prefix (orig_installprefix, curr_prefix_better);
+
+ initialized = 1;
+ }
+#endif
+
+ /* Note: It is not necessary to perform case insensitive comparison here,
+ even for DOS-like filesystems, because the pathname argument was
+ typically created from the same Makefile variable as orig_prefix came
+ from. */
+ if (orig_prefix != NULL && curr_prefix != NULL
+ && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
+ {
+ if (pathname[orig_prefix_len] == '\0')
+ /* pathname equals orig_prefix. */
+ return curr_prefix;
+ if (ISSLASH (pathname[orig_prefix_len]))
+ {
+ /* pathname starts with orig_prefix. */
+ const char *pathname_tail = &pathname[orig_prefix_len];
+ char *result =
+ (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
+
+#ifdef NO_XMALLOC
+ if (result != NULL)
+#endif
+ {
+ memcpy (result, curr_prefix, curr_prefix_len);
+ strcpy (result + curr_prefix_len, pathname_tail);
+ return result;
+ }
+ }
+ }
+ /* Nothing to relocate. */
+ return pathname;
+}
+
+#endif
diff --git a/intl/relocatable.h b/intl/relocatable.h
new file mode 100644
index 0000000..614e64e
--- /dev/null
+++ b/intl/relocatable.h
@@ -0,0 +1,77 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _RELOCATABLE_H
+#define _RELOCATABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* This can be enabled through the configure --enable-relocatable option. */
+#if ENABLE_RELOCATABLE
+
+/* When building a DLL, we must export some functions. Note that because
+ this is a private .h file, we don't need to use __declspec(dllimport)
+ in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
+#else
+# define RELOCATABLE_DLL_EXPORTED
+#endif
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+extern RELOCATABLE_DLL_EXPORTED void
+ set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+extern const char * relocate (const char *pathname);
+
+/* Memory management: relocate() leaks memory, because it has to construct
+ a fresh pathname. If this is a problem because your program calls
+ relocate() frequently, think about caching the result. */
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+extern const char * compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname);
+
+#else
+
+/* By default, we use the hardwired pathnames. */
+#define relocate(pathname) (pathname)
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RELOCATABLE_H */
diff --git a/intl/textdomain.c b/intl/textdomain.c
new file mode 100644
index 0000000..2bf6240
--- /dev/null
+++ b/intl/textdomain.c
@@ -0,0 +1,141 @@
+/* Implementation of the textdomain(3) function.
+ Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Name of the default text domain. */
+extern const char _nl_default_default_domain[] attribute_hidden;
+
+/* Default text domain in which entries for gettext(3) are to be found. */
+extern const char *_nl_current_default_domain attribute_hidden;
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
+#else
+# define TEXTDOMAIN libintl_textdomain
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+/* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+char *
+TEXTDOMAIN (const char *domainname)
+{
+ char *new_domain;
+ char *old_domain;
+
+ /* A NULL pointer requests the current setting. */
+ if (domainname == NULL)
+ return (char *) _nl_current_default_domain;
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ old_domain = (char *) _nl_current_default_domain;
+
+ /* If domain name is the null string set to default domain "messages". */
+ if (domainname[0] == '\0'
+ || strcmp (domainname, _nl_default_default_domain) == 0)
+ {
+ _nl_current_default_domain = _nl_default_default_domain;
+ new_domain = (char *) _nl_current_default_domain;
+ }
+ else if (strcmp (domainname, old_domain) == 0)
+ /* This can happen and people will use it to signal that some
+ environment variable changed. */
+ new_domain = old_domain;
+ else
+ {
+ /* If the following malloc fails `_nl_current_default_domain'
+ will be NULL. This value will be returned and so signals we
+ are out of core. */
+#if defined _LIBC || defined HAVE_STRDUP
+ new_domain = strdup (domainname);
+#else
+ size_t len = strlen (domainname) + 1;
+ new_domain = (char *) malloc (len);
+ if (new_domain != NULL)
+ memcpy (new_domain, domainname, len);
+#endif
+
+ if (new_domain != NULL)
+ _nl_current_default_domain = new_domain;
+ }
+
+ /* We use this possibility to signal a change of the loaded catalogs
+ since this is most likely the case and there is no other easy we
+ to do it. Do it only when the call was successful. */
+ if (new_domain != NULL)
+ {
+ ++_nl_msg_cat_cntr;
+
+ if (old_domain != new_domain && old_domain != _nl_default_default_domain)
+ free (old_domain);
+ }
+
+ __libc_rwlock_unlock (_nl_state_lock);
+
+ return new_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__textdomain, textdomain);
+#endif
diff --git a/intl/vasnprintf.c b/intl/vasnprintf.c
new file mode 100644
index 0000000..f59968f
--- /dev/null
+++ b/intl/vasnprintf.c
@@ -0,0 +1,902 @@
+/* vsprintf with automatic memory allocation.
+ Copyright (C) 1999, 2002-2005 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#ifndef IN_LIBINTL
+# include <alloca.h>
+#endif
+
+/* Specification. */
+#if WIDE_CHAR_VERSION
+# include "vasnwprintf.h"
+#else
+# include "vasnprintf.h"
+#endif
+
+#include <stdio.h> /* snprintf(), sprintf() */
+#include <stdlib.h> /* abort(), malloc(), realloc(), free() */
+#include <string.h> /* memcpy(), strlen() */
+#include <errno.h> /* errno */
+#include <limits.h> /* CHAR_BIT, INT_MAX */
+#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */
+#if WIDE_CHAR_VERSION
+# include "wprintf-parse.h"
+#else
+# include "printf-parse.h"
+#endif
+
+/* Checked size_t computations. */
+#include "xsize.h"
+
+/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */
+#ifndef EOVERFLOW
+# define EOVERFLOW E2BIG
+#endif
+
+#ifdef HAVE_WCHAR_T
+# ifdef HAVE_WCSLEN
+# define local_wcslen wcslen
+# else
+ /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
+ a dependency towards this library, here is a local substitute.
+ Define this substitute only once, even if this file is included
+ twice in the same compilation unit. */
+# ifndef local_wcslen_defined
+# define local_wcslen_defined 1
+static size_t
+local_wcslen (const wchar_t *s)
+{
+ const wchar_t *ptr;
+
+ for (ptr = s; *ptr != (wchar_t) 0; ptr++)
+ ;
+ return ptr - s;
+}
+# endif
+# endif
+#endif
+
+#if WIDE_CHAR_VERSION
+# define VASNPRINTF vasnwprintf
+# define CHAR_T wchar_t
+# define DIRECTIVE wchar_t_directive
+# define DIRECTIVES wchar_t_directives
+# define PRINTF_PARSE wprintf_parse
+# define USE_SNPRINTF 1
+# if HAVE_DECL__SNWPRINTF
+ /* On Windows, the function swprintf() has a different signature than
+ on Unix; we use the _snwprintf() function instead. */
+# define SNPRINTF _snwprintf
+# else
+ /* Unix. */
+# define SNPRINTF swprintf
+# endif
+#else
+# define VASNPRINTF vasnprintf
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+# define PRINTF_PARSE printf_parse
+# define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF)
+# if HAVE_DECL__SNPRINTF
+ /* Windows. */
+# define SNPRINTF _snprintf
+# else
+ /* Unix. */
+# define SNPRINTF snprintf
+# endif
+#endif
+
+CHAR_T *
+VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list args)
+{
+ DIRECTIVES d;
+ arguments a;
+
+ if (PRINTF_PARSE (format, &d, &a) < 0)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+
+#define CLEANUP() \
+ free (d.dir); \
+ if (a.arg) \
+ free (a.arg);
+
+ if (printf_fetchargs (args, &a) < 0)
+ {
+ CLEANUP ();
+ errno = EINVAL;
+ return NULL;
+ }
+
+ {
+ size_t buf_neededlength;
+ CHAR_T *buf;
+ CHAR_T *buf_malloced;
+ const CHAR_T *cp;
+ size_t i;
+ DIRECTIVE *dp;
+ /* Output string accumulator. */
+ CHAR_T *result;
+ size_t allocated;
+ size_t length;
+
+ /* Allocate a small buffer that will hold a directive passed to
+ sprintf or snprintf. */
+ buf_neededlength =
+ xsum4 (7, d.max_width_length, d.max_precision_length, 6);
+#if HAVE_ALLOCA
+ if (buf_neededlength < 4000 / sizeof (CHAR_T))
+ {
+ buf = (CHAR_T *) alloca (buf_neededlength * sizeof (CHAR_T));
+ buf_malloced = NULL;
+ }
+ else
+#endif
+ {
+ size_t buf_memsize = xtimes (buf_neededlength, sizeof (CHAR_T));
+ if (size_overflow_p (buf_memsize))
+ goto out_of_memory_1;
+ buf = (CHAR_T *) malloc (buf_memsize);
+ if (buf == NULL)
+ goto out_of_memory_1;
+ buf_malloced = buf;
+ }
+
+ if (resultbuf != NULL)
+ {
+ result = resultbuf;
+ allocated = *lengthp;
+ }
+ else
+ {
+ result = NULL;
+ allocated = 0;
+ }
+ length = 0;
+ /* Invariants:
+ result is either == resultbuf or == NULL or malloc-allocated.
+ If length > 0, then result != NULL. */
+
+ /* Ensures that allocated >= needed. Aborts through a jump to
+ out_of_memory if needed is SIZE_MAX or otherwise too big. */
+#define ENSURE_ALLOCATION(needed) \
+ if ((needed) > allocated) \
+ { \
+ size_t memory_size; \
+ CHAR_T *memory; \
+ \
+ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \
+ if ((needed) > allocated) \
+ allocated = (needed); \
+ memory_size = xtimes (allocated, sizeof (CHAR_T)); \
+ if (size_overflow_p (memory_size)) \
+ goto out_of_memory; \
+ if (result == resultbuf || result == NULL) \
+ memory = (CHAR_T *) malloc (memory_size); \
+ else \
+ memory = (CHAR_T *) realloc (result, memory_size); \
+ if (memory == NULL) \
+ goto out_of_memory; \
+ if (result == resultbuf && length > 0) \
+ memcpy (memory, result, length * sizeof (CHAR_T)); \
+ result = memory; \
+ }
+
+ for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
+ {
+ if (cp != dp->dir_start)
+ {
+ size_t n = dp->dir_start - cp;
+ size_t augmented_length = xsum (length, n);
+
+ ENSURE_ALLOCATION (augmented_length);
+ memcpy (result + length, cp, n * sizeof (CHAR_T));
+ length = augmented_length;
+ }
+ if (i == d.count)
+ break;
+
+ /* Execute a single directive. */
+ if (dp->conversion == '%')
+ {
+ size_t augmented_length;
+
+ if (!(dp->arg_index == ARG_NONE))
+ abort ();
+ augmented_length = xsum (length, 1);
+ ENSURE_ALLOCATION (augmented_length);
+ result[length] = '%';
+ length = augmented_length;
+ }
+ else
+ {
+ if (!(dp->arg_index != ARG_NONE))
+ abort ();
+
+ if (dp->conversion == 'n')
+ {
+ switch (a.arg[dp->arg_index].type)
+ {
+ case TYPE_COUNT_SCHAR_POINTER:
+ *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
+ break;
+ case TYPE_COUNT_SHORT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_short_pointer = length;
+ break;
+ case TYPE_COUNT_INT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_int_pointer = length;
+ break;
+ case TYPE_COUNT_LONGINT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_COUNT_LONGLONGINT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
+ break;
+#endif
+ default:
+ abort ();
+ }
+ }
+ else
+ {
+ arg_type type = a.arg[dp->arg_index].type;
+ CHAR_T *p;
+ unsigned int prefix_count;
+ int prefixes[2];
+#if !USE_SNPRINTF
+ size_t tmp_length;
+ CHAR_T tmpbuf[700];
+ CHAR_T *tmp;
+
+ /* Allocate a temporary buffer of sufficient size for calling
+ sprintf. */
+ {
+ size_t width;
+ size_t precision;
+
+ width = 0;
+ if (dp->width_start != dp->width_end)
+ {
+ if (dp->width_arg_index != ARG_NONE)
+ {
+ int arg;
+
+ if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+ abort ();
+ arg = a.arg[dp->width_arg_index].a.a_int;
+ width = (arg < 0 ? (unsigned int) (-arg) : arg);
+ }
+ else
+ {
+ const CHAR_T *digitp = dp->width_start;
+
+ do
+ width = xsum (xtimes (width, 10), *digitp++ - '0');
+ while (digitp != dp->width_end);
+ }
+ }
+
+ precision = 6;
+ if (dp->precision_start != dp->precision_end)
+ {
+ if (dp->precision_arg_index != ARG_NONE)
+ {
+ int arg;
+
+ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+ abort ();
+ arg = a.arg[dp->precision_arg_index].a.a_int;
+ precision = (arg < 0 ? 0 : arg);
+ }
+ else
+ {
+ const CHAR_T *digitp = dp->precision_start + 1;
+
+ precision = 0;
+ while (digitp != dp->precision_end)
+ precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+ }
+ }
+
+ switch (dp->conversion)
+ {
+
+ case 'd': case 'i': case 'u':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ break;
+
+ case 'o':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ break;
+
+ case 'x': case 'X':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ break;
+
+ case 'f': case 'F':
+# ifdef HAVE_LONG_DOUBLE
+ if (type == TYPE_LONGDOUBLE)
+ tmp_length =
+ (unsigned int) (LDBL_MAX_EXP
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 10; /* sign, decimal point etc. */
+ else
+# endif
+ tmp_length =
+ (unsigned int) (DBL_MAX_EXP
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 10; /* sign, decimal point etc. */
+ tmp_length = xsum (tmp_length, precision);
+ break;
+
+ case 'e': case 'E': case 'g': case 'G':
+ case 'a': case 'A':
+ tmp_length =
+ 12; /* sign, decimal point, exponent etc. */
+ tmp_length = xsum (tmp_length, precision);
+ break;
+
+ case 'c':
+# if defined HAVE_WINT_T && !WIDE_CHAR_VERSION
+ if (type == TYPE_WIDE_CHAR)
+ tmp_length = MB_CUR_MAX;
+ else
+# endif
+ tmp_length = 1;
+ break;
+
+ case 's':
+# ifdef HAVE_WCHAR_T
+ if (type == TYPE_WIDE_STRING)
+ {
+ tmp_length =
+ local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
+
+# if !WIDE_CHAR_VERSION
+ tmp_length = xtimes (tmp_length, MB_CUR_MAX);
+# endif
+ }
+ else
+# endif
+ tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
+ break;
+
+ case 'p':
+ tmp_length =
+ (unsigned int) (sizeof (void *) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading 0x */
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (tmp_length < width)
+ tmp_length = width;
+
+ tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+ }
+
+ if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T))
+ tmp = tmpbuf;
+ else
+ {
+ size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T));
+
+ if (size_overflow_p (tmp_memsize))
+ /* Overflow, would lead to out of memory. */
+ goto out_of_memory;
+ tmp = (CHAR_T *) malloc (tmp_memsize);
+ if (tmp == NULL)
+ /* Out of memory. */
+ goto out_of_memory;
+ }
+#endif
+
+ /* Construct the format string for calling snprintf or
+ sprintf. */
+ p = buf;
+ *p++ = '%';
+ if (dp->flags & FLAG_GROUP)
+ *p++ = '\'';
+ if (dp->flags & FLAG_LEFT)
+ *p++ = '-';
+ if (dp->flags & FLAG_SHOWSIGN)
+ *p++ = '+';
+ if (dp->flags & FLAG_SPACE)
+ *p++ = ' ';
+ if (dp->flags & FLAG_ALT)
+ *p++ = '#';
+ if (dp->flags & FLAG_ZERO)
+ *p++ = '0';
+ if (dp->width_start != dp->width_end)
+ {
+ size_t n = dp->width_end - dp->width_start;
+ memcpy (p, dp->width_start, n * sizeof (CHAR_T));
+ p += n;
+ }
+ if (dp->precision_start != dp->precision_end)
+ {
+ size_t n = dp->precision_end - dp->precision_start;
+ memcpy (p, dp->precision_start, n * sizeof (CHAR_T));
+ p += n;
+ }
+
+ switch (type)
+ {
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ case TYPE_ULONGLONGINT:
+ *p++ = 'l';
+ /*FALLTHROUGH*/
+#endif
+ case TYPE_LONGINT:
+ case TYPE_ULONGINT:
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+#endif
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+#endif
+ *p++ = 'l';
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ *p++ = 'L';
+ break;
+#endif
+ default:
+ break;
+ }
+ *p = dp->conversion;
+#if USE_SNPRINTF
+ p[1] = '%';
+ p[2] = 'n';
+ p[3] = '\0';
+#else
+ p[1] = '\0';
+#endif
+
+ /* Construct the arguments for calling snprintf or sprintf. */
+ prefix_count = 0;
+ if (dp->width_arg_index != ARG_NONE)
+ {
+ if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+ abort ();
+ prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
+ }
+ if (dp->precision_arg_index != ARG_NONE)
+ {
+ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+ abort ();
+ prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
+ }
+
+#if USE_SNPRINTF
+ /* Prepare checking whether snprintf returns the count
+ via %n. */
+ ENSURE_ALLOCATION (xsum (length, 1));
+ result[length] = '\0';
+#endif
+
+ for (;;)
+ {
+ size_t maxlen;
+ int count;
+ int retcount;
+
+ maxlen = allocated - length;
+ count = -1;
+ retcount = 0;
+
+#if USE_SNPRINTF
+# define SNPRINTF_BUF(arg) \
+ switch (prefix_count) \
+ { \
+ case 0: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ arg, &count); \
+ break; \
+ case 1: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ prefixes[0], arg, &count); \
+ break; \
+ case 2: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ prefixes[0], prefixes[1], arg, \
+ &count); \
+ break; \
+ default: \
+ abort (); \
+ }
+#else
+# define SNPRINTF_BUF(arg) \
+ switch (prefix_count) \
+ { \
+ case 0: \
+ count = sprintf (tmp, buf, arg); \
+ break; \
+ case 1: \
+ count = sprintf (tmp, buf, prefixes[0], arg); \
+ break; \
+ case 2: \
+ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
+ arg); \
+ break; \
+ default: \
+ abort (); \
+ }
+#endif
+
+ switch (type)
+ {
+ case TYPE_SCHAR:
+ {
+ int arg = a.arg[dp->arg_index].a.a_schar;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_UCHAR:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_SHORT:
+ {
+ int arg = a.arg[dp->arg_index].a.a_short;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_USHORT:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_INT:
+ {
+ int arg = a.arg[dp->arg_index].a.a_int;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_UINT:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_uint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_LONGINT:
+ {
+ long int arg = a.arg[dp->arg_index].a.a_longint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_ULONGINT:
+ {
+ unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ {
+ long long int arg = a.arg[dp->arg_index].a.a_longlongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_ULONGLONGINT:
+ {
+ unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_DOUBLE:
+ {
+ double arg = a.arg[dp->arg_index].a.a_double;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ {
+ long double arg = a.arg[dp->arg_index].a.a_longdouble;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_CHAR:
+ {
+ int arg = a.arg[dp->arg_index].a.a_char;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+ {
+ wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_STRING:
+ {
+ const char *arg = a.arg[dp->arg_index].a.a_string;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+ {
+ const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_POINTER:
+ {
+ void *arg = a.arg[dp->arg_index].a.a_pointer;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ default:
+ abort ();
+ }
+
+#if USE_SNPRINTF
+ /* Portability: Not all implementations of snprintf()
+ are ISO C 99 compliant. Determine the number of
+ bytes that snprintf() has produced or would have
+ produced. */
+ if (count >= 0)
+ {
+ /* Verify that snprintf() has NUL-terminated its
+ result. */
+ if (count < maxlen && result[length + count] != '\0')
+ abort ();
+ /* Portability hack. */
+ if (retcount > count)
+ count = retcount;
+ }
+ else
+ {
+ /* snprintf() doesn't understand the '%n'
+ directive. */
+ if (p[1] != '\0')
+ {
+ /* Don't use the '%n' directive; instead, look
+ at the snprintf() return value. */
+ p[1] = '\0';
+ continue;
+ }
+ else
+ {
+ /* Look at the snprintf() return value. */
+ if (retcount < 0)
+ {
+ /* HP-UX 10.20 snprintf() is doubly deficient:
+ It doesn't understand the '%n' directive,
+ *and* it returns -1 (rather than the length
+ that would have been required) when the
+ buffer is too small. */
+ size_t bigger_need =
+ xsum (xtimes (allocated, 2), 12);
+ ENSURE_ALLOCATION (bigger_need);
+ continue;
+ }
+ else
+ count = retcount;
+ }
+ }
+#endif
+
+ /* Attempt to handle failure. */
+ if (count < 0)
+ {
+ if (!(result == resultbuf || result == NULL))
+ free (result);
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ CLEANUP ();
+ errno = EINVAL;
+ return NULL;
+ }
+
+#if !USE_SNPRINTF
+ if (count >= tmp_length)
+ /* tmp_length was incorrectly calculated - fix the
+ code above! */
+ abort ();
+#endif
+
+ /* Make room for the result. */
+ if (count >= maxlen)
+ {
+ /* Need at least count bytes. But allocate
+ proportionally, to avoid looping eternally if
+ snprintf() reports a too small count. */
+ size_t n =
+ xmax (xsum (length, count), xtimes (allocated, 2));
+
+ ENSURE_ALLOCATION (n);
+#if USE_SNPRINTF
+ continue;
+#endif
+ }
+
+#if USE_SNPRINTF
+ /* The snprintf() result did fit. */
+#else
+ /* Append the sprintf() result. */
+ memcpy (result + length, tmp, count * sizeof (CHAR_T));
+ if (tmp != tmpbuf)
+ free (tmp);
+#endif
+
+ length += count;
+ break;
+ }
+ }
+ }
+ }
+
+ /* Add the final NUL. */
+ ENSURE_ALLOCATION (xsum (length, 1));
+ result[length] = '\0';
+
+ if (result != resultbuf && length + 1 < allocated)
+ {
+ /* Shrink the allocated memory if possible. */
+ CHAR_T *memory;
+
+ memory = (CHAR_T *) realloc (result, (length + 1) * sizeof (CHAR_T));
+ if (memory != NULL)
+ result = memory;
+ }
+
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ CLEANUP ();
+ *lengthp = length;
+ if (length > INT_MAX)
+ goto length_overflow;
+ return result;
+
+ length_overflow:
+ /* We could produce such a big string, but its length doesn't fit into
+ an 'int'. POSIX says that snprintf() fails with errno = EOVERFLOW in
+ this case. */
+ if (result != resultbuf)
+ free (result);
+ errno = EOVERFLOW;
+ return NULL;
+
+ out_of_memory:
+ if (!(result == resultbuf || result == NULL))
+ free (result);
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ out_of_memory_1:
+ CLEANUP ();
+ errno = ENOMEM;
+ return NULL;
+ }
+}
+
+#undef SNPRINTF
+#undef USE_SNPRINTF
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T
+#undef VASNPRINTF
diff --git a/intl/vasnprintf.h b/intl/vasnprintf.h
new file mode 100644
index 0000000..e67b88d
--- /dev/null
+++ b/intl/vasnprintf.h
@@ -0,0 +1,78 @@
+/* vsprintf with automatic memory allocation.
+ Copyright (C) 2002-2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _VASNPRINTF_H
+#define _VASNPRINTF_H
+
+/* Get va_list. */
+#include <stdarg.h>
+
+/* Get size_t. */
+#include <stddef.h>
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+# define __attribute__(Spec) /* empty */
+# endif
+/* The __-protected variants of `format' and `printf' attributes
+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+# define __format__ format
+# define __printf__ printf
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+ You can pass a preallocated buffer for the result in RESULTBUF and its
+ size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+ If successful, return the address of the string (this may be = RESULTBUF
+ if no dynamic memory allocation was necessary) and set *LENGTHP to the
+ number of resulting bytes, excluding the trailing NUL. Upon error, set
+ errno and return NULL.
+
+ When dynamic memory allocation occurs, the preallocated buffer is left
+ alone (with possibly modified contents). This makes it possible to use
+ a statically allocated or stack-allocated buffer, like this:
+
+ char buf[100];
+ size_t len = sizeof (buf);
+ char *output = vasnprintf (buf, &len, format, args);
+ if (output == NULL)
+ ... error handling ...;
+ else
+ {
+ ... use the output string ...;
+ if (output != buf)
+ free (output);
+ }
+ */
+extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+ __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNPRINTF_H */
diff --git a/intl/vasnwprintf.h b/intl/vasnwprintf.h
new file mode 100644
index 0000000..6ff03ce
--- /dev/null
+++ b/intl/vasnwprintf.h
@@ -0,0 +1,46 @@
+/* vswprintf with automatic memory allocation.
+ Copyright (C) 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _VASNWPRINTF_H
+#define _VASNWPRINTF_H
+
+/* Get va_list. */
+#include <stdarg.h>
+
+/* Get wchar_t, size_t. */
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+ You can pass a preallocated buffer for the result in RESULTBUF and its
+ size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+ If successful, return the address of the string (this may be = RESULTBUF
+ if no dynamic memory allocation was necessary) and set *LENGTHP to the
+ number of resulting bytes, excluding the trailing NUL. Upon error, set
+ errno and return NULL. */
+extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...);
+extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNWPRINTF_H */
diff --git a/intl/wprintf-parse.h b/intl/wprintf-parse.h
new file mode 100644
index 0000000..600b89a
--- /dev/null
+++ b/intl/wprintf-parse.h
@@ -0,0 +1,75 @@
+/* Parse printf format string.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _WPRINTF_PARSE_H
+#define _WPRINTF_PARSE_H
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP 1 /* ' flag */
+#define FLAG_LEFT 2 /* - flag */
+#define FLAG_SHOWSIGN 4 /* + flag */
+#define FLAG_SPACE 8 /* space flag */
+#define FLAG_ALT 16 /* # flag */
+#define FLAG_ZERO 32
+
+/* arg_index value indicating that no argument is consumed. */
+#define ARG_NONE (~(size_t)0)
+
+/* A parsed directive. */
+typedef struct
+{
+ const wchar_t* dir_start;
+ const wchar_t* dir_end;
+ int flags;
+ const wchar_t* width_start;
+ const wchar_t* width_end;
+ size_t width_arg_index;
+ const wchar_t* precision_start;
+ const wchar_t* precision_end;
+ size_t precision_arg_index;
+ wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+ size_t arg_index;
+}
+wchar_t_directive;
+
+/* A parsed format string. */
+typedef struct
+{
+ size_t count;
+ wchar_t_directive *dir;
+ size_t max_width_length;
+ size_t max_precision_length;
+}
+wchar_t_directives;
+
+
+/* Parses the format string. Fills in the number N of directives, and fills
+ in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+ to the end of the format string. Also fills in the arg_type fields of the
+ arguments and the needed count of arguments. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a);
+
+#endif /* _WPRINTF_PARSE_H */
diff --git a/intl/xsize.h b/intl/xsize.h
new file mode 100644
index 0000000..b3023a7
--- /dev/null
+++ b/intl/xsize.h
@@ -0,0 +1,109 @@
+/* xsize.h -- Checked size_t computations.
+
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _XSIZE_H
+#define _XSIZE_H
+
+/* Get size_t. */
+#include <stddef.h>
+
+/* Get SIZE_MAX. */
+#include <limits.h>
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+/* The size of memory objects is often computed through expressions of
+ type size_t. Example:
+ void* p = malloc (header_size + n * element_size).
+ These computations can lead to overflow. When this happens, malloc()
+ returns a piece of memory that is way too small, and the program then
+ crashes while attempting to fill the memory.
+ To avoid this, the functions and macros in this file check for overflow.
+ The convention is that SIZE_MAX represents overflow.
+ malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
+ implementation that uses mmap --, it's recommended to use size_overflow_p()
+ or size_in_bounds_p() before invoking malloc().
+ The example thus becomes:
+ size_t size = xsum (header_size, xtimes (n, element_size));
+ void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
+*/
+
+/* Convert an arbitrary value >= 0 to type size_t. */
+#define xcast_size_t(N) \
+ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
+
+/* Sum of two sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum (size_t size1, size_t size2)
+{
+ size_t sum = size1 + size2;
+ return (sum >= size1 ? sum : SIZE_MAX);
+}
+
+/* Sum of three sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum3 (size_t size1, size_t size2, size_t size3)
+{
+ return xsum (xsum (size1, size2), size3);
+}
+
+/* Sum of four sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
+{
+ return xsum (xsum (xsum (size1, size2), size3), size4);
+}
+
+/* Maximum of two sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xmax (size_t size1, size_t size2)
+{
+ /* No explicit check is needed here, because for any n:
+ max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */
+ return (size1 >= size2 ? size1 : size2);
+}
+
+/* Multiplication of a count with an element size, with overflow check.
+ The count must be >= 0 and the element size must be > 0.
+ This is a macro, not an inline function, so that it works correctly even
+ when N is of a wider tupe and N > SIZE_MAX. */
+#define xtimes(N, ELSIZE) \
+ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
+
+/* Check for overflow. */
+#define size_overflow_p(SIZE) \
+ ((SIZE) == SIZE_MAX)
+/* Check against overflow. */
+#define size_in_bounds_p(SIZE) \
+ ((SIZE) != SIZE_MAX)
+
+#endif /* _XSIZE_H */
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644
index 0000000..1a08258
--- /dev/null
+++ b/lib/Makefile.am
@@ -0,0 +1,43 @@
+## Makefile for the support lib subdirectory of the GNU Shar utilities.
+## Copyright (C) 1995, 1996, 2002, 2007 Free Software Foundation, Inc.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+## Process this file with automake to produce Makefile.in.
+
+noinst_LIBRARIES = libshar.a
+
+EXTRA_DIST = gen-uio alloca.c inttostr.c md5.c memset.c mktime.c \
+stpcpy.c strftime.c strtol.c
+
+BUILT_SOURCES = unlocked-io.h
+CLEANFILES = unlocked-io.h
+
+libshar_a_SOURCES = basename.c error.c getopt.c getopt1.c md5.c offtostr.c \
+whoami.c xgetcwd.c xmalloc.c xstrdup.c
+
+libshar_a_LIBADD = $(ALLOCA) $(LIBOBJS)
+
+noinst_HEADERS = basename.h error.h exit.h getopt.h gettext.h inttostr.h \
+liballoca.h md5.h pathmax.h stpcpy.h system.h xalloc.h xgetcwd.h
+
+AM_CPPFLAGS = -I.. -I$(srcdir) -I../intl
+DEFS = -DLIBDIR=\"$(libdir)\" @DEFS@
+
+error$U.o: unlocked-io.h
+
+unlocked-io.h: $(srcdir)/gen-uio Makefile.am
+ srcdir=$(srcdir) $(SHELL) $(srcdir)/gen-uio $(io_functions) > $@t
+ mv $@t $@
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644
index 0000000..bfaa733
--- /dev/null
+++ b/lib/Makefile.in
@@ -0,0 +1,503 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in alloca.c ansi2knr.c malloc.c memset.c \
+ mktime.c realloc.c stpcpy.c strftime.c strtoimax.c strtol.c \
+ strtoll.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/realloc.m4 \
+ $(top_srcdir)/m4/sharutils.m4 $(top_srcdir)/m4/signed.m4 \
+ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrtoimax.m4 \
+ $(top_srcdir)/version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libshar_a_AR = $(AR) $(ARFLAGS)
+libshar_a_DEPENDENCIES = $(ALLOCA) $(LIBOBJS)
+am_libshar_a_OBJECTS = basename.$(OBJEXT) error.$(OBJEXT) \
+ getopt.$(OBJEXT) getopt1.$(OBJEXT) md5.$(OBJEXT) \
+ offtostr.$(OBJEXT) whoami.$(OBJEXT) xgetcwd.$(OBJEXT) \
+ xmalloc.$(OBJEXT) xstrdup.$(OBJEXT)
+libshar_a_OBJECTS = $(am_libshar_a_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libshar_a_SOURCES)
+DIST_SOURCES = $(libshar_a_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_SCRIPT = @ADD_SCRIPT@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMPRESS = @COMPRESS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = -DLIBDIR=\"$(libdir)\" @DEFS@
+DEPDIR = @DEPDIR@
+DIFF = @DIFF@
+DIRENT_HEADER = @DIRENT_HEADER@
+DIST_ALPHA = @DIST_ALPHA@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+INSTALL = @INSTALL@
+INSTALL_COMPRESS_LINK = @INSTALL_COMPRESS_LINK@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAILER = @MAILER@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SH = @SH@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TAR = @TAR@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LIBRARIES = libshar.a
+EXTRA_DIST = gen-uio alloca.c inttostr.c md5.c memset.c mktime.c \
+stpcpy.c strftime.c strtol.c
+
+BUILT_SOURCES = unlocked-io.h
+CLEANFILES = unlocked-io.h
+libshar_a_SOURCES = basename.c error.c getopt.c getopt1.c md5.c offtostr.c \
+whoami.c xgetcwd.c xmalloc.c xstrdup.c
+
+libshar_a_LIBADD = $(ALLOCA) $(LIBOBJS)
+noinst_HEADERS = basename.h error.h exit.h getopt.h gettext.h inttostr.h \
+liballoca.h md5.h pathmax.h stpcpy.h system.h xalloc.h xgetcwd.h
+
+AM_CPPFLAGS = -I.. -I$(srcdir) -I../intl
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnits lib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libshar.a: $(libshar_a_OBJECTS) $(libshar_a_DEPENDENCIES)
+ -rm -f libshar.a
+ $(libshar_a_AR) libshar.a $(libshar_a_OBJECTS) $(libshar_a_LIBADD)
+ $(RANLIB) libshar.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/malloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mktime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/realloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/stpcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strftime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoimax.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtol.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoll.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/offtostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/whoami.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetcwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrdup.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LIBRARIES) $(HEADERS)
+installdirs:
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf $(DEPDIR) ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf $(DEPDIR) ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-noinstLIBRARIES ctags distclean distclean-compile \
+ distclean-generic distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am
+
+
+error$U.o: unlocked-io.h
+
+unlocked-io.h: $(srcdir)/gen-uio Makefile.am
+ srcdir=$(srcdir) $(SHELL) $(srcdir)/gen-uio $(io_functions) > $@t
+ mv $@t $@
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/alloca.c b/lib/alloca.c
new file mode 100644
index 0000000..6ad425a
--- /dev/null
+++ b/lib/alloca.c
@@ -0,0 +1,504 @@
+/* alloca.c -- allocate automatically reclaimed memory
+ (Mostly) portable public-domain implementation -- D A Gwyn
+
+ This implementation of the PWB library alloca function,
+ which is used to allocate space off the run-time stack so
+ that it is automatically reclaimed upon procedure exit,
+ was inspired by discussions with J. Q. Johnson of Cornell.
+ J.Otto Tennant <jot@cray.com> contributed the Cray support.
+
+ There are some preprocessor constants that can
+ be defined when compiling for your specific system, for
+ improved efficiency; however, the defaults should be okay.
+
+ The general concept of this implementation is to keep
+ track of all alloca-allocated blocks, and reclaim any
+ that are found to be deeper in the stack than the current
+ invocation. This heuristic does not reclaim storage as
+ soon as it becomes invalid, but it will do so eventually.
+
+ As a special case, alloca(0) reclaims storage without
+ allocating any. It is a good idea to use alloca(0) in
+ your main control loop, etc. to force garbage collection. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_STRING_H
+# include <string.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#ifdef emacs
+# include "blockinput.h"
+#endif
+
+/* If compiling with GCC 2, this file's not needed. */
+#if !defined (__GNUC__) || __GNUC__ < 2
+
+/* If someone has defined alloca as a macro,
+ there must be some other way alloca is supposed to work. */
+# ifndef alloca
+
+# ifdef emacs
+# ifdef static
+/* actually, only want this if static is defined as ""
+ -- this is for usg, in which emacs must undefine static
+ in order to make unexec workable
+ */
+# ifndef STACK_DIRECTION
+you
+lose
+-- must know STACK_DIRECTION at compile-time
+# endif /* STACK_DIRECTION undefined */
+# endif /* static */
+# endif /* emacs */
+
+/* If your stack is a linked list of frames, you have to
+ provide an "address metric" ADDRESS_FUNCTION macro. */
+
+# if defined (CRAY) && defined (CRAY_STACKSEG_END)
+long i00afunc ();
+# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
+# else
+# define ADDRESS_FUNCTION(arg) &(arg)
+# endif
+
+# if __STDC__
+typedef void *pointer;
+# else
+typedef char *pointer;
+# endif
+
+# ifndef NULL
+# define NULL 0
+# endif
+
+/* Different portions of Emacs need to call different versions of
+ malloc. The Emacs executable needs alloca to call xmalloc, because
+ ordinary malloc isn't protected from input signals. On the other
+ hand, the utilities in lib-src need alloca to call malloc; some of
+ them are very simple, and don't have an xmalloc routine.
+
+ Non-Emacs programs expect this to call xmalloc.
+
+ Callers below should use malloc. */
+
+# ifndef emacs
+# undef malloc
+# define malloc xmalloc
+# endif
+extern pointer malloc ();
+
+/* Define STACK_DIRECTION if you know the direction of stack
+ growth for your system; otherwise it will be automatically
+ deduced at run-time.
+
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+
+# ifndef STACK_DIRECTION
+# define STACK_DIRECTION 0 /* Direction unknown. */
+# endif
+
+# if STACK_DIRECTION != 0
+
+# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
+
+# else /* STACK_DIRECTION == 0; need run-time code. */
+
+static int stack_dir; /* 1 or -1 once known. */
+# define STACK_DIR stack_dir
+
+static void
+find_stack_direction ()
+{
+ static char *addr = NULL; /* Address of first `dummy', once known. */
+ auto char dummy; /* To get stack address. */
+
+ if (addr == NULL)
+ { /* Initial entry. */
+ addr = ADDRESS_FUNCTION (dummy);
+
+ find_stack_direction (); /* Recurse once. */
+ }
+ else
+ {
+ /* Second entry. */
+ if (ADDRESS_FUNCTION (dummy) > addr)
+ stack_dir = 1; /* Stack grew upward. */
+ else
+ stack_dir = -1; /* Stack grew downward. */
+ }
+}
+
+# endif /* STACK_DIRECTION == 0 */
+
+/* An "alloca header" is used to:
+ (a) chain together all alloca'ed blocks;
+ (b) keep track of stack depth.
+
+ It is very important that sizeof(header) agree with malloc
+ alignment chunk size. The following default should work okay. */
+
+# ifndef ALIGN_SIZE
+# define ALIGN_SIZE sizeof(double)
+# endif
+
+typedef union hdr
+{
+ char align[ALIGN_SIZE]; /* To force sizeof(header). */
+ struct
+ {
+ union hdr *next; /* For chaining headers. */
+ char *deep; /* For stack depth measure. */
+ } h;
+} header;
+
+static header *last_alloca_header = NULL; /* -> last alloca header. */
+
+/* Return a pointer to at least SIZE bytes of storage,
+ which will be automatically reclaimed upon exit from
+ the procedure that called alloca. Originally, this space
+ was supposed to be taken from the current stack frame of the
+ caller, but that method cannot be made to work for some
+ implementations of C, for example under Gould's UTX/32. */
+
+pointer
+alloca (size_t size)
+{
+ auto char probe; /* Probes stack depth: */
+ register char *depth = ADDRESS_FUNCTION (probe);
+
+# if STACK_DIRECTION == 0
+ if (STACK_DIR == 0) /* Unknown growth direction. */
+ find_stack_direction ();
+# endif
+
+ /* Reclaim garbage, defined as all alloca'd storage that
+ was allocated from deeper in the stack than currently. */
+
+ {
+ register header *hp; /* Traverses linked list. */
+
+# ifdef emacs
+ BLOCK_INPUT;
+# endif
+
+ for (hp = last_alloca_header; hp != NULL;)
+ if ((STACK_DIR > 0 && hp->h.deep > depth)
+ || (STACK_DIR < 0 && hp->h.deep < depth))
+ {
+ register header *np = hp->h.next;
+
+ free ((pointer) hp); /* Collect garbage. */
+
+ hp = np; /* -> next header. */
+ }
+ else
+ break; /* Rest are not deeper. */
+
+ last_alloca_header = hp; /* -> last valid storage. */
+
+# ifdef emacs
+ UNBLOCK_INPUT;
+# endif
+ }
+
+ if (size == 0)
+ return NULL; /* No allocation required. */
+
+ /* Allocate combined header + user data storage. */
+
+ {
+ register pointer new = malloc (sizeof (header) + size);
+ /* Address of header. */
+
+ if (new == 0)
+ abort();
+
+ ((header *) new)->h.next = last_alloca_header;
+ ((header *) new)->h.deep = depth;
+
+ last_alloca_header = (header *) new;
+
+ /* User storage begins just after header. */
+
+ return (pointer) ((char *) new + sizeof (header));
+ }
+}
+
+# if defined (CRAY) && defined (CRAY_STACKSEG_END)
+
+# ifdef DEBUG_I00AFUNC
+# include <stdio.h>
+# endif
+
+# ifndef CRAY_STACK
+# define CRAY_STACK
+# ifndef CRAY2
+/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
+struct stack_control_header
+ {
+ long shgrow:32; /* Number of times stack has grown. */
+ long shaseg:32; /* Size of increments to stack. */
+ long shhwm:32; /* High water mark of stack. */
+ long shsize:32; /* Current size of stack (all segments). */
+ };
+
+/* The stack segment linkage control information occurs at
+ the high-address end of a stack segment. (The stack
+ grows from low addresses to high addresses.) The initial
+ part of the stack segment linkage control information is
+ 0200 (octal) words. This provides for register storage
+ for the routine which overflows the stack. */
+
+struct stack_segment_linkage
+ {
+ long ss[0200]; /* 0200 overflow words. */
+ long sssize:32; /* Number of words in this segment. */
+ long ssbase:32; /* Offset to stack base. */
+ long:32;
+ long sspseg:32; /* Offset to linkage control of previous
+ segment of stack. */
+ long:32;
+ long sstcpt:32; /* Pointer to task common address block. */
+ long sscsnm; /* Private control structure number for
+ microtasking. */
+ long ssusr1; /* Reserved for user. */
+ long ssusr2; /* Reserved for user. */
+ long sstpid; /* Process ID for pid based multi-tasking. */
+ long ssgvup; /* Pointer to multitasking thread giveup. */
+ long sscray[7]; /* Reserved for Cray Research. */
+ long ssa0;
+ long ssa1;
+ long ssa2;
+ long ssa3;
+ long ssa4;
+ long ssa5;
+ long ssa6;
+ long ssa7;
+ long sss0;
+ long sss1;
+ long sss2;
+ long sss3;
+ long sss4;
+ long sss5;
+ long sss6;
+ long sss7;
+ };
+
+# else /* CRAY2 */
+/* The following structure defines the vector of words
+ returned by the STKSTAT library routine. */
+struct stk_stat
+ {
+ long now; /* Current total stack size. */
+ long maxc; /* Amount of contiguous space which would
+ be required to satisfy the maximum
+ stack demand to date. */
+ long high_water; /* Stack high-water mark. */
+ long overflows; /* Number of stack overflow ($STKOFEN) calls. */
+ long hits; /* Number of internal buffer hits. */
+ long extends; /* Number of block extensions. */
+ long stko_mallocs; /* Block allocations by $STKOFEN. */
+ long underflows; /* Number of stack underflow calls ($STKRETN). */
+ long stko_free; /* Number of deallocations by $STKRETN. */
+ long stkm_free; /* Number of deallocations by $STKMRET. */
+ long segments; /* Current number of stack segments. */
+ long maxs; /* Maximum number of stack segments so far. */
+ long pad_size; /* Stack pad size. */
+ long current_address; /* Current stack segment address. */
+ long current_size; /* Current stack segment size. This
+ number is actually corrupted by STKSTAT to
+ include the fifteen word trailer area. */
+ long initial_address; /* Address of initial segment. */
+ long initial_size; /* Size of initial segment. */
+ };
+
+/* The following structure describes the data structure which trails
+ any stack segment. I think that the description in 'asdef' is
+ out of date. I only describe the parts that I am sure about. */
+
+struct stk_trailer
+ {
+ long this_address; /* Address of this block. */
+ long this_size; /* Size of this block (does not include
+ this trailer). */
+ long unknown2;
+ long unknown3;
+ long link; /* Address of trailer block of previous
+ segment. */
+ long unknown5;
+ long unknown6;
+ long unknown7;
+ long unknown8;
+ long unknown9;
+ long unknown10;
+ long unknown11;
+ long unknown12;
+ long unknown13;
+ long unknown14;
+ };
+
+# endif /* CRAY2 */
+# endif /* not CRAY_STACK */
+
+# ifdef CRAY2
+/* Determine a "stack measure" for an arbitrary ADDRESS.
+ I doubt that "lint" will like this much. */
+
+static long
+i00afunc (long *address)
+{
+ struct stk_stat status;
+ struct stk_trailer *trailer;
+ long *block, size;
+ long result = 0;
+
+ /* We want to iterate through all of the segments. The first
+ step is to get the stack status structure. We could do this
+ more quickly and more directly, perhaps, by referencing the
+ $LM00 common block, but I know that this works. */
+
+ STKSTAT (&status);
+
+ /* Set up the iteration. */
+
+ trailer = (struct stk_trailer *) (status.current_address
+ + status.current_size
+ - 15);
+
+ /* There must be at least one stack segment. Therefore it is
+ a fatal error if "trailer" is null. */
+
+ if (trailer == 0)
+ abort ();
+
+ /* Discard segments that do not contain our argument address. */
+
+ while (trailer != 0)
+ {
+ block = (long *) trailer->this_address;
+ size = trailer->this_size;
+ if (block == 0 || size == 0)
+ abort ();
+ trailer = (struct stk_trailer *) trailer->link;
+ if ((block <= address) && (address < (block + size)))
+ break;
+ }
+
+ /* Set the result to the offset in this segment and add the sizes
+ of all predecessor segments. */
+
+ result = address - block;
+
+ if (trailer == 0)
+ {
+ return result;
+ }
+
+ do
+ {
+ if (trailer->this_size <= 0)
+ abort ();
+ result += trailer->this_size;
+ trailer = (struct stk_trailer *) trailer->link;
+ }
+ while (trailer != 0);
+
+ /* We are done. Note that if you present a bogus address (one
+ not in any segment), you will get a different number back, formed
+ from subtracting the address of the first block. This is probably
+ not what you want. */
+
+ return (result);
+}
+
+# else /* not CRAY2 */
+/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
+ Determine the number of the cell within the stack,
+ given the address of the cell. The purpose of this
+ routine is to linearize, in some sense, stack addresses
+ for alloca. */
+
+static long
+i00afunc (long address)
+{
+ long stkl = 0;
+
+ long size, pseg, this_segment, stack;
+ long result = 0;
+
+ struct stack_segment_linkage *ssptr;
+
+ /* Register B67 contains the address of the end of the
+ current stack segment. If you (as a subprogram) store
+ your registers on the stack and find that you are past
+ the contents of B67, you have overflowed the segment.
+
+ B67 also points to the stack segment linkage control
+ area, which is what we are really interested in. */
+
+ stkl = CRAY_STACKSEG_END ();
+ ssptr = (struct stack_segment_linkage *) stkl;
+
+ /* If one subtracts 'size' from the end of the segment,
+ one has the address of the first word of the segment.
+
+ If this is not the first segment, 'pseg' will be
+ nonzero. */
+
+ pseg = ssptr->sspseg;
+ size = ssptr->sssize;
+
+ this_segment = stkl - size;
+
+ /* It is possible that calling this routine itself caused
+ a stack overflow. Discard stack segments which do not
+ contain the target address. */
+
+ while (!(this_segment <= address && address <= stkl))
+ {
+# ifdef DEBUG_I00AFUNC
+ fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
+# endif
+ if (pseg == 0)
+ break;
+ stkl = stkl - pseg;
+ ssptr = (struct stack_segment_linkage *) stkl;
+ size = ssptr->sssize;
+ pseg = ssptr->sspseg;
+ this_segment = stkl - size;
+ }
+
+ result = address - this_segment;
+
+ /* If you subtract pseg from the current end of the stack,
+ you get the address of the previous stack segment's end.
+ This seems a little convoluted to me, but I'll bet you save
+ a cycle somewhere. */
+
+ while (pseg != 0)
+ {
+# ifdef DEBUG_I00AFUNC
+ fprintf (stderr, "%011o %011o\n", pseg, size);
+# endif
+ stkl = stkl - pseg;
+ ssptr = (struct stack_segment_linkage *) stkl;
+ size = ssptr->sssize;
+ pseg = ssptr->sspseg;
+ result += size;
+ }
+ return (result);
+}
+
+# endif /* not CRAY2 */
+# endif /* CRAY */
+
+# endif /* no alloca */
+#endif /* not GCC version 2 */
diff --git a/lib/ansi2knr.c b/lib/ansi2knr.c
new file mode 100644
index 0000000..8be5296
--- /dev/null
+++ b/lib/ansi2knr.c
@@ -0,0 +1,481 @@
+/* Copyright (C) 1989, 1991, 1993, 1994, 1995 Aladdin Enterprises. All rights reserved. */
+
+/* ansi2knr.c */
+/* Convert ANSI C function definitions to K&R ("traditional C") syntax */
+
+/*
+ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY. No author or distributor accepts responsibility to anyone for the
+consequences of using it or for whether it serves any particular purpose or
+works at all, unless he says so in writing. Refer to the GNU General Public
+License (the "GPL") for full details.
+
+Everyone is granted permission to copy, modify and redistribute ansi2knr,
+but only under the conditions described in the GPL. A copy of this license
+is supposed to have been given to you along with ansi2knr so you can know
+your rights and responsibilities. It should be in a file named COPYLEFT.
+Among other things, the copyright notice and this notice must be preserved
+on all copies.
+
+We explicitly state here what we believe is already implied by the GPL: if
+the ansi2knr program is distributed as a separate set of sources and a
+separate executable file which are aggregated on a storage medium together
+with another program, this in itself does not bring the other program under
+the GPL, nor does the mere fact that such a program or the procedures for
+constructing it invoke the ansi2knr executable bring any other part of the
+program under the GPL.
+*/
+
+/*
+ * Usage:
+ ansi2knr input_file [output_file]
+ * If no output_file is supplied, output goes to stdout.
+ * There are no error messages.
+ *
+ * ansi2knr recognizes function definitions by seeing a non-keyword
+ * identifier at the left margin, followed by a left parenthesis,
+ * with a right parenthesis as the last character on the line.
+ * It will recognize a multi-line header provided that the last character
+ * of the last line of the header is a right parenthesis,
+ * and no intervening line ends with a left or right brace or a semicolon.
+ * These algorithms ignore whitespace and comments, except that
+ * the function name must be the first thing on the line.
+ * The following constructs will confuse it:
+ * - Any other construct that starts at the left margin and
+ * follows the above syntax (such as a macro or function call).
+ * - Macros that tinker with the syntax of the function header.
+ */
+
+/*
+ * The original and principal author of ansi2knr is L. Peter Deutsch
+ * <ghost@aladdin.com>. Other authors are noted in the change history
+ * that follows (in reverse chronological order):
+ lpd 95-06-22 removed #ifndefs whose sole purpose was to define
+ undefined preprocessor symbols as 0; changed all #ifdefs
+ for configuration symbols to #ifs
+ lpd 95-04-05 changed copyright notice to make it clear that
+ including ansi2knr in a program does not bring the entire
+ program under the GPL
+ lpd 94-12-18 added conditionals for systems where ctype macros
+ don't handle 8-bit characters properly, suggested by
+ Francois Pinard <pinard@iro.umontreal.ca>;
+ removed --varargs switch (this is now the default)
+ lpd 94-10-10 removed CONFIG_BROKETS conditional
+ lpd 94-07-16 added some conditionals to help GNU `configure',
+ suggested by Francois Pinard <pinard@iro.umontreal.ca>;
+ properly erase prototype args in function parameters,
+ contributed by Jim Avera <jima@netcom.com>;
+ correct error in writeblanks (it shouldn't erase EOLs)
+ lpd 89-xx-xx original version
+ */
+
+/* Most of the conditionals here are to make ansi2knr work with */
+/* the GNU configure machinery. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+
+#if HAVE_CONFIG_H
+
+/*
+ For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h).
+ This will define HAVE_CONFIG_H and so, activate the following lines.
+ */
+
+# if STDC_HEADERS || HAVE_STRING_H
+# include <string.h>
+# else
+# include <strings.h>
+# endif
+
+#else /* not HAVE_CONFIG_H */
+
+/*
+ Without AC_CONFIG_HEADER, merely use <string.h> as in the original
+ Ghostscript distribution. This loses on older BSD systems.
+ */
+
+# include <string.h>
+
+#endif /* not HAVE_CONFIG_H */
+
+#if STDC_HEADERS
+# include <stdlib.h>
+#else
+/*
+ malloc and free should be declared in stdlib.h,
+ but if you've got a K&R compiler, they probably aren't.
+ */
+char *malloc();
+void free();
+#endif
+
+/*
+ * The ctype macros don't always handle 8-bit characters correctly.
+ * Compensate for this here.
+ */
+#ifdef isascii
+# undef HAVE_ISASCII /* just in case */
+# define HAVE_ISASCII 1
+#else
+#endif
+#if STDC_HEADERS || !HAVE_ISASCII
+# define is_ascii(c) 1
+#else
+# define is_ascii(c) isascii(c)
+#endif
+
+#define is_space(c) (is_ascii(c) && isspace(c))
+#define is_alpha(c) (is_ascii(c) && isalpha(c))
+#define is_alnum(c) (is_ascii(c) && isalnum(c))
+
+/* Scanning macros */
+#define isidchar(ch) (is_alnum(ch) || (ch) == '_')
+#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_')
+
+/* Forward references */
+char *skipspace();
+void writeblanks();
+int test1();
+int convert1();
+
+/* The main program */
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{ FILE *in, *out;
+#define bufsize 5000 /* arbitrary size */
+ char *buf;
+ char *line;
+ /*
+ * In previous versions, ansi2knr recognized a --varargs switch.
+ * If this switch was supplied, ansi2knr would attempt to convert
+ * a ... argument to va_alist and va_dcl; if this switch was not
+ * supplied, ansi2knr would simply drop any such arguments.
+ * Now, ansi2knr always does this conversion, and we only
+ * check for this switch for backward compatibility.
+ */
+ int convert_varargs = 1;
+
+ if ( argc > 1 && argv[1][0] == '-' )
+ { if ( !strcmp(argv[1], "--varargs") )
+ { convert_varargs = 1;
+ argc--;
+ argv++;
+ }
+ else
+ { fprintf(stderr, "Unrecognized switch: %s\n", argv[1]);
+ exit(1);
+ }
+ }
+ switch ( argc )
+ {
+ default:
+ printf("Usage: ansi2knr input_file [output_file]\n");
+ exit(0);
+ case 2:
+ out = stdout;
+ break;
+ case 3:
+ out = fopen(argv[2], "w");
+ if ( out == NULL )
+ { fprintf(stderr, "Cannot open output file %s\n", argv[2]);
+ exit(1);
+ }
+ }
+ in = fopen(argv[1], "r");
+ if ( in == NULL )
+ { fprintf(stderr, "Cannot open input file %s\n", argv[1]);
+ exit(1);
+ }
+ fprintf(out, "#line 1 \"%s\"\n", argv[1]);
+ buf = malloc(bufsize);
+ line = buf;
+ while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
+ { switch ( test1(buf) )
+ {
+ case 2: /* a function header */
+ convert1(buf, out, 1, convert_varargs);
+ break;
+ case 1: /* a function */
+ convert1(buf, out, 0, convert_varargs);
+ break;
+ case -1: /* maybe the start of a function */
+ line = buf + strlen(buf);
+ if ( line != buf + (bufsize - 1) ) /* overflow check */
+ continue;
+ /* falls through */
+ default: /* not a function */
+ fputs(buf, out);
+ break;
+ }
+ line = buf;
+ }
+ if ( line != buf ) fputs(buf, out);
+ free(buf);
+ fclose(out);
+ fclose(in);
+ return 0;
+}
+
+/* Skip over space and comments, in either direction. */
+char *
+skipspace(p, dir)
+ register char *p;
+ register int dir; /* 1 for forward, -1 for backward */
+{ for ( ; ; )
+ { while ( is_space(*p) ) p += dir;
+ if ( !(*p == '/' && p[dir] == '*') ) break;
+ p += dir; p += dir;
+ while ( !(*p == '*' && p[dir] == '/') )
+ { if ( *p == 0 ) return p; /* multi-line comment?? */
+ p += dir;
+ }
+ p += dir; p += dir;
+ }
+ return p;
+}
+
+/*
+ * Write blanks over part of a string.
+ * Don't overwrite end-of-line characters.
+ */
+void
+writeblanks(start, end)
+ char *start;
+ char *end;
+{ char *p;
+ for ( p = start; p < end; p++ )
+ if ( *p != '\r' && *p != '\n' ) *p = ' ';
+}
+
+/*
+ * Test whether the string in buf is a function definition.
+ * The string may contain and/or end with a newline.
+ * Return as follows:
+ * 0 - definitely not a function definition;
+ * 1 - definitely a function definition;
+ * 2 - definitely a function prototype (NOT USED);
+ * -1 - may be the beginning of a function definition,
+ * append another line and look again.
+ * The reason we don't attempt to convert function prototypes is that
+ * Ghostscript's declaration-generating macros look too much like
+ * prototypes, and confuse the algorithms.
+ */
+int
+test1(buf)
+ char *buf;
+{ register char *p = buf;
+ char *bend;
+ char *endfn;
+ int contin;
+ if ( !isidfirstchar(*p) )
+ return 0; /* no name at left margin */
+ bend = skipspace(buf + strlen(buf) - 1, -1);
+ switch ( *bend )
+ {
+ case ';': contin = 0 /*2*/; break;
+ case ')': contin = 1; break;
+ case '{': return 0; /* not a function */
+ case '}': return 0; /* not a function */
+ default: contin = -1;
+ }
+ while ( isidchar(*p) ) p++;
+ endfn = p;
+ p = skipspace(p, 1);
+ if ( *p++ != '(' )
+ return 0; /* not a function */
+ p = skipspace(p, 1);
+ if ( *p == ')' )
+ return 0; /* no parameters */
+ /* Check that the apparent function name isn't a keyword. */
+ /* We only need to check for keywords that could be followed */
+ /* by a left parenthesis (which, unfortunately, is most of them). */
+ { static char *words[] =
+ { "asm", "auto", "case", "char", "const", "double",
+ "extern", "float", "for", "if", "int", "long",
+ "register", "return", "short", "signed", "sizeof",
+ "static", "switch", "typedef", "unsigned",
+ "void", "volatile", "while", 0
+ };
+ char **key = words;
+ char *kp;
+ int len = endfn - buf;
+ while ( (kp = *key) != 0 )
+ { if ( strlen(kp) == len && !strncmp(kp, buf, len) )
+ return 0; /* name is a keyword */
+ key++;
+ }
+ }
+ return contin;
+}
+
+/* Convert a recognized function definition or header to K&R syntax. */
+int
+convert1(buf, out, header, convert_varargs)
+ char *buf;
+ FILE *out;
+ int header; /* Boolean */
+ int convert_varargs; /* Boolean */
+{ char *endfn;
+ register char *p;
+ char **breaks;
+ unsigned num_breaks = 2; /* for testing */
+ char **btop;
+ char **bp;
+ char **ap;
+ char *vararg = 0;
+ /* Pre-ANSI implementations don't agree on whether strchr */
+ /* is called strchr or index, so we open-code it here. */
+ for ( endfn = buf; *(endfn++) != '('; ) ;
+top: p = endfn;
+ breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
+ if ( breaks == 0 )
+ { /* Couldn't allocate break table, give up */
+ fprintf(stderr, "Unable to allocate break table!\n");
+ fputs(buf, out);
+ return -1;
+ }
+ btop = breaks + num_breaks * 2 - 2;
+ bp = breaks;
+ /* Parse the argument list */
+ do
+ { int level = 0;
+ char *lp = NULL;
+ char *rp;
+ char *end = NULL;
+ if ( bp >= btop )
+ { /* Filled up break table. */
+ /* Allocate a bigger one and start over. */
+ free((char *)breaks);
+ num_breaks <<= 1;
+ goto top;
+ }
+ *bp++ = p;
+ /* Find the end of the argument */
+ for ( ; end == NULL; p++ )
+ { switch(*p)
+ {
+ case ',':
+ if ( !level ) end = p;
+ break;
+ case '(':
+ if ( !level ) lp = p;
+ level++;
+ break;
+ case ')':
+ if ( --level < 0 ) end = p;
+ else rp = p;
+ break;
+ case '/':
+ p = skipspace(p, 1) - 1;
+ break;
+ default:
+ ;
+ }
+ }
+ /* Erase any embedded prototype parameters. */
+ if ( lp )
+ writeblanks(lp + 1, rp);
+ p--; /* back up over terminator */
+ /* Find the name being declared. */
+ /* This is complicated because of procedure and */
+ /* array modifiers. */
+ for ( ; ; )
+ { p = skipspace(p - 1, -1);
+ switch ( *p )
+ {
+ case ']': /* skip array dimension(s) */
+ case ')': /* skip procedure args OR name */
+ { int level = 1;
+ while ( level )
+ switch ( *--p )
+ {
+ case ']': case ')': level++; break;
+ case '[': case '(': level--; break;
+ case '/': p = skipspace(p, -1) + 1; break;
+ default: ;
+ }
+ }
+ if ( *p == '(' && *skipspace(p + 1, 1) == '*' )
+ { /* We found the name being declared */
+ while ( !isidfirstchar(*p) )
+ p = skipspace(p, 1) + 1;
+ goto found;
+ }
+ break;
+ default: goto found;
+ }
+ }
+found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
+ { if ( convert_varargs )
+ { *bp++ = "va_alist";
+ vararg = p-2;
+ }
+ else
+ { p++;
+ if ( bp == breaks + 1 ) /* sole argument */
+ writeblanks(breaks[0], p);
+ else
+ writeblanks(bp[-1] - 1, p);
+ bp--;
+ }
+ }
+ else
+ { while ( isidchar(*p) ) p--;
+ *bp++ = p+1;
+ }
+ p = end;
+ }
+ while ( *p++ == ',' );
+ *bp = p;
+ /* Make a special check for 'void' arglist */
+ if ( bp == breaks+2 )
+ { p = skipspace(breaks[0], 1);
+ if ( !strncmp(p, "void", 4) )
+ { p = skipspace(p+4, 1);
+ if ( p == breaks[2] - 1 )
+ { bp = breaks; /* yup, pretend arglist is empty */
+ writeblanks(breaks[0], p + 1);
+ }
+ }
+ }
+ /* Put out the function name and left parenthesis. */
+ p = buf;
+ while ( p != endfn ) putc(*p, out), p++;
+ /* Put out the declaration. */
+ if ( header )
+ { fputs(");", out);
+ for ( p = breaks[0]; *p; p++ )
+ if ( *p == '\r' || *p == '\n' )
+ putc(*p, out);
+ }
+ else
+ { for ( ap = breaks+1; ap < bp; ap += 2 )
+ { p = *ap;
+ while ( isidchar(*p) )
+ putc(*p, out), p++;
+ if ( ap < bp - 1 )
+ fputs(", ", out);
+ }
+ fputs(") ", out);
+ /* Put out the argument declarations */
+ for ( ap = breaks+2; ap <= bp; ap += 2 )
+ (*ap)[-1] = ';';
+ if ( vararg != 0 )
+ { *vararg = 0;
+ fputs(breaks[0], out); /* any prior args */
+ fputs("va_dcl", out); /* the final arg */
+ fputs(bp[0], out);
+ }
+ else
+ fputs(breaks[0], out);
+ }
+ free((char *)breaks);
+ return 0;
+}
diff --git a/lib/basename.c b/lib/basename.c
new file mode 100644
index 0000000..443b368
--- /dev/null
+++ b/lib/basename.c
@@ -0,0 +1,90 @@
+/* Return the name-within-directory of a file name.
+
+ Copyright (C) 1996-1999, 2000-2002, 2007 Free Software Foundation, Inc.
+
+ NOTE: The canonical source of this file is maintained with the GNU C Library.
+ Bugs can be reported to bug-glibc@gnu.org.
+
+ 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 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "basename.h"
+
+#if !(__GLIBC__ >= 2)
+
+#include <stdio.h>
+#include <assert.h>
+
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef FILESYSTEM_PREFIX_LEN
+# define FILESYSTEM_PREFIX_LEN(Filename) 0
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == '/')
+#endif
+
+#ifndef _LIBC
+/* We cannot generally use the name `basename' since XPG defines an unusable
+ variant of the function but we cannot use it. */
+# undef basename
+# define basename gnu_basename
+#endif
+
+/* In general, we can't use the builtin `basename' function if available,
+ since it has different meanings in different environments.
+ In some environments the builtin `basename' modifies its argument.
+ If NAME is all slashes, be sure to return `/'. */
+
+char *
+basename (name)
+ char const *name;
+{
+ char const *base = name += FILESYSTEM_PREFIX_LEN (name);
+ int all_slashes = 1;
+ char const *p;
+
+ for (p = name; *p; p++)
+ {
+ if (ISSLASH (*p))
+ base = p + 1;
+ else
+ all_slashes = 0;
+ }
+
+ /* If NAME is all slashes, arrange to return `/'. */
+ if (*base == '\0' && ISSLASH (*name) && all_slashes)
+ --base;
+
+ /* Make sure the last byte is not a slash. */
+ assert (all_slashes || !ISSLASH (*(p - 1)));
+
+ return (char *) base;
+}
+
+#endif
diff --git a/lib/basename.h b/lib/basename.h
new file mode 100644
index 0000000..423e78c
--- /dev/null
+++ b/lib/basename.h
@@ -0,0 +1,40 @@
+/* Pathname hacking.
+ Copyright (C) 2001-2002, 2007 Free Software Foundation, Inc.
+ Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+
+ 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _BASENAME_H
+#define _BASENAME_H
+
+/* This is where basename() is declared. */
+#include <string.h>
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(args) args
+# else
+# define PARAMS(args) ()
+# endif
+#endif
+
+#if !(__GLIBC__ >= 2)
+/* When not using the GNU libc we use the basename implementation we
+ provide here. */
+extern char *gnu_basename PARAMS ((const char *));
+#define basename(Arg) gnu_basename (Arg)
+#endif
+
+#endif /* _BASENAME_H */
diff --git a/lib/error.c b/lib/error.c
new file mode 100644
index 0000000..2a1de26
--- /dev/null
+++ b/lib/error.c
@@ -0,0 +1,403 @@
+/* Error handler for noninteractive utilities
+ Copyright (C) 1990-1998, 2000-2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library. Its master source is NOT part of
+ the C library, however. The master source lives in /gd/gnu/lib.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#ifdef _LIBC
+# include <wchar.h>
+# define mbsrtowcs __mbsrtowcs
+#endif
+
+#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
+# if __STDC__
+# include <stdarg.h>
+# define VA_START(args, lastarg) va_start(args, lastarg)
+# else
+# include <varargs.h>
+# define VA_START(args, lastarg) va_start(args)
+# endif
+#else
+# define va_alist a1, a2, a3, a4, a5, a6, a7, a8
+# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
+#endif
+
+#if STDC_HEADERS || _LIBC
+# include <stdlib.h>
+# include <string.h>
+#else
+void exit ();
+#endif
+
+#include "error.h"
+#include "unlocked-io.h"
+
+#if ENABLE_NLS || defined _LIBC
+# include <libintl.h>
+# ifndef _
+# define _(Str) gettext (Str)
+# endif
+#else
+# define _(Str) (Str)
+#endif
+
+/* If NULL, error will flush stdout, then print on stderr the program
+ name, a colon and a space. Otherwise, error will call this
+ function without parameters instead. */
+void (*error_print_progname) (
+#if __STDC__ - 0
+ void
+#endif
+ );
+
+/* This variable is incremented each time `error' is called. */
+unsigned int error_message_count;
+
+#ifdef _LIBC
+/* In the GNU C library, there is a predefined variable for this. */
+
+# define program_name program_invocation_name
+# include <errno.h>
+
+/* In GNU libc we want do not want to use the common name `error' directly.
+ Instead make it a weak alias. */
+extern void __error (int status, int errnum, const char *message, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+extern void __error_at_line (int status, int errnum, const char *file_name,
+ unsigned int line_number, const char *message,
+ ...)
+ __attribute__ ((__format__ (__printf__, 5, 6)));;
+# define error __error
+# define error_at_line __error_at_line
+
+# ifdef USE_IN_LIBIO
+# include <libio/iolibio.h>
+# define fflush(s) _IO_fflush (s)
+# endif
+
+#else /* not _LIBC */
+
+# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
+# ifndef HAVE_DECL_STRERROR_R
+"this configure-time declaration test was not run"
+# endif
+char *strerror_r ();
+# endif
+
+/* The calling program should define program_name and set it to the
+ name of the executing program. */
+extern char *program_name;
+
+# if HAVE_STRERROR_R || defined strerror_r
+# define __strerror_r strerror_r
+# else
+# if HAVE_STRERROR
+# ifndef HAVE_DECL_STRERROR
+"this configure-time declaration test was not run"
+# endif
+# if !HAVE_DECL_STRERROR
+char *strerror ();
+# endif
+# else
+static char *
+private_strerror (int errnum)
+{
+ extern char *sys_errlist[];
+ extern int sys_nerr;
+
+ if (errnum > 0 && errnum <= sys_nerr)
+ return _(sys_errlist[errnum]);
+ return _("Unknown system error");
+}
+# define strerror private_strerror
+# endif /* HAVE_STRERROR */
+# endif /* HAVE_STRERROR_R || defined strerror_r */
+#endif /* not _LIBC */
+
+static void
+print_errno_message (int errnum)
+{
+ char const *s;
+
+#if defined HAVE_STRERROR_R || _LIBC
+ char errbuf[1024];
+# if STRERROR_R_CHAR_P || _LIBC
+ s = __strerror_r (errnum, errbuf, sizeof errbuf);
+# else
+ if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
+ s = errbuf;
+ else
+ s = 0;
+# endif
+#else
+ s = strerror (errnum);
+#endif
+
+#if !_LIBC
+ if (! s)
+ s = _("Unknown system error");
+#endif
+
+#if _LIBC && USE_IN_LIBIO
+ if (_IO_fwide (stderr, 0) > 0)
+ {
+ __fwprintf (stderr, L": %s", s);
+ return;
+ }
+#endif
+
+ fprintf (stderr, ": %s", s);
+}
+
+#ifdef VA_START
+static void
+error_tail (int status, int errnum, const char *message, va_list args)
+{
+# if HAVE_VPRINTF || _LIBC
+# if _LIBC && USE_IN_LIBIO
+ if (_IO_fwide (stderr, 0) > 0)
+ {
+# define ALLOCA_LIMIT 2000
+ size_t len = strlen (message) + 1;
+ wchar_t *wmessage = NULL;
+ mbstate_t st;
+ size_t res;
+ const char *tmp;
+
+ do
+ {
+ if (len < ALLOCA_LIMIT)
+ wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
+ else
+ {
+ if (wmessage != NULL && len / 2 < ALLOCA_LIMIT)
+ wmessage = NULL;
+
+ wmessage = (wchar_t *) realloc (wmessage,
+ len * sizeof (wchar_t));
+
+ if (wmessage == NULL)
+ {
+ fputws_unlocked (L"out of memory\n", stderr);
+ return;
+ }
+ }
+
+ memset (&st, '\0', sizeof (st));
+ tmp =message;
+ }
+ while ((res = mbsrtowcs (wmessage, &tmp, len, &st)) == len);
+
+ if (res == (size_t) -1)
+ /* The string cannot be converted. */
+ wmessage = (wchar_t *) L"???";
+
+ __vfwprintf (stderr, wmessage, args);
+ }
+ else
+# endif
+ vfprintf (stderr, message, args);
+# else
+ _doprnt (message, args, stderr);
+# endif
+ va_end (args);
+
+ ++error_message_count;
+ if (errnum)
+ print_errno_message (errnum);
+# if _LIBC && USE_IN_LIBIO
+ if (_IO_fwide (stderr, 0) > 0)
+ putwc (L'\n', stderr);
+ else
+# endif
+ putc ('\n', stderr);
+ fflush (stderr);
+ if (status)
+ exit (status);
+}
+#endif
+
+
+/* Print the program name and error message MESSAGE, which is a printf-style
+ format string with optional args.
+ If ERRNUM is nonzero, print its corresponding system error message.
+ Exit with status STATUS if it is nonzero. */
+/* VARARGS */
+void
+#if defined VA_START && __STDC__
+error (int status, int errnum, const char *message, ...)
+#else
+error (status, errnum, message, va_alist)
+ int status;
+ int errnum;
+ char *message;
+ va_dcl
+#endif
+{
+#ifdef VA_START
+ va_list args;
+#endif
+
+ fflush (stdout);
+#ifdef _LIBC
+# ifdef USE_IN_LIBIO
+ _IO_flockfile (stderr);
+# else
+ __flockfile (stderr);
+# endif
+#endif
+ if (error_print_progname)
+ (*error_print_progname) ();
+ else
+ {
+#if _LIBC && USE_IN_LIBIO
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s: ", program_name);
+ else
+#endif
+ fprintf (stderr, "%s: ", program_name);
+ }
+
+#ifdef VA_START
+ VA_START (args, message);
+ error_tail (status, errnum, message, args);
+#else
+ fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
+
+ ++error_message_count;
+ if (errnum)
+ print_errno_message (errnum);
+ putc ('\n', stderr);
+ fflush (stderr);
+ if (status)
+ exit (status);
+#endif
+
+#ifdef _LIBC
+# ifdef USE_IN_LIBIO
+ _IO_funlockfile (stderr);
+# else
+ __funlockfile (stderr);
+# endif
+#endif
+}
+
+/* Sometimes we want to have at most one error per line. This
+ variable controls whether this mode is selected or not. */
+int error_one_per_line;
+
+void
+#if defined VA_START && __STDC__
+error_at_line (int status, int errnum, const char *file_name,
+ unsigned int line_number, const char *message, ...)
+#else
+error_at_line (status, errnum, file_name, line_number, message, va_alist)
+ int status;
+ int errnum;
+ const char *file_name;
+ unsigned int line_number;
+ char *message;
+ va_dcl
+#endif
+{
+#ifdef VA_START
+ va_list args;
+#endif
+
+ if (error_one_per_line)
+ {
+ static const char *old_file_name;
+ static unsigned int old_line_number;
+
+ if (old_line_number == line_number
+ && (file_name == old_file_name
+ || strcmp (old_file_name, file_name) == 0))
+ /* Simply return and print nothing. */
+ return;
+
+ old_file_name = file_name;
+ old_line_number = line_number;
+ }
+
+ fflush (stdout);
+#ifdef _LIBC
+# ifdef USE_IN_LIBIO
+ _IO_flockfile (stderr);
+# else
+ __flockfile (stderr);
+# endif
+#endif
+ if (error_print_progname)
+ (*error_print_progname) ();
+ else
+ {
+#if _LIBC && USE_IN_LIBIO
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s: ", program_name);
+ else
+#endif
+ fprintf (stderr, "%s:", program_name);
+ }
+
+ if (file_name != NULL)
+ {
+#if _LIBC && USE_IN_LIBIO
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s:%d: ", file_name, line_number);
+ else
+#endif
+ fprintf (stderr, "%s:%d: ", file_name, line_number);
+ }
+
+#ifdef VA_START
+ VA_START (args, message);
+ error_tail (status, errnum, message, args);
+#else
+ fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
+
+ ++error_message_count;
+ if (errnum)
+ print_errno_message (errnum);
+ putc ('\n', stderr);
+ fflush (stderr);
+ if (status)
+ exit (status);
+#endif
+
+#ifdef _LIBC
+# ifdef USE_IN_LIBIO
+ _IO_funlockfile (stderr);
+# else
+ __funlockfile (stderr);
+# endif
+#endif
+}
+
+#ifdef _LIBC
+/* Make the weak alias. */
+# undef error
+# undef error_at_line
+weak_alias (__error, error)
+weak_alias (__error_at_line, error_at_line)
+#endif
diff --git a/lib/error.h b/lib/error.h
new file mode 100644
index 0000000..d3c56f1
--- /dev/null
+++ b/lib/error.h
@@ -0,0 +1,78 @@
+/* Declaration for error-reporting function
+
+ Copyright (C) 1995, 1996, 1997, 2007 Free Software Foundation, Inc.
+
+ NOTE: The canonical source of this file is maintained with the GNU C Library.
+ Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+ 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 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#ifndef _ERROR_H
+#define _ERROR_H 1
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define __attribute__(Spec) /* empty */
+# endif
+/* The __-protected variants of `format' and `printf' attributes
+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+# define __format__ format
+# define __printf__ printf
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined (__STDC__) && __STDC__
+
+/* Print a message with `fprintf (stderr, FORMAT, ...)';
+ if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+ If STATUS is nonzero, terminate the program with `exit (STATUS)'. */
+
+extern void error (int status, int errnum, const char *format, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern void error_at_line (int status, int errnum, const char *fname,
+ unsigned int lineno, const char *format, ...)
+ __attribute__ ((__format__ (__printf__, 5, 6)));
+
+/* If NULL, error will flush stdout, then print on stderr the program
+ name, a colon and a space. Otherwise, error will call this
+ function without parameters instead. */
+extern void (*error_print_progname) (void);
+
+#else
+void error ();
+void error_at_line ();
+extern void (*error_print_progname) ();
+#endif
+
+/* This variable is incremented each time `error' is called. */
+extern unsigned int error_message_count;
+
+/* Sometimes we want to have at most one error per line. This
+ variable controls whether this mode is selected or not. */
+extern int error_one_per_line;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* error.h */
diff --git a/lib/exit.h b/lib/exit.h
new file mode 100644
index 0000000..46566fb
--- /dev/null
+++ b/lib/exit.h
@@ -0,0 +1,32 @@
+/* exit() function.
+ Copyright (C) 1995, 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _EXIT_H
+#define _EXIT_H
+
+/* Get exit() declaration. */
+#include <stdlib.h>
+
+/* Some systems do not define EXIT_*, even with STDC_HEADERS. */
+#ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+#endif
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+#endif /* _EXIT_H */
diff --git a/lib/gen-uio b/lib/gen-uio
new file mode 100644
index 0000000..e7ef6a3
--- /dev/null
+++ b/lib/gen-uio
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+fail=0
+cat <<\EOF || fail=1
+#ifndef UNLOCKED_IO_H
+# define UNLOCKED_IO_H 1
+
+# ifndef USE_UNLOCKED_IO
+# define USE_UNLOCKED_IO 1
+# endif
+
+# if USE_UNLOCKED_IO
+
+/* These are wrappers for functions/macros from GNU libc.
+ The standard I/O functions are thread-safe. These *_unlocked ones are
+ more efficient but not thread-safe. That they're not thread-safe is
+ fine since all of the applications in this package are single threaded. */
+
+EOF
+
+for f in $@; do
+ u=`echo $f|tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+ cat <<EOF || fail=1
+# if HAVE_${u}_UNLOCKED
+# undef $f
+EOF
+ case $f in
+ getchar)
+ params=;;
+ putchar | clearerr | feof | ferror | fflush | getc )
+ params=x;;
+ putc | fputc | fputs )
+ params=x,y;;
+ fgets )
+ params=x,y,z;;
+ fread | fwrite )
+ params=w,x,y,z;;
+ *)
+ echo $0: missing case for $f 2>&1; fail=1;;
+ esac
+ cat <<EOF || fail=1
+# define $f($params) ${f}_unlocked ($params)
+# endif
+EOF
+done
+
+cat <<\EOF || fail=1
+
+# endif /* USE_UNLOCKED_IO */
+#endif /* UNLOCKED_IO_H */
+EOF
+
+(exit $fail); exit
diff --git a/lib/getopt.c b/lib/getopt.c
new file mode 100644
index 0000000..a348290
--- /dev/null
+++ b/lib/getopt.c
@@ -0,0 +1,1068 @@
+/* Getopt for GNU.
+ NOTE: getopt is now part of the C library, so if you don't know what
+ "Keep this file name-space clean" means, talk to drepper@gnu.org
+ before changing it!
+ Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
+ Ditto for AIX 3.2 and <stdlib.h>. */
+#ifndef _NO_PROTO
+# define _NO_PROTO
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if !defined __STDC__ || !__STDC__
+/* This is a separate conditional since some stdc systems
+ reject `defined (const)'. */
+# ifndef const
+# define const
+# endif
+#endif
+
+#include <stdio.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+ actually compiling the library itself. This code is part of the GNU C
+ Library, but also included in many other GNU distributions. Compiling
+ and linking in this code is a waste when using the GNU C library
+ (especially if it is a shared library). Rather than having every GNU
+ program understand `configure --with-gnu-libc' and omit the object files,
+ it is simpler to just do this in the source for each such file. */
+
+#define GETOPT_INTERFACE_VERSION 2
+#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
+# include <gnu-versions.h>
+# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+# define ELIDE_CODE
+# endif
+#endif
+
+#ifndef ELIDE_CODE
+
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+/* Don't include stdlib.h for non-GNU C libraries because some of them
+ contain conflicting prototypes for getopt. */
+# include <stdlib.h>
+# include <unistd.h>
+#endif /* GNU C library. */
+
+#ifdef VMS
+# include <unixlib.h>
+# if HAVE_STRING_H - 0
+# include <string.h>
+# endif
+#endif
+
+#ifndef _
+/* This is for other GNU distributions with internationalized messages. */
+# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
+# include <libintl.h>
+# ifndef _
+# define _(msgid) gettext (msgid)
+# endif
+# else
+# define _(msgid) (msgid)
+# endif
+#endif
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+ but it behaves differently for the user, since it allows the user
+ to intersperse the options with the other arguments.
+
+ As `getopt' works, it permutes the elements of ARGV so that,
+ when it is done, all the options precede everything else. Thus
+ all application programs are extended to handle flexible argument order.
+
+ Setting the environment variable POSIXLY_CORRECT disables permutation.
+ Then the behavior is completely standard.
+
+ GNU application programs can use a third alternative mode in which
+ they can distinguish the relative order of options and other arguments. */
+
+#include "getopt.h"
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns -1, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+/* 1003.2 says this must be 1 before any call. */
+int optind = 1;
+
+/* Formerly, initialization of getopt depended on optind==0, which
+ causes problems with re-calling getopt as programs generally don't
+ know that. */
+
+int __getopt_initialized;
+
+/* The next char to be scanned in the option-element
+ in which the last option character we returned was found.
+ This allows us to pick up the scan where we left off.
+
+ If this is zero, or a null string, it means resume the scan
+ by advancing to the next ARGV-element. */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+ for unrecognized options. */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+ This must be initialized on some systems to avoid linking in the
+ system's own getopt implementation. */
+
+int optopt = '?';
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+ If the caller did not specify anything,
+ the default is REQUIRE_ORDER if the environment variable
+ POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+ REQUIRE_ORDER means don't recognize them as options;
+ stop option processing when the first non-option is seen.
+ This is what Unix does.
+ This mode of operation is selected by either setting the environment
+ variable POSIXLY_CORRECT, or using `+' as the first character
+ of the list of option characters.
+
+ PERMUTE is the default. We permute the contents of ARGV as we scan,
+ so that eventually all the non-options are at the end. This allows options
+ to be given in any order, even with programs that were not written to
+ expect this.
+
+ RETURN_IN_ORDER is an option available to programs that were written
+ to expect options and other ARGV-elements in any order and that care about
+ the ordering of the two. We describe each non-option ARGV-element
+ as if it were the argument of an option with character code 1.
+ Using `-' as the first character of the list of option characters
+ selects this mode of operation.
+
+ The special argument `--' forces an end of option-scanning regardless
+ of the value of `ordering'. In the case of RETURN_IN_ORDER, only
+ `--' can cause `getopt' to return -1 with `optind' != ARGC. */
+
+static enum
+{
+ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+/* Value of POSIXLY_CORRECT environment variable. */
+static char *posixly_correct;
+
+#ifdef __GNU_LIBRARY__
+/* We want to avoid inclusion of string.h with non-GNU libraries
+ because there are many ways it can cause trouble.
+ On some systems, it contains special magic macros that don't work
+ in GCC. */
+# include <string.h>
+# define my_index strchr
+#else
+
+# if HAVE_STRING_H
+# include <string.h>
+# else
+# include <strings.h>
+# endif
+
+/* Avoid depending on library functions or files
+ whose names are inconsistent. */
+
+#ifndef getenv
+extern char *getenv ();
+#endif
+
+static char *
+my_index (str, chr)
+ const char *str;
+ int chr;
+{
+ while (*str)
+ {
+ if (*str == chr)
+ return (char *) str;
+ str++;
+ }
+ return 0;
+}
+
+/* If using GCC, we can safely declare strlen this way.
+ If not using GCC, it is ok not to declare it. */
+#ifdef __GNUC__
+/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
+ That was relevant to code that was here before. */
+# if (!defined __STDC__ || !__STDC__) && !defined strlen
+/* gcc with -traditional declares the built-in strlen to return int,
+ and has done so at least since version 2.4.5. -- rms. */
+extern int strlen (const char *);
+# endif /* not __STDC__ */
+#endif /* __GNUC__ */
+
+#endif /* not __GNU_LIBRARY__ */
+
+/* Handle permutation of arguments. */
+
+/* Describe the part of ARGV that contains non-options that have
+ been skipped. `first_nonopt' is the index in ARGV of the first of them;
+ `last_nonopt' is the index after the last of them. */
+
+static int first_nonopt;
+static int last_nonopt;
+
+#ifdef _LIBC
+/* Bash 2.0 gives us an environment variable containing flags
+ indicating ARGV elements that should not be considered arguments. */
+
+#ifdef USE_NONOPTION_FLAGS
+/* Defined in getopt_init.c */
+extern char *__getopt_nonoption_flags;
+
+static int nonoption_flags_max_len;
+static int nonoption_flags_len;
+#endif
+
+static int original_argc;
+static char *const *original_argv;
+
+/* Make sure the environment variable bash 2.0 puts in the environment
+ is valid for the getopt call we must make sure that the ARGV passed
+ to getopt is that one passed to the process. */
+static void
+__attribute__ ((unused))
+store_args_and_env (int argc, char *const *argv)
+{
+ /* XXX This is no good solution. We should rather copy the args so
+ that we can compare them later. But we must not use malloc(3). */
+ original_argc = argc;
+ original_argv = argv;
+}
+# ifdef text_set_element
+text_set_element (__libc_subinit, store_args_and_env);
+# endif /* text_set_element */
+
+# ifdef USE_NONOPTION_FLAGS
+# define SWAP_FLAGS(ch1, ch2) \
+ if (nonoption_flags_len > 0) \
+ { \
+ char __tmp = __getopt_nonoption_flags[ch1]; \
+ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \
+ __getopt_nonoption_flags[ch2] = __tmp; \
+ }
+# else
+# define SWAP_FLAGS(ch1, ch2)
+# endif
+#else /* !_LIBC */
+# define SWAP_FLAGS(ch1, ch2)
+#endif /* _LIBC */
+
+/* Exchange two adjacent subsequences of ARGV.
+ One subsequence is elements [first_nonopt,last_nonopt)
+ which contains all the non-options that have been skipped so far.
+ The other is elements [last_nonopt,optind), which contains all
+ the options processed since those non-options were skipped.
+
+ `first_nonopt' and `last_nonopt' are relocated so that they describe
+ the new indices of the non-options in ARGV after they are moved. */
+
+#if defined __STDC__ && __STDC__
+static void exchange (char **);
+#endif
+
+static void
+exchange (argv)
+ char **argv;
+{
+ int bottom = first_nonopt;
+ int middle = last_nonopt;
+ int top = optind;
+ char *tem;
+
+ /* Exchange the shorter segment with the far end of the longer segment.
+ That puts the shorter segment into the right place.
+ It leaves the longer segment in the right place overall,
+ but it consists of two parts that need to be swapped next. */
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+ /* First make sure the handling of the `__getopt_nonoption_flags'
+ string can work normally. Our top argument must be in the range
+ of the string. */
+ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
+ {
+ /* We must extend the array. The user plays games with us and
+ presents new arguments. */
+ char *new_str = malloc (top + 1);
+ if (new_str == NULL)
+ nonoption_flags_len = nonoption_flags_max_len = 0;
+ else
+ {
+ memset (__mempcpy (new_str, __getopt_nonoption_flags,
+ nonoption_flags_max_len),
+ '\0', top + 1 - nonoption_flags_max_len);
+ nonoption_flags_max_len = top + 1;
+ __getopt_nonoption_flags = new_str;
+ }
+ }
+#endif
+
+ while (top > middle && middle > bottom)
+ {
+ if (top - middle > middle - bottom)
+ {
+ /* Bottom segment is the short one. */
+ int len = middle - bottom;
+ register int i;
+
+ /* Swap it with the top part of the top segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[top - (middle - bottom) + i];
+ argv[top - (middle - bottom) + i] = tem;
+ SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
+ }
+ /* Exclude the moved bottom segment from further swapping. */
+ top -= len;
+ }
+ else
+ {
+ /* Top segment is the short one. */
+ int len = top - middle;
+ register int i;
+
+ /* Swap it with the bottom part of the bottom segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[middle + i];
+ argv[middle + i] = tem;
+ SWAP_FLAGS (bottom + i, middle + i);
+ }
+ /* Exclude the moved top segment from further swapping. */
+ bottom += len;
+ }
+ }
+
+ /* Update records for the slots the non-options now occupy. */
+
+ first_nonopt += (optind - last_nonopt);
+ last_nonopt = optind;
+}
+
+/* Initialize the internal data when the first call is made. */
+
+#if defined __STDC__ && __STDC__
+static const char *_getopt_initialize (int, char *const *, const char *);
+#endif
+static const char *
+_getopt_initialize (argc, argv, optstring)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+{
+ /* Start processing options with ARGV-element 1 (since ARGV-element 0
+ is the program name); the sequence of previously skipped
+ non-option ARGV-elements is empty. */
+
+ first_nonopt = last_nonopt = optind;
+
+ nextchar = NULL;
+
+ posixly_correct = getenv ("POSIXLY_CORRECT");
+
+ /* Determine how to handle the ordering of options and nonoptions. */
+
+ if (optstring[0] == '-')
+ {
+ ordering = RETURN_IN_ORDER;
+ ++optstring;
+ }
+ else if (optstring[0] == '+')
+ {
+ ordering = REQUIRE_ORDER;
+ ++optstring;
+ }
+ else if (posixly_correct != NULL)
+ ordering = REQUIRE_ORDER;
+ else
+ ordering = PERMUTE;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+ if (posixly_correct == NULL
+ && argc == original_argc && argv == original_argv)
+ {
+ if (nonoption_flags_max_len == 0)
+ {
+ if (__getopt_nonoption_flags == NULL
+ || __getopt_nonoption_flags[0] == '\0')
+ nonoption_flags_max_len = -1;
+ else
+ {
+ const char *orig_str = __getopt_nonoption_flags;
+ int len = nonoption_flags_max_len = strlen (orig_str);
+ if (nonoption_flags_max_len < argc)
+ nonoption_flags_max_len = argc;
+ __getopt_nonoption_flags =
+ (char *) malloc (nonoption_flags_max_len);
+ if (__getopt_nonoption_flags == NULL)
+ nonoption_flags_max_len = -1;
+ else
+ memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
+ '\0', nonoption_flags_max_len - len);
+ }
+ }
+ nonoption_flags_len = nonoption_flags_max_len;
+ }
+ else
+ nonoption_flags_len = 0;
+#endif
+
+ return optstring;
+}
+
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+ given in OPTSTRING.
+
+ If an element of ARGV starts with '-', and is not exactly "-" or "--",
+ then it is an option element. The characters of this element
+ (aside from the initial '-') are option characters. If `getopt'
+ is called repeatedly, it returns successively each of the option characters
+ from each of the option elements.
+
+ If `getopt' finds another option character, it returns that character,
+ updating `optind' and `nextchar' so that the next call to `getopt' can
+ resume the scan with the following option character or ARGV-element.
+
+ If there are no more option characters, `getopt' returns -1.
+ Then `optind' is the index in ARGV of the first ARGV-element
+ that is not an option. (The ARGV-elements have been permuted
+ so that those that are not options now come last.)
+
+ OPTSTRING is a string containing the legitimate option characters.
+ If an option character is seen that is not listed in OPTSTRING,
+ return '?' after printing an error message. If you set `opterr' to
+ zero, the error message is suppressed but we still return '?'.
+
+ If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+ so the following text in the same ARGV-element, or the text of the following
+ ARGV-element, is returned in `optarg'. Two colons mean an option that
+ wants an optional arg; if there is text in the current ARGV-element,
+ it is returned in `optarg', otherwise `optarg' is set to zero.
+
+ If OPTSTRING starts with `-' or `+', it requests different methods of
+ handling the non-option ARGV-elements.
+ See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+ Long-named options begin with `--' instead of `-'.
+ Their names may be abbreviated as long as the abbreviation is unique
+ or is an exact match for some defined option. If they have an
+ argument, it follows the option name in the same ARGV-element, separated
+ from the option name by a `=', or else the in next ARGV-element.
+ When `getopt' finds a long-named option, it returns 0 if that option's
+ `flag' field is nonzero, the value of the option's `val' field
+ if the `flag' field is zero.
+
+ The elements of ARGV aren't really const, because we permute them.
+ But we pretend they're const in the prototype to be compatible
+ with other systems.
+
+ LONGOPTS is a vector of `struct option' terminated by an
+ element containing a name which is zero.
+
+ LONGIND returns the index in LONGOPT of the long-named option found.
+ It is only valid when a long-named option has been found by the most
+ recent call.
+
+ If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+ long-named options. */
+
+int
+_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+ const struct option *longopts;
+ int *longind;
+ int long_only;
+{
+ int print_errors = opterr;
+ if (optstring[0] == ':')
+ print_errors = 0;
+
+ if (argc < 1)
+ return -1;
+
+ optarg = NULL;
+
+ if (optind == 0 || !__getopt_initialized)
+ {
+ if (optind == 0)
+ optind = 1; /* Don't scan ARGV[0], the program name. */
+ optstring = _getopt_initialize (argc, argv, optstring);
+ __getopt_initialized = 1;
+ }
+
+ /* Test whether ARGV[optind] points to a non-option argument.
+ Either it does not have option syntax, or there is an environment flag
+ from the shell indicating it is not an option. The later information
+ is only used when the used in the GNU libc. */
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
+ || (optind < nonoption_flags_len \
+ && __getopt_nonoption_flags[optind] == '1'))
+#else
+# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
+#endif
+
+ if (nextchar == NULL || *nextchar == '\0')
+ {
+ /* Advance to the next ARGV-element. */
+
+ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+ moved back by the user (who may also have changed the arguments). */
+ if (last_nonopt > optind)
+ last_nonopt = optind;
+ if (first_nonopt > optind)
+ first_nonopt = optind;
+
+ if (ordering == PERMUTE)
+ {
+ /* If we have just processed some options following some non-options,
+ exchange them so that the options come first. */
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange ((char **) argv);
+ else if (last_nonopt != optind)
+ first_nonopt = optind;
+
+ /* Skip any additional non-options
+ and extend the range of non-options previously skipped. */
+
+ while (optind < argc && NONOPTION_P)
+ optind++;
+ last_nonopt = optind;
+ }
+
+ /* The special ARGV-element `--' means premature end of options.
+ Skip it like a null option,
+ then exchange with previous non-options as if it were an option,
+ then skip everything else like a non-option. */
+
+ if (optind != argc && !strcmp (argv[optind], "--"))
+ {
+ optind++;
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange ((char **) argv);
+ else if (first_nonopt == last_nonopt)
+ first_nonopt = optind;
+ last_nonopt = argc;
+
+ optind = argc;
+ }
+
+ /* If we have done all the ARGV-elements, stop the scan
+ and back over any non-options that we skipped and permuted. */
+
+ if (optind == argc)
+ {
+ /* Set the next-arg-index to point at the non-options
+ that we previously skipped, so the caller will digest them. */
+ if (first_nonopt != last_nonopt)
+ optind = first_nonopt;
+ return -1;
+ }
+
+ /* If we have come to a non-option and did not permute it,
+ either stop the scan or describe it to the caller and pass it by. */
+
+ if (NONOPTION_P)
+ {
+ if (ordering == REQUIRE_ORDER)
+ return -1;
+ optarg = argv[optind++];
+ return 1;
+ }
+
+ /* We have found another option-ARGV-element.
+ Skip the initial punctuation. */
+
+ nextchar = (argv[optind] + 1
+ + (longopts != NULL && argv[optind][1] == '-'));
+ }
+
+ /* Decode the current option-ARGV-element. */
+
+ /* Check whether the ARGV-element is a long option.
+
+ If long_only and the ARGV-element has the form "-f", where f is
+ a valid short option, don't consider it an abbreviated form of
+ a long option that starts with f. Otherwise there would be no
+ way to give the -f short option.
+
+ On the other hand, if there's a long option "fubar" and
+ the ARGV-element is "-fu", do consider that an abbreviation of
+ the long option, just like "--fu", and not "-f" with arg "u".
+
+ This distinction seems to be the most useful approach. */
+
+ if (longopts != NULL
+ && (argv[optind][1] == '-'
+ || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
+ {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = -1;
+ int option_index;
+
+ for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp (p->name, nextchar, nameend - nextchar))
+ {
+ if ((unsigned int) (nameend - nextchar)
+ == (unsigned int) strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else if (long_only
+ || pfound->has_arg != p->has_arg
+ || pfound->flag != p->flag
+ || pfound->val != p->val)
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+
+ if (ambig && !exact)
+ {
+ if (print_errors)
+ fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+ argv[0], argv[optind]);
+ nextchar += strlen (nextchar);
+ optind++;
+ optopt = 0;
+ return '?';
+ }
+
+ if (pfound != NULL)
+ {
+ option_index = indfound;
+ optind++;
+ if (*nameend)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ optarg = nameend + 1;
+ else
+ {
+ if (print_errors)
+ {
+ if (argv[optind - 1][1] == '-')
+ /* --option */
+ fprintf (stderr,
+ _("%s: option `--%s' doesn't allow an argument\n"),
+ argv[0], pfound->name);
+ else
+ /* +option or -option */
+ fprintf (stderr,
+ _("%s: option `%c%s' doesn't allow an argument\n"),
+ argv[0], argv[optind - 1][0], pfound->name);
+ }
+
+ nextchar += strlen (nextchar);
+
+ optopt = pfound->val;
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (optind < argc)
+ optarg = argv[optind++];
+ else
+ {
+ if (print_errors)
+ fprintf (stderr,
+ _("%s: option `%s' requires an argument\n"),
+ argv[0], argv[optind - 1]);
+ nextchar += strlen (nextchar);
+ optopt = pfound->val;
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ nextchar += strlen (nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+
+ /* Can't find it as a long option. If this is not getopt_long_only,
+ or the option starts with '--' or is not a valid short
+ option, then it's an error.
+ Otherwise interpret it as a short option. */
+ if (!long_only || argv[optind][1] == '-'
+ || my_index (optstring, *nextchar) == NULL)
+ {
+ if (print_errors)
+ {
+ if (argv[optind][1] == '-')
+ /* --option */
+ fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+ argv[0], nextchar);
+ else
+ /* +option or -option */
+ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
+ argv[0], argv[optind][0], nextchar);
+ }
+ nextchar = (char *) "";
+ optind++;
+ optopt = 0;
+ return '?';
+ }
+ }
+
+ /* Look at and handle the next short option-character. */
+
+ {
+ char c = *nextchar++;
+ char *temp = my_index (optstring, c);
+
+ /* Increment `optind' when we start to process its last character. */
+ if (*nextchar == '\0')
+ ++optind;
+
+ if (temp == NULL || c == ':')
+ {
+ if (print_errors)
+ {
+ if (posixly_correct)
+ /* 1003.2 specifies the format of this message. */
+ fprintf (stderr, _("%s: illegal option -- %c\n"),
+ argv[0], c);
+ else
+ fprintf (stderr, _("%s: invalid option -- %c\n"),
+ argv[0], c);
+ }
+ optopt = c;
+ return '?';
+ }
+ /* Convenience. Treat POSIX -W foo same as long option --foo */
+ if (temp[0] == 'W' && temp[1] == ';')
+ {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = 0;
+ int option_index;
+
+ /* This is an option that requires an argument. */
+ if (*nextchar != '\0')
+ {
+ optarg = nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ optind++;
+ }
+ else if (optind == argc)
+ {
+ if (print_errors)
+ {
+ /* 1003.2 specifies the format of this message. */
+ fprintf (stderr, _("%s: option requires an argument -- %c\n"),
+ argv[0], c);
+ }
+ optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ return c;
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ optarg = argv[optind++];
+
+ /* optarg is now the argument, see if it's in the
+ table of longopts. */
+
+ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp (p->name, nextchar, nameend - nextchar))
+ {
+ if ((unsigned int) (nameend - nextchar) == strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+ if (ambig && !exact)
+ {
+ if (print_errors)
+ fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+ argv[0], argv[optind]);
+ nextchar += strlen (nextchar);
+ optind++;
+ return '?';
+ }
+ if (pfound != NULL)
+ {
+ option_index = indfound;
+ if (*nameend)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ optarg = nameend + 1;
+ else
+ {
+ if (print_errors)
+ fprintf (stderr, _("\
+%s: option `-W %s' doesn't allow an argument\n"),
+ argv[0], pfound->name);
+
+ nextchar += strlen (nextchar);
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (optind < argc)
+ optarg = argv[optind++];
+ else
+ {
+ if (print_errors)
+ fprintf (stderr,
+ _("%s: option `%s' requires an argument\n"),
+ argv[0], argv[optind - 1]);
+ nextchar += strlen (nextchar);
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ nextchar += strlen (nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+ nextchar = NULL;
+ return 'W'; /* Let the application handle it. */
+ }
+ if (temp[1] == ':')
+ {
+ if (temp[2] == ':')
+ {
+ /* This is an option that accepts an argument optionally. */
+ if (*nextchar != '\0')
+ {
+ optarg = nextchar;
+ optind++;
+ }
+ else
+ optarg = NULL;
+ nextchar = NULL;
+ }
+ else
+ {
+ /* This is an option that requires an argument. */
+ if (*nextchar != '\0')
+ {
+ optarg = nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ optind++;
+ }
+ else if (optind == argc)
+ {
+ if (print_errors)
+ {
+ /* 1003.2 specifies the format of this message. */
+ fprintf (stderr,
+ _("%s: option requires an argument -- %c\n"),
+ argv[0], c);
+ }
+ optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ optarg = argv[optind++];
+ nextchar = NULL;
+ }
+ }
+ return c;
+ }
+}
+
+int
+getopt (argc, argv, optstring)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+{
+ return _getopt_internal (argc, argv, optstring,
+ (const struct option *) 0,
+ (int *) 0,
+ 0);
+}
+
+#endif /* Not ELIDE_CODE. */
+
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+ the above definition of `getopt'. */
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt (argc, argv, "abc:d:0123456789");
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/lib/getopt.h b/lib/getopt.h
new file mode 100644
index 0000000..d26b80c
--- /dev/null
+++ b/lib/getopt.h
@@ -0,0 +1,180 @@
+/* Declarations for getopt.
+ Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#ifndef _GETOPT_H
+
+#ifndef __need_getopt
+# define _GETOPT_H 1
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+ standalone, or this is the first header included in the source file.
+ If we are being used with glibc, we need to include <features.h>, but
+ that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
+ not defined, include <ctype.h>, which will pull in <features.h> for us
+ if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
+ doesn't flood the namespace with stuff the way some other headers do.) */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns -1, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+ for unrecognized options. */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized. */
+
+extern int optopt;
+
+#ifndef __need_getopt
+/* Describe the long-named options requested by the application.
+ The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+ of `struct option' terminated by an element containing a name which is
+ zero.
+
+ The field `has_arg' is:
+ no_argument (or 0) if the option does not take an argument,
+ required_argument (or 1) if the option requires an argument,
+ optional_argument (or 2) if the option takes an optional argument.
+
+ If the field `flag' is not NULL, it points to a variable that is set
+ to the value given in the field `val' when the option is found, but
+ left unchanged if the option is not found.
+
+ To have a long-named option do something other than set an `int' to
+ a compiled-in constant, such as set a value from `optarg', set the
+ option's `flag' field to zero and its `val' field to a nonzero
+ value (the equivalent single-letter option character, if there is
+ one). For long options that have a zero `flag' field, `getopt'
+ returns the contents of the `val' field. */
+
+struct option
+{
+# if (defined __STDC__ && __STDC__) || defined __cplusplus
+ const char *name;
+# else
+ char *name;
+# endif
+ /* has_arg can't be an enum because some compilers complain about
+ type mismatches in all the code that assumes it is an int. */
+ int has_arg;
+ int *flag;
+ int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'. */
+
+# define no_argument 0
+# define required_argument 1
+# define optional_argument 2
+#endif /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+ arguments in ARGV (ARGC of them, minus the program name) for
+ options given in OPTS.
+
+ Return the option character from OPTS just read. Return -1 when
+ there are no more options. For unrecognized options, or options
+ missing arguments, `optopt' is set to the option letter, and '?' is
+ returned.
+
+ The OPTS string is a list of characters which are recognized option
+ letters, optionally followed by colons, specifying that that letter
+ takes an argument, to be placed in `optarg'.
+
+ If a letter in OPTS is followed by two colons, its argument is
+ optional. This behavior is specific to the GNU `getopt'.
+
+ The argument `--' causes premature termination of argument
+ scanning, explicitly telling `getopt' that there are no more
+ options.
+
+ If OPTS begins with `--', then non-option arguments are treated as
+ arguments to the option '\0'. This behavior is specific to the GNU
+ `getopt'. */
+
+#if (defined __STDC__ && __STDC__) || defined __cplusplus
+# ifdef __GNU_LIBRARY__
+/* Many other libraries have conflicting prototypes for getopt, with
+ differences in the consts, in stdlib.h. To avoid compilation
+ errors, only prototype getopt for the GNU C library. */
+extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
+# else /* not __GNU_LIBRARY__ */
+extern int getopt ();
+# endif /* __GNU_LIBRARY__ */
+
+# ifndef __need_getopt
+extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts,
+ const struct option *__longopts, int *__longind);
+extern int getopt_long_only (int __argc, char *const *__argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind);
+
+/* Internal only. Users should not call this directly. */
+extern int _getopt_internal (int __argc, char *const *__argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ int __long_only);
+# endif
+#else /* not __STDC__ */
+extern int getopt ();
+# ifndef __need_getopt
+extern int getopt_long ();
+extern int getopt_long_only ();
+
+extern int _getopt_internal ();
+# endif
+#endif /* __STDC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations. */
+#undef __need_getopt
+
+#endif /* getopt.h */
diff --git a/lib/getopt1.c b/lib/getopt1.c
new file mode 100644
index 0000000..bbdfa2f
--- /dev/null
+++ b/lib/getopt1.c
@@ -0,0 +1,188 @@
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+ Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "getopt.h"
+
+#if !defined __STDC__ || !__STDC__
+/* This is a separate conditional since some stdc systems
+ reject `defined (const)'. */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <stdio.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+ actually compiling the library itself. This code is part of the GNU C
+ Library, but also included in many other GNU distributions. Compiling
+ and linking in this code is a waste when using the GNU C library
+ (especially if it is a shared library). Rather than having every GNU
+ program understand `configure --with-gnu-libc' and omit the object files,
+ it is simpler to just do this in the source for each such file. */
+
+#define GETOPT_INTERFACE_VERSION 2
+#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
+#include <gnu-versions.h>
+#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+#define ELIDE_CODE
+#endif
+#endif
+
+#ifndef ELIDE_CODE
+
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+int
+getopt_long (argc, argv, options, long_options, opt_index)
+ int argc;
+ char *const *argv;
+ const char *options;
+ const struct option *long_options;
+ int *opt_index;
+{
+ return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+ If an option that starts with '-' (not '--') doesn't match a long option,
+ but does match a short option, it is parsed as a short option
+ instead. */
+
+int
+getopt_long_only (argc, argv, options, long_options, opt_index)
+ int argc;
+ char *const *argv;
+ const char *options;
+ const struct option *long_options;
+ int *opt_index;
+{
+ return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+}
+
+
+#endif /* Not ELIDE_CODE. */
+
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+ int option_index = 0;
+ static struct option long_options[] =
+ {
+ {"add", 1, 0, 0},
+ {"append", 0, 0, 0},
+ {"delete", 1, 0, 0},
+ {"verbose", 0, 0, 0},
+ {"create", 0, 0, 0},
+ {"file", 1, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long (argc, argv, "abc:d:0123456789",
+ long_options, &option_index);
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ printf ("option %s", long_options[option_index].name);
+ if (optarg)
+ printf (" with arg %s", optarg);
+ printf ("\n");
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case 'd':
+ printf ("option d with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/lib/gettext.h b/lib/gettext.h
new file mode 100644
index 0000000..d1911b9
--- /dev/null
+++ b/lib/gettext.h
@@ -0,0 +1,69 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002, 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option. */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+ chokes if dcgettext is defined as a macro. So include it now, to make
+ later inclusions of <locale.h> a NOP. We don't include <libintl.h>
+ as well because people using "gettext.h" will not include <libintl.h>,
+ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+ is OK. */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+#endif /* _LIBGETTEXT_H */
diff --git a/lib/inttostr.c b/lib/inttostr.c
new file mode 100644
index 0000000..320c237
--- /dev/null
+++ b/lib/inttostr.c
@@ -0,0 +1,49 @@
+/* inttostr.c -- convert integers to printable strings
+
+ Copyright (C) 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Written by Paul Eggert */
+
+#include "inttostr.h"
+
+/* Convert I to a printable string in BUF, which must be at least
+ INT_BUFSIZE_BOUND (INTTYPE) bytes long. Return the address of the
+ printable string, which need not start at BUF. */
+
+char *
+inttostr (inttype i, char *buf)
+{
+ char *p = buf + INT_STRLEN_BOUND (inttype);
+ *p = 0;
+
+ if (i < 0)
+ {
+ do
+ *--p = '0' - i % 10;
+ while ((i /= 10) != 0);
+
+ *--p = '-';
+ }
+ else
+ {
+ do
+ *--p = '0' + i % 10;
+ while ((i /= 10) != 0);
+ }
+
+ return p;
+}
diff --git a/lib/inttostr.h b/lib/inttostr.h
new file mode 100644
index 0000000..ca1afd4
--- /dev/null
+++ b/lib/inttostr.h
@@ -0,0 +1,65 @@
+/* inttostr.h -- convert integers to printable strings
+
+ Copyright (C) 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Written by Paul Eggert */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+#ifndef CHAR_BIT
+# define CHAR_BIT 8
+#endif
+
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#ifndef HAVE_INTMAX_T
+#define HAVE_INTMAX_T
+typedef long intmax_t;
+#endif
+
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* Upper bound on the string length of an integer converted to string.
+ 302 / 1000 is ceil (log10 (2.0)). Subtract 1 for the sign bit;
+ add 1 for integer division truncation; add 1 more for a minus sign. */
+#define INT_STRLEN_BOUND(t) \
+ ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 + 1 + TYPE_SIGNED (t))
+
+#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
+
+#ifndef PARAMS
+# if defined PROTOTYPES || defined __STDC__
+# define PARAMS(Args) Args
+# else
+# define PARAMS(Args) ()
+# endif
+#endif
+
+char *offtostr PARAMS ((off_t, char *));
+char *imaxtostr PARAMS ((intmax_t, char *));
+char *umaxtostr PARAMS ((uintmax_t, char *));
diff --git a/lib/liballoca.h b/lib/liballoca.h
new file mode 100644
index 0000000..6ba02fd
--- /dev/null
+++ b/lib/liballoca.h
@@ -0,0 +1,56 @@
+/* Memory allocation on the stack.
+ Copyright (C) 1995, 1999, 2001-2002, 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* When this file is included, it may be preceded only by preprocessor
+ declarations. Thanks to AIX. Therefore we include it right after
+ "config.h", not later. */
+
+#ifndef _LIBALLOCA_H
+#define _LIBALLOCA_H
+
+#ifdef __GNUC__
+# ifndef alloca
+# define alloca __builtin_alloca
+# endif
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifdef __hpux /* This section must match that of bison generated files. */
+# ifdef __cplusplus
+extern "C" void *alloca (unsigned int);
+# else /* not __cplusplus */
+void *alloca ();
+# endif /* not __cplusplus */
+# else /* not __hpux */
+# ifndef alloca
+char *alloca ();
+# endif
+# endif /* __hpux */
+# endif
+# endif
+# endif
+#endif
+
+#endif /* _LIBALLOCA_H */
diff --git a/lib/malloc.c b/lib/malloc.c
new file mode 100644
index 0000000..6c19eed
--- /dev/null
+++ b/lib/malloc.c
@@ -0,0 +1,38 @@
+/* Work around bug on some systems where malloc (0) fails.
+ Copyright (C) 1997, 1998, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* written by Jim Meyering */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+#undef malloc
+
+#include <sys/types.h>
+
+char *malloc ();
+
+/* Allocate an N-byte block of memory from the heap.
+ If N is zero, allocate a 1-byte block. */
+
+char *
+rpl_malloc (size_t n)
+{
+ if (n == 0)
+ n = 1;
+ return malloc (n);
+}
diff --git a/lib/md5.c b/lib/md5.c
new file mode 100644
index 0000000..d79ab0a
--- /dev/null
+++ b/lib/md5.c
@@ -0,0 +1,417 @@
+/* md5.c - Functions to compute MD5 message digest of files or memory blocks
+ according to the definition of MD5 in RFC 1321 from April 1992.
+ Copyright (C) 1995, 1996, 2001, 2007 Free Software Foundation, Inc.
+ NOTE: The canonical source of this file is maintained with the GNU C
+ Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+ 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 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#if STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+# include <string.h>
+#else
+# ifndef HAVE_MEMCPY
+# define memcpy(d, s, n) bcopy ((s), (d), (n))
+# endif
+#endif
+
+#include "md5.h"
+#include "unlocked-io.h"
+
+#ifdef _LIBC
+# include <endian.h>
+# if __BYTE_ORDER == __BIG_ENDIAN
+# define WORDS_BIGENDIAN 1
+# endif
+#endif
+
+#ifdef WORDS_BIGENDIAN
+# define SWAP(n) \
+ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
+#else
+# define SWAP(n) (n)
+#endif
+
+
+/* This array contains the bytes used to pad the buffer to the next
+ 64-byte boundary. (RFC 1321, 3.1: Step 1) */
+static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
+
+
+/* Initialize structure containing state of computation.
+ (RFC 1321, 3.3: Step 3) */
+void
+md5_init_ctx (ctx)
+ struct md5_ctx *ctx;
+{
+ ctx->A = 0x67452301;
+ ctx->B = 0xefcdab89;
+ ctx->C = 0x98badcfe;
+ ctx->D = 0x10325476;
+
+ ctx->total[0] = ctx->total[1] = 0;
+ ctx->buflen = 0;
+}
+
+/* Put result from CTX in first 16 bytes following RESBUF. The result
+ must be in little endian byte order.
+
+ IMPORTANT: On some systems it is required that RESBUF is correctly
+ aligned for a 32 bits value. */
+void *
+md5_read_ctx (ctx, resbuf)
+ const struct md5_ctx *ctx;
+ void *resbuf;
+{
+ ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
+ ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
+ ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);
+ ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);
+
+ return resbuf;
+}
+
+/* Process the remaining bytes in the internal buffer and the usual
+ prolog according to the standard and write the result to RESBUF.
+
+ IMPORTANT: On some systems it is required that RESBUF is correctly
+ aligned for a 32 bits value. */
+void *
+md5_finish_ctx (ctx, resbuf)
+ struct md5_ctx *ctx;
+ void *resbuf;
+{
+ /* Take yet unprocessed bytes into account. */
+ md5_uint32 bytes = ctx->buflen;
+ size_t pad;
+
+ /* Now count remaining bytes. */
+ ctx->total[0] += bytes;
+ if (ctx->total[0] < bytes)
+ ++ctx->total[1];
+
+ pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
+ memcpy (&ctx->buffer[bytes], fillbuf, pad);
+
+ /* Put the 64-bit file length in *bits* at the end of the buffer. */
+ *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
+ *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
+ (ctx->total[0] >> 29));
+
+ /* Process last bytes. */
+ md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
+
+ return md5_read_ctx (ctx, resbuf);
+}
+
+/* Compute MD5 message digest for bytes read from STREAM. The
+ resulting message digest number will be written into the 16 bytes
+ beginning at RESBLOCK. */
+int
+md5_stream (stream, resblock)
+ FILE *stream;
+ void *resblock;
+{
+ /* Important: BLOCKSIZE must be a multiple of 64. */
+#define BLOCKSIZE 4096
+ struct md5_ctx ctx;
+ char buffer[BLOCKSIZE + 72];
+ size_t sum;
+
+ /* Initialize the computation context. */
+ md5_init_ctx (&ctx);
+
+ /* Iterate over full file contents. */
+ while (1)
+ {
+ /* We read the file in blocks of BLOCKSIZE bytes. One call of the
+ computation function processes the whole buffer so that with the
+ next round of the loop another block can be read. */
+ size_t n;
+ sum = 0;
+
+ /* Read block. Take care for partial reads. */
+ do
+ {
+ n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
+
+ sum += n;
+ }
+ while (sum < BLOCKSIZE && n != 0);
+ if (n == 0 && ferror (stream))
+ return 1;
+
+ /* If end of file is reached, end the loop. */
+ if (n == 0)
+ break;
+
+ /* Process buffer with BLOCKSIZE bytes. Note that
+ BLOCKSIZE % 64 == 0
+ */
+ md5_process_block (buffer, BLOCKSIZE, &ctx);
+ }
+
+ /* Add the last bytes if necessary. */
+ if (sum > 0)
+ md5_process_bytes (buffer, sum, &ctx);
+
+ /* Construct result in desired memory. */
+ md5_finish_ctx (&ctx, resblock);
+ return 0;
+}
+
+/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
+ result is always in little endian byte order, so that a byte-wise
+ output yields to the wanted ASCII representation of the message
+ digest. */
+void *
+md5_buffer (buffer, len, resblock)
+ const char *buffer;
+ size_t len;
+ void *resblock;
+{
+ struct md5_ctx ctx;
+
+ /* Initialize the computation context. */
+ md5_init_ctx (&ctx);
+
+ /* Process whole buffer but last len % 64 bytes. */
+ md5_process_bytes (buffer, len, &ctx);
+
+ /* Put result in desired memory area. */
+ return md5_finish_ctx (&ctx, resblock);
+}
+
+
+void
+md5_process_bytes (buffer, len, ctx)
+ const void *buffer;
+ size_t len;
+ struct md5_ctx *ctx;
+{
+ /* When we already have some bits in our internal buffer concatenate
+ both inputs first. */
+ if (ctx->buflen != 0)
+ {
+ size_t left_over = ctx->buflen;
+ size_t add = 128 - left_over > len ? len : 128 - left_over;
+
+ memcpy (&ctx->buffer[left_over], buffer, add);
+ ctx->buflen += add;
+
+ if (left_over + add > 64)
+ {
+ md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx);
+ /* The regions in the following copy operation cannot overlap. */
+ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
+ (left_over + add) & 63);
+ ctx->buflen = (left_over + add) & 63;
+ }
+
+ buffer = (const char *) buffer + add;
+ len -= add;
+ }
+
+ /* Process available complete blocks. */
+ if (len > 64)
+ {
+ md5_process_block (buffer, len & ~63, ctx);
+ buffer = (const char *) buffer + (len & ~63);
+ len &= 63;
+ }
+
+ /* Move remaining bytes in internal buffer. */
+ if (len > 0)
+ {
+ memcpy (ctx->buffer, buffer, len);
+ ctx->buflen = len;
+ }
+}
+
+
+/* These are the four functions used in the four steps of the MD5 algorithm
+ and defined in the RFC 1321. The first function is a little bit optimized
+ (as found in Colin Plumbs public domain implementation). */
+/* #define FF(b, c, d) ((b & c) | (~b & d)) */
+#define FF(b, c, d) (d ^ (b & (c ^ d)))
+#define FG(b, c, d) FF (d, b, c)
+#define FH(b, c, d) (b ^ c ^ d)
+#define FI(b, c, d) (c ^ (b | ~d))
+
+/* Process LEN bytes of BUFFER, accumulating context into CTX.
+ It is assumed that LEN % 64 == 0. */
+
+void
+md5_process_block (buffer, len, ctx)
+ const void *buffer;
+ size_t len;
+ struct md5_ctx *ctx;
+{
+ md5_uint32 correct_words[16];
+ const md5_uint32 *words = buffer;
+ size_t nwords = len / sizeof (md5_uint32);
+ const md5_uint32 *endp = words + nwords;
+ md5_uint32 A = ctx->A;
+ md5_uint32 B = ctx->B;
+ md5_uint32 C = ctx->C;
+ md5_uint32 D = ctx->D;
+
+ /* First increment the byte count. RFC 1321 specifies the possible
+ length of the file up to 2^64 bits. Here we only compute the
+ number of bytes. Do a double word increment. */
+ ctx->total[0] += len;
+ if (ctx->total[0] < len)
+ ++ctx->total[1];
+
+ /* Process all bytes in the buffer with 64 bytes in each round of
+ the loop. */
+ while (words < endp)
+ {
+ md5_uint32 *cwp = correct_words;
+ md5_uint32 A_save = A;
+ md5_uint32 B_save = B;
+ md5_uint32 C_save = C;
+ md5_uint32 D_save = D;
+
+ /* First round: using the given function, the context and a constant
+ the next context is computed. Because the algorithms processing
+ unit is a 32-bit word and it is determined to work on words in
+ little endian byte order we perhaps have to change the byte order
+ before the computation. To reduce the work for the next steps
+ we store the swapped words in the array CORRECT_WORDS. */
+
+#define OP(a, b, c, d, s, T) \
+ do \
+ { \
+ a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \
+ ++words; \
+ a = rol (a, s); \
+ a += b; \
+ } \
+ while (0)
+
+ /* Before we start, one word to the strange constants.
+ They are defined in RFC 1321 as
+
+ T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64, or
+ perl -e 'foreach(1..64){printf "0x%08x\n", int (4294967296 * abs (sin $_))}'
+ */
+
+ /* Round 1. */
+ OP (A, B, C, D, 7, 0xd76aa478);
+ OP (D, A, B, C, 12, 0xe8c7b756);
+ OP (C, D, A, B, 17, 0x242070db);
+ OP (B, C, D, A, 22, 0xc1bdceee);
+ OP (A, B, C, D, 7, 0xf57c0faf);
+ OP (D, A, B, C, 12, 0x4787c62a);
+ OP (C, D, A, B, 17, 0xa8304613);
+ OP (B, C, D, A, 22, 0xfd469501);
+ OP (A, B, C, D, 7, 0x698098d8);
+ OP (D, A, B, C, 12, 0x8b44f7af);
+ OP (C, D, A, B, 17, 0xffff5bb1);
+ OP (B, C, D, A, 22, 0x895cd7be);
+ OP (A, B, C, D, 7, 0x6b901122);
+ OP (D, A, B, C, 12, 0xfd987193);
+ OP (C, D, A, B, 17, 0xa679438e);
+ OP (B, C, D, A, 22, 0x49b40821);
+
+ /* For the second to fourth round we have the possibly swapped words
+ in CORRECT_WORDS. Redefine the macro to take an additional first
+ argument specifying the function to use. */
+#undef OP
+#define OP(f, a, b, c, d, k, s, T) \
+ do \
+ { \
+ a += f (b, c, d) + correct_words[k] + T; \
+ a = rol (a, s); \
+ a += b; \
+ } \
+ while (0)
+
+ /* Round 2. */
+ OP (FG, A, B, C, D, 1, 5, 0xf61e2562);
+ OP (FG, D, A, B, C, 6, 9, 0xc040b340);
+ OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
+ OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
+ OP (FG, A, B, C, D, 5, 5, 0xd62f105d);
+ OP (FG, D, A, B, C, 10, 9, 0x02441453);
+ OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
+ OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
+ OP (FG, A, B, C, D, 9, 5, 0x21e1cde6);
+ OP (FG, D, A, B, C, 14, 9, 0xc33707d6);
+ OP (FG, C, D, A, B, 3, 14, 0xf4d50d87);
+ OP (FG, B, C, D, A, 8, 20, 0x455a14ed);
+ OP (FG, A, B, C, D, 13, 5, 0xa9e3e905);
+ OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8);
+ OP (FG, C, D, A, B, 7, 14, 0x676f02d9);
+ OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
+
+ /* Round 3. */
+ OP (FH, A, B, C, D, 5, 4, 0xfffa3942);
+ OP (FH, D, A, B, C, 8, 11, 0x8771f681);
+ OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
+ OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
+ OP (FH, A, B, C, D, 1, 4, 0xa4beea44);
+ OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9);
+ OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60);
+ OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
+ OP (FH, A, B, C, D, 13, 4, 0x289b7ec6);
+ OP (FH, D, A, B, C, 0, 11, 0xeaa127fa);
+ OP (FH, C, D, A, B, 3, 16, 0xd4ef3085);
+ OP (FH, B, C, D, A, 6, 23, 0x04881d05);
+ OP (FH, A, B, C, D, 9, 4, 0xd9d4d039);
+ OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
+ OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
+ OP (FH, B, C, D, A, 2, 23, 0xc4ac5665);
+
+ /* Round 4. */
+ OP (FI, A, B, C, D, 0, 6, 0xf4292244);
+ OP (FI, D, A, B, C, 7, 10, 0x432aff97);
+ OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
+ OP (FI, B, C, D, A, 5, 21, 0xfc93a039);
+ OP (FI, A, B, C, D, 12, 6, 0x655b59c3);
+ OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92);
+ OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
+ OP (FI, B, C, D, A, 1, 21, 0x85845dd1);
+ OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f);
+ OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
+ OP (FI, C, D, A, B, 6, 15, 0xa3014314);
+ OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
+ OP (FI, A, B, C, D, 4, 6, 0xf7537e82);
+ OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
+ OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
+ OP (FI, B, C, D, A, 9, 21, 0xeb86d391);
+
+ /* Add the starting values of the context. */
+ A += A_save;
+ B += B_save;
+ C += C_save;
+ D += D_save;
+ }
+
+ /* Put checksum in context given as argument. */
+ ctx->A = A;
+ ctx->B = B;
+ ctx->C = C;
+ ctx->D = D;
+}
diff --git a/lib/md5.h b/lib/md5.h
new file mode 100644
index 0000000..9303e6c
--- /dev/null
+++ b/lib/md5.h
@@ -0,0 +1,161 @@
+/* md5.h - Declaration of functions and data types used for MD5 sum
+ computing library functions.
+ Copyright (C) 1995, 1996, 1999, 2007 Free Software Foundation, Inc.
+ NOTE: The canonical source of this file is maintained with the GNU C
+ Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+ 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 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _MD5_H
+#define _MD5_H 1
+
+#include <stdio.h>
+
+#if defined HAVE_LIMITS_H || _LIBC
+# include <limits.h>
+#endif
+
+/* 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. */
+
+#ifdef _LIBC
+# include <sys/types.h>
+typedef u_int32_t md5_uint32;
+#else
+# if defined __STDC__ && __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 int md5_uint32;
+# else
+# if USHRT_MAX == UINT_MAX_32_BITS
+ typedef unsigned short md5_uint32;
+# else
+# if ULONG_MAX == UINT_MAX_32_BITS
+ typedef unsigned long md5_uint32;
+# else
+ /* The following line is intended to evoke an error.
+ Using #error is not portable enough. */
+ "Cannot determine unsigned 32-bit data type."
+# endif
+# endif
+# endif
+#endif
+
+#undef __P
+#if defined (__STDC__) && __STDC__
+#define __P(x) x
+#else
+#define __P(x) ()
+#endif
+
+/* Structure to save state of computation between the single steps. */
+struct md5_ctx
+{
+ md5_uint32 A;
+ md5_uint32 B;
+ md5_uint32 C;
+ md5_uint32 D;
+
+ md5_uint32 total[2];
+ md5_uint32 buflen;
+ char buffer[128];
+};
+
+/*
+ * The following three functions are build up the low level used in
+ * the functions `md5_stream' and `md5_buffer'.
+ */
+
+/* Initialize structure containing state of computation.
+ (RFC 1321, 3.3: Step 3) */
+extern void md5_init_ctx __P ((struct md5_ctx *ctx));
+
+/* Starting with the result of former calls of this function (or the
+ initialization function update the context for the next LEN bytes
+ starting at BUFFER.
+ It is necessary that LEN is a multiple of 64!!! */
+extern void md5_process_block __P ((const void *buffer, size_t len,
+ struct md5_ctx *ctx));
+
+/* Starting with the result of former calls of this function (or the
+ initialization function update the context for the next LEN bytes
+ starting at BUFFER.
+ It is NOT required that LEN is a multiple of 64. */
+extern void md5_process_bytes __P ((const void *buffer, size_t len,
+ struct md5_ctx *ctx));
+
+/* Process the remaining bytes in the buffer and put result from CTX
+ in first 16 bytes following RESBUF. The result is always in little
+ endian byte order, so that a byte-wise output yields to the wanted
+ ASCII representation of the message digest.
+
+ IMPORTANT: On some systems it is required that RESBUF be correctly
+ aligned for a 32 bits value. */
+extern void *md5_finish_ctx __P ((struct md5_ctx *ctx, void *resbuf));
+
+
+/* Put result from CTX in first 16 bytes following RESBUF. The result is
+ always in little endian byte order, so that a byte-wise output yields
+ to the wanted ASCII representation of the message digest.
+
+ IMPORTANT: On some systems it is required that RESBUF is correctly
+ aligned for a 32 bits value. */
+extern void *md5_read_ctx __P ((const struct md5_ctx *ctx, void *resbuf));
+
+
+/* Compute MD5 message digest for bytes read from STREAM. The
+ resulting message digest number will be written into the 16 bytes
+ beginning at RESBLOCK. */
+extern int md5_stream __P ((FILE *stream, void *resblock));
+
+/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
+ result is always in little endian byte order, so that a byte-wise
+ output yields to the wanted ASCII representation of the message
+ digest. */
+extern void *md5_buffer __P ((const char *buffer, size_t len, void *resblock));
+
+/* The following is from gnupg-1.0.2's cipher/bithelp.h. */
+/* Rotate a 32 bit integer by n bytes */
+#if defined __GNUC__ && defined __i386__
+static inline md5_uint32
+rol(md5_uint32 x, int n)
+{
+ __asm__("roll %%cl,%0"
+ :"=r" (x)
+ :"0" (x),"c" (n));
+ return x;
+}
+#else
+# define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
+#endif
+
+#endif
diff --git a/lib/memset.c b/lib/memset.c
new file mode 100644
index 0000000..ffa1ef5
--- /dev/null
+++ b/lib/memset.c
@@ -0,0 +1,26 @@
+/* memset.c -- set an area of memory to a given value
+ Copyright (C) 1991, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+char *
+memset (char *str, int c, unsigned int len)
+{
+ register char *st = str;
+
+ while (len-- > 0)
+ *st++ = c;
+ return str;
+}
diff --git a/lib/mktime.c b/lib/mktime.c
new file mode 100644
index 0000000..0fe854d
--- /dev/null
+++ b/lib/mktime.c
@@ -0,0 +1,528 @@
+/* Convert a `struct tm' to a time_t value.
+ Copyright (C) 1993, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Paul Eggert (eggert@twinsun.com).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library 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., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* Define this to have a standalone program to test this implementation of
+ mktime. */
+/* #define DEBUG 1 */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define HAVE_LIMITS_H 1
+# define STDC_HEADERS 1
+#endif
+
+/* Assume that leap seconds are possible, unless told otherwise.
+ If the host has a `zic' command with a `-L leapsecondfilename' option,
+ then it supports leap seconds; otherwise it probably doesn't. */
+#ifndef LEAP_SECONDS_POSSIBLE
+# define LEAP_SECONDS_POSSIBLE 1
+#endif
+
+#include <sys/types.h> /* Some systems define `time_t' here. */
+#include <time.h>
+
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#if DEBUG
+# include <stdio.h>
+# if STDC_HEADERS
+# include <stdlib.h>
+# endif
+/* Make it work even if the system's libc has its own mktime routine. */
+# define mktime my_mktime
+#endif /* DEBUG */
+
+#ifndef __P
+# if defined __GNUC__ || (defined __STDC__ && __STDC__)
+# define __P(args) args
+# else
+# define __P(args) ()
+# endif /* GCC. */
+#endif /* Not __P. */
+
+#ifndef CHAR_BIT
+# define CHAR_BIT 8
+#endif
+
+/* The extra casts work around common compiler bugs. */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+/* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
+ It is necessary at least when t == time_t. */
+#define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
+ ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
+#define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
+
+#ifndef INT_MIN
+# define INT_MIN TYPE_MINIMUM (int)
+#endif
+#ifndef INT_MAX
+# define INT_MAX TYPE_MAXIMUM (int)
+#endif
+
+#ifndef TIME_T_MIN
+# define TIME_T_MIN TYPE_MINIMUM (time_t)
+#endif
+#ifndef TIME_T_MAX
+# define TIME_T_MAX TYPE_MAXIMUM (time_t)
+#endif
+
+#define TM_YEAR_BASE 1900
+#define EPOCH_YEAR 1970
+
+#ifndef __isleap
+/* Nonzero if YEAR is a leap year (every 4 years,
+ except every 100th isn't, and every 400th is). */
+# define __isleap(year) \
+ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
+#endif
+
+/* How many days come before each month (0-12). */
+const unsigned short int __mon_yday[2][13] =
+ {
+ /* Normal years. */
+ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
+ /* Leap years. */
+ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
+ };
+
+
+#ifdef _LIBC
+# define my_mktime_localtime_r __localtime_r
+#else
+/* If we're a mktime substitute in a GNU program, then prefer
+ localtime to localtime_r, since many localtime_r implementations
+ are buggy. */
+static struct tm *
+my_mktime_localtime_r (const time_t *t, struct tm *tp)
+{
+ struct tm *l = localtime (t);
+ if (! l)
+ return 0;
+ *tp = *l;
+ return tp;
+}
+#endif /* ! _LIBC */
+
+
+/* Yield the difference between (YEAR-YDAY HOUR:MIN:SEC) and (*TP),
+ measured in seconds, ignoring leap seconds.
+ YEAR uses the same numbering as TM->tm_year.
+ All values are in range, except possibly YEAR.
+ If TP is null, return a nonzero value.
+ If overflow occurs, yield the low order bits of the correct answer. */
+static time_t
+ydhms_tm_diff (int year, int yday, int hour, int min, int sec,
+ const struct tm *tp)
+{
+ if (!tp)
+ return 1;
+ else
+ {
+ /* Compute intervening leap days correctly even if year is negative.
+ Take care to avoid int overflow. time_t overflow is OK, since
+ only the low order bits of the correct time_t answer are needed.
+ Don't convert to time_t until after all divisions are done, since
+ time_t might be unsigned. */
+ int a4 = (year >> 2) + (TM_YEAR_BASE >> 2) - ! (year & 3);
+ int b4 = (tp->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (tp->tm_year & 3);
+ int a100 = a4 / 25 - (a4 % 25 < 0);
+ int b100 = b4 / 25 - (b4 % 25 < 0);
+ int a400 = a100 >> 2;
+ int b400 = b100 >> 2;
+ int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
+ time_t years = year - (time_t) tp->tm_year;
+ time_t days = (365 * years + intervening_leap_days
+ + (yday - tp->tm_yday));
+ return (60 * (60 * (24 * days + (hour - tp->tm_hour))
+ + (min - tp->tm_min))
+ + (sec - tp->tm_sec));
+ }
+}
+
+/* Use CONVERT to convert *T to a broken down time in *TP.
+ If *T is out of range for conversion, adjust it so that
+ it is the nearest in-range value and then convert that. */
+static struct tm *
+ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
+ time_t *t, struct tm *tp)
+{
+ struct tm *r;
+
+ if (! (r = (*convert) (t, tp)) && *t)
+ {
+ time_t bad = *t;
+ time_t ok = 0;
+ struct tm tm;
+
+ /* BAD is a known unconvertible time_t, and OK is a known good one.
+ Use binary search to narrow the range between BAD and OK until
+ they differ by 1. */
+ while (bad != ok + (bad < 0 ? -1 : 1))
+ {
+ time_t mid = *t = (bad < 0
+ ? bad + ((ok - bad) >> 1)
+ : ok + ((bad - ok) >> 1));
+ if ((r = (*convert) (t, tp)))
+ {
+ tm = *r;
+ ok = mid;
+ }
+ else
+ bad = mid;
+ }
+
+ if (!r && ok)
+ {
+ /* The last conversion attempt failed;
+ revert to the most recent successful attempt. */
+ *t = ok;
+ *tp = tm;
+ r = tp;
+ }
+ }
+
+ return r;
+}
+
+
+/* Convert *TP to a time_t value, inverting
+ the monotonic and mostly-unit-linear conversion function CONVERT.
+ Use *OFFSET to keep track of a guess at the offset of the result,
+ compared to what the result would be for UTC without leap seconds.
+ If *OFFSET's guess is correct, only one CONVERT call is needed. */
+time_t
+__mktime_internal (struct tm *tp,
+ struct tm *(*convert) (const time_t *, struct tm *),
+ time_t *offset)
+{
+ time_t t, dt, t0, t1, t2;
+ struct tm tm;
+
+ /* The maximum number of probes (calls to CONVERT) should be enough
+ to handle any combinations of time zone rule changes, solar time,
+ leap seconds, and oscillations around a spring-forward gap.
+ POSIX.1 prohibits leap seconds, but some hosts have them anyway. */
+ int remaining_probes = 6;
+
+ /* Time requested. Copy it in case CONVERT modifies *TP; this can
+ occur if TP is localtime's returned value and CONVERT is localtime. */
+ int sec = tp->tm_sec;
+ int min = tp->tm_min;
+ int hour = tp->tm_hour;
+ int mday = tp->tm_mday;
+ int mon = tp->tm_mon;
+ int year_requested = tp->tm_year;
+ int isdst = tp->tm_isdst;
+
+ /* Ensure that mon is in range, and set year accordingly. */
+ int mon_remainder = mon % 12;
+ int negative_mon_remainder = mon_remainder < 0;
+ int mon_years = mon / 12 - negative_mon_remainder;
+ int year = year_requested + mon_years;
+
+ /* The other values need not be in range:
+ the remaining code handles minor overflows correctly,
+ assuming int and time_t arithmetic wraps around.
+ Major overflows are caught at the end. */
+
+ /* Calculate day of year from year, month, and day of month.
+ The result need not be in range. */
+ int yday = ((__mon_yday[__isleap (year + TM_YEAR_BASE)]
+ [mon_remainder + 12 * negative_mon_remainder])
+ + mday - 1);
+
+ int sec_requested = sec;
+#if LEAP_SECONDS_POSSIBLE
+ /* Handle out-of-range seconds specially,
+ since ydhms_tm_diff assumes every minute has 60 seconds. */
+ if (sec < 0)
+ sec = 0;
+ if (59 < sec)
+ sec = 59;
+#endif
+
+ /* Invert CONVERT by probing. First assume the same offset as last time.
+ Then repeatedly use the error to improve the guess. */
+
+ tm.tm_year = EPOCH_YEAR - TM_YEAR_BASE;
+ tm.tm_yday = tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ t0 = ydhms_tm_diff (year, yday, hour, min, sec, &tm);
+
+ for (t = t1 = t2 = t0 + *offset;
+ (dt = ydhms_tm_diff (year, yday, hour, min, sec,
+ ranged_convert (convert, &t, &tm)));
+ t1 = t2, t2 = t, t += dt)
+ if (t == t1 && t != t2
+ && (isdst < 0 || tm.tm_isdst < 0
+ || (isdst != 0) != (tm.tm_isdst != 0)))
+ /* We can't possibly find a match, as we are oscillating
+ between two values. The requested time probably falls
+ within a spring-forward gap of size DT. Follow the common
+ practice in this case, which is to return a time that is DT
+ away from the requested time, preferring a time whose
+ tm_isdst differs from the requested value. In practice,
+ this is more useful than returning -1. */
+ break;
+ else if (--remaining_probes == 0)
+ return -1;
+
+ /* If we have a match, check whether tm.tm_isdst has the requested
+ value, if any. */
+ if (dt == 0 && isdst != tm.tm_isdst && 0 <= isdst && 0 <= tm.tm_isdst)
+ {
+ /* tm.tm_isdst has the wrong value. Look for a neighboring
+ time with the right value, and use its UTC offset.
+ Heuristic: probe the previous three calendar quarters (approximately),
+ looking for the desired isdst. This isn't perfect,
+ but it's good enough in practice. */
+ int quarter = 7889238; /* seconds per average 1/4 Gregorian year */
+ int i;
+
+ /* If we're too close to the time_t limit, look in future quarters. */
+ if (t < TIME_T_MIN + 3 * quarter)
+ quarter = -quarter;
+
+ for (i = 1; i <= 3; i++)
+ {
+ time_t ot = t - i * quarter;
+ struct tm otm;
+ ranged_convert (convert, &ot, &otm);
+ if (otm.tm_isdst == isdst)
+ {
+ /* We found the desired tm_isdst.
+ Extrapolate back to the desired time. */
+ t = ot + ydhms_tm_diff (year, yday, hour, min, sec, &otm);
+ ranged_convert (convert, &t, &tm);
+ break;
+ }
+ }
+ }
+
+ *offset = t - t0;
+
+#if LEAP_SECONDS_POSSIBLE
+ if (sec_requested != tm.tm_sec)
+ {
+ /* Adjust time to reflect the tm_sec requested, not the normalized value.
+ Also, repair any damage from a false match due to a leap second. */
+ t += sec_requested - sec + (sec == 0 && tm.tm_sec == 60);
+ if (! (*convert) (&t, &tm))
+ return -1;
+ }
+#endif
+
+ if (TIME_T_MAX / INT_MAX / 366 / 24 / 60 / 60 < 3)
+ {
+ /* time_t isn't large enough to rule out overflows in ydhms_tm_diff,
+ so check for major overflows. A gross check suffices,
+ since if t has overflowed, it is off by a multiple of
+ TIME_T_MAX - TIME_T_MIN + 1. So ignore any component of
+ the difference that is bounded by a small value. */
+
+ double dyear = (double) year_requested + mon_years - tm.tm_year;
+ double dday = 366 * dyear + mday;
+ double dsec = 60 * (60 * (24 * dday + hour) + min) + sec_requested;
+
+ /* On Irix4.0.5 cc, dividing TIME_T_MIN by 3 does not produce
+ correct results, ie., it erroneously gives a positive value
+ of 715827882. Setting a variable first then doing math on it
+ seems to work. (ghazi@caip.rutgers.edu) */
+
+ const time_t time_t_max = TIME_T_MAX;
+ const time_t time_t_min = TIME_T_MIN;
+
+ if (time_t_max / 3 - time_t_min / 3 < (dsec < 0 ? - dsec : dsec))
+ return -1;
+ }
+
+ *tp = tm;
+ return t;
+}
+
+
+static time_t localtime_offset;
+
+/* Convert *TP to a time_t value. */
+time_t
+mktime (tp)
+ struct tm *tp;
+{
+#ifdef _LIBC
+ /* POSIX.1 8.1.1 requires that whenever mktime() is called, the
+ time zone names contained in the external variable `tzname' shall
+ be set as if the tzset() function had been called. */
+ __tzset ();
+#endif
+
+ return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset);
+}
+
+#ifdef weak_alias
+weak_alias (mktime, timelocal)
+#endif
+
+#if DEBUG
+
+static int
+not_equal_tm (a, b)
+ struct tm *a;
+ struct tm *b;
+{
+ return ((a->tm_sec ^ b->tm_sec)
+ | (a->tm_min ^ b->tm_min)
+ | (a->tm_hour ^ b->tm_hour)
+ | (a->tm_mday ^ b->tm_mday)
+ | (a->tm_mon ^ b->tm_mon)
+ | (a->tm_year ^ b->tm_year)
+ | (a->tm_mday ^ b->tm_mday)
+ | (a->tm_yday ^ b->tm_yday)
+ | (a->tm_isdst ^ b->tm_isdst));
+}
+
+static void
+print_tm (tp)
+ struct tm *tp;
+{
+ if (tp)
+ printf ("%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d",
+ tp->tm_year + TM_YEAR_BASE, tp->tm_mon + 1, tp->tm_mday,
+ tp->tm_hour, tp->tm_min, tp->tm_sec,
+ tp->tm_yday, tp->tm_wday, tp->tm_isdst);
+ else
+ printf ("0");
+}
+
+static int
+check_result (tk, tmk, tl, lt)
+ time_t tk;
+ struct tm tmk;
+ time_t tl;
+ struct tm *lt;
+{
+ if (tk != tl || !lt || not_equal_tm (&tmk, lt))
+ {
+ printf ("mktime (");
+ print_tm (&tmk);
+ printf (")\nyields (");
+ print_tm (lt);
+ printf (") == %ld, should be %ld\n", (long) tl, (long) tk);
+ return 1;
+ }
+
+ return 0;
+}
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int status = 0;
+ struct tm tm, tmk, tml;
+ struct tm *lt;
+ time_t tk, tl;
+ char trailer;
+
+ if ((argc == 3 || argc == 4)
+ && (sscanf (argv[1], "%d-%d-%d%c",
+ &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer)
+ == 3)
+ && (sscanf (argv[2], "%d:%d:%d%c",
+ &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &trailer)
+ == 3))
+ {
+ tm.tm_year -= TM_YEAR_BASE;
+ tm.tm_mon--;
+ tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]);
+ tmk = tm;
+ tl = mktime (&tmk);
+ lt = localtime (&tl);
+ if (lt)
+ {
+ tml = *lt;
+ lt = &tml;
+ }
+ printf ("mktime returns %ld == ", (long) tl);
+ print_tm (&tmk);
+ printf ("\n");
+ status = check_result (tl, tmk, tl, lt);
+ }
+ else if (argc == 4 || (argc == 5 && strcmp (argv[4], "-") == 0))
+ {
+ time_t from = atol (argv[1]);
+ time_t by = atol (argv[2]);
+ time_t to = atol (argv[3]);
+
+ if (argc == 4)
+ for (tl = from; tl <= to; tl += by)
+ {
+ lt = localtime (&tl);
+ if (lt)
+ {
+ tmk = tml = *lt;
+ tk = mktime (&tmk);
+ status |= check_result (tk, tmk, tl, tml);
+ }
+ else
+ {
+ printf ("localtime (%ld) yields 0\n", (long) tl);
+ status = 1;
+ }
+ }
+ else
+ for (tl = from; tl <= to; tl += by)
+ {
+ /* Null benchmark. */
+ lt = localtime (&tl);
+ if (lt)
+ {
+ tmk = tml = *lt;
+ tk = tl;
+ status |= check_result (tk, tmk, tl, tml);
+ }
+ else
+ {
+ printf ("localtime (%ld) yields 0\n", (long) tl);
+ status = 1;
+ }
+ }
+ }
+ else
+ printf ("Usage:\
+\t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n\
+\t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n\
+\t%s FROM BY TO - # Do not test those values (for benchmark).\n",
+ argv[0], argv[0], argv[0]);
+
+ return status;
+}
+
+#endif /* DEBUG */
+
+/*
+Local Variables:
+compile-command: "gcc -DDEBUG -DHAVE_LIMITS_H -DSTDC_HEADERS -Wall -W -O -g mktime.c -o mktime"
+End:
+*/
diff --git a/lib/offtostr.c b/lib/offtostr.c
new file mode 100644
index 0000000..45196e2
--- /dev/null
+++ b/lib/offtostr.c
@@ -0,0 +1,3 @@
+#define inttostr offtostr
+#define inttype off_t
+#include "inttostr.c"
diff --git a/lib/pathmax.h b/lib/pathmax.h
new file mode 100644
index 0000000..b176b9b
--- /dev/null
+++ b/lib/pathmax.h
@@ -0,0 +1,55 @@
+/* Define PATH_MAX somehow. Requires sys/types.h.
+
+ Copyright (C) 1992, 1999, 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _PATHMAX_H
+# define _PATHMAX_H
+
+# if HAVE_UNISTD_H
+# include <unistd.h>
+# endif
+
+/* 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
+
+#endif /* _PATHMAX_H */
diff --git a/lib/realloc.c b/lib/realloc.c
new file mode 100644
index 0000000..7805810
--- /dev/null
+++ b/lib/realloc.c
@@ -0,0 +1,44 @@
+/* Work around bug on some systems where realloc (NULL, 0) fails.
+ Copyright (C) 1997, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* written by Jim Meyering */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+#undef realloc
+
+#include <sys/types.h>
+
+char *malloc ();
+char *realloc ();
+
+/* Change the size of an allocated block of memory P to N bytes,
+ with error checking. If N is zero, change it to 1. If P is NULL,
+ use malloc. */
+
+char *
+rpl_realloc (p, n)
+ char *p;
+ size_t n;
+{
+ if (n == 0)
+ n = 1;
+ if (p == 0)
+ return malloc (n);
+ return realloc (p, n);
+}
diff --git a/lib/stpcpy.c b/lib/stpcpy.c
new file mode 100644
index 0000000..9d2b4ff
--- /dev/null
+++ b/lib/stpcpy.c
@@ -0,0 +1,50 @@
+/* stpcpy.c -- copy a string and return pointer to end of new string
+
+ Copyright (C) 1992, 1995, 1997, 1998, 2007 Free Software Foundation, Inc.
+
+ NOTE: The canonical source of this file is maintained with the GNU C Library.
+ Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+ 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 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#undef __stpcpy
+#undef stpcpy
+
+#ifndef weak_alias
+# define __stpcpy stpcpy
+#endif
+
+/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
+char *
+__stpcpy (char *dest, const char *src)
+{
+ register char *d = dest;
+ register const char *s = src;
+
+ do
+ *d++ = *s;
+ while (*s++ != '\0');
+
+ return d - 1;
+}
+#ifdef weak_alias
+weak_alias (__stpcpy, stpcpy)
+#endif
diff --git a/lib/stpcpy.h b/lib/stpcpy.h
new file mode 100644
index 0000000..9396ce1
--- /dev/null
+++ b/lib/stpcpy.h
@@ -0,0 +1,40 @@
+/* String copying.
+ Copyright (C) 1995, 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _STPCPY_H
+#define _STPCPY_H
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(args) args
+# else
+# define PARAMS(args) ()
+# endif
+#endif
+
+#if HAVE_STPCPY
+
+/* Get stpcpy() declaration. */
+#include <string.h>
+
+#else
+
+extern char *stpcpy PARAMS ((char *__dst, const char *__src));
+
+#endif
+
+#endif /* _STPCPY_H */
diff --git a/lib/strftime.c b/lib/strftime.c
new file mode 100644
index 0000000..7c8bf1c
--- /dev/null
+++ b/lib/strftime.c
@@ -0,0 +1,1406 @@
+/* Copyright (C) 1991-1999, 2000, 2001, 2007 Free Software Foundation, Inc.
+
+ NOTE: The canonical source of this file is maintained with the GNU C Library.
+ Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+ 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 3, 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 General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define HAVE_LIMITS_H 1
+# define HAVE_MBLEN 1
+# define HAVE_MBRLEN 1
+# define HAVE_STRUCT_ERA_ENTRY 1
+# define HAVE_TM_GMTOFF 1
+# define HAVE_TM_ZONE 1
+# define HAVE_TZNAME 1
+# define HAVE_TZSET 1
+# define MULTIBYTE_IS_FORMAT_SAFE 1
+# define STDC_HEADERS 1
+# include "../locale/localeinfo.h"
+#endif
+
+#if defined emacs && !defined HAVE_BCOPY
+# define HAVE_MEMCPY 1
+#endif
+
+#include <ctype.h>
+#include <sys/types.h> /* Some systems define `time_t' here. */
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_TZNAME
+extern char *tzname[];
+#endif
+
+/* Do multibyte processing if multibytes are supported, unless
+ multibyte sequences are safe in formats. Multibyte sequences are
+ safe if they cannot contain byte sequences that look like format
+ conversion specifications. The GNU C Library uses UTF8 multibyte
+ encoding, which is safe for formats, but strftime.c can be used
+ with other C libraries that use unsafe encodings. */
+#define DO_MULTIBYTE (HAVE_MBLEN && ! MULTIBYTE_IS_FORMAT_SAFE)
+
+#if DO_MULTIBYTE
+# if HAVE_MBRLEN
+# include <wchar.h>
+# else
+ /* Simulate mbrlen with mblen as best we can. */
+# define mbstate_t int
+# define mbrlen(s, n, ps) mblen (s, n)
+# define mbsinit(ps) (*(ps) == 0)
+# endif
+ static const mbstate_t mbstate_zero;
+#endif
+
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#if STDC_HEADERS
+# include <stddef.h>
+# include <stdlib.h>
+# include <string.h>
+#else
+# ifndef HAVE_MEMCPY
+# define memcpy(d, s, n) bcopy ((s), (d), (n))
+# endif
+#endif
+
+#ifdef COMPILE_WIDE
+# include <endian.h>
+# define CHAR_T wchar_t
+# define UCHAR_T unsigned int
+# define L_(Str) L##Str
+# define NLW(Sym) _NL_W##Sym
+
+# define MEMCPY(d, s, n) __wmemcpy (d, s, n)
+# define STRLEN(s) __wcslen (s)
+
+#else
+# define CHAR_T char
+# define UCHAR_T unsigned char
+# define L_(Str) Str
+# define NLW(Sym) Sym
+
+# if !defined STDC_HEADERS && !defined HAVE_MEMCPY
+# define MEMCPY(d, s, n) bcopy ((s), (d), (n))
+# else
+# define MEMCPY(d, s, n) memcpy ((d), (s), (n))
+# endif
+# define STRLEN(s) strlen (s)
+
+# ifdef _LIBC
+# define MEMPCPY(d, s, n) __mempcpy (d, s, n)
+# else
+# ifndef HAVE_MEMPCPY
+# define MEMPCPY(d, s, n) ((void *) ((char *) memcpy (d, s, n) + (n)))
+# endif
+# endif
+#endif
+
+#ifndef __P
+# if defined __GNUC__ || (defined __STDC__ && __STDC__)
+# define __P(args) args
+# else
+# define __P(args) ()
+# endif /* GCC. */
+#endif /* Not __P. */
+
+#ifndef PTR
+# ifdef __STDC__
+# define PTR void *
+# else
+# define PTR char *
+# endif
+#endif
+
+#ifndef CHAR_BIT
+# define CHAR_BIT 8
+#endif
+
+#ifndef NULL
+# define NULL 0
+#endif
+
+#define TYPE_SIGNED(t) ((t) -1 < 0)
+
+/* Bound on length of the string representing an integer value of type t.
+ Subtract one for the sign bit if t is signed;
+ 302 / 1000 is log10 (2) rounded up;
+ add one for integer division truncation;
+ add one more for a minus sign if t is signed. */
+#define INT_STRLEN_BOUND(t) \
+ ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 + 1 + TYPE_SIGNED (t))
+
+#define TM_YEAR_BASE 1900
+
+#ifndef __isleap
+/* Nonzero if YEAR is a leap year (every 4 years,
+ except every 100th isn't, and every 400th is). */
+# define __isleap(year) \
+ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
+#endif
+
+
+#ifdef _LIBC
+# define my_strftime_gmtime_r __gmtime_r
+# define my_strftime_localtime_r __localtime_r
+# define tzname __tzname
+# define tzset __tzset
+#else
+
+/* If we're a strftime substitute in a GNU program, then prefer gmtime
+ to gmtime_r, since many gmtime_r implementations are buggy.
+ Similarly for localtime_r. */
+
+# if ! HAVE_TM_GMTOFF
+static struct tm *my_strftime_gmtime_r __P ((const time_t *, struct tm *));
+static struct tm *
+my_strftime_gmtime_r (t, tp)
+ const time_t *t;
+ struct tm *tp;
+{
+ struct tm *l = gmtime (t);
+ if (! l)
+ return 0;
+ *tp = *l;
+ return tp;
+}
+
+static struct tm *my_strftime_localtime_r __P ((const time_t *, struct tm *));
+static struct tm *
+my_strftime_localtime_r (t, tp)
+ const time_t *t;
+ struct tm *tp;
+{
+ struct tm *l = localtime (t);
+ if (! l)
+ return 0;
+ *tp = *l;
+ return tp;
+}
+# endif /* ! HAVE_TM_GMTOFF */
+#endif /* ! defined _LIBC */
+
+
+#if !defined memset && !defined HAVE_MEMSET && !defined _LIBC
+/* Some systems lack the `memset' function and we don't want to
+ introduce additional dependencies. */
+/* The SGI compiler reportedly barfs on the trailing null
+ if we use a string constant as the initializer. 28 June 1997, rms. */
+static const CHAR_T spaces[16] = /* " " */
+{
+ L_(' '),L_(' '),L_(' '),L_(' '),L_(' '),L_(' '),L_(' '),L_(' '),
+ L_(' '),L_(' '),L_(' '),L_(' '),L_(' '),L_(' '),L_(' '),L_(' ')
+};
+static const CHAR_T zeroes[16] = /* "0000000000000000" */
+{
+ L_('0'),L_('0'),L_('0'),L_('0'),L_('0'),L_('0'),L_('0'),L_('0'),
+ L_('0'),L_('0'),L_('0'),L_('0'),L_('0'),L_('0'),L_('0'),L_('0')
+};
+
+# define memset_space(P, Len) \
+ do { \
+ int _len = (Len); \
+ \
+ do \
+ { \
+ int _this = _len > 16 ? 16 : _len; \
+ (P) = MEMPCPY ((P), spaces, _this * sizeof (CHAR_T)); \
+ _len -= _this; \
+ } \
+ while (_len > 0); \
+ } while (0)
+
+# define memset_zero(P, Len) \
+ do { \
+ int _len = (Len); \
+ \
+ do \
+ { \
+ int _this = _len > 16 ? 16 : _len; \
+ (P) = MEMPCPY ((P), zeroes, _this * sizeof (CHAR_T)); \
+ _len -= _this; \
+ } \
+ while (_len > 0); \
+ } while (0)
+#else
+# ifdef COMPILE_WIDE
+# define memset_space(P, Len) (wmemset ((P), L' ', (Len)), (P) += (Len))
+# define memset_zero(P, Len) (wmemset ((P), L'0', (Len)), (P) += (Len))
+# else
+# define memset_space(P, Len) (memset ((P), ' ', (Len)), (P) += (Len))
+# define memset_zero(P, Len) (memset ((P), '0', (Len)), (P) += (Len))
+# endif
+#endif
+
+#define add(n, f) \
+ do \
+ { \
+ int _n = (n); \
+ int _delta = width - _n; \
+ int _incr = _n + (_delta > 0 ? _delta : 0); \
+ if (i + _incr >= maxsize) \
+ return 0; \
+ if (p) \
+ { \
+ if (_delta > 0) \
+ { \
+ if (pad == L_('0')) \
+ memset_zero (p, _delta); \
+ else \
+ memset_space (p, _delta); \
+ } \
+ f; \
+ p += _n; \
+ } \
+ i += _incr; \
+ } while (0)
+
+#define cpy(n, s) \
+ add ((n), \
+ if (to_lowcase) \
+ memcpy_lowcase (p, (s), _n); \
+ else if (to_uppcase) \
+ memcpy_uppcase (p, (s), _n); \
+ else \
+ MEMCPY ((PTR) p, (const PTR) (s), _n))
+
+#ifdef COMPILE_WIDE
+# define widen(os, ws, l) \
+ { \
+ mbstate_t __st; \
+ const char *__s = os; \
+ memset (&__st, '\0', sizeof (__st)); \
+ l = __mbsrtowcs (NULL, &__s, 0, &__st); \
+ ws = alloca ((l + 1) * sizeof (wchar_t)); \
+ (void) __mbsrtowcs (ws, &__s, l, &__st); \
+ }
+#endif
+
+
+#ifdef COMPILE_WIDE
+# define TOUPPER(Ch) towupper (Ch)
+# define TOLOWER(Ch) towlower (Ch)
+#else
+# ifdef _LIBC
+# define TOUPPER(Ch) toupper (Ch)
+# define TOLOWER(Ch) tolower (Ch)
+# else
+# define TOUPPER(Ch) (islower (Ch) ? toupper (Ch) : (Ch))
+# define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
+# endif
+#endif
+/* We don't use `isdigit' here since the locale dependent
+ interpretation is not what we want here. We only need to accept
+ the arabic digits in the ASCII range. One day there is perhaps a
+ more reliable way to accept other sets of digits. */
+#define ISDIGIT(Ch) ((unsigned int) (Ch) - L_('0') <= 9)
+
+static CHAR_T *memcpy_lowcase __P ((CHAR_T *dest, const CHAR_T *src,
+ size_t len));
+
+static CHAR_T *
+memcpy_lowcase (dest, src, len)
+ CHAR_T *dest;
+ const CHAR_T *src;
+ size_t len;
+{
+ while (len-- > 0)
+ dest[len] = TOLOWER ((UCHAR_T) src[len]);
+ return dest;
+}
+
+static CHAR_T *memcpy_uppcase __P ((CHAR_T *dest, const CHAR_T *src,
+ size_t len));
+
+static CHAR_T *
+memcpy_uppcase (dest, src, len)
+ CHAR_T *dest;
+ const CHAR_T *src;
+ size_t len;
+{
+ while (len-- > 0)
+ dest[len] = TOUPPER ((UCHAR_T) src[len]);
+ return dest;
+}
+
+
+#if ! HAVE_TM_GMTOFF
+/* Yield the difference between *A and *B,
+ measured in seconds, ignoring leap seconds. */
+# define tm_diff ftime_tm_diff
+static int tm_diff __P ((const struct tm *, const struct tm *));
+static int
+tm_diff (a, b)
+ const struct tm *a;
+ const struct tm *b;
+{
+ /* Compute intervening leap days correctly even if year is negative.
+ Take care to avoid int overflow in leap day calculations,
+ but it's OK to assume that A and B are close to each other. */
+ int a4 = (a->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (a->tm_year & 3);
+ int b4 = (b->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (b->tm_year & 3);
+ int a100 = a4 / 25 - (a4 % 25 < 0);
+ int b100 = b4 / 25 - (b4 % 25 < 0);
+ int a400 = a100 >> 2;
+ int b400 = b100 >> 2;
+ int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
+ int years = a->tm_year - b->tm_year;
+ int days = (365 * years + intervening_leap_days
+ + (a->tm_yday - b->tm_yday));
+ return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
+ + (a->tm_min - b->tm_min))
+ + (a->tm_sec - b->tm_sec));
+}
+#endif /* ! HAVE_TM_GMTOFF */
+
+
+
+/* The number of days from the first day of the first ISO week of this
+ year to the year day YDAY with week day WDAY. ISO weeks start on
+ Monday; the first ISO week has the year's first Thursday. YDAY may
+ be as small as YDAY_MINIMUM. */
+#define ISO_WEEK_START_WDAY 1 /* Monday */
+#define ISO_WEEK1_WDAY 4 /* Thursday */
+#define YDAY_MINIMUM (-366)
+static int iso_week_days __P ((int, int));
+#ifdef __GNUC__
+__inline__
+#endif
+static int
+iso_week_days (yday, wday)
+ int yday;
+ int wday;
+{
+ /* Add enough to the first operand of % to make it nonnegative. */
+ int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7;
+ return (yday
+ - (yday - wday + ISO_WEEK1_WDAY + big_enough_multiple_of_7) % 7
+ + ISO_WEEK1_WDAY - ISO_WEEK_START_WDAY);
+}
+
+
+#if !(defined _NL_CURRENT || HAVE_STRFTIME)
+static CHAR_T const weekday_name[][10] =
+ {
+ L_("Sunday"), L_("Monday"), L_("Tuesday"), L_("Wednesday"),
+ L_("Thursday"), L_("Friday"), L_("Saturday")
+ };
+static CHAR_T const month_name[][10] =
+ {
+ L_("January"), L_("February"), L_("March"), L_("April"), L_("May"),
+ L_("June"), L_("July"), L_("August"), L_("September"), L_("October"),
+ L_("November"), L_("December")
+ };
+#endif
+
+
+/* When compiling this file, GNU applications can #define my_strftime
+ to a symbol (typically nstrftime) to get an extended strftime with
+ extra arguments UT and NS. Emacs is a special case for now, but
+ this Emacs-specific code can be removed once Emacs's config.h
+ defines my_strftime. */
+#if defined emacs && !defined my_strftime
+# define my_strftime nstrftime
+#endif
+
+#ifdef my_strftime
+# define extra_args , ut, ns
+# define extra_args_spec int ut; int ns;
+# define extra_args_spec_iso , int ut, int ns
+#else
+# ifdef COMPILE_WIDE
+# define my_strftime wcsftime
+# else
+# define my_strftime strftime
+# endif
+# define extra_args
+# define extra_args_spec
+# define extra_args_spec_iso
+/* We don't have this information in general. */
+# define ut 0
+# define ns 0
+#endif
+
+#if !defined _LIBC && HAVE_TZNAME && HAVE_TZSET
+ /* Solaris 2.5 tzset sometimes modifies the storage returned by localtime.
+ Work around this bug by copying *tp before it might be munged. */
+ size_t _strftime_copytm __P ((char *, size_t, const char *,
+ const struct tm * extra_args_spec_iso));
+ size_t
+ my_strftime (s, maxsize, format, tp extra_args)
+ CHAR_T *s;
+ size_t maxsize;
+ const CHAR_T *format;
+ const struct tm *tp;
+ extra_args_spec
+ {
+ struct tm tmcopy;
+ tmcopy = *tp;
+ return _strftime_copytm (s, maxsize, format, &tmcopy extra_args);
+ }
+# undef my_strftime
+# define my_strftime _strftime_copytm
+#endif
+
+
+/* Write information from TP into S according to the format
+ string FORMAT, writing no more that MAXSIZE characters
+ (including the terminating '\0') and returning number of
+ characters written. If S is NULL, nothing will be written
+ anywhere, so to determine how many characters would be
+ written, use NULL for S and (size_t) UINT_MAX for MAXSIZE. */
+size_t
+my_strftime (s, maxsize, format, tp extra_args)
+ CHAR_T *s;
+ size_t maxsize;
+ const CHAR_T *format;
+ const struct tm *tp;
+ extra_args_spec
+{
+ int hour12 = tp->tm_hour;
+#ifdef _NL_CURRENT
+ /* We cannot make the following values variables since we must delay
+ the evaluation of these values until really needed since some
+ expressions might not be valid in every situation. The `struct tm'
+ might be generated by a strptime() call that initialized
+ only a few elements. Dereference the pointers only if the format
+ requires this. Then it is ok to fail if the pointers are invalid. */
+# define a_wkday \
+ ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday))
+# define f_wkday \
+ ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday))
+# define a_month \
+ ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon))
+# define f_month \
+ ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon))
+# define ampm \
+ ((const CHAR_T *) _NL_CURRENT (LC_TIME, tp->tm_hour > 11 \
+ ? NLW(PM_STR) : NLW(AM_STR)))
+
+# define aw_len STRLEN (a_wkday)
+# define am_len STRLEN (a_month)
+# define ap_len STRLEN (ampm)
+#else
+# if !HAVE_STRFTIME
+# define f_wkday (weekday_name[tp->tm_wday])
+# define f_month (month_name[tp->tm_mon])
+# define a_wkday f_wkday
+# define a_month f_month
+# define ampm (L_("AMPM") + 2 * (tp->tm_hour > 11))
+
+ size_t aw_len = 3;
+ size_t am_len = 3;
+ size_t ap_len = 2;
+# endif
+#endif
+ const char *zone;
+ size_t i = 0;
+ CHAR_T *p = s;
+ const CHAR_T *f;
+#if DO_MULTIBYTE && !defined COMPILE_WIDE
+ const char *format_end = NULL;
+#endif
+
+ zone = NULL;
+#if HAVE_TM_ZONE
+ /* The POSIX test suite assumes that setting
+ the environment variable TZ to a new value before calling strftime()
+ will influence the result (the %Z format) even if the information in
+ TP is computed with a totally different time zone.
+ This is bogus: though POSIX allows bad behavior like this,
+ POSIX does not require it. Do the right thing instead. */
+ zone = (const char *) tp->tm_zone;
+#endif
+#if HAVE_TZNAME
+ if (ut)
+ {
+ if (! (zone && *zone))
+ zone = "GMT";
+ }
+ else
+ {
+ /* POSIX.1 8.1.1 requires that whenever strftime() is called, the
+ time zone names contained in the external variable `tzname' shall
+ be set as if the tzset() function had been called. */
+# if HAVE_TZSET
+ tzset ();
+# endif
+ }
+#endif
+
+ if (hour12 > 12)
+ hour12 -= 12;
+ else
+ if (hour12 == 0)
+ hour12 = 12;
+
+ for (f = format; *f != '\0'; ++f)
+ {
+ int pad = 0; /* Padding for number ('-', '_', or 0). */
+ int modifier; /* Field modifier ('E', 'O', or 0). */
+ int digits; /* Max digits for numeric format. */
+ int number_value; /* Numeric value to be printed. */
+ int negative_number; /* 1 if the number is negative. */
+ const CHAR_T *subfmt;
+ CHAR_T *bufp;
+ CHAR_T buf[1 + (sizeof (int) < sizeof (time_t)
+ ? INT_STRLEN_BOUND (time_t)
+ : INT_STRLEN_BOUND (int))];
+ int width = -1;
+ int to_lowcase = 0;
+ int to_uppcase = 0;
+ int change_case = 0;
+ int format_char;
+
+#if DO_MULTIBYTE && !defined COMPILE_WIDE
+ switch (*f)
+ {
+ case L_('%'):
+ break;
+
+ case L_('\b'): case L_('\t'): case L_('\n'):
+ case L_('\v'): case L_('\f'): case L_('\r'):
+ case L_(' '): case L_('!'): case L_('"'): case L_('#'): case L_('&'):
+ case L_('\''): case L_('('): case L_(')'): case L_('*'): case L_('+'):
+ case L_(','): case L_('-'): case L_('.'): case L_('/'): case L_('0'):
+ case L_('1'): case L_('2'): case L_('3'): case L_('4'): case L_('5'):
+ case L_('6'): case L_('7'): case L_('8'): case L_('9'): case L_(':'):
+ case L_(';'): case L_('<'): case L_('='): case L_('>'): case L_('?'):
+ case L_('A'): case L_('B'): case L_('C'): case L_('D'): case L_('E'):
+ case L_('F'): case L_('G'): case L_('H'): case L_('I'): case L_('J'):
+ case L_('K'): case L_('L'): case L_('M'): case L_('N'): case L_('O'):
+ case L_('P'): case L_('Q'): case L_('R'): case L_('S'): case L_('T'):
+ case L_('U'): case L_('V'): case L_('W'): case L_('X'): case L_('Y'):
+ case L_('Z'): case L_('['): case L_('\\'): case L_(']'): case L_('^'):
+ case L_('_'): case L_('a'): case L_('b'): case L_('c'): case L_('d'):
+ case L_('e'): case L_('f'): case L_('g'): case L_('h'): case L_('i'):
+ case L_('j'): case L_('k'): case L_('l'): case L_('m'): case L_('n'):
+ case L_('o'): case L_('p'): case L_('q'): case L_('r'): case L_('s'):
+ case L_('t'): case L_('u'): case L_('v'): case L_('w'): case L_('x'):
+ case L_('y'): case L_('z'): case L_('{'): case L_('|'): case L_('}'):
+ case L_('~'):
+ /* The C Standard requires these 98 characters (plus '%') to
+ be in the basic execution character set. None of these
+ characters can start a multibyte sequence, so they need
+ not be analyzed further. */
+ add (1, *p = *f);
+ continue;
+
+ default:
+ /* Copy this multibyte sequence until we reach its end, find
+ an error, or come back to the initial shift state. */
+ {
+ mbstate_t mbstate = mbstate_zero;
+ size_t len = 0;
+ size_t fsize;
+
+ if (! format_end)
+ format_end = f + strlen (f) + 1;
+ fsize = format_end - f;
+
+ do
+ {
+ size_t bytes = mbrlen (f + len, fsize - len, &mbstate);
+
+ if (bytes == 0)
+ break;
+
+ if (bytes == (size_t) -2)
+ {
+ len += strlen (f + len);
+ break;
+ }
+
+ if (bytes == (size_t) -1)
+ {
+ len++;
+ break;
+ }
+
+ len += bytes;
+ }
+ while (! mbsinit (&mbstate));
+
+ cpy (len, f);
+ f += len - 1;
+ continue;
+ }
+ }
+
+#else /* ! DO_MULTIBYTE */
+
+ /* Either multibyte encodings are not supported, they are
+ safe for formats, so any non-'%' byte can be copied through,
+ or this is the wide character version. */
+ if (*f != L_('%'))
+ {
+ add (1, *p = *f);
+ continue;
+ }
+
+#endif /* ! DO_MULTIBYTE */
+
+ /* Check for flags that can modify a format. */
+ while (1)
+ {
+ switch (*++f)
+ {
+ /* This influences the number formats. */
+ case L_('_'):
+ case L_('-'):
+ case L_('0'):
+ pad = *f;
+ continue;
+
+ /* This changes textual output. */
+ case L_('^'):
+ to_uppcase = 1;
+ continue;
+ case L_('#'):
+ change_case = 1;
+ continue;
+
+ default:
+ break;
+ }
+ break;
+ }
+
+ /* As a GNU extension we allow to specify the field width. */
+ if (ISDIGIT (*f))
+ {
+ width = 0;
+ do
+ {
+ width *= 10;
+ width += *f - L_('0');
+ ++f;
+ }
+ while (ISDIGIT (*f));
+ }
+
+ /* Check for modifiers. */
+ switch (*f)
+ {
+ case L_('E'):
+ case L_('O'):
+ modifier = *f++;
+ break;
+
+ default:
+ modifier = 0;
+ break;
+ }
+
+ /* Now do the specified format. */
+ format_char = *f;
+ switch (format_char)
+ {
+#define DO_NUMBER(d, v) \
+ digits = width == -1 ? d : width; \
+ number_value = v; goto do_number
+#define DO_NUMBER_SPACEPAD(d, v) \
+ digits = width == -1 ? d : width; \
+ number_value = v; goto do_number_spacepad
+
+ case L_('%'):
+ if (modifier != 0)
+ goto bad_format;
+ add (1, *p = *f);
+ break;
+
+ case L_('a'):
+ if (modifier != 0)
+ goto bad_format;
+ if (change_case)
+ {
+ to_uppcase = 1;
+ to_lowcase = 0;
+ }
+#if defined _NL_CURRENT || !HAVE_STRFTIME
+ cpy (aw_len, a_wkday);
+ break;
+#else
+ goto underlying_strftime;
+#endif
+
+ case 'A':
+ if (modifier != 0)
+ goto bad_format;
+ if (change_case)
+ {
+ to_uppcase = 1;
+ to_lowcase = 0;
+ }
+#if defined _NL_CURRENT || !HAVE_STRFTIME
+ cpy (STRLEN (f_wkday), f_wkday);
+ break;
+#else
+ goto underlying_strftime;
+#endif
+
+ case L_('b'):
+ case L_('h'): /* POSIX.2 extension. */
+ if (change_case)
+ {
+ to_uppcase = 1;
+ to_lowcase = 0;
+ }
+ if (modifier != 0)
+ goto bad_format;
+#if defined _NL_CURRENT || !HAVE_STRFTIME
+ cpy (am_len, a_month);
+ break;
+#else
+ goto underlying_strftime;
+#endif
+
+ case L_('B'):
+ if (modifier != 0)
+ goto bad_format;
+ if (change_case)
+ {
+ to_uppcase = 1;
+ to_lowcase = 0;
+ }
+#if defined _NL_CURRENT || !HAVE_STRFTIME
+ cpy (STRLEN (f_month), f_month);
+ break;
+#else
+ goto underlying_strftime;
+#endif
+
+ case L_('c'):
+ if (modifier == L_('O'))
+ goto bad_format;
+#ifdef _NL_CURRENT
+ if (! (modifier == 'E'
+ && (*(subfmt =
+ (const CHAR_T *) _NL_CURRENT (LC_TIME,
+ NLW(ERA_D_T_FMT)))
+ != '\0')))
+ subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_T_FMT));
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# else
+ subfmt = L_("%a %b %e %H:%M:%S %Y");
+# endif
+#endif
+
+ subformat:
+ {
+ CHAR_T *old_start = p;
+ size_t len = my_strftime (NULL, (size_t) -1, subfmt,
+ tp extra_args);
+ add (len, my_strftime (p, maxsize - i, subfmt,
+ tp extra_args));
+
+ if (to_uppcase)
+ while (old_start < p)
+ {
+ *old_start = TOUPPER ((UCHAR_T) *old_start);
+ ++old_start;
+ }
+ }
+ break;
+
+#if HAVE_STRFTIME && ! (defined _NL_CURRENT && HAVE_STRUCT_ERA_ENTRY)
+ underlying_strftime:
+ {
+ /* The relevant information is available only via the
+ underlying strftime implementation, so use that. */
+ char ufmt[4];
+ char *u = ufmt;
+ char ubuf[1024]; /* enough for any single format in practice */
+ size_t len;
+ /* Make sure we're calling the actual underlying strftime.
+ In some cases, config.h contains something like
+ "#define strftime rpl_strftime". */
+# ifdef strftime
+# undef strftime
+ size_t strftime ();
+# endif
+
+ *u++ = '%';
+ if (modifier != 0)
+ *u++ = modifier;
+ *u++ = format_char;
+ *u = '\0';
+ len = strftime (ubuf, sizeof ubuf, ufmt, tp);
+ if (len == 0 && ubuf[0] != '\0')
+ return 0;
+ cpy (len, ubuf);
+ }
+ break;
+#endif
+
+ case L_('C'): /* POSIX.2 extension. */
+ if (modifier == L_('O'))
+ goto bad_format;
+ if (modifier == L_('E'))
+ {
+#if HAVE_STRUCT_ERA_ENTRY
+ struct era_entry *era = _nl_get_era_entry (tp);
+ if (era)
+ {
+# ifdef COMPILE_WIDE
+ size_t len = __wcslen (era->era_wname);
+ cpy (len, era->era_wname);
+# else
+ size_t len = strlen (era->era_name);
+ cpy (len, era->era_name);
+# endif
+ break;
+ }
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# endif
+#endif
+ }
+
+ {
+ int year = tp->tm_year + TM_YEAR_BASE;
+ DO_NUMBER (1, year / 100 - (year % 100 < 0));
+ }
+
+ case L_('x'):
+ if (modifier == L_('O'))
+ goto bad_format;
+#ifdef _NL_CURRENT
+ if (! (modifier == L_('E')
+ && (*(subfmt =
+ (const CHAR_T *)_NL_CURRENT (LC_TIME, NLW(ERA_D_FMT)))
+ != L_('\0'))))
+ subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_FMT));
+ goto subformat;
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# else
+ /* Fall through. */
+# endif
+#endif
+ case L_('D'): /* POSIX.2 extension. */
+ if (modifier != 0)
+ goto bad_format;
+ subfmt = L_("%m/%d/%y");
+ goto subformat;
+
+ case L_('d'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (2, tp->tm_mday);
+
+ case L_('e'): /* POSIX.2 extension. */
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER_SPACEPAD (2, tp->tm_mday);
+
+ /* All numeric formats set DIGITS and NUMBER_VALUE and then
+ jump to one of these two labels. */
+
+ do_number_spacepad:
+ /* Force `_' flag unless overwritten by `0' flag. */
+ if (pad != L_('0'))
+ pad = L_('_');
+
+ do_number:
+ /* Format the number according to the MODIFIER flag. */
+
+ if (modifier == L_('O') && 0 <= number_value)
+ {
+#ifdef _NL_CURRENT
+ /* Get the locale specific alternate representation of
+ the number NUMBER_VALUE. If none exist NULL is returned. */
+# ifdef COMPILE_WIDE
+ const wchar_t *cp = _nl_get_walt_digit (number_value);
+# else
+ const char *cp = _nl_get_alt_digit (number_value);
+# endif
+
+ if (cp != NULL)
+ {
+ size_t digitlen = STRLEN (cp);
+ if (digitlen != 0)
+ {
+ cpy (digitlen, cp);
+ break;
+ }
+ }
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# endif
+#endif
+ }
+ {
+ unsigned int u = number_value;
+
+ bufp = buf + sizeof (buf) / sizeof (buf[0]);
+ negative_number = number_value < 0;
+
+ if (negative_number)
+ u = -u;
+
+ do
+ *--bufp = u % 10 + L_('0');
+ while ((u /= 10) != 0);
+ }
+
+ do_number_sign_and_padding:
+ if (negative_number)
+ *--bufp = L_('-');
+
+ if (pad != L_('-'))
+ {
+ int padding = digits - (buf + (sizeof (buf) / sizeof (buf[0]))
+ - bufp);
+
+ if (pad == L_('_'))
+ {
+ while (0 < padding--)
+ *--bufp = L_(' ');
+ }
+ else
+ {
+ bufp += negative_number;
+ while (0 < padding--)
+ *--bufp = L_('0');
+ if (negative_number)
+ *--bufp = L_('-');
+ }
+ }
+
+ cpy (buf + sizeof (buf) / sizeof (buf[0]) - bufp, bufp);
+ break;
+
+ case L_('F'):
+ if (modifier != 0)
+ goto bad_format;
+ subfmt = L_("%Y-%m-%d");
+ goto subformat;
+
+ case L_('H'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (2, tp->tm_hour);
+
+ case L_('I'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (2, hour12);
+
+ case L_('k'): /* GNU extension. */
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER_SPACEPAD (2, tp->tm_hour);
+
+ case L_('l'): /* GNU extension. */
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER_SPACEPAD (2, hour12);
+
+ case L_('j'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (3, 1 + tp->tm_yday);
+
+ case L_('M'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (2, tp->tm_min);
+
+ case L_('m'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (2, tp->tm_mon + 1);
+
+ case L_('N'): /* GNU extension. */
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ number_value = ns;
+ if (width != -1)
+ {
+ /* Take an explicit width less than 9 as a precision. */
+ int j;
+ for (j = width; j < 9; j++)
+ number_value /= 10;
+ }
+
+ DO_NUMBER (9, number_value);
+
+ case L_('n'): /* POSIX.2 extension. */
+ add (1, *p = L_('\n'));
+ break;
+
+ case L_('P'):
+ to_lowcase = 1;
+#if !defined _NL_CURRENT && HAVE_STRFTIME
+ format_char = L_('p');
+#endif
+ /* FALLTHROUGH */
+
+ case L_('p'):
+ if (change_case)
+ {
+ to_uppcase = 0;
+ to_lowcase = 1;
+ }
+#if defined _NL_CURRENT || !HAVE_STRFTIME
+ cpy (ap_len, ampm);
+ break;
+#else
+ goto underlying_strftime;
+#endif
+
+ case L_('R'): /* ISO C99 extension. */
+ subfmt = L_("%H:%M");
+ goto subformat;
+
+ case L_('r'): /* POSIX.2 extension. */
+#ifdef _NL_CURRENT
+ if (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME,
+ NLW(T_FMT_AMPM)))
+ == L_('\0'))
+#endif
+ subfmt = L_("%I:%M:%S %p");
+ goto subformat;
+
+ case L_('S'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (2, tp->tm_sec);
+
+ case L_('s'): /* GNU extension. */
+ {
+ struct tm ltm;
+ time_t t;
+
+ ltm = *tp;
+ t = mktime (&ltm);
+
+ /* Generate string value for T using time_t arithmetic;
+ this works even if sizeof (long) < sizeof (time_t). */
+
+ bufp = buf + sizeof (buf) / sizeof (buf[0]);
+ negative_number = t < 0;
+
+ do
+ {
+ int d = t % 10;
+ t /= 10;
+
+ if (negative_number)
+ {
+ d = -d;
+
+ /* Adjust if division truncates to minus infinity. */
+ if (0 < -1 % 10 && d < 0)
+ {
+ t++;
+ d += 10;
+ }
+ }
+
+ *--bufp = d + L_('0');
+ }
+ while (t != 0);
+
+ digits = 1;
+ goto do_number_sign_and_padding;
+ }
+
+ case L_('X'):
+ if (modifier == L_('O'))
+ goto bad_format;
+#ifdef _NL_CURRENT
+ if (! (modifier == L_('E')
+ && (*(subfmt =
+ (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_T_FMT)))
+ != L_('\0'))))
+ subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT));
+ goto subformat;
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# else
+ /* Fall through. */
+# endif
+#endif
+ case L_('T'): /* POSIX.2 extension. */
+ subfmt = L_("%H:%M:%S");
+ goto subformat;
+
+ case L_('t'): /* POSIX.2 extension. */
+ add (1, *p = L_('\t'));
+ break;
+
+ case L_('u'): /* POSIX.2 extension. */
+ DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1);
+
+ case L_('U'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (2, (tp->tm_yday - tp->tm_wday + 7) / 7);
+
+ case L_('V'):
+ case L_('g'): /* ISO C99 extension. */
+ case L_('G'): /* ISO C99 extension. */
+ if (modifier == L_('E'))
+ goto bad_format;
+ {
+ int year = tp->tm_year + TM_YEAR_BASE;
+ int days = iso_week_days (tp->tm_yday, tp->tm_wday);
+
+ if (days < 0)
+ {
+ /* This ISO week belongs to the previous year. */
+ year--;
+ days = iso_week_days (tp->tm_yday + (365 + __isleap (year)),
+ tp->tm_wday);
+ }
+ else
+ {
+ int d = iso_week_days (tp->tm_yday - (365 + __isleap (year)),
+ tp->tm_wday);
+ if (0 <= d)
+ {
+ /* This ISO week belongs to the next year. */
+ year++;
+ days = d;
+ }
+ }
+
+ switch (*f)
+ {
+ case L_('g'):
+ DO_NUMBER (2, (year % 100 + 100) % 100);
+
+ case L_('G'):
+ DO_NUMBER (1, year);
+
+ default:
+ DO_NUMBER (2, days / 7 + 1);
+ }
+ }
+
+ case L_('W'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (2, (tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7) / 7);
+
+ case L_('w'):
+ if (modifier == L_('E'))
+ goto bad_format;
+
+ DO_NUMBER (1, tp->tm_wday);
+
+ case L_('Y'):
+ if (modifier == 'E')
+ {
+#if HAVE_STRUCT_ERA_ENTRY
+ struct era_entry *era = _nl_get_era_entry (tp);
+ if (era)
+ {
+# ifdef COMPILE_WIDE
+ subfmt = era->era_wformat;
+# else
+ subfmt = era->era_format;
+# endif
+ goto subformat;
+ }
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# endif
+#endif
+ }
+ if (modifier == L_('O'))
+ goto bad_format;
+ else
+ DO_NUMBER (1, tp->tm_year + TM_YEAR_BASE);
+
+ case L_('y'):
+ if (modifier == L_('E'))
+ {
+#if HAVE_STRUCT_ERA_ENTRY
+ struct era_entry *era = _nl_get_era_entry (tp);
+ if (era)
+ {
+ int delta = tp->tm_year - era->start_date[0];
+ DO_NUMBER (1, (era->offset
+ + delta * era->absolute_direction));
+ }
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# endif
+#endif
+ }
+ DO_NUMBER (2, (tp->tm_year % 100 + 100) % 100);
+
+ case L_('Z'):
+ if (change_case)
+ {
+ to_uppcase = 0;
+ to_lowcase = 1;
+ }
+
+#if HAVE_TZNAME
+ /* The tzset() call might have changed the value. */
+ if (!(zone && *zone) && tp->tm_isdst >= 0)
+ zone = tzname[tp->tm_isdst];
+#endif
+ if (! zone)
+ zone = ""; /* POSIX.2 requires the empty string here. */
+
+#ifdef COMPILE_WIDE
+ {
+ /* The zone string is always given in multibyte form. We have
+ to transform it first. */
+ wchar_t *wczone;
+ size_t len;
+ widen (zone, wczone, len);
+ cpy (len, wczone);
+ }
+#else
+ cpy (strlen (zone), zone);
+#endif
+ break;
+
+ case L_('z'): /* ISO C99 extension. */
+ if (tp->tm_isdst < 0)
+ break;
+
+ {
+ int diff;
+#if HAVE_TM_GMTOFF
+ diff = tp->tm_gmtoff;
+#else
+ if (ut)
+ diff = 0;
+ else
+ {
+ struct tm gtm;
+ struct tm ltm;
+ time_t lt;
+
+ ltm = *tp;
+ lt = mktime (&ltm);
+
+ if (lt == (time_t) -1)
+ {
+ /* mktime returns -1 for errors, but -1 is also a
+ valid time_t value. Check whether an error really
+ occurred. */
+ struct tm tm;
+
+ if (! my_strftime_localtime_r (&lt, &tm)
+ || ((ltm.tm_sec ^ tm.tm_sec)
+ | (ltm.tm_min ^ tm.tm_min)
+ | (ltm.tm_hour ^ tm.tm_hour)
+ | (ltm.tm_mday ^ tm.tm_mday)
+ | (ltm.tm_mon ^ tm.tm_mon)
+ | (ltm.tm_year ^ tm.tm_year)))
+ break;
+ }
+
+ if (! my_strftime_gmtime_r (&lt, &gtm))
+ break;
+
+ diff = tm_diff (&ltm, &gtm);
+ }
+#endif
+
+ if (diff < 0)
+ {
+ add (1, *p = L_('-'));
+ diff = -diff;
+ }
+ else
+ add (1, *p = L_('+'));
+
+ diff /= 60;
+ DO_NUMBER (4, (diff / 60) * 100 + diff % 60);
+ }
+
+ case L_('\0'): /* GNU extension: % at end of format. */
+ --f;
+ /* Fall through. */
+ default:
+ /* Unknown format; output the format, including the '%',
+ since this is most likely the right thing to do if a
+ multibyte string has been misparsed. */
+ bad_format:
+ {
+ int flen;
+ for (flen = 1; f[1 - flen] != L_('%'); flen++)
+ continue;
+ cpy (flen, &f[1 - flen]);
+ }
+ break;
+ }
+ }
+
+ if (p && maxsize != 0)
+ *p = L_('\0');
+ return i;
+}
+
+
+#ifdef emacs
+/* For Emacs we have a separate interface which corresponds to the normal
+ strftime function plus the ut argument, but without the ns argument. */
+size_t
+emacs_strftimeu (s, maxsize, format, tp, ut)
+ char *s;
+ size_t maxsize;
+ const char *format;
+ const struct tm *tp;
+ int ut;
+{
+ return my_strftime (s, maxsize, format, tp, ut, 0);
+}
+#endif
diff --git a/lib/strtoimax.c b/lib/strtoimax.c
new file mode 100644
index 0000000..1cc3b7b
--- /dev/null
+++ b/lib/strtoimax.c
@@ -0,0 +1,104 @@
+/* Convert string representation of a number into an intmax_t value.
+
+ Copyright (C) 1999, 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Written by Paul Eggert. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+/* ensure we have a "maxint_t" type: */
+#include "inttostr.h"
+
+#ifndef PARAMS
+# if defined PROTOTYPES || defined __STDC__
+# define PARAMS(Args) Args
+# else
+# define PARAMS(Args) ()
+# endif
+#endif
+
+/* Verify a requirement at compile-time (unlike assert, which is runtime). */
+#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
+
+#ifdef UNSIGNED
+# ifndef HAVE_DECL_STRTOUL
+"this configure-time declaration test was not run"
+# endif
+# if !HAVE_DECL_STRTOUL
+unsigned long strtoul PARAMS ((char const *, char **, int));
+# endif
+# ifndef HAVE_DECL_STRTOULL
+"this configure-time declaration test was not run"
+# endif
+# if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG
+unsigned long long strtoull PARAMS ((char const *, char **, int));
+# endif
+
+#else
+
+# ifndef HAVE_DECL_STRTOL
+"this configure-time declaration test was not run"
+# endif
+# if !HAVE_DECL_STRTOL
+long strtol PARAMS ((char const *, char **, int));
+# endif
+# ifndef HAVE_DECL_STRTOLL
+"this configure-time declaration test was not run"
+# endif
+# if !HAVE_DECL_STRTOLL && HAVE_LONG_LONG
+long long strtoll PARAMS ((char const *, char **, int));
+# endif
+#endif
+
+#ifdef UNSIGNED
+# undef HAVE_LONG_LONG
+# define HAVE_LONG_LONG HAVE_UNSIGNED_LONG_LONG
+# define INT uintmax_t
+# define strtoimax strtoumax
+# define strtol strtoul
+# define strtoll strtoull
+#else
+# define INT intmax_t
+#endif
+
+INT
+strtoimax (char const *ptr, char **endptr, int base)
+{
+#if HAVE_LONG_LONG
+ verify (size_is_that_of_long_or_long_long,
+ (sizeof (INT) == sizeof (long)
+ || sizeof (INT) == sizeof (long long)));
+
+ if (sizeof (INT) != sizeof (long))
+ return strtoll (ptr, endptr, base);
+#else
+ verify (size_is_that_of_long,
+ sizeof (INT) == sizeof (long));
+#endif
+
+ return strtol (ptr, endptr, base);
+}
diff --git a/lib/strtol.c b/lib/strtol.c
new file mode 100644
index 0000000..bad9fe5
--- /dev/null
+++ b/lib/strtol.c
@@ -0,0 +1,473 @@
+/* Convert string representation of a number into an integer value.
+ Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2007 Free Software Foundation, Inc.
+ NOTE: The canonical source of this file is maintained with the GNU C
+ Library. Bugs can be reported to bug-glibc@gnu.org.
+
+ 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 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define USE_NUMBER_GROUPING
+# define STDC_HEADERS
+# define HAVE_LIMITS_H
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+#ifdef HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#ifdef STDC_HEADERS
+# include <stddef.h>
+# include <stdlib.h>
+# include <string.h>
+#else
+# ifndef NULL
+# define NULL 0
+# endif
+#endif
+
+#ifdef USE_NUMBER_GROUPING
+# include "../locale/localeinfo.h"
+#endif
+
+/* Nonzero if we are defining `strtoul' or `strtoull', operating on
+ unsigned integers. */
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+/* Determine the name. */
+#ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# if UNSIGNED
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol __wcstoull_l
+# else
+# define strtol __wcstoul_l
+# endif
+# else
+# ifdef QUAD
+# define strtol __strtoull_l
+# else
+# define strtol __strtoul_l
+# endif
+# endif
+# else
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol __wcstoll_l
+# else
+# define strtol __wcstol_l
+# endif
+# else
+# ifdef QUAD
+# define strtol __strtoll_l
+# else
+# define strtol __strtol_l
+# endif
+# endif
+# endif
+#else
+# if UNSIGNED
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol wcstoull
+# else
+# define strtol wcstoul
+# endif
+# else
+# ifdef QUAD
+# define strtol strtoull
+# else
+# define strtol strtoul
+# endif
+# endif
+# else
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol wcstoll
+# else
+# define strtol wcstol
+# endif
+# else
+# ifdef QUAD
+# define strtol strtoll
+# endif
+# endif
+# endif
+#endif
+
+/* If QUAD is defined, we are defining `strtoll' or `strtoull',
+ operating on `long long int's. */
+#ifdef QUAD
+# define LONG long long
+# define STRTOL_LONG_MIN LONG_LONG_MIN
+# define STRTOL_LONG_MAX LONG_LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_LONG_MAX
+
+/* The extra casts work around common compiler bugs,
+ e.g. Cray C 5.0.3.0 when t == time_t. */
+# ifndef TYPE_SIGNED
+# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+# endif
+# ifndef TYPE_MINIMUM
+# define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
+ ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
+ : (t) 0))
+# endif
+# ifndef TYPE_MAXIMUM
+# define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
+# endif
+
+# ifndef ULONG_LONG_MAX
+# define ULONG_LONG_MAX TYPE_MAXIMUM (unsigned long long)
+# endif
+# ifndef LONG_LONG_MAX
+# define LONG_LONG_MAX TYPE_MAXIMUM (long long int)
+# endif
+# ifndef LONG_LONG_MIN
+# define LONG_LONG_MIN TYPE_MINIMUM (long long int)
+# endif
+
+# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
+ /* Work around gcc bug with using this constant. */
+ static const unsigned long long int maxquad = ULONG_LONG_MAX;
+# undef STRTOL_ULONG_MAX
+# define STRTOL_ULONG_MAX maxquad
+# endif
+#else
+# define LONG long
+
+# ifndef ULONG_MAX
+# define ULONG_MAX ((unsigned long) ~(unsigned long) 0)
+# endif
+# ifndef LONG_MAX
+# define LONG_MAX ((long int) (ULONG_MAX >> 1))
+# endif
+# define STRTOL_LONG_MIN LONG_MIN
+# define STRTOL_LONG_MAX LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_MAX
+#endif
+
+
+/* We use this code also for the extended locale handling where the
+ function gets as an additional argument the locale which has to be
+ used. To access the values we have to redefine the _NL_CURRENT
+ macro. */
+#ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# undef _NL_CURRENT
+# define _NL_CURRENT(category, item) \
+ (current->values[_NL_ITEM_INDEX (item)].string)
+# define LOCALE_PARAM , loc
+# define LOCALE_PARAM_DECL __locale_t loc;
+#else
+# define LOCALE_PARAM
+# define LOCALE_PARAM_DECL
+#endif
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+# define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
+# define TOUPPER(Ch) __towupper_l ((Ch), loc)
+# else
+# define ISSPACE(Ch) iswspace (Ch)
+# define ISALPHA(Ch) iswalpha (Ch)
+# define TOUPPER(Ch) towupper (Ch)
+# endif
+#else
+# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
+# define IN_CTYPE_DOMAIN(c) 1
+# else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+# endif
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# define ISSPACE(Ch) __isspace_l ((Ch), loc)
+# define ISALPHA(Ch) __isalpha_l ((Ch), loc)
+# define TOUPPER(Ch) __toupper_l ((Ch), loc)
+# else
+# define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch))
+# define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
+# define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch))
+# endif
+#endif
+
+/* For compilers which are ansi but don't define __STDC__, like SGI
+ Irix-4.0.5 cc, also check whether PROTOTYPES is defined. */
+#if defined (__STDC__) || defined (PROTOTYPES)
+# define INTERNAL(X) INTERNAL1(X)
+# define INTERNAL1(X) __##X##_internal
+# define WEAKNAME(X) WEAKNAME1(X)
+#else
+# define INTERNAL(X) __/**/X/**/_internal
+#endif
+
+#ifdef USE_NUMBER_GROUPING
+/* This file defines a function to check for correct grouping. */
+# include "grouping.h"
+#endif
+
+
+
+/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
+ If BASE is 0 the base is determined by the presence of a leading
+ zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
+ If BASE is < 2 or > 36, it is reset to 10.
+ If ENDPTR is not NULL, a pointer to the character after the last
+ one converted is stored in *ENDPTR. */
+
+INT
+INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM)
+ const STRING_TYPE *nptr;
+ STRING_TYPE **endptr;
+ int base;
+ int group;
+ LOCALE_PARAM_DECL
+{
+ int negative;
+ register unsigned LONG int cutoff;
+ register unsigned int cutlim;
+ register unsigned LONG int i;
+ register const STRING_TYPE *s;
+ register UCHAR_TYPE c;
+ const STRING_TYPE *save, *end;
+ int overflow;
+
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+ struct locale_data *current = loc->__locales[LC_NUMERIC];
+# endif
+ /* The thousands character of the current locale. */
+ wchar_t thousands = L'\0';
+ /* The numeric grouping specification of the current locale,
+ in the format described in <locale.h>. */
+ const char *grouping;
+
+ if (group)
+ {
+ grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+ if (*grouping <= 0 || *grouping == CHAR_MAX)
+ grouping = NULL;
+ else
+ {
+ /* Figure out the thousands separator character. */
+# if defined _LIBC || defined _HAVE_BTOWC
+ thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
+ if (thousands == WEOF)
+ thousands = L'\0';
+# endif
+ if (thousands == L'\0')
+ grouping = NULL;
+ }
+ }
+ else
+ grouping = NULL;
+#endif
+
+ if (base < 0 || base == 1 || base > 36)
+ {
+ __set_errno (EINVAL);
+ return 0;
+ }
+
+ save = s = nptr;
+
+ /* Skip white space. */
+ while (ISSPACE (*s))
+ ++s;
+ if (*s == L_('\0'))
+ goto noconv;
+
+ /* Check for a sign. */
+ if (*s == L_('-'))
+ {
+ negative = 1;
+ ++s;
+ }
+ else if (*s == L_('+'))
+ {
+ negative = 0;
+ ++s;
+ }
+ else
+ negative = 0;
+
+ /* Recognize number prefix and if BASE is zero, figure it out ourselves. */
+ if (*s == L_('0'))
+ {
+ if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
+ {
+ s += 2;
+ base = 16;
+ }
+ else if (base == 0)
+ base = 8;
+ }
+ else if (base == 0)
+ base = 10;
+
+ /* Save the pointer so we can check later if anything happened. */
+ save = s;
+
+#ifdef USE_NUMBER_GROUPING
+ if (group)
+ {
+ /* Find the end of the digit string and check its grouping. */
+ end = s;
+ for (c = *end; c != L_('\0'); c = *++end)
+ if ((wchar_t) c != thousands
+ && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9'))
+ && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base))
+ break;
+ if (*s == thousands)
+ end = s;
+ else
+ end = correctly_grouped_prefix (s, end, thousands, grouping);
+ }
+ else
+#endif
+ end = NULL;
+
+ cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
+ cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
+
+ overflow = 0;
+ i = 0;
+ for (c = *s; c != L_('\0'); c = *++s)
+ {
+ if (s == end)
+ break;
+ if (c >= L_('0') && c <= L_('9'))
+ c -= L_('0');
+ else if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ if ((int) c >= base)
+ break;
+ /* Check for overflow. */
+ if (i > cutoff || (i == cutoff && c > cutlim))
+ overflow = 1;
+ else
+ {
+ i *= (unsigned LONG int) base;
+ i += c;
+ }
+ }
+
+ /* Check if anything actually happened. */
+ if (s == save)
+ goto noconv;
+
+ /* Store in ENDPTR the address of one character
+ past the last character we converted. */
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *) s;
+
+#if !UNSIGNED
+ /* Check for a value that is within the range of
+ `unsigned LONG int', but outside the range of `LONG int'. */
+ if (overflow == 0
+ && i > (negative
+ ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
+ : (unsigned LONG int) STRTOL_LONG_MAX))
+ overflow = 1;
+#endif
+
+ if (overflow)
+ {
+ __set_errno (ERANGE);
+#if UNSIGNED
+ return STRTOL_ULONG_MAX;
+#else
+ return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
+#endif
+ }
+
+ /* Return the result of the appropriate sign. */
+ return negative ? -i : i;
+
+noconv:
+ /* We must handle a special case here: the base is 0 or 16 and the
+ first two characters are '0' and 'x', but the rest are no
+ hexadecimal digits. This is no error case. We return 0 and
+ ENDPTR points to the `x`. */
+ if (endptr != NULL)
+ {
+ if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
+ && save[-2] == L_('0'))
+ *endptr = (STRING_TYPE *) &save[-1];
+ else
+ /* There was no number to convert. */
+ *endptr = (STRING_TYPE *) nptr;
+ }
+
+ return 0L;
+}
+
+/* External user entry point. */
+
+#if _LIBC - 0 == 0
+# undef PARAMS
+# if defined (__STDC__) && __STDC__
+# define PARAMS(Args) Args
+# else
+# define PARAMS(Args) ()
+# endif
+
+/* Prototype. */
+INT strtol PARAMS ((const STRING_TYPE *nptr, STRING_TYPE **endptr, int base));
+#endif
+
+
+INT
+#ifdef weak_function
+weak_function
+#endif
+strtol (nptr, endptr, base LOCALE_PARAM)
+ const STRING_TYPE *nptr;
+ STRING_TYPE **endptr;
+ int base;
+ LOCALE_PARAM_DECL
+{
+ return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
+}
diff --git a/lib/strtoll.c b/lib/strtoll.c
new file mode 100644
index 0000000..db4f95b
--- /dev/null
+++ b/lib/strtoll.c
@@ -0,0 +1,35 @@
+/* Function to parse a `long long int' from text.
+
+ Copyright (C) 1995, 1996, 1997, 1999, 2001, 2007 Free Software Foundation, Inc.
+
+ This file is part of the GNU C Library.
+
+ 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define QUAD 1
+
+#include "strtol.c"
+
+#ifdef _LIBC
+# ifdef SHARED
+# include <shlib-compat.h>
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
+# endif
+
+# endif
+weak_alias (strtoll, strtoq)
+#endif
diff --git a/lib/system.h b/lib/system.h
new file mode 100644
index 0000000..466876e
--- /dev/null
+++ b/lib/system.h
@@ -0,0 +1,208 @@
+/* Shared definitions for GNU shar utilities.
+
+ Copyright (C) 1994, 1995, 1996, 2002, 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+
+#ifndef HAVE_INTMAX_T
+#define HAVE_INTMAX_T
+typedef long intmax_t;
+#endif
+
+#if !HAVE_DECL_STRTOIMAX && !defined strtoimax
+intmax_t strtoimax ();
+#endif
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#else
+char *getenv ();
+#endif
+
+#if HAVE_STRING_H
+# include <string.h>
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+#else
+# include <strings.h>
+#endif
+#if !HAVE_MEMCPY
+# ifndef memcpy
+# define memcpy(D, S, N) bcopy (S, D, N)
+# endif
+#endif
+#if !HAVE_STRCHR
+# ifndef strchr
+# define strchr index
+# endif
+#endif
+
+/* Other header files. */
+
+#include <stdio.h>
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+
+#include <sys/types.h>
+
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
+
+/* Get definitions for the file permission bits. */
+
+#include <sys/stat.h>
+
+#ifdef STAT_MACROS_BROKEN
+# undef S_ISDIR
+# undef S_ISREG
+#endif
+
+#ifndef S_IFMT
+# define S_IFMT 0170000
+#endif
+#if !defined(S_ISDIR) && defined(S_IFDIR)
+# define S_ISDIR(Mode) (((Mode) & S_IFMT) == S_IFDIR)
+#endif
+#if !defined(S_ISREG) && defined(S_IFREG)
+# define S_ISREG(Mode) (((Mode) & S_IFMT) == S_IFREG)
+#endif
+
+#ifndef S_IRWXU
+# define S_IRWXU 0700
+#endif
+#ifndef S_IRUSR
+# define S_IRUSR 0400
+#endif
+#ifndef S_IWUSR
+# define S_IWUSR 0200
+#endif
+#ifndef S_IXUSR
+# define S_IXUSR 0100
+#endif
+
+#ifndef S_IRWXG
+# define S_IRWXG 0070
+#endif
+#ifndef S_IRGRP
+# define S_IRGRP 0040
+#endif
+#ifndef S_IWGRP
+# define S_IWGRP 0020
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0010
+#endif
+
+#ifndef S_IRWXO
+# define S_IRWXO 0007
+#endif
+#ifndef S_IROTH
+# define S_IROTH 0004
+#endif
+#ifndef S_IWOTH
+# define S_IWOTH 0002
+#endif
+#ifndef S_IXOTH
+# define S_IXOTH 0001
+#endif
+
+/* System functions. Even if we usually avoid declaring them, we cannot
+ avoid them all. */
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+FILE *fdopen ();
+long ftell ();
+FILE *popen ();
+
+#if ! HAVE_FSEEKO
+# ifndef fseeko
+# define fseeko fseek
+# endif
+# ifndef ftello
+# define ftello ftell
+# endif
+#endif
+
+#ifndef SEEK_SET
+# define SEEK_SET 0
+#endif
+
+/* GNU small library functions. */
+
+#ifndef __P
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define __P(Args) Args
+# else
+# define __P(Args) ()
+# endif
+#endif
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(Args) Args
+# else
+# define PARAMS(Args) ()
+# endif
+#endif
+
+/* Global functions of the shar package. */
+
+void copy_file_encoded __P ((FILE *, FILE *));
+char *get_submitter __P ((char *));
+
+/* Debugging the memory allocator. */
+
+#if WITH_DMALLOC
+# define MALLOC_FUNC_CHECK
+# include <dmalloc.h>
+#endif
+
+
+/* Some gcc specials. */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6)
+# define ATTRIBUTE(list) __attribute__ (list)
+#else
+# define ATTRIBUTE(list)
+#endif
+
+#if __CYGWIN__
+# include <fcntl.h>
+# include <io.h> /* for setmode */
+#endif
+
+#if ! defined(O_BINARY) || (O_BINARY == 0)
+# define FOPEN_READ_BINARY "r"
+# define FOPEN_WRITE_BINARY "w"
+#else
+# define FOPEN_READ_BINARY "rb"
+# define FOPEN_WRITE_BINARY "wb"
+#endif
diff --git a/lib/whoami.c b/lib/whoami.c
new file mode 100644
index 0000000..edaae33
--- /dev/null
+++ b/lib/whoami.c
@@ -0,0 +1,118 @@
+/* Find out who I am & where I am.
+ Copyright (C) 1994, 1995, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#include "system.h"
+
+/* Size of buffers holding strings. */
+#define STRING_BUFFER_SIZE 64
+
+#include <pwd.h>
+
+/* On Ultrix 2.x, <utsname.h> uses SYS_NMLEN, which is only defined in
+ <limits.h>. Sigh! */
+
+#ifdef HAVE_UNAME
+# ifdef HAVE_LIMITS_H
+# include <limits.h>
+# endif
+# include <sys/utsname.h>
+# include <time.h>
+#else
+# include <sys/time.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifndef _POSIX_VERSION
+struct passwd *getpwuid ();
+#endif
+
+/*----------------.
+| Get user name. |
+`----------------*/
+
+static const char *
+get_username ()
+{
+ struct passwd *passwd;
+
+ passwd = getpwuid (getuid ());
+ endpwent ();
+ if (passwd == NULL)
+ return "???";
+ return passwd->pw_name;
+}
+
+/*------------------------------------------------------.
+| Do uname, gethostname, or read file (/etc/systemid). |
+`------------------------------------------------------*/
+
+static const char *
+get_hostname ()
+{
+#if HAVE_UNAME
+
+ static struct utsname hostname_buffer;
+
+ uname (&hostname_buffer);
+ return hostname_buffer.nodename;
+
+#else
+# if HAVE_ETC_SYSTEMID
+
+ FILE *fpsid = fopen ("/etc/systemid", "r");
+ static char buffer[STRING_BUFFER_SIZE];
+
+ if (!fpsid)
+ return "???";
+ fgets (buffer, sizeof (buffer), fpsid);
+ fclose (fpsid);
+ buffer[strlen (buffer) - 1] = 0;
+ return buffer;
+
+# else
+
+ static char hostname_buffer[STRING_BUFFER_SIZE];
+
+ gethostname (hostname_buffer, sizeof (hostname_buffer));
+ return hostname_buffer;
+
+# endif
+#endif
+}
+
+/*------------------------------------------------------------------.
+| Fill BUFFER with a string representing the username and hostname |
+| separated by an `@' sign, and return a pointer to the constructed |
+| string. If BUFFER is NULL, use an internal buffer instead. |
+`------------------------------------------------------------------*/
+
+char *
+get_submitter (buffer)
+ char *buffer;
+{
+ static char static_buffer[STRING_BUFFER_SIZE];
+
+ if (!buffer)
+ buffer = static_buffer;
+ strcpy (buffer, get_username ());
+ strcat (buffer, "@");
+ return strcat (buffer, get_hostname ());
+}
diff --git a/lib/xalloc.h b/lib/xalloc.h
new file mode 100644
index 0000000..97bf382
--- /dev/null
+++ b/lib/xalloc.h
@@ -0,0 +1,88 @@
+/* xalloc.h -- malloc with out-of-memory checking
+
+ Copyright (C) 1990-1998, 1999, 2000, 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef XALLOC_H_
+# define XALLOC_H_
+
+# ifndef PARAMS
+# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
+# define PARAMS(Args) Args
+# else
+# define PARAMS(Args) ()
+# endif
+# endif
+
+# ifndef __attribute__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
+# define __attribute__(x)
+# endif
+# endif
+
+# ifndef ATTRIBUTE_NORETURN
+# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# endif
+
+/* Exit value when the requested amount of memory is not available.
+ It is initialized to EXIT_FAILURE, but the caller may set it to
+ some other value. */
+extern int xalloc_exit_failure;
+
+/* If this pointer is non-zero, run the specified function upon each
+ allocation failure. It is initialized to zero. */
+extern void (*xalloc_fail_func) PARAMS ((void));
+
+/* If XALLOC_FAIL_FUNC is undefined or a function that returns, this
+ message is output. It is translated via gettext.
+ Its value is "memory exhausted". */
+extern char const xalloc_msg_memory_exhausted[];
+
+/* This function is always triggered when memory is exhausted. It is
+ in charge of honoring the three previous items. This is the
+ function to call when one wants the program to die because of a
+ memory allocation failure. */
+extern void xalloc_die PARAMS ((void)) ATTRIBUTE_NORETURN;
+
+void *xmalloc PARAMS ((size_t n));
+void *xcalloc PARAMS ((size_t n, size_t s));
+void *xrealloc PARAMS ((void *p, size_t n));
+char *xstrdup PARAMS ((const char *str));
+
+# define XMALLOC(Type, N_items) ((Type *) xmalloc (sizeof (Type) * (N_items)))
+# define XCALLOC(Type, N_items) ((Type *) xcalloc (sizeof (Type), (N_items)))
+# define XREALLOC(Ptr, Type, N_items) \
+ ((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_items)))
+
+/* Declare and alloc memory for VAR of type TYPE. */
+# define NEW(Type, Var) Type *(Var) = XMALLOC (Type, 1)
+
+/* Free VAR only if non NULL. */
+# define XFREE(Var) \
+ do { \
+ if (Var) \
+ free (Var); \
+ } while (0)
+
+/* Return a pointer to a malloc'ed copy of the array SRC of NUM elements. */
+# define CCLONE(Src, Num) \
+ (memcpy (xmalloc (sizeof (*Src) * (Num)), (Src), sizeof (*Src) * (Num)))
+
+/* Return a malloc'ed copy of SRC. */
+# define CLONE(Src) CCLONE (Src, 1)
+
+
+#endif /* !XALLOC_H_ */
diff --git a/lib/xgetcwd.c b/lib/xgetcwd.c
new file mode 100644
index 0000000..77da9ed
--- /dev/null
+++ b/lib/xgetcwd.c
@@ -0,0 +1,87 @@
+/* xgetcwd.c -- return current directory with unlimited length
+ Copyright (C) 1992, 1996, 2000, 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+
+#include <sys/types.h>
+
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if HAVE_GETCWD
+char *getcwd ();
+#else
+# include "pathmax.h"
+# define INITIAL_BUFFER_SIZE (PATH_MAX + 1)
+char *getwd ();
+# define getcwd(Buf, Max) getwd (Buf)
+#endif
+
+#include "xalloc.h"
+
+/* Return the current directory, newly allocated, arbitrarily long.
+ Return NULL and set errno on error. */
+
+char *
+xgetcwd ()
+{
+#if HAVE_GETCWD_NULL
+ char *cwd = getcwd (NULL, 0);
+ if (! cwd && errno == ENOMEM)
+ xalloc_die ();
+ return cwd;
+#else
+
+ /* The initial buffer size for the working directory. A power of 2
+ detects arithmetic overflow earlier, but is not required. */
+# ifndef INITIAL_BUFFER_SIZE
+# define INITIAL_BUFFER_SIZE 128
+# endif
+
+ size_t buf_size = INITIAL_BUFFER_SIZE;
+
+ while (1)
+ {
+ char *buf = xmalloc (buf_size);
+ char *cwd = getcwd (buf, buf_size);
+ int saved_errno;
+ if (cwd)
+ return cwd;
+ saved_errno = errno;
+ free (buf);
+ if (saved_errno != ERANGE)
+ return NULL;
+ buf_size *= 2;
+ if (buf_size == 0)
+ xalloc_die ();
+ }
+#endif
+}
diff --git a/lib/xgetcwd.h b/lib/xgetcwd.h
new file mode 100644
index 0000000..fcad613
--- /dev/null
+++ b/lib/xgetcwd.h
@@ -0,0 +1,27 @@
+/* xgetcwd -- return current directory with unlimited length
+ Copyright (C) 1995, 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(args) args
+# else
+# define PARAMS(args) ()
+# endif
+#endif
+
+/* Wrapper function with error checking for standard function. */
+extern char *xgetcwd PARAMS ((void));
diff --git a/lib/xmalloc.c b/lib/xmalloc.c
new file mode 100644
index 0000000..eb0357a
--- /dev/null
+++ b/lib/xmalloc.c
@@ -0,0 +1,117 @@
+/* xmalloc.c -- malloc with out of memory checking
+
+ Copyright (C) 1990-1999, 2000, 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#if STDC_HEADERS
+# include <stdlib.h>
+#else
+void *calloc ();
+void *malloc ();
+void *realloc ();
+void free ();
+#endif
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(Text) gettext (Text)
+#else
+# define textdomain(Domain)
+# define _(Text) Text
+#endif
+#define N_(Text) Text
+
+#include "error.h"
+#include "xalloc.h"
+
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+#ifndef HAVE_DONE_WORKING_MALLOC_CHECK
+"you must run the autoconf test for a properly working malloc -- see malloc.m4"
+#endif
+
+#ifndef HAVE_DONE_WORKING_REALLOC_CHECK
+"you must run the autoconf test for a properly working realloc --see realloc.m4"
+#endif
+
+/* Exit value when the requested amount of memory is not available.
+ The caller may set it to some other value. */
+int xalloc_exit_failure = EXIT_FAILURE;
+
+/* If non NULL, call this function when memory is exhausted. */
+void (*xalloc_fail_func) PARAMS ((void)) = 0;
+
+/* If XALLOC_FAIL_FUNC is NULL, or does return, display this message
+ before exiting when memory is exhausted. Goes through gettext. */
+char const xalloc_msg_memory_exhausted[] = N_("memory exhausted");
+
+void
+xalloc_die (void)
+{
+ if (xalloc_fail_func)
+ (*xalloc_fail_func) ();
+ error (xalloc_exit_failure, 0, "%s", _(xalloc_msg_memory_exhausted));
+ /* The `noreturn' cannot be given to error, since it may return if
+ its first argument is 0. To help compilers understand the
+ xalloc_die does terminate, call exit. */
+ exit (EXIT_FAILURE);
+}
+
+/* Allocate N bytes of memory dynamically, with error checking. */
+
+void *
+xmalloc (size_t n)
+{
+ void *p;
+
+ p = malloc (n);
+ if (p == 0)
+ xalloc_die ();
+ return p;
+}
+
+/* Change the size of an allocated block of memory P to N bytes,
+ with error checking. */
+
+void *
+xrealloc (void *p, size_t n)
+{
+ p = realloc (p, n);
+ if (p == 0)
+ xalloc_die ();
+ return p;
+}
+
+/* Allocate memory for N elements of S bytes, with error checking. */
+
+void *
+xcalloc (size_t n, size_t s)
+{
+ void *p;
+
+ p = calloc (n, s);
+ if (p == 0)
+ xalloc_die ();
+ return p;
+}
diff --git a/lib/xstrdup.c b/lib/xstrdup.c
new file mode 100644
index 0000000..2a20aa3
--- /dev/null
+++ b/lib/xstrdup.c
@@ -0,0 +1,38 @@
+/* xstrdup.c -- copy a string with out of memory checking
+ Copyright (C) 1990, 1996, 1998, 2001, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if STDC_HEADERS || HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+
+#include <sys/types.h>
+
+#include "xalloc.h"
+
+/* Return a newly allocated copy of STRING. */
+
+char *
+xstrdup (const char *string)
+{
+ return strcpy (xmalloc (strlen (string) + 1), string);
+}
diff --git a/m4/codeset.m4 b/m4/codeset.m4
new file mode 100644
index 0000000..a6e67ec
--- /dev/null
+++ b/m4/codeset.m4
@@ -0,0 +1,21 @@
+# codeset.m4 serial AM1 (gettext-0.10.40)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+ [AC_TRY_LINK([#include <langinfo.h>],
+ [char* cs = nl_langinfo(CODESET);],
+ am_cv_langinfo_codeset=yes,
+ am_cv_langinfo_codeset=no)
+ ])
+ if test $am_cv_langinfo_codeset = yes; then
+ AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+ [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+ fi
+])
diff --git a/m4/error.m4 b/m4/error.m4
new file mode 100644
index 0000000..3fddb5c
--- /dev/null
+++ b/m4/error.m4
@@ -0,0 +1,13 @@
+#serial 4
+
+dnl FIXME: put these prerequisite-only *.m4 files in a separate
+dnl directory -- otherwise, they'll conflict with existing files.
+
+dnl These are the prerequisite macros for GNU's error.c file.
+AC_DEFUN([jm_PREREQ_ERROR],
+[
+ AC_CHECK_FUNCS(strerror vprintf doprnt)
+ AC_CHECK_DECLS([strerror])
+ AC_FUNC_STRERROR_R
+ AC_HEADER_STDC
+])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644
index 0000000..624a807
--- /dev/null
+++ b/m4/gettext.m4
@@ -0,0 +1,549 @@
+# gettext.m4 serial 37 (gettext-0.14.4)
+dnl Copyright (C) 1995-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl], ifelse([$1], [external], [no], [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AM_NLS
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH(included-gettext,
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ dnl Add a version number to the cache macros.
+ define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
+ define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
+ define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
+
+ AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+ [AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ gt_cv_func_gnugettext_libc=yes,
+ gt_cv_func_gnugettext_libc=no)])
+
+ if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ gt_cv_func_gnugettext_libintl,
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ gt_cv_func_gnugettext_libintl=yes,
+ gt_cv_func_gnugettext_libintl=no)
+ dnl Now see whether libintl exists and depends on libiconv.
+ if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ gt_cv_func_gnugettext_libintl=yes
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if test "$gt_cv_func_gnugettext_libc" = "yes" \
+ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE(ENABLE_NLS, 1,
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE(HAVE_GETTEXT, 1,
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE(HAVE_DCGETTEXT, 1,
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST(BUILD_INCLUDED_LIBINTL)
+ AC_SUBST(USE_INCLUDED_LIBINTL)
+ AC_SUBST(CATOBJEXT)
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST(DATADIRNAME)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST(INSTOBJEXT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST(GENCAT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST(INTLOBJS)
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST(INTLLIBS)
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST(LIBINTL)
+ AC_SUBST(LTLIBINTL)
+ AC_SUBST(POSUB)
+])
+
+
+dnl Checks for all prerequisites of the intl subdirectory,
+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
+dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
+AC_DEFUN([AM_INTL_SUBDIR],
+[
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+ AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ AC_REQUIRE([gt_GLIBC2])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([AC_ISC_POSIX])dnl
+ AC_REQUIRE([AC_HEADER_STDC])dnl
+ AC_REQUIRE([AC_C_CONST])dnl
+ AC_REQUIRE([bh_C_SIGNED])dnl
+ AC_REQUIRE([AC_C_INLINE])dnl
+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+ AC_REQUIRE([gl_AC_TYPE_LONG_LONG])dnl
+ AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
+ AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+ AC_REQUIRE([gt_TYPE_WINT_T])dnl
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ AC_REQUIRE([gt_TYPE_INTMAX_T])
+ AC_REQUIRE([gt_PRINTF_POSIX])
+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+ AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([gl_GLIBC21])dnl
+ AC_REQUIRE([gt_INTDIV0])dnl
+ AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
+ AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
+ AC_REQUIRE([gt_INTTYPES_PRI])dnl
+ AC_REQUIRE([gl_XSIZE])dnl
+ AC_REQUIRE([gt_INTL_MACOSX])dnl
+
+ AC_CHECK_TYPE([ptrdiff_t], ,
+ [AC_DEFINE([ptrdiff_t], [long],
+ [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+ ])
+ AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+ AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \
+mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
+strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
+__fsetlocking])
+
+ dnl Use the _snprintf function only if it is declared (because on NetBSD it
+ dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+ gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
+ gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
+
+ dnl Use the *_unlocked functions only if they are declared.
+ dnl (because some of them were defined without being declared in Solaris
+ dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+ dnl on Solaris 2.5.1 to run on Solaris 2.6).
+ dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+ gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
+ gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
+ gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
+
+ case $gt_cv_func_printf_posix in
+ *yes) HAVE_POSIX_PRINTF=1 ;;
+ *) HAVE_POSIX_PRINTF=0 ;;
+ esac
+ AC_SUBST([HAVE_POSIX_PRINTF])
+ if test "$ac_cv_func_asprintf" = yes; then
+ HAVE_ASPRINTF=1
+ else
+ HAVE_ASPRINTF=0
+ fi
+ AC_SUBST([HAVE_ASPRINTF])
+ if test "$ac_cv_func_snprintf" = yes; then
+ HAVE_SNPRINTF=1
+ else
+ HAVE_SNPRINTF=0
+ fi
+ AC_SUBST([HAVE_SNPRINTF])
+ if test "$ac_cv_func_wprintf" = yes; then
+ HAVE_WPRINTF=1
+ else
+ HAVE_WPRINTF=0
+ fi
+ AC_SUBST([HAVE_WPRINTF])
+
+ AM_ICONV
+ AM_LANGINFO_CODESET
+ if test $ac_cv_header_locale_h = yes; then
+ gt_LC_MESSAGES
+ fi
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+ fi
+
+ dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+ dnl because plural.y uses bison specific features. It requires at least
+ dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+ dnl compile.
+ dnl bison is only needed for the maintainer (who touches plural.y). But in
+ dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+ dnl the rule in general Makefile. Now, some people carelessly touch the
+ dnl files or have a broken "make" program, hence the plural.c rule will
+ dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+ dnl present or too old.
+ AC_CHECK_PROGS([INTLBISON], [bison])
+ if test -z "$INTLBISON"; then
+ ac_verc_fail=yes
+ else
+ dnl Found it, now check the version.
+ AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ esac
+ AC_MSG_RESULT([$ac_prog_version])
+ fi
+ if test $ac_verc_fail = yes; then
+ INTLBISON=:
+ fi
+])
+
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in MacOS X 10.2.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ gt_cv_func_CFPreferencesCopyAppValue,
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -framework CoreFoundation"
+ AC_TRY_LINK([#include <CFPreferences.h>],
+ [CFPreferencesCopyAppValue(NULL, NULL)],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
+ [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Check for API introduced in MacOS X 10.3.
+ AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -framework CoreFoundation"
+ AC_TRY_LINK([#include <CFLocale.h>], [CFLocaleCopyCurrent();],
+ [gt_cv_func_CFLocaleCopyCurrent=yes],
+ [gt_cv_func_CFLocaleCopyCurrent=no])
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
+ [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
+
+
+dnl gt_CHECK_DECL(FUNC, INCLUDES)
+dnl Check whether a function is declared.
+AC_DEFUN([gt_CHECK_DECL],
+[
+ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
+ [AC_TRY_COMPILE([$2], [
+#ifndef $1
+ char *p = (char *) $1;
+#endif
+], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
+ if test $ac_cv_have_decl_$1 = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+ AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
+ [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/glibc2.m4 b/m4/glibc2.m4
new file mode 100644
index 0000000..e8f5bfe
--- /dev/null
+++ b/m4/glibc2.m4
@@ -0,0 +1,30 @@
+# glibc2.m4 serial 1
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.0 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gt_GLIBC2],
+ [
+ AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer,
+ ac_cv_gnu_library_2,
+ [AC_EGREP_CPP([Lucky GNU user],
+ [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+ Lucky GNU user
+ #endif
+#endif
+ ],
+ ac_cv_gnu_library_2=yes,
+ ac_cv_gnu_library_2=no)
+ ]
+ )
+ AC_SUBST(GLIBC2)
+ GLIBC2="$ac_cv_gnu_library_2"
+ ]
+)
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
new file mode 100644
index 0000000..d95fd98
--- /dev/null
+++ b/m4/glibc21.m4
@@ -0,0 +1,30 @@
+# glibc21.m4 serial 3
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+ [
+ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+ ac_cv_gnu_library_2_1,
+ [AC_EGREP_CPP([Lucky GNU user],
+ [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+ Lucky GNU user
+ #endif
+#endif
+ ],
+ ac_cv_gnu_library_2_1=yes,
+ ac_cv_gnu_library_2_1=no)
+ ]
+ )
+ AC_SUBST(GLIBC21)
+ GLIBC21="$ac_cv_gnu_library_2_1"
+ ]
+)
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644
index 0000000..654c415
--- /dev/null
+++ b/m4/iconv.m4
@@ -0,0 +1,101 @@
+# iconv.m4 serial AM4 (gettext-0.11.3)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ am_cv_func_iconv=yes)
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes)
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST(LIBICONV)
+ AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL(am_cv_proto_iconv, [
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([$]{ac_t:-
+ }[$]am_cv_proto_iconv)
+ AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+ [Define as const if the declaration of iconv() needs const.])
+ fi
+])
diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4
new file mode 100644
index 0000000..b8d7817
--- /dev/null
+++ b/m4/intdiv0.m4
@@ -0,0 +1,70 @@
+# intdiv0.m4 serial 1 (gettext-0.11.3)
+dnl Copyright (C) 2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gt_INTDIV0],
+[
+ AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+ AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+ gt_cv_int_divbyzero_sigfpe,
+ [
+ AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+ /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
+ exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+ signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+ signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL. */
+#if defined (__sparc__) && defined (__linux__)
+ signal (SIGILL, sigfpe_handler);
+#endif
+
+ z = x / y;
+ nan = y / y;
+ exit (1);
+}
+], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
+ [
+ # Guess based on the CPU.
+ case "$host_cpu" in
+ alpha* | i[34567]86 | m68k | s390*)
+ gt_cv_int_divbyzero_sigfpe="guessing yes";;
+ *)
+ gt_cv_int_divbyzero_sigfpe="guessing no";;
+ esac
+ ])
+ ])
+ case "$gt_cv_int_divbyzero_sigfpe" in
+ *yes) value=1;;
+ *) value=0;;
+ esac
+ AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
+ [Define if integer division by zero raises signal SIGFPE.])
+])
diff --git a/m4/intmax.m4 b/m4/intmax.m4
new file mode 100644
index 0000000..d99c999
--- /dev/null
+++ b/m4/intmax.m4
@@ -0,0 +1,30 @@
+# intmax.m4 serial 2 (gettext-0.14.2)
+dnl Copyright (C) 2002-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the system has the 'intmax_t' type, but don't attempt to
+dnl find a replacement if it is lacking.
+
+AC_DEFUN([gt_TYPE_INTMAX_T],
+[
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
+ [AC_TRY_COMPILE([
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])
+ if test $gt_cv_c_intmax_t = yes; then
+ AC_DEFINE(HAVE_INTMAX_T, 1,
+ [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+ fi
+])
diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
new file mode 100644
index 0000000..4d56a9a
--- /dev/null
+++ b/m4/inttypes-pri.m4
@@ -0,0 +1,30 @@
+# inttypes-pri.m4 serial 1 (gettext-0.11.4)
+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values. This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+ AC_REQUIRE([gt_HEADER_INTTYPES_H])
+ if test $gt_cv_header_inttypes_h = yes; then
+ AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+ gt_cv_inttypes_pri_broken,
+ [
+ AC_TRY_COMPILE([#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
+ ])
+ fi
+ if test "$gt_cv_inttypes_pri_broken" = yes; then
+ AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
+ [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+ fi
+])
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
new file mode 100644
index 0000000..779bcea
--- /dev/null
+++ b/m4/inttypes.m4
@@ -0,0 +1,25 @@
+# inttypes.m4 serial 1 (gettext-0.11.4)
+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
+# <sys/types.h>.
+
+AC_DEFUN([gt_HEADER_INTTYPES_H],
+[
+ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
+ [
+ AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <inttypes.h>],
+ [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
+ ])
+ if test $gt_cv_header_inttypes_h = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
+ [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
+ fi
+])
diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
new file mode 100644
index 0000000..a5d075d
--- /dev/null
+++ b/m4/inttypes_h.m4
@@ -0,0 +1,26 @@
+# inttypes_h.m4 serial 6
+dnl Copyright (C) 1997-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+ AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h,
+ [AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <inttypes.h>],
+ [uintmax_t i = (uintmax_t) -1;],
+ gl_cv_header_inttypes_h=yes,
+ gl_cv_header_inttypes_h=no)])
+ if test $gl_cv_header_inttypes_h = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+ [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+ and declares uintmax_t. ])
+ fi
+])
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
new file mode 100644
index 0000000..19aa77e
--- /dev/null
+++ b/m4/lcmessage.m4
@@ -0,0 +1,30 @@
+# lcmessage.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([gt_LC_MESSAGES],
+[
+ AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES,
+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)])
+ if test $gt_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE(HAVE_LC_MESSAGES, 1,
+ [Define if your <locale.h> file defines LC_MESSAGES.])
+ fi
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..96c4e2c
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by GCC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ [re_direlt='/[^/][^/]*/\.\./']
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644
index 0000000..ea0b0c4
--- /dev/null
+++ b/m4/lib-link.m4
@@ -0,0 +1,553 @@
+# lib-link.m4 serial 6 (gettext-0.14.3)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.50)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ define([Name],[translit([$1],[./-], [___])])
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ undefine([Name])
+ undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ define([Name],[translit([$1],[./-], [___])])
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIB[]NAME"
+ AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ undefine([Name])
+ undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ libext="$acl_cv_libext"
+ shlibext="$acl_cv_shlibext"
+ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ hardcode_direct="$acl_cv_hardcode_direct"
+ hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE(rpath,
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib$1-prefix],
+[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
+ --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..0d895ca
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,153 @@
+# lib-prefix.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
diff --git a/m4/longdouble.m4 b/m4/longdouble.m4
new file mode 100644
index 0000000..40cd7ce
--- /dev/null
+++ b/m4/longdouble.m4
@@ -0,0 +1,28 @@
+# longdouble.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the compiler supports the 'long double' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_LONGDOUBLE],
+[
+ AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
+ [if test "$GCC" = yes; then
+ gt_cv_c_long_double=yes
+ else
+ AC_TRY_COMPILE([
+ /* The Stardent Vistra knows sizeof(long double), but does not support it. */
+ long double foo = 0.0;
+ /* On Ultrix 4.3 cc, long double is 4 and double is 8. */
+ int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+ ], ,
+ gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
+ fi])
+ if test $gt_cv_c_long_double = yes; then
+ AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
+ fi
+])
diff --git a/m4/longlong.m4 b/m4/longlong.m4
new file mode 100644
index 0000000..7b399e0
--- /dev/null
+++ b/m4/longlong.m4
@@ -0,0 +1,23 @@
+# longlong.m4 serial 5
+dnl Copyright (C) 1999-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG if 'long long' works.
+
+AC_DEFUN([gl_AC_TYPE_LONG_LONG],
+[
+ AC_CACHE_CHECK([for long long], ac_cv_type_long_long,
+ [AC_TRY_LINK([long long ll = 1LL; int i = 63;],
+ [long long llmax = (long long) -1;
+ return ll << i | ll >> i | llmax / ll | llmax % ll;],
+ ac_cv_type_long_long=yes,
+ ac_cv_type_long_long=no)])
+ if test $ac_cv_type_long_long = yes; then
+ AC_DEFINE(HAVE_LONG_LONG, 1,
+ [Define if you have the 'long long' type.])
+ fi
+])
diff --git a/m4/malloc.m4 b/m4/malloc.m4
new file mode 100644
index 0000000..cb5cff3
--- /dev/null
+++ b/m4/malloc.m4
@@ -0,0 +1,35 @@
+#serial 6
+
+dnl From Jim Meyering.
+dnl Determine whether malloc accepts 0 as its argument.
+dnl If it doesn't, arrange to use the replacement function.
+dnl
+
+AC_DEFUN([jm_FUNC_MALLOC],
+[
+ dnl xmalloc.c requires that this symbol be defined so it doesn't
+ dnl mistakenly use a broken malloc -- as it might if this test were omitted.
+ AC_DEFINE(HAVE_DONE_WORKING_MALLOC_CHECK, 1,
+ [Define if the malloc check has been performed. ])
+
+ AC_CACHE_CHECK([whether malloc(0) returns a non-NULL pointer],
+ jm_cv_func_working_malloc,
+ [AC_TRY_RUN([
+ char *malloc ();
+ int
+ main ()
+ {
+ exit (malloc (0) ? 0 : 1);
+ }
+ ],
+ jm_cv_func_working_malloc=yes,
+ jm_cv_func_working_malloc=no,
+ dnl When crosscompiling, assume malloc(0) returns NULL.
+ jm_cv_func_working_malloc=no)
+ ])
+ if test $jm_cv_func_working_malloc = no; then
+ AC_LIBOBJ(malloc)
+ AC_DEFINE(malloc, rpl_malloc,
+ [Define to rpl_malloc if the replacement function should be used.])
+ fi
+])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644
index 0000000..2082c3b
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,51 @@
+# nls.m4 serial 2 (gettext-0.14.3)
+dnl Copyright (C) 1995-2003, 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE(nls,
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT($USE_NLS)
+ AC_SUBST(USE_NLS)
+])
+
+AC_DEFUN([AM_MKINSTALLDIRS],
+[
+ dnl Tell automake >= 1.10 to complain if mkinstalldirs is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([mkinstalldirs])])
+ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+ dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+ dnl Try to locate it.
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+ AC_SUBST(MKINSTALLDIRS)
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644
index 0000000..f2795ee
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,429 @@
+# po.m4 serial 7 (gettext-0.14.3)
+dnl Copyright (C) 1995-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+ dnl Test whether we really found GNU msgfmt.
+ if test "$GMSGFMT" != ":"; then
+ dnl If it is no GNU msgfmt we define it as : so that the
+ dnl Makefiles still can work.
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ AC_MSG_RESULT(
+ [found $GMSGFMT program is not GNU msgfmt; ignore it])
+ GMSGFMT=":"
+ fi
+ fi
+
+ dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+ dnl Test whether we really found GNU xgettext.
+ if test "$XGETTEXT" != ":"; then
+ dnl If it is no GNU xgettext we define it as : so that the
+ dnl Makefiles still can work.
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ AC_MSG_RESULT(
+ [found xgettext program is not GNU xgettext; ignore it])
+ XGETTEXT=":"
+ fi
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+ fi
+
+ AC_OUTPUT_COMMANDS([
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[ ]*VARIABLE[ ]*=/{
+ # Seen the first line of the variable definition.
+ s/^[ ]*VARIABLE[ ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`"
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`"
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+ @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+ @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
diff --git a/m4/printf-posix.m4 b/m4/printf-posix.m4
new file mode 100644
index 0000000..af10170
--- /dev/null
+++ b/m4/printf-posix.m4
@@ -0,0 +1,44 @@
+# printf-posix.m4 serial 2 (gettext-0.13.1)
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the printf() function supports POSIX/XSI format strings with
+dnl positions.
+
+AC_DEFUN([gt_PRINTF_POSIX],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
+ gt_cv_func_printf_posix,
+ [
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+ dollar expansion (possibly an autoconf bug). */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+ sprintf (buf, format, 33, 55);
+ return (strcmp (buf, "55 33") != 0);
+}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
+ [
+ AC_EGREP_CPP(notposix, [
+#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+ notposix
+#endif
+ ], gt_cv_func_printf_posix="guessing no",
+ gt_cv_func_printf_posix="guessing yes")
+ ])
+ ])
+ case $gt_cv_func_printf_posix in
+ *yes)
+ AC_DEFINE(HAVE_POSIX_PRINTF, 1,
+ [Define if your printf() function supports format strings with positions.])
+ ;;
+ esac
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644
index 0000000..a56365c
--- /dev/null
+++ b/m4/progtest.m4
@@ -0,0 +1,92 @@
+# progtest.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ(2.50)
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$]$1)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/m4/realloc.m4 b/m4/realloc.m4
new file mode 100644
index 0000000..7695e89
--- /dev/null
+++ b/m4/realloc.m4
@@ -0,0 +1,35 @@
+#serial 6
+
+dnl From Jim Meyering.
+dnl Determine whether realloc works when both arguments are 0.
+dnl If it doesn't, arrange to use the replacement function.
+dnl
+
+AC_DEFUN([jm_FUNC_REALLOC],
+[
+ dnl xmalloc.c requires that this symbol be defined so it doesn't
+ dnl mistakenly use a broken realloc -- as it might if this test were omitted.
+ AC_DEFINE(HAVE_DONE_WORKING_REALLOC_CHECK, 1,
+ [Define if the realloc check has been performed. ])
+
+ AC_CACHE_CHECK([whether realloc(0,0) returns a non-NULL pointer],
+ jm_cv_func_working_realloc,
+ [AC_TRY_RUN([
+ char *realloc ();
+ int
+ main ()
+ {
+ exit (realloc (0, 0) ? 0 : 1);
+ }
+ ],
+ jm_cv_func_working_realloc=yes,
+ jm_cv_func_working_realloc=no,
+ dnl When crosscompiling, assume realloc(0,0) returns NULL.
+ jm_cv_func_working_realloc=no)
+ ])
+ if test $jm_cv_func_working_realloc = no; then
+ AC_LIBOBJ(realloc)
+ AC_DEFINE(realloc, rpl_realloc,
+ [Define to rpl_realloc if the replacement function should be used.])
+ fi
+])
diff --git a/m4/sharutils.m4 b/m4/sharutils.m4
new file mode 100644
index 0000000..381b042
--- /dev/null
+++ b/m4/sharutils.m4
@@ -0,0 +1,45 @@
+# sharutils.m4 serial 2 (sharutils-4.3.75)
+dnl Copyright (C) 2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.
+
+dnl Authors:
+dnl Karl Eichwalder <ke@suse.de>, 2002.
+
+AC_DEFUN([ke_CHECK_COMPRESS],
+[
+ AC_PATH_PROGS(COMPRESS, compress, no)
+ if test $COMPRESS != no; then
+ cp $srcdir/COPYING tCOPYING
+ AC_MSG_CHECKING(whether compress works)
+ if compress tCOPYING >/dev/null 2>&1; then
+ AC_DEFINE([HAVE_COMPRESS], 1,
+ [Define if compress is available.])
+ AC_MSG_RESULT(yes)
+ else
+ COMPRESS=no
+ AC_MSG_RESULT([no, installing compress-dummy])
+ fi
+ rm -f tCOPYING tCOPYING.Z
+ fi
+ if test $COMPRESS = no; then
+ ADD_SCRIPT="$ADD_SCRIPT compress-dummy"
+ AC_CONFIG_FILES([src/compress-dummy])
+ fi
+])
+
+AC_DEFUN([ke_CHECK_COMPRESS_AND_LINK],
+[
+ ke_CHECK_COMPRESS
+ if test $COMPRESS = no; then
+ AC_ARG_ENABLE(compress-link,
+ [AS_HELP_STRING([--enable-compress-link],
+ [install compress link if the program is missing])])
+ if test "x$enable_compress_link" = xyes; then
+ INSTALL_COMPRESS_LINK="compress-link"
+ else
+ INSTALL_COMPRESS_LINK=
+ fi
+ fi
+ AC_SUBST(INSTALL_COMPRESS_LINK)
+])
diff --git a/m4/signed.m4 b/m4/signed.m4
new file mode 100644
index 0000000..048f593
--- /dev/null
+++ b/m4/signed.m4
@@ -0,0 +1,17 @@
+# signed.m4 serial 1 (gettext-0.10.40)
+dnl Copyright (C) 2001-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([bh_C_SIGNED],
+[
+ AC_CACHE_CHECK([for signed], bh_cv_c_signed,
+ [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])
+ if test $bh_cv_c_signed = no; then
+ AC_DEFINE(signed, ,
+ [Define to empty if the C compiler doesn't support this keyword.])
+ fi
+])
diff --git a/m4/size_max.m4 b/m4/size_max.m4
new file mode 100644
index 0000000..4fe81c7
--- /dev/null
+++ b/m4/size_max.m4
@@ -0,0 +1,59 @@
+# size_max.m4 serial 2
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+ AC_CHECK_HEADERS(stdint.h)
+ dnl First test whether the system already has SIZE_MAX.
+ AC_MSG_CHECKING([for SIZE_MAX])
+ result=
+ AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], result=yes)
+ if test -z "$result"; then
+ dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+ dnl than the type 'unsigned long'.
+ dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
+ dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
+ _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
+ [#include <stddef.h>], result=?)
+ _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
+ [#include <stddef.h>], result=?)
+ _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
+ [#include <stddef.h>], result=?)
+ if test "$fits_in_uint" = 1; then
+ dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+ dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+ AC_TRY_COMPILE([#include <stddef.h>
+ extern size_t foo;
+ extern unsigned long foo;
+ ], [], fits_in_uint=0)
+ fi
+ if test -z "$result"; then
+ if test "$fits_in_uint" = 1; then
+ result="$res_hi$res_lo"U
+ else
+ result="$res_hi$res_lo"UL
+ fi
+ else
+ dnl Shouldn't happen, but who knows...
+ result='~(size_t)0'
+ fi
+ fi
+ AC_MSG_RESULT([$result])
+ if test "$result" != yes; then
+ AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
+ [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+ fi
+])
diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4
new file mode 100644
index 0000000..3355f35
--- /dev/null
+++ b/m4/stdint_h.m4
@@ -0,0 +1,26 @@
+# stdint_h.m4 serial 5
+dnl Copyright (C) 1997-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+ AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h,
+ [AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <stdint.h>],
+ [uintmax_t i = (uintmax_t) -1;],
+ gl_cv_header_stdint_h=yes,
+ gl_cv_header_stdint_h=no)])
+ if test $gl_cv_header_stdint_h = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+ [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+ and declares uintmax_t. ])
+ fi
+])
diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4
new file mode 100644
index 0000000..bf83ed7
--- /dev/null
+++ b/m4/uintmax_t.m4
@@ -0,0 +1,30 @@
+# uintmax_t.m4 serial 9
+dnl Copyright (C) 1997-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_PREREQ(2.13)
+
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
+[
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+ AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG])
+ test $ac_cv_type_unsigned_long_long = yes \
+ && ac_type='unsigned long long' \
+ || ac_type='unsigned long'
+ AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+ [Define to unsigned long or unsigned long long
+ if <stdint.h> and <inttypes.h> don't define.])
+ else
+ AC_DEFINE(HAVE_UINTMAX_T, 1,
+ [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+ fi
+])
diff --git a/m4/ulonglong.m4 b/m4/ulonglong.m4
new file mode 100644
index 0000000..dee10cc
--- /dev/null
+++ b/m4/ulonglong.m4
@@ -0,0 +1,23 @@
+# ulonglong.m4 serial 4
+dnl Copyright (C) 1999-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.
+
+AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG],
+[
+ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
+ [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;],
+ [unsigned long long ullmax = (unsigned long long) -1;
+ return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
+ ac_cv_type_unsigned_long_long=yes,
+ ac_cv_type_unsigned_long_long=no)])
+ if test $ac_cv_type_unsigned_long_long = yes; then
+ AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
+ [Define if you have the 'unsigned long long' type.])
+ fi
+])
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
new file mode 100644
index 0000000..cde2129
--- /dev/null
+++ b/m4/wchar_t.m4
@@ -0,0 +1,20 @@
+# wchar_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+ AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
+ [AC_TRY_COMPILE([#include <stddef.h>
+ wchar_t foo = (wchar_t)'\0';], ,
+ gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
+ if test $gt_cv_c_wchar_t = yes; then
+ AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
+ fi
+])
diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
new file mode 100644
index 0000000..b8fff9c
--- /dev/null
+++ b/m4/wint_t.m4
@@ -0,0 +1,20 @@
+# wint_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+ AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
+ [AC_TRY_COMPILE([#include <wchar.h>
+ wint_t foo = (wchar_t)'\0';], ,
+ gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
+ if test $gt_cv_c_wint_t = yes; then
+ AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
+ fi
+])
diff --git a/m4/xsize.m4 b/m4/xsize.m4
new file mode 100644
index 0000000..85bb721
--- /dev/null
+++ b/m4/xsize.m4
@@ -0,0 +1,13 @@
+# xsize.m4 serial 3
+dnl Copyright (C) 2003-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XSIZE],
+[
+ dnl Prerequisites of lib/xsize.h.
+ AC_REQUIRE([gl_SIZE_MAX])
+ AC_REQUIRE([AC_C_INLINE])
+ AC_CHECK_HEADERS(stdint.h)
+])
diff --git a/m4/xstrtoimax.m4 b/m4/xstrtoimax.m4
new file mode 100644
index 0000000..f85a284
--- /dev/null
+++ b/m4/xstrtoimax.m4
@@ -0,0 +1,41 @@
+#serial 2
+dnl Cloned from xstrtoumax.m4. Keep these files in sync.
+
+# autoconf tests required for use of xstrtoimax.c
+
+AC_DEFUN([jm_AC_PREREQ_XSTRTOIMAX],
+[
+ AC_REQUIRE([gt_TYPE_INTMAX_T])
+ AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])
+ AC_REQUIRE([gl_AC_TYPE_LONG_LONG])
+ AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG])
+ AC_CHECK_DECLS([strtol, strtoul, strtoll, strtoimax, strtoumax])
+ AC_CHECK_HEADERS(limits.h stdlib.h inttypes.h)
+
+ AC_CACHE_CHECK([whether <inttypes.h> defines strtoimax as a macro],
+ jm_cv_func_strtoimax_macro,
+ AC_EGREP_CPP([inttypes_h_defines_strtoimax], [#include <inttypes.h>
+#ifdef strtoimax
+ inttypes_h_defines_strtoimax
+#endif],
+ jm_cv_func_strtoimax_macro=yes,
+ jm_cv_func_strtoimax_macro=no))
+
+ if test "$jm_cv_func_strtoimax_macro" != yes; then
+ AC_REPLACE_FUNCS(strtoimax)
+ fi
+
+ dnl Only the replacement strtoimax invokes strtol and strtoll,
+ dnl so we need the replacements only if strtoimax does not exist.
+ case "$jm_cv_func_strtoimax_macro,$ac_cv_func_strtoimax" in
+ no,no)
+ AC_REPLACE_FUNCS(strtol)
+
+ dnl We don't need (and can't compile) the replacement strtoll
+ dnl unless the type `long long' exists.
+ if test "$ac_cv_type_long_long" = yes; then
+ AC_REPLACE_FUNCS(strtoll)
+ fi
+ ;;
+ esac
+])
diff --git a/missing b/missing
new file mode 100755
index 0000000..1c8ff70
--- /dev/null
+++ b/missing
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case $1 in
+ lex|yacc)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ tar)
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ exit 1
+ fi
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running `$TOOL --version' or `$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $1 in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit 1
+ fi
+ ;;
+
+ makeinfo)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ tar)
+ shift
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case $firstarg in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case $firstarg in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 0000000..ef7e16f
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,161 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2006-05-11.19
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+IFS=" "" $nl"
+errstatus=0
+dirmode=
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case $1 in
+ -h | --help | --h*) # -h for help
+ echo "$usage"
+ exit $?
+ ;;
+ -m) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+ dirmode=$1
+ shift
+ ;;
+ --version)
+ echo "$0 $scriptversion"
+ exit $?
+ ;;
+ --) # stop option processing
+ shift
+ break
+ ;;
+ -*) # unknown option
+ echo "$usage" 1>&2
+ exit 1
+ ;;
+ *) # first non-opt arg
+ break
+ ;;
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+ 0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error. This is a problem when calling mkinstalldirs
+# from a parallel make. We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+ '')
+ if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ test -d ./-p && rmdir ./-p
+ test -d ./--version && rmdir ./--version
+ fi
+ ;;
+ *)
+ if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+ test ! -d ./--version; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ else
+ # Clean up after NextStep and OpenStep mkdir.
+ for d in ./-m ./-p ./--version "./$dirmode";
+ do
+ test -d $d && rmdir $d
+ done
+ fi
+ ;;
+esac
+
+for file
+do
+ case $file in
+ /*) pathcomp=/ ;;
+ *) pathcomp= ;;
+ esac
+ oIFS=$IFS
+ IFS=/
+ set fnord $file
+ shift
+ IFS=$oIFS
+
+ for d
+ do
+ test "x$d" = x && continue
+
+ pathcomp=$pathcomp$d
+ case $pathcomp in
+ -*) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+ lasterr=
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp=$pathcomp/
+ done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/packaging/sharutils.changes b/packaging/sharutils.changes
new file mode 100644
index 0000000..f1077a9
--- /dev/null
+++ b/packaging/sharutils.changes
@@ -0,0 +1,152 @@
+* Tue Feb 16 2010 Anas Nashif <anas.nashif@intel.com> - 4.7
+- Use spectacle
+
+* Wed Feb 03 2010 Yi Yang <yi.y.yang@intel.com> - 4.7
+- Update to 4.7
+
+* Tue Dec 16 2008 Anas Nashif <anas.nashif@intel.com> 4.6.3
+- Fixed rpmlint errors in Summary tag
+
+* Fri Sep 12 2008 Yi Yang <yi.y.yang@intel.com> 4.6.3
+- Mark man and info as %doc and remove installation warnings of info files
+
+* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 4.6.3-2
+- Autorebuild for GCC 4.3
+
+* Tue Apr 10 2007 Than Ngo <than@redhat.com> - 4.6.3-1
+- 4.6.3
+
+* Fri Jul 14 2006 Jesse Keating <jkeating@redhat.com> - 4.6.1-2
+- rebuild
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 4.6.1-1.2
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 4.6.1-1.1
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Mon Feb 06 2006 Florian La Roche <laroche@redhat.com>
+- 4.6.1
+
+* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt
+
+* Thu Nov 03 2005 Than Ngo <than@redhat.com> 4.6-2
+- fix wrong permission #171889
+
+* Wed Oct 26 2005 Than Ngo <than@redhat.com> 4.6-1
+- update to 4.6
+
+* Mon Apr 11 2005 Than Ngo <than@redhat.com> 4.2.1-27
+- apply debian patch to fix insecure temporary file creation
+ in unshar #154049, CAN-2005-0990
+
+* Thu Mar 31 2005 Than Ngo <than@redhat.com> 4.2.1-26
+- apply patch to fix multiple buffer overflows #152571
+
+* Mon Mar 07 2005 Than Ngo <than@redhat.com> 4.2.1-25
+- cleanup
+
+* Sat Mar 05 2005 Than Ngo <than@redhat.com> 4.2.1-24
+- rebuilt
+
+* Wed Feb 09 2005 Than Ngo <than@redhat.com> 4.2.1-23
+- rebuilt
+
+* Fri Oct 01 2004 Than Ngo <than@redhat.com> 4.2.1-22
+- fix buffer overflow in shar, (from Ulf Harnhammer)
+
+* Thu Jun 24 2004 Than Ngo <than@redhat.com> 4.2.1-21
+- add builrequires on gettext, bug #126599
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Fri May 21 2004 Than Ngo <than@redhat.com> 4.2.1-19
+- add suse patch, which fixes buffer overflow in handling of -o option, #123230
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Mon Jun 16 2003 Than Ngo <than@redhat.com> 4.2.1-17
+- rebuilt
+
+* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
+- rebuilt
+
+* Wed Dec 11 2002 Tim Powers <timp@redhat.com> 4.2.1-13
+- rebuild on all arches
+
+* Mon Jun 24 2002 Than Ngo <than@redhat.com> 4.2.1-12
+- fixed #66892
+
+* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Thu May 23 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Sun Apr 14 2002 Than Ngo <than@redhat.com> 4.2.1-9
+- added fix for Unsecure outputfile handling in uudecode (#63303)
+- Copyright -> License
+
+* Fri May 11 2001 Than Ngo <than@redhat.com>
+- use find_lang macro
+- use mktemp
+
+* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
+- automatic rebuild
+
+* Sun Jun 18 2000 Than Ngo <than@redhat.de>
+- fix typo (Bug# 12447)
+
+* Sun Jun 18 2000 Than Ngo <than@redhat.de>
+- rebuilt in the new build environment
+
+* Thu Jun 08 2000 Than Ngo <than@redhat.de>
+- add %defattr(-,root,root) (Bug# 11990)
+- use rpm macros
+
+* Sun May 21 2000 Ngo Than <than@redhat.de>
+- rebuild to put man pages and info files in right place
+
+* Mon Feb 07 2000 Preston Brown <pbrown@redhat.com>
+- rebuild to gzip man pages
+
+* Tue Dec 21 1999 Preston Brown <pbrown@redhat.com>
+- sharutils 4.2.1 for Y2K (2 digit date) fix.
+- ja message catalog move (#7878)
+
+* Tue Sep 7 1999 Jeff Johnson <jbj@redhat.com>
+- handle spaces in uuencoded file names (David Fox <dsfox@cogsci.ucsd.edu>).
+
+* Wed Jul 28 1999 Cristian Gafton <gafton@redhat.com>
+- use the /usr/share/locale for the localedir instead of /usr/lib/locale
+ (#2998)
+
+* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com>
+- auto rebuild in the new build environment (release 12)
+
+* Wed Dec 30 1998 Cristian Gafton <gafton@redhat.com>
+- build for glibc 2.1
+
+* Fri Apr 24 1998 Prospector System <bugs@redhat.com>
+- translations modified for de, fr, tr
+
+* Sat Apr 11 1998 Cristian Gafton <gafton@redhat.com>
+- manhattan rebuild
+
+* Fri Oct 17 1997 Donnie Barnes <djb@redhat.com>
+- ALRIGHT! Woo-hoo! Erik already did the install-info stuff!
+- added BuildRoot
+- spec file cleanups
+
+* Sun Sep 14 1997 Erik Troan <ewt@redhat.com>
+- uses install-info
+
+* Fri Jul 18 1997 Erik Troan <ewt@redhat.com>
+- built against glibc
+
diff --git a/packaging/sharutils.manifest b/packaging/sharutils.manifest
new file mode 100644
index 0000000..017d22d
--- /dev/null
+++ b/packaging/sharutils.manifest
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+ <domain name="_"/>
+ </request>
+</manifest>
diff --git a/packaging/sharutils.spec b/packaging/sharutils.spec
new file mode 100755
index 0000000..b391efd
--- /dev/null
+++ b/packaging/sharutils.spec
@@ -0,0 +1,87 @@
+#
+# Do not Edit! Generated by:
+# spectacle version 0.13~pre
+#
+# >> macros
+# << macros
+
+Name: sharutils
+Summary: The GNU shar utilities for packaging and unpackaging shell archives
+Version: 4.7
+Release: 3
+Group: Applications/Archiving
+License: GPL
+URL: http://www.gnu.org/software/sharutils/
+Source0: ftp://ftp.gnu.org/gnu/sharutils/REL-%{version}/sharutils-%{version}.tar.bz2
+Source1001: packaging/sharutils.manifest
+BuildRequires: gettext
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+
+%description
+The sharutils package contains the GNU shar utilities, a set of tools
+for encoding and decoding packages of files (in binary or text format)
+in a special plain text format called shell archives (shar). This
+format can be sent through e-mail (which can be problematic for regular
+binary files). The shar utility supports a wide range of capabilities
+(compressing, uuencoding, splitting long files for multi-part
+mailings, providing checksums), which make it very flexible at
+creating shar files. After the files have been sent, the unshar tool
+scans mail messages looking for shar files. Unshar automatically
+strips off mail headers and introductory text and then unpacks the
+shar files.
+
+Install sharutils if you send binary files through e-mail.
+
+
+%prep
+%setup -q -n %{name}-%{version}
+# >> setup
+# << setup
+
+%build
+cp %{SOURCE1001} .
+# >> build pre
+# << build pre
+
+%configure --disable-static
+# Call make instruction with smp support
+make %{?jobs:-j%jobs}
+
+# >> build post
+# << build post
+%install
+rm -rf %{buildroot}
+# >> install pre
+# << install pre
+%make_install
+
+# >> install post
+rm -f ${RPM_BUILD_ROOT}%{_infodir}/dir
+chmod 644 AUTHORS ChangeLog COPYING NEWS README THANKS TODO
+# << install post
+%find_lang %{name}
+
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/license
+for keyword in LICENSE COPYING COPYRIGHT;
+do
+ for file in `find %{_builddir} -name $keyword`;
+ do
+ cat $file >> $RPM_BUILD_ROOT%{_datadir}/license/%{name};
+ echo "";
+ done;
+done
+
+%clean
+rm -rf %{buildroot}
+
+%files -f %{name}.lang
+%manifest sharutils.manifest
+%defattr(-,root,root,-)
+# >> files
+%doc AUTHORS COPYING NEWS README THANKS TODO
+%{_datadir}/license/%{name}
+%{_bindir}/*
+%doc %{_infodir}/*info*
+%doc %{_mandir}/*/*
+# << files
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..f1a5f5f
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,2 @@
+# Set of available languages:
+bg ca cs da de el es et fi fr ga gl hu it ja nb nl nn pl pt ru rw sr sv tr vi zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..1f5cc28
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,384 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2005 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.14.4
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address"
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ $(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-tools"; then \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ $(mkinstalldirs) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkinstalldirs) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+ $(SHELL) ./config.status
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..e83ebd2
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,25 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --no-wrap
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..769d200
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,13 @@
+# List of files which containing translatable strings.
+# Copyright (C) 1995 Free Software Foundation, Inc.
+
+# Files from the compatibility library
+lib/error.c
+lib/getopt.c
+lib/xmalloc.c
+
+# Package source files
+src/shar.c
+src/unshar.c
+src/uudecode.c
+src/uuencode.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..9c2a995
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+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
diff --git a/po/bg.gmo b/po/bg.gmo
new file mode 100644
index 0000000..554acbf
--- /dev/null
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..cc81dbc
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,906 @@
+# Translation of sharutils to Bulgarian
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+# Anton Zinoviev <zinoviev@debian.org>, 2005, 2006.
+#
+# This file should be sent to translation@iro.umontreal.ca with the
+# following subject line: TP-Robot sharutils-VERSION.bg.po
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-22 23:26+0300\n"
+"Last-Translator: Anton Zinoviev <zinoviev@debian.org>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Ðепозната ÑиÑтемна грешка"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: опциÑта „%s“ е двуÑмиÑлена\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: опциÑта „--%s“ не допуÑка аргумент\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: опциÑта „%c%s“ не допуÑка аргумент\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: опциÑта „%s“ изиÑква аргумент\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: непозната Ð¾Ð¿Ñ†Ð¸Ñ â€ž--%s“\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: непозната Ð¾Ð¿Ñ†Ð¸Ñ â€ž%c%s“\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: неправилна Ð¾Ð¿Ñ†Ð¸Ñ -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: неправилна Ð¾Ð¿Ñ†Ð¸Ñ -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: опциÑта изиÑква аргумент -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: опциÑта „-W %s“ е двуÑмиÑлена\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: опциÑта „-W %s“ не допуÑка аргумент\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "паметта е изчерпана"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Забележете: не Ñе проверÑват MD5-Ñуми. ОбмиÑлете евентуално инÑталиране на "
+"GNU coreutils."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+"Ð’ÐИМÐÐИЕ: не Ñе възÑтановÑват времената. ОбмиÑлете евентуалното инÑталиране"
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "на командата „touch“ от пакета GNU coreutils."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "заключващиÑÑ‚ каталог '${lock_dir}' ÑъщеÑтвува"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "не може да Ñе Ñъздаде заключващ каталог"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - Ñъздаден е заключващ каталог „'%s'“."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - не може да Ñе Ñъздаде заключващ каталог „'%s'“."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "да"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "този файл да Ñе замеÑти"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "не"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "този файл да Ñе пропуÑне"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "вÑички"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "да Ñе замеÑÑ‚ÑÑ‚ вÑички файлове"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "никой"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "да не Ñе замеÑтват файлове"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "Ñправка"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "да обÑÑнÑва избора"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "изход"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "незабавен изход"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Има твърде много каталози за Ñъздаване Ñ mkdir"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - Ñъздаден е каталог „%s“."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - не може да Ñе Ñъздаде каталог „%s“."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "ÐÑма доÑтъп до %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "опциÑта -C е оÑтарÑла, ползвайте -Z вмеÑто неÑ"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Ðе може да Ñе получи името на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Ðрхивите Ñ‚Ñ€Ñбва да Ñе разпакетират един по един!\n"
+"МолÑ, Ñледваща разпакетирайте чаÑтта '`cat ${lock_dir}/seq`'."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Ðов файл, преименува Ñе на %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Ограничението вÑе още е %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "не можа да Ñе възÑтанови %s"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Край на чаÑÑ‚ %d, продължава Ñе Ñ Ñ‡Ð°ÑÑ‚ %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Започва файл %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Ðе е обикновен файл"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "Ð’ shar: оÑтаващ размер %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "празен"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(празен)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Файлът %s не може да Ñе отвори"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "компреÑиран"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "компреÑиран Ñ gzip"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "компреÑиран Ñ bzip2"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "двоичен"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(компреÑиран)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(компреÑиран Ñ gzip)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(компреÑиран Ñ bzip2)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(двоичен)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Ðе може да Ñе породи дъщерен процеÑ"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Файл %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "текÑÑ‚"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(текÑÑ‚)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "замеÑтване на %s"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "да Ñе замеÑти %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "ПРОПУСКРСЕ %s"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "извличането е прекъÑнато"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "ПРОПУСКРСЕ %s (файлът вече ÑъщеÑтвува)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Запазване %s (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - извлича Ñе %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "не уÑÐ¿Ñ Ð²ÑŠÐ·ÑтановÑването на %s\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Край на чаÑÑ‚ %ld, продължава Ñе Ñ Ñ‡Ð°ÑÑ‚ %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Край на %s, чаÑÑ‚ %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "архив"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Файлът %s продължава в чаÑÑ‚ %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "МолÑ, разпакетирайте най-напред чаÑÑ‚ 1!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "МолÑ, Ñлед това разпакетирайте чаÑÑ‚ '${shar_sequence}'!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "ВСЕ ОЩЕ СЕ ПРОПУСКР%s"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "продължава Ñе Ñ Ñ„Ð°Ð¹Ð»Ð° %s"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Файлът %s е готов"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "uue-файлът %s Ñе декодира"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "файлът %s Ñе разкомпреÑира"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "gzip-файлът %s Ñе разкомпреÑира"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "bzip2-файлът %s Ñе разкомпреÑира"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "контролната Ñума MD5 не Ñе потвърди"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'предупреждение за възÑтановÑването: размерът на %s не е %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "запазва Ñе име на изходен файл"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "ÐžÑ‚Ð²Ð°Ñ€Ñ Ñе „%s“"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Ð—Ð°Ñ‚Ð²Ð°Ñ€Ñ Ñе „%s“"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Използвайте „%s --help“ за повече информациÑ.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Използване: %s [ОПЦИЯ]... [ФÐЙЛ]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Ðргументите, задължителни за дългите опции, Ñа задължителни и за къÑите.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"ИнформациÑ:\n"
+" --help извежда тази Ñправка и завършва\n"
+" --version извежда Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта и завършва\n"
+" -q, --quiet, --silent не извежда локално подробни ÑъобщениÑ\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Избор на файлове:\n"
+" -p, --intermix-type ÑмÑна режима на доÑтъп Ñ Ñ€ÐµÐ´ÑƒÐ²Ð°Ð½Ðµ на различни -"
+"[BTzZ]\n"
+" -S, --stdin-file-list файловиÑÑ‚ ÑпиÑък Ñе чете от ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð²Ñ…Ð¾Ð´\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Избор на файлове:\n"
+" -p, --intermix-type ÑмÑна режима на доÑтъп Ñ Ñ€ÐµÐ´ÑƒÐ²Ð°Ð½Ðµ на различни -"
+"[BTz]\n"
+" -S, --stdin-file-list файловиÑÑ‚ ÑпиÑък Ñе чете от ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð²Ñ…Ð¾Ð´\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"РазделÑне на изхода:\n"
+" -o, --output-prefix=ПРЕФИКС извежда във файлове от ПРЕФИКС.01 до ПРЕФИКС."
+"NN\n"
+" -l, --whole-size-limit=РÐЗМ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°, не файловете, до РÐЗМ "
+"килобайта\n"
+" -L, --split-size-limit=РÐЗМ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð° или файловете до РÐЗМ "
+"килобайта\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"ОпределÑне заглавиÑта на shar:\n"
+" -n, --archive-name=ИМЕ използва ИМЕ за опиÑание на архива\n"
+" -s, --submitter=ÐДРЕС поÑочва алтернативно име на автора\n"
+" -a, --net-headers извежда полета „Submitted-by:“ и „Archive-"
+"name“:\n"
+" -c, --cut-mark започва shar Ñ Ñ€ÐµÐ´ „Срежи тук“\n"
+" -t, --translate превежда ÑъобщениÑта в Ñкрипта\n"
+"\n"
+"ОпределÑне как Ñе Ñкладират файловете:\n"
+" -M, --mixed-uuencode Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡Ð½Ð¾ uue-кодирането (подразбира "
+"Ñе)\n"
+" -T, --text-files работи Ñ Ð²Ñички файлове като Ñ Ñ‚ÐµÐºÑтови\n"
+" -B, --uuencode работи Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²ÐµÑ‚Ðµ като Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ð¸ (Ñ "
+"uuencode)\n"
+" -z, --gzip uuе-кодира и компреÑира Ñ gzip вÑички "
+"файлове\n"
+" -g, --level-for-gzip=ÐИВО подава Ð¾Ð¿Ñ†Ð¸Ñ -ÐИВО (по подразбиране 9) на "
+"gzip\n"
+" -j, --bzip2 uue-кодира и компреÑира Ñ bzip2 вÑички "
+"файлове\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress uue-кодира и компреÑира Ñ compress вÑички "
+"файлове\n"
+" -b, --bits-per-code=БИТОВЕ подава -bБИТОВЕ (по подразбиране 12) на "
+"compress\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Защита на данните при пренаÑÑне:\n"
+" -w, --no-character-count да не Ñе ползва „wc -c“ за проверка на "
+"размера\n"
+" -D, --no-md5-digest да не Ñе ÑверÑва контролна Ñума Ñ â€žmd5sum“ \n"
+" -F, --force-prefix да Ñе Ñлага контролен начален знак на вÑеки "
+"ред\n"
+" -d, --here-delimiter=ÐИЗ да Ñе ползва ÐИЗ за отделÑне на файловете в "
+"shar\n"
+"\n"
+"Създаване на различни видове shar:\n"
+" -V, --vanilla-operation ÑъвÑем обикновени и невзиÑкателни архиви shar\n"
+" -P, --no-piping Ñамо временни файлове при разархивиране, не "
+"конвейри\n"
+" -x, --no-check-existing неконтролируемо да Ñе заличават ÑъщеÑтвуващи "
+"файлове\n"
+" -X, --query-user да пита преди заличаване на файлове (да не Ñе\n"
+" използва при архиви, разпроÑтранÑвани по "
+"мрежата)\n"
+" -m, --no-timestamp без възÑтановÑване времето на промÑна на "
+"файловете\n"
+" -Q, --quiet-unshar без подробни ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ разархивиране\n"
+" -f, --basename разархивира в един каталог въпреки йерархиÑта\n"
+" --no-i18n да не Ñе генерира интернационализиран Ñкрипт\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"При -l или -L е задължителна и Ð¾Ð¿Ñ†Ð¸Ñ -o, при -a е задължителна и Ð¾Ð¿Ñ†Ð¸Ñ -n.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "ОпциÑта -g влече -z, опциÑта -b влече -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "ОпциÑта -g влече -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"За грешки Ñъобщавайте на <%s>.\n"
+"За грешки в българÑÐºÐ¸Ñ Ð¿Ñ€ÐµÐ²Ð¾Ð´ на <dict@fsa-bg.org>\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "неправилно ограничение за размер на файл „%s“"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "неправилен формат (твърде широко поле за броÑч): „%s“\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "по време на ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð°Ñ†Ð¸Ñ Ð½Ðµ е била поÑочена Ð¾Ð¿Ñ†Ð¸Ñ â€žDEBUG“"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Твърдо ограничение %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Тази ÑиÑтема не поддържа -Z („compress“), вмеÑто това ползвайте -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Меко ограничение %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "неправилен Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð½Ð° изхода\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright © %s Free Software Foundation, Inc.\n"
+"Това е Ñвободен Ñофтуер. Вижте Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ ÐºÐ¾Ð´ за уÑловиÑта за копиране. ÐЯМÐ\n"
+"ГÐРÐÐЦИИ -- включително без предполагаемите гаранции за полезноÑÑ‚ и пригодноÑÑ‚\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "Ð’ÐИМÐÐИЕ: без диалог Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð² режим „--vanilla-operation“"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "Ð’ÐИМÐÐИЕ: Ðе Ñа взети предвид опции за файлове в нетекÑтов формат"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "ÐÑма входни файлове"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Ðе може да Ñе използва Ð¾Ð¿Ñ†Ð¸Ñ -a без -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Ðе може да Ñе използва Ð¾Ð¿Ñ†Ð¸Ñ -l или -L без -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"МолÑ, избÑгвайте разпроÑтранÑването на архиви Ñ -X по общодоÑтъпни мрежи"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Разархивирахте поÑледната чаÑÑ‚"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Създадени Ñа %d файла\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - премахнат е заключващиÑÑ‚ каталог „'%s'“."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - неуÑпешно изтриване на заключващ каталог „'%s'“."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Ðе Ñа открити команди на обвивката в %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s изглежда като изходен програмен код на Си, а не на shar-архив"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Ðе Ñа открити команди на обвивката Ñлед „cut“ в %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s вероÑтно не е shar-архив"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Редът „cut“ бе Ñледван от: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Стартиране на Ð¿Ñ€Ð¾Ñ†ÐµÑ â€žsh“"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Ðргументите, задължителни за дългите опции, Ñа задължителни и за къÑите.\n"
+"\n"
+" -d, --directory=КÐТÐЛОГ минава в КÐТÐЛОГ преди да Ñе разпакетира\n"
+" -c, --overwrite подава -c на Ñкрипта shar за замеÑтване на "
+"файлове\n"
+" -e, --exit-0 Ñъщото като „--split-at=\"exit 0\"“\n"
+" -E, --split-at=ÐИЗ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ Ñъединени архиви Ñлед ÐИЗ\n"
+" -f, --force Ñъщото като „-c“\n"
+" --help извежда тази Ñправка и завършва\n"
+" --version извежда Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта и излиза\n"
+"\n"
+"Ðко нÑма ФÐЙЛ, Ñе чете от ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð²Ñ…Ð¾Ð´.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "ТекущиÑÑ‚ каталог не може да Ñе Ñмени на „%s“"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "Ð·Ð°Ð´ÐµÐ»Ñ Ð±ÑƒÑ„ÐµÑ€ за файлово име"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "Ñтандартен вход"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "Ð·Ð°Ð´ÐµÐ»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² буфер"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Грешка при запиÑ"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: ÐšÑŠÑ Ñ„Ð°Ð¹Ð»"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Без ред „end“"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: данни Ñледват Ð·Ð°Ð¿ÑŠÐ»Ð²Ð°Ñ‰Ð¸Ñ Ñимвол „=“"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: неправилен ред"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: ÐÑма ред „begin“"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Ðеправилен ~потребител"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: ÐÑма потребител „%s“"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "не може да Ñе получи доÑтъп до %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "отказан Ð·Ð°Ð¿Ð¸Ñ Ð² именуван канал (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "не Ñе Ñледва Ñимволна връзка (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "ÐžÑ‚Ð²Ð°Ñ€Ñ Ñе Ñ freopen %s"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "ÑмÑна на правата на %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Използване: %s [ФÐЙЛ]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Ðргументите, задължителни за дългите опции, Ñа задължителни и за къÑите.\n"
+" -o, --output-file=ФÐЙЛ наÑочва изхода във ФÐЙЛ\n"
+" --help извежда тази помощна Ñправка и завършва\n"
+" --version извежда Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта и завършва\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Грешка при запиÑ"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Грешка при четене"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Използване: %s [ВХОД_ФÐЙЛ] ОТДÐЛЕЧЕÐ_ФÐЙЛ\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 използва кодиране base64 Ñпоред RFC1521\n"
+" --help извежда тази помощна Ñправка и завършва\n"
+" --version извежда Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта и завършва\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "ÐžÑ‚Ð²Ð°Ñ€Ñ Ñе Ñ fopen %s"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "Прочита Ñе Ñ fstat ÑтатуÑа на %s"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[не (n), да (y), вÑички (a), изход (q)] (не)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "МолÑ, разпакетирайте чаÑÑ‚"
+
+#~ msgid "next!"
+#~ msgstr "Ñледваща!"
+
+#~ msgid "File"
+#~ msgstr "Файл"
+
+#~ msgid "original size"
+#~ msgstr "оригинален размер"
+
+#~ msgid "current size"
+#~ msgstr "текущ размер"
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
+s/“/“/g
+s/â€/â€/g
+s/‘/‘/g
+s/’/’/g
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644
index 0000000..9c68c4f
--- /dev/null
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..69076fa
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,935 @@
+# translation of sharutils.po to Catalan
+# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+# Antoni Bella Perez <bella5@teleline.es>, 2002,2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils-4.3.75\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2003-01-06 13:09+0100\n"
+"Last-Translator: Antoni Bella Perez <bella5@teleline.es>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.1\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Error desconegut del sistema"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: l'opció `%s' és ambigua\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: l'opció `--%s' no admet un argument\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: l'opció `%c%s' no admet un argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: l'opció `%s' requereix un argument\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opció `--%s' no reconeguda\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opció `%c%s' no reconeguda\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opció `%c` ilegal\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opció `%c`invàlida\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'opció `%c` requereix un argument\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: l'opció `-W %s' és ambigua\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: l'opció `-W %s' no admet un argument\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "memòria esgotada"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+"ATENCIÓ: no es restabliran les marques de temps. Considereu l'obtenció i"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+"instal·lació del GNU \\`touch', distribuït amb les `GNU File Utilities'..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "falla al crear el directori de bloqueig"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "falla al crear el directori de bloqueig"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "falla al crear el directori de bloqueig"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "sobreescriure"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "sobreescriure"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "sobreescriure"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Masses directoris a generar amb `mkdir'"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "falla al crear el directori de bloqueig"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "No es pot accedir a %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "L'opció -C està obsoleta, en el seu lloc s'usa -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "No es pot obtindre el nom del directori actual"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Fitxer nou, falten %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "El límit encara és %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "restauració de"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "continua amb el segment"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Fitxer de començament %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: No és un fitxer regular"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "En `shar': falten %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "buit"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(buit)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "No es pot obrir el fitxer %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "comprimit amb `compress'"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "comprimit amb `gzip'"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "comprimit amb `bzip'"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binari"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(comprimit)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(comprimit amb `gzip')"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(comprimit amb `bzip')"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binari)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "No es pot clonar `fork'"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Fitxer %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "text"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(text)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "sobreescrivint"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "sobreescriure"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "SALTANT"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "extracció abortada"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(el fitxer ja existeix)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Desant %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "extreguent"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "restauració de"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "continua amb el segment"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "Final del segment"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "arxiu"
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "contínua en el segment"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Si us plau, desempaqueteu primer el segment 1!"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Si us plau, desempaqueteu primer el segment 1!"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "ENCARA SALTANT"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "continuant amb el fitxer"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "està complet"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "decodificant el fitxer amb `uudecode'"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "descomprimint el fitxer amb `uncompress'"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "descomprimint el fitxer amb `gunzip'"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "descomprimint el fitxer amb `bunzip'"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "Falla en la comprovació de la suma MD5"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Obrint `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Tancant `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Per a més informació proveu amb `%s --help'.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Usant: %s [OPCIÓ]... [FITXER]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Els arguments obligatoris per a les opcions llargues també són obligatoris "
+"per a les opcions curtes.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Obtindre informació:\n"
+" --help mostra aquesta ajuda i surt\n"
+" --version informa de la versió i surt\n"
+" -q, --quiet, --silent no mostra localment els missatges de depuració\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Seleccionar fitxers:\n"
+" -p, --intermix-type permet -[BTzZ] en les llistes de fitxers per a "
+"canviar\n"
+" el mode\n"
+" -S, --stdin-file-list llegir la llista de fitxers des de l'entrada "
+"estàndard\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Seleccionar fitxers:\n"
+" -p, --intermix-type permet -[BTz] en les llistes de fitxers per a "
+"canviar\n"
+" el mode\n"
+" -S, --stdin-file-list llegir la llista de fitxers des de l'entrada "
+"estàndard\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Dividir l'eixida:\n"
+" -o, --output-prefix=PREFIX eixida cap al fitxer PREFIX.01 a traves de "
+"PREFIX.NN\n"
+" -l, --whole-size-limit=MIDA dividir l'arxiu, no els fitxers, a MIDA "
+"kilooctets\n"
+" -L, --split-size-limit=MIDA dividir l'arxiu o fitxers a MIDA kilooctets\n"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Controlant les capçaleres `shar':\n"
+" -n, --archive-name=NOM usar NOM per a documentar l'arxiu\n"
+" -s, --submitter=ADREÇA ignorar el nom del remitent\n"
+" -a, --net-headers eixida de les capçaleres `Submitted-by:' i "
+"`Archive-name:'\n"
+" -c, --cut-mark començar el `shar' amb una línia de tall\n"
+"\n"
+"Seleccionant com s'emmagetzamaran els fitxers:\n"
+" -M, --mixed-uuencode decidir dinàmicament el xifrat amb "
+"`uuencode' (per defecte)\n"
+" -T, --text-files tractar tots els fitxers com de text\n"
+" -B, --uuencode tractar tots els fitxers com de dades "
+"binàries, emprant `uuencode'\n"
+" -z, --gzip tots els fitxers amb `gzip' i `uuencode'\n"
+" -g, --level-for-gzip=NIVELL passar -el NIVELL (per defecte 9) al `gzip'\n"
+" -j, --bzip2 bzip2 i uuencode a tots els fitxers\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress comprimir i codificar tots els fitxers\n"
+" -b, --bits-per-code=BITS passar els -bBITS (per defecte 12) al "
+"`compress'\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Protegint contra transmissió:\n"
+" -w, --no-character-count no usar `wc -c' per a comprovar la mida\n"
+" -D, --no-md5-digest no usar la suma `md5sum' per a verificar\n"
+" -F, --force-prefix forçar el caràcter de prefix en cada línia\n"
+" -d, --here-delimiter=CADENA usar CADENA per a delimitar els fitxers en el "
+"`shar'\n"
+"\n"
+"Produint diferentes clases de `shar':\n"
+" -V, --vanilla-operation produïr els `shar' molt sencills i poc exigents\n"
+" -P, --no-piping usar exclusivament fitxers temporals al desfer "
+"el `shar'\n"
+" -x, --no-check-existing escriure sense confirmar sobre els fitxers "
+"existents\n"
+" -X, --query-user preguntar a l'usuari abans de sobreescriure "
+"fitxers (no per a xarxa)\n"
+" -m, --no-timestamp no restaurar les dates i hores de modificació "
+"del fitxer\n"
+" -Q, --quiet-unshar evitar els missatges de depuració al desfer el "
+"`shar'\n"
+" -f, --basename restaurar en un directori, sense tindre en "
+"compte la jerarquia\n"
+" --no-i18n no produïr un script shell internacionalitzat\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Es requereix l'opció -o amb -l o -L, es requereix l'opció -n amb -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "L'opció -g implica a -z, l'opció -b implica a -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "L'opció -g implica a l'opció -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Informar dels errors a <%s>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "No es va seleccionar DEBUG durant la compilació"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Límit per maquinari %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Aquest sistema no suporta l'opció -Z ('compress'), al seu lloc useu -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Límit per programari %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Això és programari lliure; mireu les fonts per a les condicions de còpia.\n"
+"Aquest NO té cap garantia. ni tansols la de ser COMERCIAL o ADAPTABLE PER\n"
+"A UNA DETERMINADA FINALITAT.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ATENCIÓ: No es permeten interaccions de l'usuari en el mode `vanilla'"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ATENCIÓ: Descartades les opcions d'emmagatzemament per a no-text"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Sense fitxers d'entrada"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "No es pot usar l'opció -a sense -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "No es poden usar les opcions -I o -L sense -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "SI US PLAU evitar shars creats amb -X en la Usenet o xarxes públiques"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Heu desempaquetat l'últim segment"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Creats: %d fitxers\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "falla al crear el directori de bloqueig"
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "No es troben comandaments de l'interpret d'ordres en %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s sembla codi C, no un arxiu de shell"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr ""
+"No es troben comandaments de l'interpret d'ordres després de `cut' en %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "Probablement %s no sigui un arxiu de l'interpret d'ordres"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "La línia `cut' estava seguida per: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Arrencant el proces `sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Els arguments obligatoris per a les opcions llargues també són obligatoris "
+"per a\n"
+"les opcions curtes.\n"
+"\n"
+" -d, --directory=DIRECTORI canviar a DIRECTORI avans de desempaquetar\n"
+" -c, --overwrite passar -c a l'script font per a sobreescriure "
+"fitxers\n"
+" -e, --exit-0 el mateix que `--split-at=\"exit 0\"'\n"
+" -E, --split-at=CADENA dividir els `shar' concatenats després de la "
+"CADENA\n"
+" -f, --force el mateix que `-c'\n"
+" --help mostra aquesta ajuda i surt\n"
+" --version informa de la versió i surt\n"
+"\n"
+"Sense FITXER, es llegirà l'entrada estàndard.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "No es pot canviar al directori `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "entrada estàndard"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Error d'escriptura"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Fitxer truncat"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Sense línia `end'"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: dada posterior al caràcter d'ompliment `='"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: línia ilegal"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Sense línia `begin'"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ~usuari ilegal"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: No hi ha cap usuari `%s'"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "no es pot accedir a %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "escrptura FIFO denegada (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "no segueix l'enllaç simbòlic (%s)"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Obrint `%s'"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Usant: %s [FITXER]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Els arguments obligatoris per a les opcions llargues també són obligatoris\n"
+"per a les opcions curtes.\n"
+" -o, --output-file=FITXER dirigir l'eixida cap al FITXER\n"
+" --help mostra aquesta ajuda i surt\n"
+" --version informa de la versió i surt\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Error d'escriptura"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Error de lectura"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Usant: %s [FITXER-D'ENTRADA] FITXER-REMOT\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 usar base64 tal i com s'indica en el RFC1521\n"
+" --help mostra aquesta ajuda i surt\n"
+" --version informa de la versió i surt\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Obrint `%s'"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Fitxer de començament %s\n"
+
+#~ msgid "lock directory"
+#~ msgstr "directori de bloqueig"
+
+#~ msgid "created"
+#~ msgstr "creat"
+
+#~ msgid "failed to create"
+#~ msgstr "falla al crear"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "S'han de desempaquetar els arxius en ordre!"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Si us plau, desempaqueteu la part"
+
+#~ msgid "next!"
+#~ msgstr "següent!"
+
+#~ msgid "failed"
+#~ msgstr "fallida"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[no=no, yes=sí, all=tot, quit=sortir] (no)?"
+
+#~ msgid "End of"
+#~ msgstr "Final de"
+
+#~ msgid "part"
+#~ msgstr "segment"
+
+#~ msgid "File"
+#~ msgstr "Fitxer"
+
+#~ msgid "original size"
+#~ msgstr "mida original"
+
+#~ msgid "current size"
+#~ msgstr "mida actual"
+
+#~ msgid "removed"
+#~ msgstr "esborrat"
+
+#~ msgid "failed to remove"
+#~ msgstr "falla a l'esborrar-lo"
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644
index 0000000..e89225d
--- /dev/null
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..e7a0088
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,972 @@
+# Czech translations for sharutils.
+# Copyright (C) 1997 Free Software Foundation, Inc.
+# David Sauer <xsauer@fel.cvut.cz>, 1997.
+#
+# Vladimir Michl <Vladimir.Michl@upol.cz>, 1998.
+#
+# Notes: 1 unstanslated message, still untranslatable, require redefinition
+# user asks keys
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.2c\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 1999-01-05 15:48+01:00\n"
+"Last-Translator: Vladimir Michl <Vladimir.Michl@upol.cz>\n"
+"Language-Team: Czech <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Neznámá chyba systému"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: pøepínaè `%s` není jednoznaèný\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: pøepínaè `--%s` musí být zadán bez argumentu\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: pøepínaè `%c%s` musí být zadán bez argumentu\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: pøepínaè `%s` vy¾aduje argument\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: neznámý pøepínaè `--%s`\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: neznámý pøepínaè `%c%s`\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: neznámý pøepínaè -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: neznámý pøepínaè -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: pøepínaè vy¾aduje argument -- %c\n"
+
+#: lib/getopt.c:881
+#, fuzzy, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: pøepínaè `%s` není jednoznaèný\n"
+
+#: lib/getopt.c:899
+#, fuzzy, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: pøepínaè `--%s` musí být zadán bez argumentu\n"
+
+#: lib/xmalloc.c:67
+#, fuzzy
+msgid "memory exhausted"
+msgstr "Pamì» vyèerpána"
+
+#: src/shar.c:608
+#, fuzzy
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr "UPOZORNÌNÍ: èasové znaèky nejsou obnoveny. Uva¾te instalaci"
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "UPOZORNÌNÍ: èasové znaèky nejsou obnoveny. Uva¾te instalaci"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "GNU \\`touch`, z balíèku GNU File Utilities ..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "adresáø pro zámky nelze vytvoøit"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "adresáø pro zámky nelze vytvoøit"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "adresáø pro zámky nelze vytvoøit"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "pøepsat"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "pøepsat"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "pøepsat"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Pøíli¹ mnoho adresáøù pro mkdir"
+
+#: src/shar.c:737
+#, fuzzy, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "adresáø pro zámky nelze vytvoøit"
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "adresáø pro zámky nelze vytvoøit"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Pro pøístup k %s chybí práva"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C není podporován, místo nìj pou¾ijte -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Jméno aktuálního adresáøe nelze zjistit"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, fuzzy, c-format
+msgid "New file, remaining %s, "
+msgstr "Nový soubor, zbývá %ld, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, fuzzy, c-format
+msgid "Limit still %s\n"
+msgstr "Limit zùstává %d\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "obnovení"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "pokraèování èástí"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Zaèíná soubor %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Není obyèejný soubor"
+
+#: src/shar.c:1067
+#, fuzzy, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "shar: zbývající velikost %ld\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "prázdný"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(prázdný)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Soubor %s nelze otevøít"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "komprimovaný"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gzipovaný"
+
+#: src/shar.c:1150
+#, fuzzy
+msgid "bzipped"
+msgstr "gzipovaný"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binární"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(komprimovaný)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gzipovaný)"
+
+#: src/shar.c:1154
+#, fuzzy
+msgid "(bzipped)"
+msgstr "(gzipovaný)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binární)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Fork nelze provést"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Soubor %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "textový"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(textový)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "pøepisování"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "pøepsat"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "PØESKAKUJI"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "rozbalování ukonèeno pøedèasnì"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(soubor ji¾ existuje)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Ukládám %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "rozbaluji"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "obnovení"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "pokraèování èástí"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "Konec èásti"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "archívu"
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "pokraèuje èástí"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Prosím, rozbalte èást èíslo 1 jako první!"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Prosím, rozbalte èást èíslo 1 jako první!"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "STÁLE PØESKAKUJI"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "pokraèování souboru"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "je zpracován"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "uudekódování souboru"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "dekomprimování souboru"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "gzip -d souboru"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "gzip -d souboru"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "kontrola MD5 selhala"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Otevírám `%s`"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Uzavírám `%s`"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Více informací získáte pøíkazem `%s --help`.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Pou¾ití: %s [PØEPÍNAÈ]... [SOUBOR]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+" Povinné argumenty dlouhých pøepínaèù, jsou pro jejich krátké formy také\n"
+"povinné.\n"
+
+#: src/shar.c:1730
+#, fuzzy
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+" -m, --base64 pou¾ije kódování base64 odpovídající RFC1521\n"
+" --help vypí¹e tuto nápovìdu a skonèí\n"
+" --version vypí¹e oznaèení verze a skonèí\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Øízení obsahu hlavièek:\n"
+" -n, --archive-name=JMÉNO pou¾ije jako jméno archívu\n"
+" -s, --submitter=ADRESA pou¾ije jako adresu distributora\n"
+" -a, --net-headers do výstupu hlavièka Submitted-by: a Archive-"
+"name:\n"
+" -c, --cut-mark na zaèátek ka¾dého výstupního souboru pøidá\n"
+" øádek oznaèující zaèátek archívu (cut line)\n"
+"\n"
+"Výbìr toho, jak budou soubory ulo¾eny:\n"
+" -M, --mixed-uuencode automaticky se rozhodne, zda pou¾ít uuencode\n"
+" (implicitnì)\n"
+" -T, --text-files pokládá v¹echny soubory za textové\n"
+" -B, --uuencode pokládá v¹echny soubory za binární, pou¾ije\n"
+" uuencode\n"
+" -z, --gzip pou¾ije gzip a uuencode na v¹echny soubory\n"
+" -g, --level-for-gzip=ÚROVEÒ parametr -ÚROVEÒ (implicitnì 9) pro gzip\n"
+" -Z, --compress pou¾ije compress a uuencode na v¹echny "
+"soubory\n"
+" -b, --bits-per-code=BITS parametr -bBITS (implicitnì 12) pro compress\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Ochrana pøenosu:\n"
+" -w, --no-character-count nepou¾ívá 'wc -c' na testování velikosti\n"
+" -D, --no-md5-digest nepou¾ívá 'md5sum' pro ovìøení\n"
+" -F, --force-prefix pou¾ije pøedponový (prefix) znak na ka¾dé "
+"øádce\n"
+" -d, --here-delimiter=ØE«EZEC pou¾ije ØE«EZEC k oddìlení souborù v shar\n"
+" archívu\n"
+"\n"
+"Rùzné druhy shar archívù:\n"
+" -V, --vanilla-operation produkuje velmi jednoduchý shar archív, "
+"nenároèný\n"
+" na rozbalení (je tøeba sed a echo)\n"
+" -P, --no-piping pou¾ije doèasné soubory pøi rozbalování\n"
+" -x, --no-check-existing slepé pøepsání existujících souborù\n"
+" -X, --query-user ptá se u¾ivatele pøed pøepisováním souborù\n"
+" (neplatí pro sí»)\n"
+" -m, --no-timestamp neobnovuje èasy a datumy modifikace souboru\n"
+" -Q, --quiet-unshar nevypisuje zprávy pøi rozbalování\n"
+" -f, --basename rozbaluje do jednoho adresáøe, neuva¾uje\n"
+" adresáøovou struktùru\n"
+" --no-i18n neprodukuje internacializovaný shellový script\n"
+
+#: src/shar.c:1800
+#, fuzzy
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+" Pøepínaè -o je vy¾adován s -l nebo -L, pøepínaè -n je vy¾adován s -a.\n"
+"Pøepínaè -g zahrnuje -z, pøepínaè -b zahrnuje -Z.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr ""
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG nebyl nastaven pøi pøekladu"
+
+#: src/shar.c:1986
+#, fuzzy, c-format
+msgid "Hard limit %s\n"
+msgstr "Nepøekroèitelný limit %dk\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+
+#: src/shar.c:2061
+#, fuzzy, c-format
+msgid "Soft limit %s\n"
+msgstr "Pøekroèitelný limit %dk\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+" Copyright (C) %s Free Software Foundation, Inc.\n"
+" Toto je volné programové vybavení; podmínky pro kopírování a roz¹iøování\n"
+"naleznete ve zdrojových textech. Toto programové vybavení je zcela BEZ ZÁRUKY,\n"
+"a to i bez záruky PRODEJNOSTI nebo VHODNOSTI PRO NÌJAKÝ KONKRÉTNÍ ÚÈEL.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "UPOZORNÌNÍ: Bez interakce s u¾ivatelem v jednoduchém(vanilla) re¾imu"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "UPOZORNÌNÍ: pøepínaè pro netextové ukládání pøebit"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Vstupní soubory nejsou zadány"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Pøepínaè -a nelze pou¾ít bez -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "-l nebo -L nelze bez -o pou¾ít"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "PROSÍM, nepou¾ívejte -X soubory v USENETu nebo veøejných sítích"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Máte rozbalenu poslední èást"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Souborù vytvoøeno: %d\n"
+
+#: src/shar.c:2310
+#, fuzzy, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "adresáø pro zámky nelze vytvoøit"
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "adresáø pro zámky nelze vytvoøit"
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "V %s nebyly nalezeny ¾ádné pøíkazy pro shell"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s je pravdìpodobnì C kód, nikoli shellový archiv"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Nenalezeny pøíkazy pro shell po `cut` v %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s pravdìpodobnì není shellový archiv"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Øádek `cut` byl následován: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Startuji proces `sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+" Argumenty povinné v dlouhých formátech pøepínaèù, jsou povinné i pro "
+"jejich\n"
+"krátké formy.\n"
+"\n"
+" -d, --directory=ADRESÁØ aktuální adresáø pro zpracovávání\n"
+" -c, --overwrite vlo¾í -c pro shar na povolení pøepisu souborù\n"
+" -e, --exit-0 jako --split-at=\"exit 0\"'\n"
+" -E, --split-at=ØETÌZEC rozdìlí slo¾ený soubor shar po ØETÌZCI\n"
+" -f, --force jako `-c'\n"
+" --help vypí¹e tuto nápovìdu a skonèí\n"
+" --version vypí¹e oznaèení verze a skonèí\n"
+"\n"
+"Pokud SOUBOR nebude zadán, bude èten standardní vstup.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Adresáø nelze zmìnit na `%s`"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standardní vstup"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, fuzzy, c-format
+msgid "%s: Write error"
+msgstr "Chyba pøi zápisu"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Krátký soubor"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Chybí øádek `end`"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: data následující `=' jsou vyplòovací znaky"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: nepøípustný øádek"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Chybí øádek `begin`"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Nepøípustný ~u¾ivatel"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: U¾ivatel `%s' neexistuje"
+
+#: src/uudecode.c:390
+#, fuzzy, c-format
+msgid "cannot access %s"
+msgstr "Pro pøístup k %s chybí práva"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr ""
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr ""
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Otevírám `%s`"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Pou¾ití: %s [SOUBOR]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Povinné argumenty dlouhých formátù pøepínaèù, jsou závazné i pro krátké "
+"formy.\n"
+" -o, --output-file=SOUBOR výstup do souboru SOUBOR\n"
+" --help vypí¹e tuto nápovìdu a skonèí\n"
+" --version vypí¹e oznaèení verze a skonèí\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Chyba pøi zápisu"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Chyba pøi ètení"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Pou¾ití: %s [VSTUPNÍ_SOUBOR] VZDÁLENÝ_SOUBOR\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 pou¾ije kódování base64 odpovídající RFC1521\n"
+" --help vypí¹e tuto nápovìdu a skonèí\n"
+" --version vypí¹e oznaèení verze a skonèí\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Otevírám `%s`"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Zaèíná soubor %s\n"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Prosím, rozbalte èást"
+
+#~ msgid "next!"
+#~ msgstr "dal¹í!"
+
+#~ msgid "File"
+#~ msgstr "Soubor"
+
+#~ msgid "original size"
+#~ msgstr "pùvodní velikost"
+
+#~ msgid "current size"
+#~ msgstr "souèasná velikost"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Archívy musí být rozbaleny v poøadí!"
+
+#~ msgid "lock directory"
+#~ msgstr "adresáø pro zámky"
+
+#, fuzzy
+#~ msgid "created lock directory"
+#~ msgstr "adresáø pro zámky"
+
+#, fuzzy
+#~ msgid "created %s"
+#~ msgstr "vytvoøen"
+
+#, fuzzy
+#~ msgid "could not create %s"
+#~ msgstr "nelze vytvoøit"
+
+#~ msgid "restore of"
+#~ msgstr "obnovení"
+
+#~ msgid "failed"
+#~ msgstr "selhalo"
+
+#~ msgid "removed"
+#~ msgstr "smazán"
+
+#~ msgid "failed to remove"
+#~ msgstr "se nepovedlo smazat"
+
+#~ msgid "continue with part"
+#~ msgstr "pokraèování èástí"
+
+#~ msgid "End of"
+#~ msgstr "Konec"
+
+#~ msgid "part"
+#~ msgstr "èásti"
+
+#~ msgid ""
+#~ "\n"
+#~ "Giving feedback:\n"
+#~ " --help display this help and exit\n"
+#~ " --version output version information and exit\n"
+#~ " -q, --quiet, --silent do not output verbose messages locally\n"
+#~ "\n"
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ "\n"
+#~ "Splitting output:\n"
+#~ " -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=SIZE split archive, not files, to SIZE "
+#~ "kilobytes\n"
+#~ " -L, --split-size-limit=SIZE split archive, or files, to SIZE "
+#~ "kilobytes\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Výstup:\n"
+#~ " --help vypí¹e tuto nápovìdu a skonèí\n"
+#~ " --version vypí¹e oznaèení verze a skonèí\n"
+#~ " -q, --quiet, --silent doèasnì nevypisuje informace o tom, co dìlá\n"
+#~ "\n"
+#~ "Výbìr souborù:\n"
+#~ " -p, --intermix-type povolení -[BTzZ] v seznamu souborù na zmìnu "
+#~ "práv\n"
+#~ " -S, --stdin-file-list ète seznam souborù z stdin\n"
+#~ "\n"
+#~ "Rozdìlení výstupu:\n"
+#~ " -o, --output-prefix=PØEDPONA výstup do souboru PREFIX.01 a¾ PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=VELIKOST rozdìlí archív, nikoli soubory na "
+#~ "èásti\n"
+#~ " velikosti VELIKOST kilobajtù\n"
+#~ " -L, --split-size-limit=VELIKOST rozdìlí archiv nebo soubory na èásti\n"
+#~ " velikosti VELIKOST kilobajtù\n"
+
+#~ msgid "Report bugs to <bug-gnu-utils@prep.ai.mit.edu>.\n"
+#~ msgstr ""
+#~ " Chyby v programu oznamujte na adrese <bug-gnu-utils@prep.ai.mit.edu> "
+#~ "(pouze\n"
+#~ "anglicky), pøipomínky k pøekladu zasílejte na <cs@li.org> (èesky).\n"
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644
index 0000000..14ba150
--- /dev/null
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..3137b64
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,962 @@
+# Danish messages for sharutils
+# Copyright (C) 1996 Free Software Foundation, Inc.
+# Keld Simonsen <keld@dkuug.dk>, 2000-2003.
+# Jan Djærv <Jan.Djarv@mbox200.swipnet.se>, 1996.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.3.75\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2003-03-01 17:33:05+0100\n"
+"Last-Translator: Keld Simonsen <keld@dkuug.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Ukendt systemfejl"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: flaget \"%s\" er flertydigt\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: flaget \"--%s\" tillader ikke et argument\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: flaget \"%c%s\" tillader ikke et argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: flaget \"%s\" behøver et argument\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ukendt flag \"--%s\"\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ukendt flag \"%c%s\"\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ulovligt flag -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ugyldigt flag -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flaget behøver et argument -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: flaget '-W %s' er flertydigt\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: flaget '-W -%s' tillader ikke et argument\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "Løbet tør for hukommelse"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+"ADVARSEL: Tidsinformation for filer genskabes ikke. Overvej at skaffe og "
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "installere GNUs \"touch\" som følger med GNU File Utilities..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "det mislykkedes at oprette låsekatalog"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "det mislykkedes at oprette låsekatalog"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "det mislykkedes at oprette låsekatalog"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "overskriv"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "overskriv"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "overskriv"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Kan ikke generere mkdir-kommandoer for så mange kataloger"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "det mislykkedes at oprette låsekatalog"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Kan ikke få adgang til %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C er forældet, brug -Z i stedet"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Kan ikke få fat på navnet på aktuelt katalog"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Ny fil, resterende %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Begrænsningen er stadig %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "gendannelse af"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "fortsæt med arkivdel"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Begynder på fil %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Ikke en normal fil"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "I shar: resterende størrelse %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "tom"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(tom)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Filen %s kunne ikke åbnes"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "komprimeret"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gzip-komprimeret"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "bzip-komprimeret"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binær"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(komprimeret)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gzip-komprimeret)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(bzip-komprimeret)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binær)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Kunne ikke fraspalte ny proces"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Fil %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "tekst"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(tekst)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "overskriver"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "overskriv"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "OVERSPRINGER"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "udtræk afbrydes"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(filen findes allerede)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Gemmer %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "udtrækker"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "gendannelse af"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "fortsæt med arkivdel"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "Slut på arkivdel"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "arkiv"
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "fortsætter i arkivdel"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Vær venlig at udpakke arkivdel 1 først!"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Vær venlig at udpakke arkivdel 1 først!"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "FORTSÆTTER MED AT OVERSPRINGE"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "fortsætter med fil"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "er færdig"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "uuafkoder fil"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "udpakker fil"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "gunzipper fil"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "bunzipper fil"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5-kontrollen mislykkedes"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Åbner \"%s\""
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Lukker \"%s\""
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv med \"%s --help\" for yderligere information.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Brug: %s [FLAG]... [FIL]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Obligatoriske argumenter for lange flag er også obligatoriske for korte "
+"flag.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Giver tilbagemeldinger:\n"
+" -h, --help vis denne hjælpetekst og afslut\n"
+" -v, --version vis versionsinformation og afslut\n"
+" -q, --quiet, --silent udskriv ikke udførlige beskeder lokalt\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Udvælgelse af filer:\n"
+" -p, --intermix-type tillad -[BTzZ] i fillister at ændre tilstand\n"
+" -S, --stdin-file-list læs filliste fra standard-ind\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Udvælgelse af filer:\n"
+" -p, --intermix-type tillad -[BTz] i fillister at ændre tilstand\n"
+" -S, --stdin-file-list læs filliste fra standard-ind\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PRÆFIKS udskriv på filerne PRÆFIKS.01 til PRÆFIKS."
+"NN\n"
+" -l, --whole-size-limit=STØRR opsplit arkiv, ikke filer, i STØRR kilobyte\n"
+" -L, --split-size-limit=STØRR opsplit arkiv eller filer i STØRR kilobyte\n"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Kontrol af felter i arkivhovedet:\n"
+" -n, --archive-name=NAVN brug NAVN for at dokumentere arkivet\n"
+" -s, --submitter=ADRESSE angiv eksplicit adresse for arkiv-skaberen\n"
+" -a, --net-headers indsæt Submitted-by: og Archive-name:\n"
+" -c, --cut-mark begynd arkivet med en linje til afskæring\n"
+"\n"
+"Kontrol af hvordan filer gemmes:\n"
+" -M, --mixed-uuencode afgør dynamisk om uuencode behøves\n"
+" (standardværdi: på)\n"
+" -T, --text-files behandl alle filer som tekst\n"
+" -B, --uuencode behandl alle filer som binære data,\n"
+" brug uuencode\n"
+" -z, --gzip kør gzip og uuencode på alle filer\n"
+" -g, --level-for-gzip=NIVEAU giv flaget -NIVEAU til gzip\n"
+" (standardværdi: 9)\n"
+" -j, --bzip2 bzip2 og uuencode alle filer\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress kør compress og uuencode på alle filer\n"
+" -b, --bits-per-code=BIT giv flaget -bBIT til compress\n"
+" (standardværdi: 12)\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Beskyttelse mod overførselsfejl:\n"
+" -w, --no-character-count brug ikke \"wc -c\" for at tjekke "
+"størrelsen\n"
+" -D, --no-md5-digest brug ikke \"md5sum\" til kontrol\n"
+" -F, --force-prefix skriv præfikstegnet på alle linjer\n"
+" -d, --here-delimiter=STRENG adskil filer i arkivet med STRENG\n"
+"\n"
+"Forskellige typer af skal-arkiver:\n"
+" -V, --vanilla-operation lav simple arkiver som bruger få kommandoer\n"
+" -P, --no-piping brug kun midlertidige filer ved udpakning\n"
+" -x, --no-check-existing overskriv eksisterende filer ved udpakning\n"
+" -X, --query-user spørg bruger om filer skal overskrives\n"
+" (ikke for arkiver til nettet)\n"
+" -m, --no-timestamp genskab ikke filers ændringstid\n"
+" -Q, --quiet-unshar undgå snakkesalige beskeder ved udpakning\n"
+" -f, --basename udpak filer i ét katalog, uden hierarki\n"
+" --no-i18n opret ikke internationaliserede skalarkiver\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Flaget -o kræves sammen med -l eller -L, flaget -n kræves sammen med -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "Flaget -g medfører -z, flaget -b medfører -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Flaget -g medfører -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Rapportér fejl til <%s>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG var ikke valgt da programmet oversattes"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Hård begrænsning på %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Dette system understøtter ikke -Z ('compress'), brug -z i stedet"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Blød begrænsning på %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Dette er frit programmel; se kildeteksten for kopieringsvilkår. Der gives\n"
+"INGEN garanti; ikke engang for SALGBARHED eller ANVENDELIGHED FOR NOGET SPECIELT\n"
+"FORMÅL.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ADVARSEL: Ingen brugerinteraktion i \"vanilla\"-tilstand"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ADVARSEL: Gemningsflag for ikke-tekst tilsidesat"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Ingen indfiler"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Flaget -a kan ikke bruges uden -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Flaget -l eller -L kan ikke bruges uden -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"Undgå venligst -X for skalarkiver som skal til Usenet eller offentlige "
+"netværk"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Du har udpakket den sidste arkivdel"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Oprettede %d filer\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "det mislykkedes at oprette låsekatalog"
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Fandt ingen skalkommandoer i %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s ser ud som rå C-kode, ikke som et skalarkiv"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Fandt ingen skalkommandoer efter skæringslinje i %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s er formodentlig ikke et skalarkiv"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Skæringslinjen efterfulgtes af: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Starter en skalproces"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Obligatoriske argumenter for lange flag er også obligatoriske for korte "
+"flag.\n"
+"\n"
+" -d, --directory=KATALOG gå til KATALOG før udpakning\n"
+" -c, --overwrite giv -c flaget til arkivet for overskrivning\n"
+" -e, --exit-0 det samme som `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRENG opdel sammenlagte arkiver efter STRENG\n"
+" -f, --force det samme som \"-c\"\n"
+" --help vis denne hjælpetekst og afslut\n"
+" --version vis versionsinformation og afslut\n"
+"\n"
+"Hvis ingen FIL angives så læses standard ind.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Kan ikke gå til katalog \"%s\""
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standard ind"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Skrivefejl"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Afkortet fil"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: \"end\"-linje savnes"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: det findes data efter udfyldningstegnet \"=\" "
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: fejlagtig linje"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: \"begin\"-linje savnes"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Ugyldig ~user"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Der findes ingen bruger \"%s\""
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "kan ikke få adgang til %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "nægtede skrivning af FIFO (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "følger ikke symlænke (%s)"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Åbner \"%s\""
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Brug: %s [FIL]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Obligatoriske argumenter for lange flag er også obligatoriske for korte "
+"flag.\n"
+" -o, --output-file=FIL skriv resultatet til FIL\n"
+" -h, --help vis denne hjælpetekst og afslut\n"
+" -v, --version vis versionsinformation og afslut\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Skrivefejl"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Fejl ved læsning"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Brug: %s [LOKAL_FIL] IKKE_LOKAL_FIL\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 brug base64-kodning ifølge RFC1521\n"
+" -h, --help vis denne hjælpetekst og afslut\n"
+" -v, --version vis versionsinformation og afslut\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Åbner \"%s\""
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Begynder på fil %s\n"
+
+#~ msgid "lock directory"
+#~ msgstr "låsekatalog"
+
+#~ msgid "created"
+#~ msgstr "oprettet"
+
+#~ msgid "failed to create"
+#~ msgstr "det mislykkedes at oprette"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Arkivdele skal udpakkes i rette orden!"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Vær venlig at udpakke arkivdel"
+
+#~ msgid "next!"
+#~ msgstr "næste!"
+
+#~ msgid "failed"
+#~ msgstr "mislykkedes"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[nej (n), ja (y), alle (a), afslut (q)] (nej)?"
+
+#~ msgid "End of"
+#~ msgstr "Slut på"
+
+#~ msgid "part"
+#~ msgstr "del"
+
+#~ msgid "File"
+#~ msgstr "Fil"
+
+#~ msgid "original size"
+#~ msgstr "oprindelig størrelse"
+
+#~ msgid "current size"
+#~ msgstr "aktuel størrelse"
+
+#~ msgid "removed"
+#~ msgstr "fjernet"
+
+#~ msgid "failed to remove"
+#~ msgstr "kunne ikke fjerne"
+
+#~ msgid ""
+#~ "\n"
+#~ "Giving feedback:\n"
+#~ " --help display this help and exit\n"
+#~ " --version output version information and exit\n"
+#~ " -q, --quiet, --silent do not output verbose messages locally\n"
+#~ "\n"
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ "\n"
+#~ "Splitting output:\n"
+#~ " -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=SIZE split archive, not files, to SIZE "
+#~ "kilobytes\n"
+#~ " -L, --split-size-limit=SIZE split archive, or files, to SIZE "
+#~ "kilobytes\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Vælg information:\n"
+#~ " --help vis denne hjælpetekst og afslut\n"
+#~ " --version vis versionsinformation og afslut\n"
+#~ " -q, --quiet, --silent brug ikke snakkesalige beskeder lokalt\n"
+#~ "\n"
+#~ "Vælg filer:\n"
+#~ " -p, --intermix-type tillad -[BTzZ] i fil-lister for at ændre "
+#~ "tilstand\n"
+#~ " -S, --stdin-file-list læs fil-liste fra standard ind\n"
+#~ "\n"
+#~ "Opdel arkivet:\n"
+#~ " -o, --output-prefix=PRÆFIKS lav filerne PRÆFIKS.01 til PRÆFIKS."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=STØRRELSE opdel arkivet i STØRRELSE kbyte "
+#~ "stykker,\n"
+#~ " individuelle filer opdeles ikke\n"
+#~ " -L, --split-size-limit=STØRRELSE som ovenfor, individuelle filer "
+#~ "opdeles\n"
+
+#~ msgid "Report bugs to <bug-gnu-utils@prep.ai.mit.edu>.\n"
+#~ msgstr "Rapportér fejl til <bug-gnu-utils@prep.ai.mit.edu>.\n"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644
index 0000000..ea391a1
--- /dev/null
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..95f22eb
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,934 @@
+# German translations for GNU sharutils package.
+# Copyright © 1995, 1996, 2002, 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+# Karl Eichwalder <ke@suse.de>, 2002, 2006.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995-1996.
+#
+# Todo:
+# Fix quotes: `...' -> »...«
+# use infinitive form (Hilfe anzeigen, instead of zeige Hilfe an)
+#
+# lock dir - Sperrverzeichnis
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-20 07:19+0200\n"
+"Last-Translator: Karl Eichwalder <ke@suse.de>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "unbekannter Systemfehler"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: Option `%s' ist mehrdeutig\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: Option `--%s' erwartet kein Argument\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: Option `%c%s' erwartet kein Argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: Option `%s' erwartet ein Argument\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: unbekannte Option `--%s'\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: unbekannte Option `%c%s'\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: unzulässige Option -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ungültige Option -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: Option erwartet ein Argument -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: Option »-W %s« ist mehrdeutig\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: Option »-W %s« erwartet kein Argument\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "Speicher erschöpft"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Hinweis: Prüfsummen (md5sum) werden nicht verifiziert.\n"
+" Dafür ist die Installing von GNU coreutils erforderlich."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "WARNUNG: Zeitstempel der Datei wird nicht richtig gesetzt. Vielleicht"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "wollen Sie sich GNU \\`touch' aus den GNU File Utilities besorgen..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "Sperrverzeichnis »${lock_dir}« ist vorhanden"
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "Sperrverzeichnis konnte nicht angelegt werden"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "Sperrverzeichnis konnte nicht angelegt werden"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "Sperrverzeichnis konnte nicht angelegt werden"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "ja"
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "überschreibe"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "nein"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "diese Datei überspringen"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "alle"
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "überschreibe"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "keine"
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "überschreibe"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "Hilfe"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "Möglichkeiten erklären"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Zuviele Verzeichnisse für das Anlegen von Verzeichnissen mit \"mkdir\""
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - Verzeichnis `%s'\\'' wurde angelegt."
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "Sperrverzeichnis konnte nicht angelegt werden"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Auf %s kann nicht zugegriffen werden"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "von -C wird abgeraten, verwenden Sie -Z stattdessen"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr ""
+"Es ist nicht möglich, den Namen des aktuellen Verzeichnisses zu ermitteln"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Neue Datei, es verbleiben %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Größe immer noch %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "Wiederherstellung von"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Fortsetzung mit Teil"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Beginn mit Datei %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Keine reguläre Datei"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "In shar: verbleibende Größe %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "leer"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(Leer)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Datei %s kann nicht geöffnet"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "komprimiert"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "mit »gzip« erstellt"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "mit »bzip2« erstellt"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binär"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(mit »compress« komprimiert)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(mit `gzip' komprimiert)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(mit »bzip2« komprimiert)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(Binär)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "fork'en nicht möglich"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Datei %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "Text"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(Text)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "überschreibe"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "überschreibe"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "ÃœBERSPRINGE"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "Herausholen abgebrochen"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(Datei existiert bereits)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Speichere %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "packe aus"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "Wiederherstellung von"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Fortsetzung mit Teil"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "Ende von Teil"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "Archiv"
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "wird fortgesetzt in Teil"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Bitte packen Sie zuerst Teil 1 aus!"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Bitte packen Sie zuerst Teil 1 aus!"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "ÃœBERSPRINGE IMMER NOCH"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "setze fort Datei"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "ist vollständig"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "Dekodiere mit `uudecode' Datei"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "Datei wird mit »uncompress« dekomprimiert"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "Datei wird mit »gunzip« dekomprimiert"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "Datei wird mit »bunzip2« dekomprimiert"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5-Test fehlgeschlagen"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Öffne `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Schließe `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "`%s --help' gibt weitere Informationen.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Aufruf: %s [OPTION]... [DATEI]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Notwendige Argumente für Optionen in Langform sind auch für die in\n"
+"Kurzform notwendig.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Programminformationen:\n"
+" --help diese Hilfe anzeigen und beenden\n"
+" --version Versionsnummer anzeigen und beenden\n"
+" -q, --quiet, --silent keine ausführliche Ausgabe\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Auswahl von Dateien:\n"
+" -p, --intermix-type -[BTzZ] in Dateilisten erlauben, um Modus zu "
+"ändern\n"
+" -S, --stdin-file-list Dateiliste von der Standard-Eingabe lesen\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Auswahl von Dateien:\n"
+" -p, --intermix-type -[BTz] in Dateilisten erlauben, um Modus zu "
+"ändern\n"
+" -S, --stdin-file-list Dateiliste von der Standard-Eingabe lesen\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Unterteilung der Ausgabe:\n"
+" -o, --output-prefix=PRÄFIX in Dateien PRÄFIX.01 bis PRÄFIX.NN "
+"ausgeben\n"
+" -l, --whole-size-limit=GRÖSSE Archiv, nicht Dateien, in GRÖSSE KB\n"
+" unterteilen\n"
+" -L, --split-size-limit=GRÖSSE Archiv oder Dateien in GRÖSSE KB "
+"unterteilen\n"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Kontrolle des Shar-Kopfes:\n"
+" -n, --archive-name=NAME Archiv mit NAME benennen\n"
+" -s, --submitter=ADRESSE Namen des Senders überschreiben\n"
+" -a, --net-headers Submitted-by: und Archive-name: ausgeben\n"
+" -c, --cut-mark shar mit einer Trennlinie starten\n"
+"\n"
+"Wie Dateien behandelt werden:\n"
+" -M, --mixed-uuencode geeignete Kodierung selbst wählen (Vorgabe)\n"
+" -T, --text-files alle Dateien als Text ansehen\n"
+" -B, --uuencode alle Dateien als binäre Daten ansehen, "
+"uuencode\n"
+" verwenden\n"
+" -z, --gzip gzip und uuencode für alle Dateien "
+"verwenden\n"
+" -g, --level-for-gzip=STUFE gzip mit -STUFE (Standard: 9) aufrufen\n"
+" -j, --bzip2 bzip2 und uuencode für alle Dateien "
+"verwenden\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress compress und uuencode für alle Dateien "
+"nehmen\n"
+" -b, --bits-per-code=BITS compress mit -BITS (Vorgabe: 12) aufrufen\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Sicherheit bei der Ãœbertragung:\n"
+" -w, --no-character-count Größe nicht mit `wc -c' prüfen\n"
+" -D, --no-md5-digest nicht mit `md5sum' prüfen\n"
+" -F, --force-prefix Präfix-Zeichen jeder Zeile "
+"voranstellen\n"
+" -d, --here-delimiter=ZEICHENKETTE ZEICHENKETTE zur Dateiabgrenzung "
+"nehmen\n"
+"\n"
+"Produziere verschiedene Arten von Shars:\n"
+" -V, --vanilla-operation ganz einfache und genügsame Shars produzieren\n"
+" -P, --no-piping temporäre Dateien bei unshar anlegen\n"
+" -x, --no-check-existing vorhandene Datei ohne Warnung überschreiben\n"
+" -X, --query-user Benutzer vor Überschreiben fragen (nicht für "
+"Netz)\n"
+" -m, --no-timestamp Datei-Änderungszeit/-datum nicht wieder "
+"herstellen\n"
+" -Q, --quiet-unshar keine ausführlichen Meldungen bei unshar\n"
+" -f, --basename Verzeichnis anlegen, aber keine "
+"Unterverzeichnisse\n"
+" --no-i18n kein internationalisiertes Shell-Archiv "
+"erzeugen\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Option -o ist notwendig für -l oder -L, Option -n ist notwendig für -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "Option -g inbegriffen -z, Option -b impliziert -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Option -g inbegriffen -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Fehler bitte an <%s> melden.\n"
+"Für die deutsche Übersetzung ist die Mailingliste <de@li.org> zuständig.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG wurde zur Ãœbersetzungszeit nicht angegeben"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Festes Limit %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+"Dieses System unterstützt -Z (»compress«) nicht, verwenden Sie\n"
+"stattdessen -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Weiches Limit %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "Ungültiges Ausgabeprefix\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright © %s Free Software Foundation, Inc.\n"
+"Dies ist freie Software; in den Quellen befindet sich die Lizensbedingung.\n"
+"Es gibt KEINERLEI Garantie, nicht einmal für die TAUGLICHKEIT oder\n"
+"die VERWENDBARKEIT ZU EINEM ANGEGEBENEN ZWECK.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ACHTUNG: keine Benutzer-Eingabe im `vanilla'-Modus"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ACHTUNG: Non-Text Speicher-Option überschrieben"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Keine Eingabe-Dateien"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Option -a kann nicht ohne -n verwendet werden"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Die Optionen -l und -L können nicht ohne -o verwendet werden"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "BITTE -X shars im Usenet oder öffentlichen Netzwerken vermeiden"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Sie haben den letzten Teil ausgepackt"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "%d Datei(en) erzeugt\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "Sperrverzeichnis konnte nicht angelegt werden"
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Habe in %s keine Shell-Kommandos gefunden"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s sieht wie reiner C Code aus, nicht wie ein Shell-Archiv"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Habe keine Shell-Kommandos nach `cut' in %s gefunden"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s ist wahrscheinlich kein Shell-Archiv"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Nach der »cut«-Zeile kam: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "»sh«-Prozeß wird gestartet"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Notwendige Argumente für Optionen in Langform sind auch für die\n"
+"Kurzform notwendig.\n"
+"\n"
+" -d, --directory=VERZEICHNIS vor Auspacken ins Verzeichnis VERZEICHNIS "
+"gehen\n"
+" -c, --overwrite Option -c an shar-Skripte zum Ãœberschreiben "
+"von\n"
+" Dateien weitergeben\n"
+" -e, --exit-0 dasselbe wie »--split-at=\"exit 0\"«\n"
+" -E, --split-at=STRING aneinanderhängende shars bei STRING teilen\n"
+" -f, --force dasselbe wie »-c«\n"
+" --help diese Meldung anzeigen und beenden\n"
+" --version die Versionsnummer anzeigen und beenden\n"
+"\n"
+"Wenn keine DATEI angegeben wird von stdin gelesen.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "chdir auf Verzeichnis `%s' nicht möglich"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "Standard-Eingabe"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Schreibfehler"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: zu kurze Datei"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Zeile mit `end' fehlt"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: weitere Daten nach `=' Füllzeichen"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: ungültige Zeile"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Zeile mit `begin' fehlt"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Illegaler ~Benutzer"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Benutzer `%s' existiert nicht"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "Auf %s kann nicht zugegriffen werden"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "Das Schreiben auf den (%s) wurde verweigert"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "Der Verknüpfung (Symlink) (%s) wurde nicht gefolgt"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Wiederherstellung von"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Aufruf: %s [Dateien]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Notwendige Argumente für Optionen in Langform sind auch für die\n"
+"Kurzform notwendig.\n"
+" -o, --output-file=DATEI Ausgabe in DATEI umleiten\n"
+" --help diese Hilfe anzeigen und beenden\n"
+" --version Versionsnummer anzeigen und beenden\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Schreibfehler"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Lesefehler"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Aufruf: %s [EINGABE_DATEI] AUSGABE_DATEI\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 Base64-Kodierung verwenden (vgl. RFC1521)\n"
+" --help diese Hilfe anzeigen und beenden\n"
+" --version Versionsnummer anzeigen und beenden\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Öffne `%s'"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Beginn mit Datei %s\n"
+
+#~ msgid "lock directory"
+#~ msgstr "Sperrverzeichnis"
+
+#~ msgid "created"
+#~ msgstr "wurde angelegt"
+
+#~ msgid "failed to create"
+#~ msgstr "konnte nicht angelegt werden"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Archiv muss in der richtigen Reihenfolge ausgepackt werden!"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Bitte als nächsten Teil"
+
+#~ msgid "next!"
+#~ msgstr "auspacken!"
+
+#~ msgid "failed"
+#~ msgstr "ist fehlgeschlagen"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[nein (n), ja (y), alle (a), Ende (q)] (nein)?"
+
+#~ msgid "original size"
+#~ msgstr "ursprüngliche Größe"
+
+#~ msgid "current size"
+#~ msgstr "jetzige Größe"
+
+#~ msgid "removed"
+#~ msgstr "gelöscht"
+
+#~ msgid "failed to remove"
+#~ msgstr "konnte nicht entfernt werden"
diff --git a/po/el.gmo b/po/el.gmo
new file mode 100644
index 0000000..6c9fcfc
--- /dev/null
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..6b95d37
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,1278 @@
+# Greek messages for GNU sharutils.
+# Copyright © 1998 Free Software Foundation, Inc.
+# Simos KSenitellis <simos@teiath.gr>, 1998.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU sharutils 4.2\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 1998-06-20 18:03+0200\n"
+"Last-Translator: Simos KSenitellis <simos@teiath.gr>\n"
+"Language-Team: Greek <simos@teiath.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-7\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#
+# File: lib/error.c, line: 91
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "¶ãíùóôï óöÜëìá óõóôÞìáôïò"
+
+#
+# File: lib/getopt.c, line: 583
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ç åðéëïãÞ `%s' åßíáé äéöïñïýìåíç\n"
+
+#
+# File: lib/getopt.c, line: 607
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ç åðéëïãÞ `--%s' äå äÝ÷åôáé üñéóìá\n"
+
+#
+# File: lib/getopt.c, line: 612
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ç åðéëïãÞ `%c%s' äå äÝ÷åôáé üñéóìá\n"
+
+#
+# File: lib/getopt.c, line: 629
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ç åðéëïãÞ `%s' áðáéôåß üñéóìá\n"
+
+#
+# File: lib/getopt.c, line: 658
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ìç áíáãíùñßóéìç åðéëïãÞ `--%s'\n"
+
+#
+# File: lib/getopt.c, line: 662
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ìç áíáãíùñßóéìç åðéëïãÞ `%c%s'\n"
+
+#
+# File: lib/getopt.c, line: 688
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ìç áðïäåêôÞ åðéëïãÞ -- %c\n"
+
+#
+# File: lib/getopt.c, line: 691
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ìç Ýãêõñç åðéëïãÞ -- %c\n"
+
+#
+# File: lib/getopt.c, line: 727
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ç åðéëïãÞ áðáéôåß üñéóìá -- %c\n"
+
+#
+# File: lib/getopt.c, line: 583
+#: lib/getopt.c:881
+#, fuzzy, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ç åðéëïãÞ `%s' åßíáé äéöïñïýìåíç\n"
+
+#
+# File: lib/getopt.c, line: 607
+#: lib/getopt.c:899
+#, fuzzy, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ç åðéëïãÞ `--%s' äå äÝ÷åôáé üñéóìá\n"
+
+#
+# File: lib/xmalloc.c, line: 82
+#: lib/xmalloc.c:67
+#, fuzzy
+msgid "memory exhausted"
+msgstr "Ç ìíÞìç åîáíôëÞèçêå"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+
+#
+# File: src/shar.c, line: 573
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: äåí åðáíáöÝñïíôáé ïé çìåñïìçíßåò ôùí áñ÷åßùí."
+
+#
+# File: src/shar.c, line: 575
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+"ÅãêáôáóôÞóôå ôçí GNU \\`touch', ðïõ äéáôßèåôáé ìå ôá GNU File Utilities..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#
+# File: src/shar.c, line: 586
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "äåí Þôáí äõíáôÞ ç äçìéïõñãßá êáôáëüãïõ êëåéäþìáôïò"
+
+#
+# File: src/shar.c, line: 586
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "äåí Þôáí äõíáôÞ ç äçìéïõñãßá êáôáëüãïõ êëåéäþìáôïò"
+
+#
+# File: src/shar.c, line: 586
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "äåí Þôáí äõíáôÞ ç äçìéïõñãßá êáôáëüãïõ êëåéäþìáôïò"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1180
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "áíôéãñáöÞ áðü ðÜíù"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1180
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "áíôéãñáöÞ áðü ðÜíù"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1180
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "áíôéãñáöÞ áðü ðÜíù"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#
+# File: src/shar.c, line: 627
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "ÐÜñá ðïëëïß êáôÜëïãïé ãéá ÷ñÞóç ôçò mkdir"
+
+#
+#: src/shar.c:737
+#, fuzzy, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "äçìéïõñãßá êáôáëüãïõ"
+
+#
+# File: src/shar.c, line: 586
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "äåí Þôáí äõíáôÞ ç äçìéïõñãßá êáôáëüãïõ êëåéäþìáôïò"
+
+#
+# File: src/shar.c, line: 687
+# File: src/shar.c, line: 914
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Áäõíáìßá ðñüóâáóçò óôï %s"
+
+#
+# File: src/shar.c, line: 740
+# File: src/shar.c, line: 1876
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "ôï -C äåí óõíßóôáôáé ðéá, ÷ñçóéìïðïéÞóôå -Z"
+
+#
+# File: src/shar.c, line: 793
+# File: src/unshar.c, line: 367
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Áäõíáìßá åýñåóçò ôïõ ïíüìáôïò ôïõ ôñÝ÷ïíôïò êáôáëüãïõ"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#
+# File: src/shar.c, line: 935
+# File: src/shar.c, line: 1319
+#: src/shar.c:976 src/shar.c:1383
+#, fuzzy, c-format
+msgid "New file, remaining %s, "
+msgstr "ÍÝï áñ÷åßï, áðïìÝíïõí %ld, "
+
+#
+# File: src/shar.c, line: 936
+# File: src/shar.c, line: 1320
+#: src/shar.c:977 src/shar.c:1384
+#, fuzzy, c-format
+msgid "Limit still %s\n"
+msgstr "Ôï üñéï åßíáé áêüìá %d\n"
+
+#
+# File: src/shar.c, line: 952
+# File: src/shar.c, line: 1329
+# File: src/shar.c, line: 1518
+# File: src/shar.c, line: 1536
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "åðáíÜêôçóç ôïõ"
+
+#
+# File: src/shar.c, line: 954
+# File: src/shar.c, line: 1340
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "óõíÝ÷åéá ìå ôìÞìá"
+
+#
+# File: src/shar.c, line: 967
+# File: src/shar.c, line: 1430
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Áñ÷Þ áñ÷åßïõ %s\n"
+
+#
+# File: src/shar.c, line: 909
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#
+# File: src/shar.c, line: 924
+#: src/shar.c:1067
+#, fuzzy, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "Óôï shar: åíáðïìåßíïí ìÝãåèïò %ld\n"
+
+#
+# File: src/shar.c, line: 1002
+#: src/shar.c:1086
+msgid "empty"
+msgstr "êåíü"
+
+#
+# File: src/shar.c, line: 1003
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(êÝíï)"
+
+#
+# File: src/shar.c, line: 1027
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Äåí åßíáé äõíáôü ôï Üíïéãìá ôïõ áñ÷åßïõ %s"
+
+#
+# File: src/shar.c, line: 1064
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "óõìðéåóìÝíï"
+
+#
+# File: src/shar.c, line: 1065
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "óõìðéåóìÝíï ìå gzip"
+
+#
+# File: src/shar.c, line: 1065
+#: src/shar.c:1150
+#, fuzzy
+msgid "bzipped"
+msgstr "óõìðéåóìÝíï ìå gzip"
+
+#
+# File: src/shar.c, line: 1065
+#: src/shar.c:1151
+msgid "binary"
+msgstr "äõáäéêü"
+
+#
+# File: src/shar.c, line: 1066
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(óõìðéåóìÝíï)"
+
+#
+# File: src/shar.c, line: 1067
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(óõìðéåóìÝíï ìå gzip)"
+
+#
+# File: src/shar.c, line: 1067
+#: src/shar.c:1154
+#, fuzzy
+msgid "(bzipped)"
+msgstr "(óõìðéåóìÝíï ìå gzip)"
+
+#
+# File: src/shar.c, line: 1068
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(äõáäéêü)"
+
+#
+# File: src/shar.c, line: 1081
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Áäõíáìßá åêôÝëåóçò äéêñÜíùóçò"
+
+#
+# File: src/shar.c, line: 1086
+# File: src/shar.c, line: 1138
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Áñ÷åßï %s (%s)"
+
+#
+# File: src/shar.c, line: 1132
+#: src/shar.c:1227
+msgid "text"
+msgstr "êåßìåíï"
+
+#
+# File: src/shar.c, line: 1133
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(êåßìåíï)"
+
+#
+# File: src/shar.c, line: 1179
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "áíôéãñÜöåôáé áðü ðÜíù"
+
+#
+# File: src/shar.c, line: 1180
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "áíôéãñáöÞ áðü ðÜíù"
+
+#
+# File: src/shar.c, line: 1183
+# File: src/shar.c, line: 1188
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "ÐÑÏÓÐÅÑÁÓÌÁ"
+
+#
+# File: src/shar.c, line: 1182
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "ç åîáãùãÞ äéáêüðçêå áíþìáëá"
+
+#
+# File: src/shar.c, line: 1188
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(ôï áñ÷åßï Þäç õðÜñ÷åé)"
+
+#
+# File: src/shar.c, line: 1206
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "ÁðïèÞêåõóç ôïõ %s (%s)"
+
+#
+# File: src/shar.c, line: 1211
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "äéáäéêáóßá åîáãùãÞò"
+
+#
+# File: src/shar.c, line: 952
+# File: src/shar.c, line: 1329
+# File: src/shar.c, line: 1518
+# File: src/shar.c, line: 1536
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "åðáíÜêôçóç ôïõ"
+
+#
+# File: src/shar.c, line: 954
+# File: src/shar.c, line: 1340
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "óõíÝ÷åéá ìå ôìÞìá"
+
+#
+# File: src/shar.c, line: 953
+# File: src/shar.c, line: 1339
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "ÔÝëïò ôìÞìáôïò"
+
+#
+# File: src/shar.c, line: 1346
+#: src/shar.c:1408
+msgid "archive"
+msgstr "áñ÷åßï"
+
+#
+# File: src/shar.c, line: 1350
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "óõíå÷ßæåôáé óôï ôìÞìá"
+
+#
+# File: src/shar.c, line: 1410
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Ðáñáêáëþ áíáäéðëþóôå ôï ôìÞìá 1 ðñþôá!"
+
+#
+# File: src/shar.c, line: 1410
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Ðáñáêáëþ áíáäéðëþóôå ôï ôìÞìá 1 ðñþôá!"
+
+#
+# File: src/shar.c, line: 1427
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "ÁÊÏÌÁ ÐÑÏÓÐÅÑÍÏÍÔÁÉ"
+
+#
+# File: src/shar.c, line: 1434
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "óõíÝ÷åéá óôï áñ÷åßï"
+
+#
+# File: src/shar.c, line: 1455
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "åßíáé ðëÞñåò"
+
+#
+# File: src/shar.c, line: 1464
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "äéáäéêáóßá uudecode óôï áñ÷åßï"
+
+#
+# File: src/shar.c, line: 1478
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "áðïóõìðßåóç áñ÷åßïõ"
+
+#
+# File: src/shar.c, line: 1489
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "áðïóõìðßåóç áñ÷åßïõ ìå gunzip"
+
+#
+# File: src/shar.c, line: 1489
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "áðïóõìðßåóç áñ÷åßïõ ìå gunzip"
+
+#
+# File: src/shar.c, line: 1552
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "Áðïôõ÷ßá åëÝã÷ïõ ìå MD5"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1647
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "¶íïéãìá ôïõ `%s'"
+
+#
+# File: src/shar.c, line: 1658
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Êëåßóéìï ôïõ `%s'"
+
+#
+# File: src/shar.c, line: 1670
+# File: src/unshar.c, line: 302
+# File: src/uudecode.c, line: 370
+# File: src/uuencode.c, line: 211
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "ÄïêéìÜóôå `%s --help' ãéá ðåñéóóüôåñåò ðëçñïöïñßåò.\n"
+
+#
+# File: src/shar.c, line: 1674
+# File: src/unshar.c, line: 306
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "×ñÞóç: %s [ÅÐÉËÏÃÇ]... [ÁÑ×ÅÉÏ]...\n"
+
+#
+# File: src/shar.c, line: 1675
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Ïé õðï÷ñåùôéêïß ðáñÜìåôñïé óôá ðåñéöñáóôéêÜ ïñßóìáôá åßíáé õðï÷ñåùôéêïß\n"
+"êáé ãéá ôá óýíôïìá ïñßóìáôá.\n"
+
+#
+# File: src/uuencode.c, line: 216
+#: src/shar.c:1730
+#, fuzzy
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+" -m, --base64 ÷ñÞóç êùäéêïðïßçóçò base64 êáôÜ ôï RFC1521\n"
+" --help åìöÜíéóç áõôÞò ôçò âïÞèåéáò êáé Ýîïäïò\n"
+" --version åìöÜíéóç ðëçñïöïñéþí Ýêäïóçò ðñïãñÜììáôïò êáé Ýîïäïò\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1694
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"¸ëåã÷ïò ôùí êåöáëßäùí shar:\n"
+" -n, --archive-name=ONOMA ÷ñÞóç ôïõ ÏÍÏÌÁ ãéá üíïìá áñ÷åßïõ\n"
+" -s, --submitter=ÄÉÅÕÈÕÍÓÇ ðáñÜêáìøç ôïõ ïíüìáôïò ôïõ áðïóôïëÝá\n"
+" -a, --net-headers ÷ñÞóç Submitted-by: êáé Archive-name: êåöáëßäùí\n"
+" -c, --cut-mark áñ÷Þ ôïõ shar ìå ãñáììÞ äéáêïðÞò\n"
+"\n"
+"ÅðéëïãÞ ôïõ ðùò èá óôïéâÜæïíôáé ôá áñ÷åßá:\n"
+" -M, --mixed-uuencode áðüöáóç äõíáìéêÜ ãéá uuencode (åî ïñéóìïý)\n"
+" -T, --text-files ìåôá÷åßñçóç üëùí ôùí áñ÷åßùí óáí áñ÷åßá "
+"êåéìÝíïõ\n"
+" -B, --uuencode ìåôá÷åßñçóç ôùí áñ÷åßùí óáí äõáäéêÜ, ÷ñÞóç "
+"uuencode\n"
+" -z, --gzip gzip êáé uuencode üëùí ôùí áñ÷åßùí\n"
+" -g, --level-for-gzip=ÅÐÉÐÅÄÏ ÷ñÞóç -ÅÐÉÐÅÄÏ óõìðßåóçò (åî ïñéóìïý 9) óôï "
+"gzip\n"
+" -Z, --compress óõìðßåóç êáé uuencode ãéá üëá ôá áñ÷åßá\n"
+" -b, --bits-per-code=BITS ÷ñÞóç -bBITS (åî ïñéóìïý 12) óôç óõìðßåóç\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1711
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Ðñïóôáóßá óôç ìåôÜäïóç:\n"
+" -w, --no-character-count áðïöõãÞ ÷ñÞóçò `wc -c' ãéá Ýëåã÷ï ìåãÝèïõò\n"
+" -D, --no-md5-digest áðïöõãÞ ÷ñÞóçò `md5sum' ãéá Ýëåã÷ï "
+"åãêõñüôçôáò\n"
+" -F, --force-prefix åðéâïëÞ ÷áñáêôÞñá ðñïèÝìáôïò óå êÜèå ãñáììÞ\n"
+" -d, --here-delimiter=STRING ÷ñÞóç STRING ãéá äéá÷ùñéóìü áñ÷åßùí óôï "
+"shar\n"
+"\n"
+"Äçìéïõñãßá äéáöïñåôéêþí åéäþí shar:\n"
+" -V, --vanilla-operation äçìéïõñãßá áðëþí êáé ÷ùñßò áðáéôÞóåéò áñ÷åßùí "
+"shar\n"
+" -P, --no-piping áðïêëåéóôéêÞ ÷ñÞóç ðñïóùñéíþí áñ÷åßùí üôáí "
+"ãßíåôáé unshar\n"
+" -x, --no-check-existing ôõöëÞ åããñáöÞ ðÜíù óå ôõ÷üí ðñïûðÜñ÷ïíôá "
+"áñ÷åßùí\n"
+" -X, --query-user åñþôçóç ÷ñÞóôç ãéá åããñáöÞ óå ðñïûðÜñ÷ïíôá "
+"áñ÷åßá (ü÷é ãéá Net)\n"
+" -m, --no-timestamp ÷ùñßò åðáíÜêôçóç çìåñïìçíéþí/ùñþí ôñïðïðïßçóçò "
+"ôùí áñ÷åßùí\n"
+" -Q, --quiet-unshar áðïöõãÞ ðåñéöñáóôéêþí ìçíõìÜôùí êáôÜ ôï unshar\n"
+" -f, --basename áíÜêôçóç óå Ýíá êáôÜëïãï, áí êáé õðÜñ÷åé "
+"éåñáñ÷ßá\n"
+" --no-i18n íá ìç äçìéïõñãçèåß áñ÷åßï script õðïóôÞñéîçò "
+"ôïðéêÞò ãëþóóáò\n"
+
+#
+# File: src/shar.c, line: 1729
+#: src/shar.c:1800
+#, fuzzy
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Ç åðéëïãÞ -o áðáéôåßôáé ìå -l Þ -L, ç åðéëïãÞ -n áðáéôåßôáé ìå -a.\n"
+"Ç åðéëïãÞ -g õðïíïåß -z, ç åðéëïãÞ -b õðïíïåß -Z.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr ""
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1816
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "Äåí åß÷å åðéëåãåß DEBUG óôç þñá ôçò ìåôáãëþôôéóçò"
+
+#
+# File: src/shar.c, line: 1837
+#: src/shar.c:1986
+#, fuzzy, c-format
+msgid "Hard limit %s\n"
+msgstr "Óèåíáñü üñéï %dk\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1904
+#: src/shar.c:2061
+#, fuzzy, c-format
+msgid "Soft limit %s\n"
+msgstr "Åëáóôéêü üñéï %dk\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#
+# File: src/shar.c, line: 1963
+# File: src/unshar.c, line: 405
+# File: src/uudecode.c, line: 418
+# File: src/uuencode.c, line: 260
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"ÐíåõìáôéêÜ Äéêáéþìáôá (C) %s Free Software Foundation, Inc.\n"
+"Áõôü åßíáé åëåýèåñï ëïãéóìéêü· äåßôå ôï ðçãáßï êþäéêá ãéá ôïõò êáíüíåò áíôéãñáöÞò.\n"
+"Äåí õðÜñ÷åé ÊÁÌÉÁ åããýçóç· ïýôå áêüìá ãéá ËÅÉÔÏÕÑÃÉÊÏÔÇÔÁ Þ ÊÁÔÁËËÇËÏÔÇÔÁ ÃÉÁ\n"
+"ÃÉÁ ÅÍÁ ÓÕÃÊÅÊÑÉÌÅÍÏ ÓÊÏÐÏ.\n"
+
+#
+# File: src/shar.c, line: 2011
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Äåí õðÜñ÷åé äéáëïãéêüôçôá óå áðëÞ êáôÜóôáóç"
+
+#
+# File: src/shar.c, line: 2022
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ÅðéëïãÝò áðïèÞêåõóçò ìç-êåéìÝíïõ ðáñáêÜìöèçêáí"
+
+#
+# File: src/shar.c, line: 2078
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Äåí õðÜñ÷ïõí áñ÷åßá åéóüäïõ"
+
+#
+# File: src/shar.c, line: 2084
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Äåí åßíáé äõíáôü íá ÷ñçóéìïðïéçèåß ç åðéëïãÞ -a ÷ùñßò ôï -n"
+
+#
+# File: src/shar.c, line: 2090
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Äåí åßíáé äõíáôü íá ÷ñçóéìïðïéçèïýí ïé åðéëïãÝò -l Þ -L ÷ùñßò ôï -o"
+
+#
+# File: src/shar.c, line: 2102
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "ÐÁÑÁÊÁËÙ áðïöýãåôå ôá -X shar óôï Usenet Þ óôá äçìüóéá äßêôõá"
+
+#
+# File: src/shar.c, line: 2143
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "¸÷åôå áíáäéðëþóåé êáé ôï ôåëåõôáßï ôìÞìá"
+
+#
+# File: src/shar.c, line: 2145
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "ÄçìéïõñãÞèçêáí %d áñ÷åßá\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr ""
+
+#
+# File: src/shar.c, line: 586
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "äåí Þôáí äõíáôÞ ç äçìéïõñãßá êáôáëüãïõ êëåéäþìáôïò"
+
+#
+# File: src/unshar.c, line: 158
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Äåí âñÝèçêáí åíôïëÝò öëïéïý óôï %s"
+
+#
+# File: src/unshar.c, line: 174
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "Ôï %s ìïéÜæåé ìå êáèáñü êþäéêá C êáé ü÷é ìå áñ÷åßï öëïéïý"
+
+#
+# File: src/unshar.c, line: 210
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Äåí âñÝèçêáí åíôïëÝò öëïéïý ìåôÜ ôï `cut' óôï %s"
+
+#
+# File: src/unshar.c, line: 231
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "Ôï %s äåí öáßíåôáé íá åßíáé áñ÷åßïõ öëïéïý"
+
+#
+# File: src/unshar.c, line: 232
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Ç ãñáììÞ `cut' áêïëïõèïýíôáí áðü: %s"
+
+#
+# File: src/unshar.c, line: 258
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Åêêßíçóç äéåñãáóßáò `sh'"
+
+#
+# File: src/unshar.c, line: 307
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Ïé õðï÷ñåùôéêïß ðáñÜìåôñïé óôá ðåñéöñáóôéêÜ ïñßóìáôá åßíáé õðï÷ñåùôéêïß\n"
+"êáé ãéá ôá óýíôïìá ïñßóìáôá.\n"
+"\n"
+" -d, --directory=ÊÁÔÁËÏÃÏÓ áëëáãÞ óôï ÊÁÔÁËÏÃÏ ðñéí ôçí áíáäßðëùóç\n"
+" -c, --overwrite ÷ñÞóç -c óôï script ãéá åããñáöÞ ðÜíù óå "
+"áñ÷åßá\n"
+" -e, --exit-0 ßäéï ìå `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING äéáìïßñáóìá åíùìÝíùí shar ìåôÜ áðü ôï STRING\n"
+" -f, --force ßäéï ìå `-c'\n"
+" --help åìöÜíéóç áõôÞò ôçò âïÞèåéáò êáé Ýîïäïò\n"
+" --version åìöÜíéóç ðëçñïöïñéþí Ýêäïóçò êáé Ýîïäïò\n"
+"\n"
+"Áí äåí õðÜñ÷åé áñ÷åßï åéóüäïõ, áíÜãíùóç áðü êáíïíéêÞ åßóïäï.\n"
+
+#
+# File: src/unshar.c, line: 385
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Äåí åßíáé äõíáôÞ ç áëëáãÞ óôï êáôÜëïãï `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#
+# File: src/unshar.c, line: 448
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "êáíïíéêÞ åßóïäïò"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#
+# File: src/uuencode.c, line: 305
+#: src/uudecode.c:126 src/uudecode.c:430
+#, fuzzy, c-format
+msgid "%s: Write error"
+msgstr "ÓöÜëìá åããñáöÞò"
+
+#
+# File: src/uudecode.c, line: 98
+# File: src/uudecode.c, line: 196
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Óýíôïìï áñ÷åßïõ"
+
+#
+# File: src/uudecode.c, line: 141
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Äåí õðÜñ÷åé ãñáììÞ `end'"
+
+#
+# File: src/uudecode.c, line: 205
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: áêïëïõèïýí äåäïìÝíá ìåôÜ ôï ÷áñáêôÞñá padding `='"
+
+#
+# File: src/uudecode.c, line: 229
+# File: src/uudecode.c, line: 237
+# File: src/uudecode.c, line: 251
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: ìç áðïäåêôÞ ãñáììÞ"
+
+#
+# File: src/uudecode.c, line: 289
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Äåí õðÜñ÷åé ãñáììÞ `begin'"
+
+#
+# File: src/uudecode.c, line: 321
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Ìç Ýãêõñï ~user"
+
+#
+# File: src/uudecode.c, line: 328
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Äåí õðÜñ÷åé ÷ñÞóôçò `%s'"
+
+#
+# File: src/shar.c, line: 687
+# File: src/shar.c, line: 914
+#: src/uudecode.c:390
+#, fuzzy, c-format
+msgid "cannot access %s"
+msgstr "Áäõíáìßá ðñüóâáóçò óôï %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr ""
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr ""
+
+#
+# File: src/shar.c, line: 952
+# File: src/shar.c, line: 1329
+# File: src/shar.c, line: 1518
+# File: src/shar.c, line: 1536
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "åðáíÜêôçóç ôïõ"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#
+# File: src/uudecode.c, line: 374
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "×ñÞóç: %s [ÁÑ×ÅÉÏ]...\n"
+
+#
+# File: src/uudecode.c, line: 375
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Ïé õðï÷ñåùôéêïß ðáñÜìåôñïé óôá ðåñéöñáóôéêÜ ïñßóìáôá åßíáé õðï÷ñåùôéêïß\n"
+"êáé ãéá ôá óýíôïìá ïñßóìáôá.\n"
+" -o, --output-file=ÁÑ×ÅÉÏ áðåõèåßáò Ýîïäïò óôï áñ÷åßï ÁÑ×ÅÉÏ\n"
+" -h, --help åìöÜíéóç áõôÞò ôçò âïÞèåéáò êáé Ýîïäïò\n"
+" -v, --version åìöÜíéóç ðëçñïöïñéþí Ýêäïóçò ðñïãñÜììáôïò êáé "
+"Ýîïäïò\n"
+" -o, --output-file=ÁÑ×ÅÉÏ áð'åõèåßáò Ýîïäïò óôï ÁÑ×ÅÉÏ\n"
+
+#
+# File: src/uuencode.c, line: 305
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "ÓöÜëìá åããñáöÞò"
+
+#
+# File: src/uuencode.c, line: 198
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "ÓöÜëìá áíÜãíùóçò"
+
+#
+# File: src/uuencode.c, line: 215
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "×ñÞóç: %s [ÁÑ×ÅÉÏÅÉÓÏÄÏÕ] ÁÐÏÌÁÊÑÕÓÌÅÍÏÁÑ×ÅÉÏ\n"
+
+#
+# File: src/uuencode.c, line: 216
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 ÷ñÞóç êùäéêïðïßçóçò base64 êáôÜ ôï RFC1521\n"
+" --help åìöÜíéóç áõôÞò ôçò âïÞèåéáò êáé Ýîïäïò\n"
+" --version åìöÜíéóç ðëçñïöïñéþí Ýêäïóçò ðñïãñÜììáôïò êáé Ýîïäïò\n"
+
+#
+# File: src/shar.c, line: 1647
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "¶íïéãìá ôïõ `%s'"
+
+#
+# File: src/shar.c, line: 967
+# File: src/shar.c, line: 1430
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Áñ÷Þ áñ÷åßïõ %s\n"
+
+#
+# File: src/shar.c, line: 596
+# File: src/shar.c, line: 2156
+#~ msgid "lock directory"
+#~ msgstr "êáôÜëïãïò êëåéäþìáôïò"
+
+#
+# File: src/shar.c, line: 596
+# File: src/shar.c, line: 637
+#~ msgid "created"
+#~ msgstr "äçìéïõñãÞèçêå"
+
+#
+# File: src/shar.c, line: 597
+# File: src/shar.c, line: 637
+#~ msgid "failed to create"
+#~ msgstr "äåí Þôáí äõíáôÞ ç äçìéïõñãßá"
+
+#
+# File: src/shar.c, line: 879
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Ôá áñ÷åßá ðñÝðåé íá áíáäéðëùèïýí ìå óõãêåêñéìÝíç óåéñÜ!"
+
+#
+# File: src/shar.c, line: 880
+# File: src/shar.c, line: 1413
+#~ msgid "Please unpack part"
+#~ msgstr "Ðáñáêáëþ áíáäéðëþóôå ôï ôìÞìá"
+
+#
+# File: src/shar.c, line: 880
+# File: src/shar.c, line: 1414
+#~ msgid "next!"
+#~ msgstr "åðüìåíï!"
+
+#
+# File: src/shar.c, line: 952
+# File: src/shar.c, line: 1329
+# File: src/shar.c, line: 1518
+# File: src/shar.c, line: 1536
+#~ msgid "failed"
+#~ msgstr "áðïôõ÷ßá"
+
+#
+# File: src/shar.c, line: 1181
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[no, yes, all, quit] (no)?"
+
+#
+# File: src/shar.c, line: 1345
+#~ msgid "End of"
+#~ msgstr "ÔÝëïò ôïõ"
+
+#
+# File: src/shar.c, line: 1347
+#~ msgid "part"
+#~ msgstr "ôìÞìá"
+
+#
+# File: src/shar.c, line: 1349
+# File: src/shar.c, line: 1455
+#~ msgid "File"
+#~ msgstr "Áñ÷åßï"
+
+#
+# File: src/shar.c, line: 1593
+#~ msgid "original size"
+#~ msgstr "áñ÷éêü ìÝãåèïò"
+
+#
+# File: src/shar.c, line: 1594
+#~ msgid "current size"
+#~ msgstr "ôñÝ÷ïí ìÝãåèïò"
+
+#
+# File: src/shar.c, line: 1678
+#~ msgid ""
+#~ "\n"
+#~ "Giving feedback:\n"
+#~ " --help display this help and exit\n"
+#~ " --version output version information and exit\n"
+#~ " -q, --quiet, --silent do not output verbose messages locally\n"
+#~ "\n"
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ "\n"
+#~ "Splitting output:\n"
+#~ " -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=SIZE split archive, not files, to SIZE "
+#~ "kilobytes\n"
+#~ " -L, --split-size-limit=SIZE split archive, or files, to SIZE "
+#~ "kilobytes\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ãéá áíÜäñáóç:\n"
+#~ " --help åìöÜíéóç áõôÞò ôçò âïÞèåéáò êáé Ýîïäïò\n"
+#~ " --version åìöÜíéóç ðëçñïöïñéþí Ýêäïóçò êáé Ýîïäïò\n"
+#~ " -q, --quiet, --silent áðïöõãÞ åìöÜíéóçò ðåñéöñáóôéêþí ìçíõìÜôùí "
+#~ "ôïðéêÜ\n"
+#~ "\n"
+#~ "ÅðéëïãÞ áñ÷åßùí:\n"
+#~ " -p, --intermix-type äõíáôüôçôá ÷ñÞóçò ôùí -[BTzZ] óå ëßóôåò "
+#~ "áñ÷åßùí\n"
+#~ " ãéá áëëáãÞ äéêáéùìÜôùí\n"
+#~ " -S, --stdin-file-list áíÜãíùóç ëßóôáò áñ÷åßùí áðü êáíïíéêÞ åßóïäï\n"
+#~ "\n"
+#~ "Äéáìïßñáóìá åîüäïõ:\n"
+#~ " -o, --output-prefix=ÐÑÏÈÅÌÁ åîïäïò óå áñ÷åßá ÐÑÏÈÅÌÁ.01 ìÝ÷ñé ÐÑÏÈÅÌÁ."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=ÌÅÃÅÈÏÓ äéáìïßñáóìá ôåëéêïý áñ÷åßïõ, ü÷é ôùí "
+#~ "åíäéÜìåóùí,\n"
+#~ " óå ÌÅÃÅÈÏÓ Kbytes\n"
+#~ " -L, --split-size-limit=ÌÅÃÅÈÏÓ äéáìïßñáóìá ôåëéêïý áñ÷åßïõ Þ ôùí "
+#~ "åíäéÜìåóùí\n"
+#~ " óå ÌÅÃÅÈÏÓ Kbytes\n"
+
+#
+# File: src/shar.c, line: 1734
+# File: src/unshar.c, line: 320
+# File: src/uudecode.c, line: 380
+# File: src/uuencode.c, line: 220
+#~ msgid "Report bugs to <bug-gnu-utils@prep.ai.mit.edu>.\n"
+#~ msgstr "ÁíáöÝñáôå óöÜëìáôá óôï <bug-gnu-utils@prep.ai.mit.edu>.\n"
+
+#
+# File: src/shar.c, line: 2156
+#~ msgid "removed"
+#~ msgstr "äéáãñÜöôçêå"
+
+#
+# File: src/shar.c, line: 2157
+#~ msgid "failed to remove"
+#~ msgstr "áðïôõ÷ßá óôç äéáãñáöÞ"
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..b607026
--- /dev/null
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..3f19cf4
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,1277 @@
+# Mensajes en español para GNU sharutils.
+# Copyright (C) 1996 Free Software Foundation, Inc.
+# Tomás Bautista <bautista@cma.ulpgc.es>, 1996.
+# Santiago Vila <sanvila@unex.es>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-26 17:25+0200\n"
+"Last-Translator: Santiago Vila <sanvila@unex.es>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Error del sistema desconocido"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: la opción `%s' es ambigua\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: la opción `--%s' no admite ningún argumento\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: la opción `%c%s' no admite ningún argumento\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: la opción `%s' requiere un argumento\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opción `--%s' no reconocida\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opción `%c%s' no reconocida\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opción ilegal -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opción inválida -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: la opción requiere un argumento -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: la opción `-W %s' es ambigua\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: la opción `-W %s' no admite ningún argumento\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "memoria agotada"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr "Nota: no se verifican las sumas md5. Considere instalar GNU coreutils."
+
+# Nota: Se supone que este mensaje continúa en el siguiente. De ahí el "e".
+#
+# FIXME: No se traducen palabras sueltas sino frases completas.
+# Hablar con el autor.
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+"ATENCIÓN: no se restablecerán las marcas de tiempo.\n"
+" Considere tomar e"
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "instalar GNU `touch'\\'', distribuido con GNU coreutils..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "el directorio de bloqueo '${lock_dir}' existe"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "fallo al crear el directorio de bloqueo"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - creado el directorio de bloqueo `'%s\\''."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - fallo al crear el directorio de bloqueo `'%s\\''."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "sí"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "sobrescribe este fichero"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "no"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "salta este fichero"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "todos"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "sobrescribe todos los ficheros"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "ninguno"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "no sobrescribe ningún fichero"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "ayuda"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "explica las opciones"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "salir"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "sale inmediatamente"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Demasiados directorios para crear con `mkdir'"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - creado el directorio `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - fallo al crear el directorio `%s'\\''."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "No se puede acceder a %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "La opción -C está obsoleta, utilice -Z en su lugar"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "No se puede obtener el nombre del directorio actual"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"¡Los archivos deben desempaquetarse en orden!\n"
+"Por favor desempaquete '`cat ${lock_dir}/seq`' a continuación."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Nuevo fichero, faltan %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "El límite es aún %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "la restauración de %s falló"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Fin de la parte %d, continúa con la parte %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Fichero de comienzo %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: No es un fichero regular"
+
+# Me resulta demasiado inconexo ... ¿y poner algo así como
+# `quedan %ld bytes' aunque no sea tan fiel como debiera?
+# ipg
+# A mí no me disgusta. Pero pongo "faltan" en vez de "quedan". tb
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "En `shar': faltan %s bytes\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "vacío"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(vacío)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "No se puede abrir el fichero %s"
+
+# Para que esto "haga juego" con otra cosa que hay más abajo, quizá habría
+# que poner "comprimido con `compress'", ¡qué horror! sv
+# Sí, ya sé que es un poco raro, pero, ¿qué otra cosa se podría hacer? tb
+# Nada, creo. O esto, o lo que había antes. sv
+# Bueno, la verdad es que así se respeta fielmente el original, pues
+# lo que se traducen no son palabras sino significados. sv
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "comprimido con `compress'"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "comprimido con `gzip'"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "comprimido con bzip"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binario"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(comprimido)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(comprimido con `gzip')"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(comprimido con bzip)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binario)"
+
+# Votaría por alguna descripción más amplia -- siempre doy la coña
+# con esta frase:
+# `No se pudo duplicar el proceso (falló la llamada a fork())'
+# ipg
+# O me equivoco, o hacer un fork no es duplicar un proceso, sino que crea
+# un nuevo proceso:
+#
+# FORK(2V) SYSTEM CALLS FORK(2V)
+#
+# NAME
+# fork - create a new process
+#
+# Por lo tanto voy a escribir otra cosa. tb
+#
+# Te ha faltado citar esto de la misma página de manual:
+#
+# DESCRIPTION
+# fork creates a child process that differs from the parent
+# process only in its PID and PPID, and in the fact that
+# resource utilizations are set to 0. File locks and pend­
+# ing signals are not inherited.
+#
+# fork() realmente lo único que hace es copiar las tablas de datos del
+# núcleo del padre y los segmentos de datos del padre, por lo que lo
+# único en lo que difieren justo después de la llamada a fork() es en el
+# PID, en los locks y en las señales en espera de servicio. A eso se le
+# llama duplicar un proceso. Que luego se use para crear un proceso
+# nuevo con exec() es harina de otro costal, pero la única manera de
+# crear más procesos en Unix es pasar por duplicar primero un proceso.
+#
+# También es verdad que al usuario qué gracia le hará la diferencia,
+# pero no debemos confundir los huevos con las castañas, y al menos,
+# intentar que la gente lo comprenda. ipg
+#
+#
+# Esto lo discutí con Iñaky y Jim Meyering y al final les convencí :-)
+# Lo cambio. sv
+# Para la poteridá: Antes decía:
+# "No se pudo crear un proceso nuevo: fallo en la llamada a `fork'"
+# Pues lo dejamos cambiado. tb
+#
+# FIXME: Escribir al autor, de todas formas. sv+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Falló la llamada al sistema `fork'"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Fichero %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "texto"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(texto)"
+
+# He quitado una 'e' em+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "sobrescribiendo %s"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "sobrescribe %s"
+
+# Estamos empleando extensivamente: 'pasando por alto' em+
+# Bueno, eres tú quien lo está empleando extensivamente.
+# Iñaky utiliza descartar, y yo depende del caso.
+#
+# Análisis semántico:
+# Literalmente, skip es saltar, y quiere decir que no se considera.
+# Pasar por alto, parece que sí se considera pero luego se hace la vista
+# gorda, o algo así (como un "perdón").
+# Tal vez por eso no me acabe de gustar "pasar por alto". sv+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "SALTANDO %s"
+
+# interrumpida ? sv
+# Interrumpir y abortar, aunque son cosas similares,
+# normalmente dan lugar a resultados distintos.
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "extracción abortada"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "SALTANDO %s (el fichero ya existe)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Guardando %s (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - extrayendo< %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "la restauración de %s falló\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Fin de la parte %ld, continúa con la parte %ld"
+
+# Nota: se supone que después de este mensaje aparece un numerito.
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Fin de %s parte %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "archivo"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "El fichero %s continúa en la parte %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "¡Por favor, desempaquete primero la parte 1!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "¡Por favor, desempaquete la parte '${shar_sequence}' a continuación!"
+
+# Idem em+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "TODAVÍA SALTANDO %s"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "continuando con el fichero %s"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "El fichero %s se ha completado"
+
+# Otra sugerencia: descodificando en lugar de decodificando. sv
+# Y otra más: descodificando el archivo ... (añadir "el"). sv
+# Ya... bueno. Por aquí solemos usar decodificar, en vez de descodificar,
+# pero no sé cual es lo correcto. ¿Y qué tal descifrar? tb
+#
+# Me suena a criptografía (es decir, da a entender
+# que está codificado de alguna manera extraña,
+# cuando en realidad el "uuencode" es muy sencillo). sv
+# ¿Entonces "descodificar"? Advierto que va a haber gente extrañada en
+# este punto. Por ejemplo, yo. tb
+#
+# El Unix es bello .... :) ipg
+#
+# Una cosa: ¿decodificar o descodificar?
+# (es que me suena mejor lo segundo) sv
+#
+# Para el Canal Plus ¿qué se usa? ¿un descodificador o un decodificador?
+# Pregúntese a quien tenga uno, y entonces decidimos. tb
+# :-) :-) :-) sv
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "decodificando el fichero %s con `uudecode'"
+
+# Nota: Añadir "con `uncompress'" está justificado por el hecho de que
+# cuando se descomprime con gunzip se le llama "gunzipping".
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "descomprimiendo el fichero %s con `uncompress'"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "descomprimiendo el fichero %s con `gunzip'"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "descomprimiendo el fichero %s con `bunzip'"
+
+# Sugerencia: "suma de comprobación MD5" o "comprobación MD5". sv
+# El "check" es el mismo "check" de "cheksum" (suma de comprobación), solo que
+# MD5 no hace propiamente una suma sino un "revoltijo" con una
+# función de `hash'. sv
+# Los alemanes usan para esto `test.' Y a mí es una palabra que no me gusta,
+# pero... tb
+# Para MD5 he oído más los términos `huella digital MD5', `huella MD5'
+# o `firma MD5'. ipg
+# Pues si eso es lo que por ahí se oye, pues p'alante. tbd
+# Si lo pones así, quizá quedaría mejor `Comprobación de la huella
+# digital ...' y yo añadiría algo de `Es probable que el archivo esté
+# jodido', pero más educadamente. ipg
+# Hecho. tb
+#
+# Borro lo del fichero dañado. No es NADA fiel al original.
+# Si el original hubiera querido decir algo acerca de un fichero dañado
+# lo habría dicho. Además, puede que el fichero no esté dañado, sino
+# que simplemente esté falsificado o sea otra versión.
+#
+# Propongo "Fallo en la suma MD5". Más fácil, más corto, más bonito...
+# No importa que no sea exactamente una suma, puede considerarse una
+# "suma generalizada". Además, el programa que genera eso se llama
+# `md5sum' (es decir, parecido a "cheksum", y con la misma función aunque
+# utilice un algoritmo distinto). sv
+#
+# No es la suma MD5 la que falla sino la comprobación, ¿no? tb
+# Bueno, también puede decirse que es la suma la que falla, en tanto que no
+# es la que debería ser. Déjalo como está, si te parece. sv
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "Fallo en la comprobación de la suma MD5"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'aviso de restauración: el tamaño de %s no es %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "reserva de espacio para el nombre del fichero de salida"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Abriendo `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Cerrando `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pruebe `%s --help' para más información.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Modo de empleo: %s [OPCIÓN]... [FICHERO]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Los argumentos obligatorios para las opciones largas\n"
+"también son obligatorios para las opciones cortas.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Opciones de realimentación:\n"
+" --help muestra esta ayuda y finaliza\n"
+" --version informa de la versión y finaliza\n"
+" -q, --quiet, --silent no muestra mensajes de progreso localmente\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Selección de ficheros:\n"
+" -p --intermix-type permite -[BTzZ] en listas de ficheros para "
+"cambiar\n"
+" el modo\n"
+" -S, --stdin-file-list lee la lista de ficheros de la entrada estándar\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Selección de ficheros:\n"
+"\n"
+" -p, --intermix-type permite -[BTz] en listas de ficheros para cambiar "
+"el\n"
+" modo\n"
+" -S, --stdin-file-list lee la lista de ficheros de la entrada estándar\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"División del resultado:\n"
+" -o, --output-prefix=PREFIJO coloca el resultado en PREFIJO.01 a PREFIJO."
+"NN\n"
+" -l, --whole-size-limit=TAMAÑO divide el archivo, no los ficheros, en "
+"trozos\n"
+" de TAMAÑO kilobytes\n"
+" -L, --split-size-limit=TAMAÑO divide el archivo, o los ficheros, en "
+"trozos\n"
+" de TAMAÑO kilobytes\n"
+
+# Otra cosa: El "controlling" y el "selecting" creo que no son gerundios.
+# Diría que aquí lo que pega es:
+# "Control de las cabeceras del archivo shar"
+# "Selección de cómo se almacenan los archivos".
+# ¿qué opinas? sv
+#
+# Nota: No hace falta poner sangría adicional cuando una opción te ocupe
+# más de una línea. Solemos dejarlo al mismo nivel.
+# (He cambiado tan sólo el "línea de corte", si estás de acuerdo, puedes
+# hacerlo tú con los demás). sv
+# ¿Coding -> cifrado? tb
+# En -a ¿documentar? me suena un rato dao la vuerta :) ipg
+# Vale. tb
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Control de las cabeceras de archivo `shar':\n"
+" -n, --archive-name=NOMBRE usa NOMBRE para documentar el archivo\n"
+" -s, --submitter=DIRECCIÓN ignora el nombre del remitente\n"
+" -a, --net-headers documenta el archivo `shar' con cabeceras\n"
+" de tipo `Submitted-by:' y `Archive-name:'\n"
+" -c, --cut-mark comienza el archivo `shar' con una\n"
+" línea de corte\n"
+" -t, --translate traduce los mensajes del script\n"
+"\n"
+"Selección del modo de almacenamiento de los archivos:\n"
+" -M, --mixed-uuencode decide automáticamente el cifrado con\n"
+" `uuencode' (por defecto)\n"
+" -T, --text-files trata todos los archivos como texto\n"
+" -B, --uuencode trata todos los archivos como datos \n"
+" binarios, utilizando `uuencode'\n"
+" -z, --gzip procesa todos los archivos con `gzip' y\n"
+" `uuencode'\n"
+" -g, --level-for-gzip=NIVEL pasa -NIVEL (por defecto 9) a `gzip'\n"
+" -j, --bzip2 procesa todos los ficheros con bzip2\n"
+" y uuencode\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress comprime y codifica con uuencode todos los\n"
+" ficheros\n"
+" -b, --bits-per-code=BITS pasa -bBITS (por omisión 12) a compress\n"
+
+# En -D, ¿qué tal `no comprueba la huella MD5 con `md5sum'' (donde
+# digo `huella' pon lo que más te guste :)?
+# En -V ¿`no exigente' -> `poco exigente'?
+# En -Q ¿`actúa silenciosamente al ...'?
+# Yo no traduciría `script' a `guión' ... me ha costado un rato darme
+# cuenta de que querías decir (mente lúcida la mía que ha tardado en
+# mirar la versión inglesa :). En todos sitios lo hemos dejado como
+# script, pero entre comillas simples. Poca gente usa la palabra
+# `guión' para referirse a un shell script.
+# En -X `no para red' -> `no usar en Usenet o redes públicas'
+# ipg
+# Dejo algunas cosas como estaban (-Q) y otras las cambio. Lo de `guión',
+# de acuerdo en dejarlo en `script' (me guiaba por algo que se discutió
+# en la lista de spanglish). tb
+#
+# Lo de la "huella digital" para el "digest" me parece confuso y excesivo.
+# Yo lo reservaría para la huella digital de PGP. sv
+# Propongo algo más sencillo:
+# "No utiliza la suma md5 para verificar.". sv
+#
+# Sospecho que en realidad utiliza algún algoritmo llamado md5sum ya
+# definido en alguna librería para hacer esta comprobación, y lo que
+# realmente viene a utilizar es el "digest" que obtiene de esta función. tb
+#
+# Bueno, ahora está mejor que antes, pero se puede confundir el
+# algoritmo con el programa que lo implementa con el resultado del algoritmo.
+# (Siendo efectivamente esto último a lo que se refiere realmente).
+# Pero mejor lo dejamos así, no vaya a ser que al intentar traducir
+# `digest' quede peor... sv
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Protección contra transmisión:\n"
+" -w, --no-character-count no usa `wc -c' para verificar el tamaño\n"
+" -D, --no-md5-digest no utiliza `md5sum' para verificar\n"
+" -F, --force-prefix fuerza el carácter de prefijo en todas\n"
+" las líneas\n"
+" -d, --here-delimiter=CADENA usa CADENA para delimitar los ficheros en\n"
+" el archivo `shar'\n"
+"\n"
+"Producción de distintas clases de archivos `shar':\n"
+" -V, --vanilla-operation produce archivos `shar' muy sencillos y\n"
+" poco exigentes\n"
+" -P, --no-piping usa exclusivamente archivos temporales al\n"
+" deshacer el archivo `shar'\n"
+" -x, --no-check-existing escribe sin confirmar sobre archivos\n"
+" existentes\n"
+" -X, --query-user pregunta al usuario antes de escribir sobre\n"
+" archivos (no para red)\n"
+" -m, --no-timestamp no restaura las fechas y horas de modificación\n"
+" del fichero\n"
+" -Q, --quiet-unshar impide producir mensajes al deshacer\n"
+" el archivo `shar'\n"
+" -f, --basename restaura en un directorio, sin tener en cuenta\n"
+" la jerarquía\n"
+" --no-i18n no produce `script' de shell internacionalizado\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"La opción -o es necesaria con -l o -L, la opción -n es necesaria con -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "La opción -g implica -z, la opción -b implica -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "La opción -g implica -z.\n"
+
+# Nota: Lo del último traductor es provisional hasta que piense algo mejor.
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Comunicar bichos a <%s>.\n"
+"Comunicar errores de traducción al último traductor:\n"
+" msgunfmt /usr/share/locale/es/LC_MESSAGES/sharutils.mo | grep Last-"
+"Translator\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "límite de tamaño de fichero inválido `%s'"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "formato inválido (campo \"count\" demasiado ancho): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "No se seleccionó DEBUG en la compilación"
+
+# ¿Límite fijo o infranqueable? ipg
+# Buena pregunta. Quién podrá resolverla? tb
+# El resolvedor que la resuelva buen resolvedor será ...
+# Me sace que aquí se refiere al límite duro, al que es `no más Santo
+# Tomás'. Según recuerdo, el soft es el que se te deja pasar (en las
+# cuotas, por ejemplo) por un periodo de gracia, pasado el cual, te
+# abren el culo. El hard es el que no puedes pasar ni hinchao de
+# coca. Yo creo que traduciría `Soft limit' como `Límite de aviso' y
+# `Hard limit' como 'Límite inexcedible'. ipg
+# "límite por hardware" me parece perfecto. sv
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Límite por hardware %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Este sistema no admite -Z ('compress'), utilice -z en su lugar"
+
+# ¿Límite de aviso? ipg
+# Otra buena pregunta. tb
+# Me remito a la anterior respuesta :). ipg
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Límite por software %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "prefijo de salida ilegal\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Esto es software libre; vea el código fuente para las condiciones de copia.\n"
+"No hay NINGUNA garantía; ni siquiera de COMERCIABILIDAD o IDONEIDAD PARA UN\n"
+"FIN DETERMINADO.\n"
+
+# ver arriba del todo.
+# Lo cambio, con permiso. sv
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ATENCIÓN: No se permite la interacción del usuario en modo `vanilla'"
+
+# ¿overridden es ignoradas? tal y como ha quedado no me parece fiel.
+# tal vez añadiendo las opciones por defecto o algo así. ¿qué te
+# parece? sv Overriden, desde mi punto de vista, significa que a las
+# opciones que se introdujeron "no se les hace caso" override". O sea,
+# que... cómo lo ponemos? tb
+# ¿sustituídas? sv
+# Los alemanes usan algo como "sobreescritas". No es por nada, pero...
+# no se sustituyen estas opciones: se descartan? Se pasan por alto?
+#
+# Se ignoran? tb
+#
+# Esto es delicado. Ignorar es "no saber", pero por culpa de la
+# palabra inglesa "ignore", la gente está empezando a usar "ignorar" como
+# sinónimo de lo que realmente significa "ignore": no hacer caso.
+# (mantengo una lucha sin cuartel contra esta palabra con ese significado).
+# ^^^ Ya será menos, Santiago ;) ipg (¡e broma :D!)
+# En estos casos se pueden usar "descartar", "no tener efecto"
+# "pasar por alto", y cosas así.
+# ¿Te gusta alguna? sv
+# Pues sí... `descartadas' no me disgusta. No sé si preferiría `desechadas'
+# aunque a lo mejor alguien pondrá pegas. tb
+#
+# Sí, yo... me suena a desechos (desperdicios). No sé. sv
+# Ya, ya lo sabía... Cambio a "descartadas" a ver. tb
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ATENCIÓN: Descartadas las opciones de almacenamiento para no-texto"
+
+# Sugerencia: "No hay ningún archivo de entrada". sv
+# Apoyo la moción. ipg
+# De acuerdo, en parte. tb
+# Esta frase ya ha salido en otra ocasión.
+# Si ponemos "No se han indicado archivos de entrada"
+# el plural parece indicar que hay que dar varios archivos de entrada.
+# Lo cambio, a ver si te gusta. sv
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "No se ha indicado ningún fichero de entrada"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "No se puede usar la opción -a sin -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "No se puede usar la opción -l ó -L sin -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"POR FAVOR evite archivos creados con `shar -X' en Usenet o redes públicas"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Ha desempaquetado la última parte"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Creados %d ficheros\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - borrado el directorio de bloqueo `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - fallo al borrar el directorio de bloqueo `'%s\\''."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "No se encontraron instrucciones de shell en %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s parece código C, no un archivo de shell"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "No se encontraron instrucciones de shell después de `cut' en %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "Probablemente %s no es un archivo de shell"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "La línea `cut' estaba seguida por: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Iniciando el proceso `sh'"
+
+# guión -> `script'
+# ¿concatenados o concadenados?
+# ipg
+# Por aquí usamos "concatenar", pero veo que es "concadenar". Cambiado. tb
+# No lo lleves tan a misa :) que yo no estaba muy seguro. Ahora he
+# mirado el diccionario, y resulta que ambas son válidas. Elige tú; a mí
+# personalmente (y no sé por qué) me gusta más `concatenar'). ipg
+# Y a mí también: es lo que la gente usa por aquí... tb
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Los argumentos obligatorios para las opciones largas\n"
+"también son obligatorios para las opciones cortas.\n"
+"\n"
+" -d, --directory=DIRECTORIO cambia a DIRECTORIO antes de desempaquetar\n"
+" -c, --overwrite pasa -c al `script' shar para sobreescribir\n"
+" ficheros\n"
+" -e, --exit-0 igual que `--split-at=\"exit 0\"'\n"
+" -E, --split-at=CADENA divide los archivos `shar' concatenados\n"
+" tras encontrar CADENA\n"
+" -f, --force igual que `-c'\n"
+" --help muestra esta ayuda y finaliza\n"
+" --version informa de la versión y finaliza\n"
+"\n"
+"Si no se indica FICHERO, entonces se lee la entrada estándar.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "No se puede cambiar al directorio `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "reserva de espacio para el nombre del fichero"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "entrada estándar"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "reserva de espacio para el fichero"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Error de escritura"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Fichero cortado"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: No hay línea `end'"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: datos posteriores al carácter de relleno `='"
+
+# Preferiría "no válida". Pero vamos a dejarlo a ver qué opinan otros,
+# ¿vale? tb
+# Por mí, vale así, a ver qué dice Enrique cuando lo vea. sv
+# (Pero que conste que yo te apoyo con lo de "ilegal") sv
+# Yo opino que `no válida'. ipg
+# Pues si ya somos tres, no creo que vaya a esperar mucho a poner `no válida'.
+# A la próxima... tbd
+# No, yo decía que por mí vale "ilegal". Prefiero ilegal. sv
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: línea ilegal"
+
+# Aquí tal vez se podría añadir "ninguna".
+# "No hay ninguna línea `begin'". sv+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: No hay línea `begin'"
+
+# Ver el código fuente. Igual no habría que traducir ~user. sv
+# No sé qué es lo que convendría... tb
+# Yo creo que no es ilegal. Eso está especificando que la terminología
+# de ~<usuario> no está aceptada ... a mi me parece que vale. ipg
+# A ver: tenía puesto "~usuario inexistente". Qu'e es lo que viene mejor
+# entre esta opción, "~usuario no válido" y "~usuario ilegal"? tb
+# ¡¡Joder!! Pues ahora ni me aclaro ni ná de ná, ¿sabes seguro si el
+# mensaje se usa para decir que no se acepta la terminología ~<usuario>
+# o porque el <usuario> dado no existe? Si es lo primero, que lo dudo,
+# me inclino por ilegal, y si es la segunda, por poner `El usuario
+# especificado no existe'. ipg
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ~usuario ilegal"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: No hay ningún usuario `%s'"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "no se puede acceder a %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "denegada la escritura al FIFO (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "no se sigue al enlace (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "Efectuando freopen sobre %s"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "Efectuando chmod sobre %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Modo de empleo: %s [FICHERO]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Los argumentos obligatorios para las opciones largas son también "
+"obligatorios\n"
+"para las opciones cortas.\n"
+"\n"
+" -o, --output-file=FICHERO dirige la salida hacia FICHERO\n"
+" --help muestra esta ayuda y finaliza\n"
+" --version informa de la versión y finaliza\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Error de escritura"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Error de lectura"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Modo de empleo: %s [FICHERO-DE-ENTRADA] FICHERO-REMOTO\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 utiliza base64 como se indica en RFC1521\n"
+" --help muestra esta ayuda y finaliza\n"
+" --version informa de la versión y finaliza\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "Efectuando fopen sobre %s"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "Efectuando fstat sobre %s"
+
+# Ídem ... ipg
+# Ídem. tb
+#~ msgid "lock directory"
+#~ msgstr "directorio de bloqueo"
+
+#~ msgid "created"
+#~ msgstr "creado"
+
+#~ msgid "failed to create"
+#~ msgstr "fallo al crear"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "¡Debe desempaquetar los archivos en orden!"
+
+# Me da en la nariz que este fallido se usa para conectar con
+# la frase anterior en algo como `restauración de <archivo> fallida',
+# por lo que quizá debería ser `fallida'. Creo que tendrías que
+# echar un ojo a las fuentes. ipg
+# Efectivamente. Aparte que ambos mensajes están siempre en la misma
+# línea. Lo cambio. tb
+#~ msgid "failed"
+#~ msgstr "fallida"
+
+# Habrá que vigilar a ver si dan la oportunidad de traducir también
+# "n" "y" "a" y "q" pues si no, habrá que poner en su lugar algo como
+# n (no) y (si). etc. sv
+# En alemán está puesto como está puesto aquí.
+# No se pueden traducir las opciones. tb
+# Pero afortunadamente están empezando a traducir algunas cosas
+# parecidas a esta. Mañana o pasado saldrá una versión de prueba de
+# fileutils que cuando haces rm -i y te pregunta ¿borrar `lo.que.sea'?
+# ya puedes contestar "s" o "n".
+# Supongo que habrá que luchar por ello la próxima vez que haya oportunidad.
+# (Estar al loro en la lista de "pretest", si existe). sv
+# Vale. Hasta que eso sea así, lo mantenemos de este modo
+# *provisionalmente*. tb
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "¿[no (n), sí (y), todo (a), salir (q)] (no)?"
+
+#~ msgid "End of"
+#~ msgstr "Fin de"
+
+#~ msgid "part"
+#~ msgstr "parte"
+
+#~ msgid "File"
+#~ msgstr "Archivo"
+
+#~ msgid "original size"
+#~ msgstr "tamaño original"
+
+#~ msgid "current size"
+#~ msgstr "tamaño actual"
+
+# Sugerencias: acaba -> finaliza. sv
+# Aquí se usa más "termina" o "sale". ¿Qué usa la gente por ahí? tb
+# finaliza queda como más elegante.
+# Solemos poner "termina" para los procesos, eso sí, pero no para
+# el programa. sv
+#
+# Creo que "en la misma línea" están los otros, la terminación "ing" no
+# siempre indica gerundio. La verdad es que es difícil... sv
+#
+# Ese `Dando información' me suena raro, ¿qué tal `para obtener
+# información del programa'? No es tan literal, pero si más castellano
+# inteligible y agradable de leer, a la vez que dice lo que el guiri.
+# En --version hemos puesto en todos lados lo siguiente:
+# "--version informa de la version y finaliza\n", te lo cambio
+# En -q ... `actúa silenciosamente' ¿qué tal? (a veces ceñirse al
+# original da unas frases que me suenan harto extrañas).
+# ¿"Troceando la salida:\n" -> "Para particionar la salida:\n"?
+# ¿No te suena `troceando' a la matanza del gorrino? :)
+# En -o, te sugiero `manda la salida a los archivos PREFIJO.01,
+# PREFIJO.02... PREFIJO.NN'; es más largo, pero a mi juicio (al menos ;)
+# se entiende mejor.
+# En -l y -L se confunde el `archive' guiri con el `archivo' castellano
+# que se refiere a `file'. Quizá deberías decir (además de en mi
+# opinión trocear->partir) `Parte el archivo shar (no los archivos) en
+# partes de TAMAÑO kilobytes', y similarmente con -L.
+# Otra cosa: en las líneas de comando, en lugar del infinitivo para
+# el verbo, usa la tercera persona del singular. Lo hacemos así en todos
+# sitios
+# ipg
+# "Dando información" -> "Informacion sobre las opciones"
+# "no muestra mensajes del proceso localmente" -> "no muestra mensajes sobre
+# el procesamiento" -- (¿"actua en silencio"?)
+# "Troceando la salida" -> "División de la salida"
+# tb
+#
+# Y además no es porque "lo hagamos así", ¡es que es eso lo que significa!
+# Se llama "gerundio sustantivado", y aparece mencionado en la lista de
+# pifias de Ángel Álvarez. sv
+#~ msgid ""
+#~ "\n"
+#~ "Giving feedback:\n"
+#~ " --help display this help and exit\n"
+#~ " --version output version information and exit\n"
+#~ " -q, --quiet, --silent do not output verbose messages locally\n"
+#~ "\n"
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ "\n"
+#~ "Splitting output:\n"
+#~ " -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=SIZE split archive, not files, to SIZE "
+#~ "kilobytes\n"
+#~ " -L, --split-size-limit=SIZE split archive, or files, to SIZE "
+#~ "kilobytes\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Información sobre las opciones:\n"
+#~ " --help muestra esta ayuda y finaliza\n"
+#~ " --version informa de la versión y finaliza\n"
+#~ " -q, --quiet, --silent no muestra mensajes sobre el procesamiento\n"
+#~ "\n"
+#~ "Selección de archivos:\n"
+#~ " -p, --intermix-type permite -[BTzZ] en las listas de archivos\n"
+#~ " para cambiar de modo\n"
+#~ " -S, --stdin-file-list lee la lista de archivos de la entrada "
+#~ "estándar\n"
+#~ "\n"
+#~ "División de la salida:\n"
+#~ " -o, --output-prefix=PREFIJO deja el resultado en los archivos\n"
+#~ " del PREFIJO.01 hasta PREFIJO.NN\n"
+#~ " -l, --whole-size-limit=TAMAÑO divide el archivo `shar', no los "
+#~ "archivos,\n"
+#~ " a TAMAÑO kilobytes\n"
+#~ " -L, --split-size-limit=TAMAÑO divide el archivo `shar' o archivos\n"
+#~ " a TAMAÑO kilobytes\n"
+
+#~ msgid "Report bugs to <bug-gnu-utils@prep.ai.mit.edu>.\n"
+#~ msgstr "Comunicar `bugs' a <bug-gnu-utils@prep.ai.mit.edu>.\n"
+
+#~ msgid "removed"
+#~ msgstr "borrado"
+
+#~ msgid "failed to remove"
+#~ msgstr "fallo al borrar"
diff --git a/po/et.gmo b/po/et.gmo
new file mode 100644
index 0000000..1f0ecdf
--- /dev/null
+++ b/po/et.gmo
Binary files differ
diff --git a/po/et.po b/po/et.po
new file mode 100644
index 0000000..2aec948
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,886 @@
+# Estonian translations for sharutils.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+# Toomas Soome <Toomas.Soome@microlink.ee>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.1-pre1\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2005-11-08 10:45+0200\n"
+"Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
+"Language-Team: Estonian <et@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Tundmatu süsteemne viga"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: võti `%s' on mitmetähenduslik\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: võti `--%s' ei luba argumenti\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: võti `%c%s' ei luba argumenti\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: võti `%s' nõuab argumenti\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: tundmatu võti `--%s'\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: tundmatu võti `%c%s'\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: lubamatu võti -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: vigane võti -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: võti nõuab argumenti -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: võti `-W %s' on mitmetähenduslik\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: võti `-W %s' ei luba kasutada argumenti\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "mälu on otsas"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Märkus: md5 kontrollsummasid ei kontrolli. Kaaluge GNU coreutils "
+"paigaldamist."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "HOIATUS: ei taasta ajatempleid. Kaaluge GNU failiutiliitide"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "paigaldan GNU \\`touch', GNU File Utilities komplektist..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "lukkude kataloogi loomine ebaõnnestus"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - lukkude kataloog `'%s\\'' loodud."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - lukkude kataloogi `'%s\\'' loomine ebaõnnestus."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "kirjutan üle"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "kirjutan üle"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "kirjutan üle"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Liiga palju katalooge mkdir käsule"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - tekitasin kataloogi `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - kataloogi `%s'\\'' loomine ebaõnnestus."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "%s ei saa kasutada"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C on ebasoovitab, kasutage -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Ei õnnestu tuvastada jooksva kataloogi nime"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Arhiivid tuleb lahti pakkida järjekorras!\n"
+"Palun pakkige järgmisena lahti osa '`cat ${lock_dir}/seq`'."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Uus fail, järgi %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Limiit on ikka %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "%s taastame ebaõnnestus"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Osa %d lõpp, jätkan osaga %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Alustan fili %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Pole tavaline fail"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "sharis: suurus veel %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "tühi"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(tühi)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Faili %s ei saa avada"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "kompressitud"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gzipitud"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "bzipitud"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binaar"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(kompressitud)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gzipitud)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(bzipitud)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binaar)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "fork ebaõnnestus"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Fail %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "tekst"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(tekst)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "kirjutan üle"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "kirjutan üle"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "JÄTAN VAHELE"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "väljastamine katkestatud"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(fail on juba olemas)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Salvestan %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "väljastan"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "%s taastamine ebaõnnestus\n"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Osa %d lõpp, jätkan osaga %d"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "%s Osa %d lõpp"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "arhiiv"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Fail %s jätkub osas %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Palun pakkige lahti esmalt osa 1!"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Palun pakkige lahti esmalt osa 1!"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "JÄTAN IKKA VAHELE"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "jätkan faili"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "on valmis"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "uudekodeerin faili"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "unkompressin faili"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "gunzipin faili"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "bunzipin faili"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5 kontroll ebaõnnestus"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "võtan ruumi väljundfaili nimele"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Avan `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Sulen `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Lisainfot saate käsuga Try `%s --help'.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Kasutamine: %s [VÕTI]... [FAIL]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Kohustuslikud argumendid pikkades võtmetel on kohustuslikud ka lühikestel.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Tagasiside:\n"
+" --help esita see abiinfo\n"
+" --version esita versiooni info\n"
+" -q, --quiet, --silent ära väljasta tagasiside teateid lokaalselt\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Failide valimine:\n"
+" -p, --intermix-type luba -[BTzZ] faililoendites moodi muutmiseks\n"
+" -S, --stdin-file-list loe failide loend standardsisendist\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Failide valimine:\n"
+" -p, --intermix-type luba -[BTz] faililoendites moodi muutmiseks\n"
+" -S, --stdin-file-list loe failide loend standardsisendist\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Väljundi jagamine:\n"
+" -o, --output-prefix=PREFIKS väljasta faili PREFIKS.01 kuni PREFIKS.NN\n"
+" -l, --whole-size-limit=MAHT jaga arhiiv, mitte failid, MAHT KB osadeks\n"
+" -L, --split-size-limit=MAHT jaga arhiiv või failid MAHT KB osadeks\n"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Shar päiste kontrollimine:\n"
+" -n, --archive-name=NIMI määra arhiivi nimi\n"
+" -s, --submitter=AADRESS muuda looja nime\n"
+" -a, --net-headers väljasta Submitted-by: & Archive-name: päised\n"
+" -c, --cut-mark shar algusse `cut' rida\n"
+"\n"
+"Failide paigutamise valik:\n"
+" -M, --mixed-uuencode uuencode kasutatakse vajadusel (vaikimisi)\n"
+" -T, --text-files kõik failid on tekstifailid\n"
+" -B, --uuencode kõik failid on binaarsed, kasuta uuencode\n"
+" -z, --gzip kasuta kõikide failidega gzip ja uuencode\n"
+" -g, --level-for-gzip=TASE kasuta gzip -TASE (vaikimisi 9)\n"
+" -j, --bzip2 kasuta kõikide failidega bzip2 ja uuencode\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress kompressi ja uukodeeri kõik failid\n"
+" -b, --bits-per-code=BITTE kasutad compress -bBITTE (vaikimisi 12)\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Ülekandmiste kaitse:\n"
+" -w, --no-character-count ära kasuta suuruse kontrolliks `wc -c'\n"
+" -D, --no-md5-digest ära kasuta kontrolliks `md5sum'\n"
+" -F, --force-prefix kasuta igal real prefiks sümbolit\n"
+" -d, --here-delimiter=SÕNE kasuta SÕNE failide eraldamiseks arhiivis\n"
+"\n"
+"Erinevat tüüpi shar arhiivide loomine:\n"
+" -V, --vanilla-operation loo väga lihtne shar\n"
+" -P, --no-piping kasuta unshar ajal ainult ajutisi faile\n"
+" -x, --no-check-existing kirjuta olemasolevad failid üle\n"
+" -X, --query-user enne ülekirjutamist küsi (mitte Netis)\n"
+" -m, --no-timestamp ära taasta failide muutmise aegu\n"
+" -Q, --quiet-unshar väldi unshar ajal teateid\n"
+" -f, --basename sõltumata hierarhiast taasta ühte kataloogi\n"
+" --no-i18n ära loo rahvuskeelte toega skripti\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Võti -o on nõutav võtmega -l või -L, võti -n on nõutav võtmega -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "Võti -g kasutab ka võtit -z, võti -b kasutab ka võtit -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Võti -g kasutab ka võtit -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Vigadest teatage aadressil <%s>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "vigane faili suuruse piirang `%s'"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "vigane vorming (arvu väli on liiga lai): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG ei ole kompileerimise ajal määratud"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Ületamatu piirang %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "See süsteem ei toeta võtit -Z ('compress'), kasutage selle asemel -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Pehme piirang %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "lubamatu prefiks väljundile\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Autoriõigused © %s Free Software Foundation, Inc.\n"
+"See on vaba tarkvara; kopeerimise tingimused leiate lähtetekstist. Igasugune\n"
+"garantii puudub; isegi KESKMISE/TAVALISE KVALITEEDI GARANTIITA või SOBIVUSELE\n"
+"TEATUD KINDLAKS EESMÄRGIKS.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "HOIATUS: kasutaja ei saa lihtsa arhiivi loomisse sekkuda"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "HOIATUS: Mitte tekstilise paigutamise võtmed ümber määratud"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Sisendfaile pole"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Võtit -a ei saa võtmeta -n kasutada"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Võtit -l ega -L ei saa võtmeta -o kasutada"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "PALUN vältige -X shar'e Usenetis ja avalikes võrkudes"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Te olete viimase osa lahti pakkinud"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Loodud %d faili\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - eemaldasin luku kataloogi `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - lukkude kataloogi eemaldamine ebaõnnestus `'%s\\''."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "%s ei sisalda käsklusi käsuinterpretaatorile"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s paistab olema C kood, mitte käsuinterpretaatori arhiiv"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Failis %s puuduvad peale `cut' käsklust edasised käsud"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s pole tõenäoliselt käsuinterpretaatori arhiiv"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Reale `cut' järgnes: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Käivitan protsessi `sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Kohustuslikud argumendid pikkadele võtmetele on kohustuslikud ka "
+"lühikestele.\n"
+"\n"
+" -d, --directory=KATALOOG enne lahtipakkimist mine KATALOOGI\n"
+" -c, --overwrite edasta failide ülekirjutamiseks shar arhiivi -"
+"c\n"
+" -e, --exit-0 sama, kui `--split-at=\"exit 0\"'\n"
+" -E, --split-at=SÕNE poolita ühendatud arhiivid peale SÕNE\n"
+" -f, --force sama, kui `-c'\n"
+" --help esita see abiinfo\n"
+" --version esita versiooni info\n"
+"\n"
+"Kui FAIL puudub, loetakse standardsisendit.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Kataloogi `%s' ei õnnestu siseneda"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "faili nime puhvri võtmine"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standardsisend"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "faili puhvri võtmine"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Viga kirjutamisel"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Lühike fail"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Puudub rida `end'"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: täitesümbolile `=' järgnevad andmed"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: vigane rida"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Puudub rida `begin'"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Vigane ~kasutaja"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Kasutaja `%s' puudub"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "%s ei saa kasutada"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "ei kirjuta FIFO faili (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "ei järgi nimeviidet (%s)"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Avan `%s'"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Kasutamine: %s [FAIL]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Kohustuslikud argumendid pikkadele võtmetele on kohustuslikud ka "
+"lühikestele.\n"
+" -o, --output-file=FAIL suuna väljund FAILI\n"
+" --help esita see abiinfo\n"
+" --version esita versiooni info\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Viga kirjutamisel"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Viga lugemisel"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Kasutamine: %s [SISENDFAIL] SIHTFAIL\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 kasuta RFC1521 vastavat base64 kodeerimist\n"
+" --help esita see abiinfo\n"
+" --version esita versiooni info\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Avan `%s'"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Alustan fili %s\n"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[ei, jah, kõik, välju] (ei)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Palun pakkige lahti osa"
+
+#~ msgid "next!"
+#~ msgstr "järgmine!"
+
+#~ msgid "File"
+#~ msgstr "Fail"
+
+#~ msgid "original size"
+#~ msgstr "algne suurus"
+
+#~ msgid "current size"
+#~ msgstr "praegune suurus"
diff --git a/po/fi.gmo b/po/fi.gmo
new file mode 100644
index 0000000..21d39b0
--- /dev/null
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..4659640
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,954 @@
+# Finnish messages for sharutils.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+# Lauri Nurmi <lanurmi@iki.fi>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU sharutils 4.6\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2005-09-16 17:33+0300\n"
+"Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Tuntematon järjestelmävirhe"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: valitsin \"%s\" on moniselitteinen\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: valitsin \"--%s\" ei salli argumenttia\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: valitsin \"%c%s\" ei salli argumenttia\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: valitsin \"%s\" vaatii argumentin\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: tunnistamaton valitsin \"--%s\"\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: tunnistamaton valitsin \"%c%s\"\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: virheellinen valitsin -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: virheellinen valitsin -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: valitsin vaatii argumentin -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: valitsin \"-W %s\" on moniselitteinen\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: valitsin \"-W %s\" ei salli argumenttia\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "muisti lopussa"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Huom: md5summia ei tarkasteta. Harkitse GNU coreutils -paketin asentamista."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "VAROITUS: aikaleimoja ei palauteta. Harkitse GNU Fileutils -paketissa "
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+"levitettävän GNU:n \\\"touch\\\"-ohjelman hankkimista ja asentamista..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "lukkohakemiston luominen epäonnistui"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "lukkohakemiston luominen epäonnistui"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "lukkohakemiston luominen epäonnistui"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "ylikirjoita"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "ylikirjoita"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "ylikirjoita"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Liian monta hakemistoa mkdir-luontiin"
+
+#: src/shar.c:737
+#, fuzzy, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "lukkohakemiston luominen epäonnistui"
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "lukkohakemiston luominen epäonnistui"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Tiedostoa %s ei voi käyttää"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C on poistumassa käytöstä, käytä sen sijaan -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Nykyisen hakemiston nimeä ei voida selvittää"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Uusi tiedosto, jäljellä %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Raja edelleen %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "tiedoston"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "jatka osalla"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Aloitetaan tiedostoa %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Ei ole tavallinen tiedosto"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "shar(): jäljellä oleva koko %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "tyhjä"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(tyhjä)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Tiedostoa %s ei voi avata"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "tiivistetty"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gzip-tiivistetty"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "bzip-tiivistetty"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binääri"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(tiivistetty)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gzip-tiivistetty)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(bzip-tiivistetty)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binääri)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Haarauttaminen epäonnistui"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Tiedosto %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "teksti"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(teksti)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "ylikirjoitetaan"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "ylikirjoita"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "OHITETAAN"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "purku keskeytetty"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(tiedosto on jo olemassa)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Tallennetaan %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "puretaan"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "tiedoston"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "jatka osalla"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "Osan loppu"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "Arkiston loppu"
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "jatkuu osassa"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Pura osa 1 ensin!"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Pura osa 1 ensin!"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "OHITETAAN EDELLEEN"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "jatketaan tiedostoa"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "on täydellinen"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "puretaan tiedoston uu-koodaus"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "puretaan tiedoston tiivistys"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "puretaan tiedoston gzip-tiivistys"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "puretaan tiedoston bzip-tiivistys"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5-tarkastus epäonnistui"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "varataan tulostiedoston nimi"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Avataan \"%s\""
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Suljetaan \"%s\""
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Lisätietoja saa komennolla \"%s --help\".\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Käyttö: %s [VALITSIN]... [TIEDOSTO]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Pitkien valitsinten pakolliset argumentit ovat pakollisia myös lyhyille "
+"valitsimille.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Palautteen antaminen:\n"
+" --help näytä tämä ohje ja poistu\n"
+" --version näytä versiotiedot ja poistu\n"
+" -q, --quiet, --silent älä tulosta monisanaisia viestejä paikallisesti\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Tiedostojen valinta:\n"
+" -p, --intermix-type salli tilan vaihto tiedostoluetteloissa\n"
+" käyttäen -[BTzZ]\n"
+" -S, --stdin-file-list lue tiedostoluettelo vakiosyötteestä\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Tiedostojen valinta:\n"
+" -p, --intermix-type salli tilan vaihto tiedostoluetteloissa\n"
+" käyttäen -[BTz]\n"
+" -S, --stdin-file-list lue tiedostoluettelo vakiosyötteestä\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Tulosteen halkaiseminen:\n"
+" -o, --output-prefix=ETULIITE tulosta tiedostoihin ETULIITE.01 - ETULIITE."
+"NN\n"
+" -l, --whole-size-limit=KOKO halkaise arkisto, ei tiedostoja, KOKO "
+"kilotavuun\n"
+" -L, --split-size-limit=KOKO halkaise arkisto tai tiedostot KOKO "
+"kilotavuun\n"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Arkiston otsakkeiden säätely:\n"
+" -n, --archive-name=NIMI käytä NIMEä arkiston kuvailuun\n"
+" -s, --submitter=OSOITE kumoa lähettäjän nimi\n"
+" -a, --net-headers tulosta otsakkeet Submitted-by: ja Archinve-"
+"Name:\n"
+" -c, --cut-mark aloita arkisto katkaisurivillä\n"
+"\n"
+"Tiedostojen varastointitavan valinta:\n"
+" -M, --mixed-uuencode valitse uu-koodaus dynaamisesti\n"
+" -T, --text-files käsittele kaikki tiedostot tekstinä\n"
+" -B, --uuencode käsittele kaikki tiedostot binäärisinä, "
+"käyttäen\n"
+" uu-koodausta\n"
+" -z, --gzip gzip-tiivistä ja uu-koodaa kaikki tiedostot\n"
+" -g, --level-for-gzip=TASO anna gzip-ohjelmalle valitsin -TASO (oletus "
+"9)\n"
+" -j, --bzip2 bzip2-tiivistä ja uu-koodaa kaikki tiedostot\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress tiivistä ja uu-koodaa kaikki tiedostot\n"
+" -b, --bits-per-code=MÄÄRÄ anna valitsin -bMÄÄRÄ (oletus 12)\n"
+" compress-komennolle\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Suojaus siirtoa varten:\n"
+" -w, --no-character-count älä käytä koon tarkistamiseen komentoa \"wc -"
+"c\"\n"
+" -D, --no-md5-digest älä käytä varmentamiseen \"md5sum\"-"
+"koostetta\n"
+" -F, --force-prefix pakota etuliitemerkki jokaiselle riville\n"
+" -d, --here-delimiter=MJONO käytä MJONOa arkiston tiedostojen "
+"erottamiseen\n"
+"\n"
+"Erilaisten arkistojen tuottaminen:\n"
+" -V, --vanilla-operation tuota hyvin yksinkertaisia ja helppokäyttöisiä\n"
+" arkistoja\n"
+" -P, --no-piping käytä purkamisen aikana vain "
+"väliaikaistiedostoja\n"
+" -x, --no-check-existing ylikirjoita olemassaolevat tiedostot kysymättä\n"
+" -X, --query-user kysy käyttäjältä ennen ylikirjoitusta (älä "
+"käytä\n"
+" verkkoon tuleviin arkistoihin)\n"
+" -m, --no-timestamp älä palauta tiedostojen muutosaikoja\n"
+" -Q, --quiet-unshar vältä monisanaisia viestejä arkistoa "
+"purettaessa\n"
+" -f, --basename palauta yhteen hakemistoon, "
+"hakemistorakenteesta\n"
+" välitämättä\n"
+" --no-i18n älä tuota kansainvälistettyä "
+"kuorikomentotiedostoa\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Valitsin -o vaaditaan valitsimen -l tai -L kanssa, valitsin -n vaaditaan\n"
+"valitsimen -a kanssa.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+"Valitsin -g sisältää valitsimen -z, valitsin -b sisältää valitsimen -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Valitsin -g sisältää valitsimen -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Ilmoita ohjelmistovioista osoitteeseen <%s>.\n"
+"Suomennoksen virheistä voi ilmoittaa listalle <translation-team-fi@lists."
+"sourceforge.net>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "virheellinen tiedoston kokoraja \"%s\""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "virheellinen muoto (count-kenttä on liian leveä): \"%s\"\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUGia ei otettu käyttöön käännösaikana"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Kova raja %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+"Tämä järjestelmä ei tue valitsinta -Z (\"compress\"-ohjelma), käytä sen "
+"sijaan valitsinta -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Pehmeä raja %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "virheellinen tulostiedoston etuliite\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Tekijänoikeus © %s Free Software Foundation, Inc.\n"
+"Tämä on vapaa ohjelmisto; katso kopiointiehdot lähdekoodista. Takuuta EI\n"
+"ole, ei edes KAUPALLISESTI HYVÄKSYTTÄVÄSTÄ LAADUSTA tai SOPIVUUDESTA TIETTYYN TARKOITUKSEEN.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "VAROITUS: Yksinkertaisessa tilassa ei ole vuorovaikutteisuutta"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "VAROITUS: Ei-tekstin varastointivalinnat ohitettu"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Ei syötetiedostoja"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Valitsinta -a ei voi käyttää ilman valitsinta -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Valitsimia -l ja -L ei voi käyttää ilman valitsinta -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"VÄLTÄ valitsimella -X luotuja arkistoja keskusteluryhmissä ja julkisissa "
+"verkoissa"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Viimeinen osa on purettu"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Luotiin %d tiedostoa\n"
+
+#: src/shar.c:2310
+#, fuzzy, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "lukkohakemiston luominen epäonnistui"
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "lukkohakemiston luominen epäonnistui"
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Tiedostosta %s ei löytynyt kuorikomentoja"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s vaikuttaa pelkältä C-koodilta, ei kuoriarkistolta"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Tiedostosta %s ei löytynyt kuorikomentoja leikkauskohdan jälkeen."
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s ei todennäköisesti ole kuoriarkisto"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Leikkausriviä seurasi: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Käynnistetään \"sh\"-prosessi"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Pitkien valitsinten pakolliset argumentit ovat pakollisia myös lyhyille "
+"valitsimille.\n"
+"\n"
+" -d, --directory=HAKEMISTO siirry HAKEMISTOoon ennen purkua\n"
+" -c, --overwrite anna shar-komentotiedostolle valitsin -c\n"
+" tiedostojen ylikirjoittamiseksi\n"
+" -e, --exit-0 sama kuin \"--split-at=\"exit 0\" \"\n"
+" -E, --split-at=MJONO halkaise yhdistetyt arkistot MJONOn jälkeen\n"
+" -f, --force sama kuin \"-c\"\n"
+" --help näytä tämä ohje ja poistu\n"
+" --version näytä versiotiedot ja poistu\n"
+"\n"
+"Jos TIEDOSTOa ei anneta, luetaan vakiosyötettä.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Hakemistoon \"%s\" siirtyminen epäonnistui"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "varaa tiedostonimen puskuri"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "vakiosyöte"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "varaa tiedostopuskuri"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Kirjoitusvirhe"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Osittainen tiedosto"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Lopetusriviä \"end\" ei ole"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: dataa täytemerkin \"=\" jälkeen"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: virheellinen rivi"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Aloitusriviä \"begin\" ei ole"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Virheellinen ~käyttäjä"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Käyttäjää \"%s\" ei ole"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "tiedostoa %s ei voi käyttää"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "FIFO-putkeen (%s) ei kirjoiteta"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "symlinkkiä (%s) ei seurata"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Avataan \"%s\""
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Käyttö: %s [TIEDOSTO]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Pitkien valitsinten pakolliset argumentit ovat pakollisia myös lyhyille "
+"valitsimille.\n"
+" -o, --output-file=TIED ohjaa tuloste TIEDostoon\n"
+" --help näytä tämä ohje ja poistu\n"
+" --version tulosta versiotiedot ja poistu\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Kirjoitusvirhe"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Lukuvirhe"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Käyttö: %s [SYÖTETIEDOSTO] ETÄTIEDOSTO\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 käytä base64-koodausta RFC 1521:n mukaisesti\n"
+" --help näytä tämä ohje ja poistu\n"
+" --version tulosta versiotiedot ja poistu\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Avataan \"%s\""
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Aloitetaan tiedostoa %s\n"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[no, yes, all, quit] (no)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Pura osa"
+
+#~ msgid "next!"
+#~ msgstr "seuraavaksi!"
+
+#~ msgid "File"
+#~ msgstr "Tiedosto"
+
+#~ msgid "original size"
+#~ msgstr "alkuperäinen koko"
+
+#~ msgid "current size"
+#~ msgstr "nykyinen koko"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Arkistot on purettava järjestyksessä!"
+
+#~ msgid "lock directory"
+#~ msgstr "lukkohakemisto"
+
+#, fuzzy
+#~ msgid "created lock directory"
+#~ msgstr "lukkohakemisto"
+
+#, fuzzy
+#~ msgid "created %s"
+#~ msgstr "luotu"
+
+#, fuzzy
+#~ msgid "could not create %s"
+#~ msgstr "luominen epäonnistui"
+
+#~ msgid "restore of"
+#~ msgstr "tiedoston"
+
+#~ msgid "failed"
+#~ msgstr "palautus epäonnistui"
+
+#~ msgid "removed"
+#~ msgstr "poistettu"
+
+#~ msgid "failed to remove"
+#~ msgstr "poistaminen epäonnistui"
+
+#~ msgid "continue with part"
+#~ msgstr "jatka osalla"
+
+#~ msgid "End of"
+#~ msgstr "' '"
+
+#~ msgid "part"
+#~ msgstr "Osan loppu"
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..e08a7d1
--- /dev/null
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..034a68e
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,988 @@
+# Messages français pour GNU concernant sharutils.
+# Copyright © 2004 Free Software Foundation, Inc.
+# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-23 08:00-0500\n"
+"Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Erreur système inconnue."
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: l'option « %s » est ambiguë.\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: l'option « --%s » n'admet pas de paramètre.\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: l'option « %c%s » n'admet pas de paramètre.\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: l'option « %s » requiert un paramètre.\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: l'option « --%s » n'est pas reconnue.\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: l'option « %c%s » n'est pas reconnue.\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: l'option -- %c est illégale.\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: l'option -- %c est invalide.\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'option --%c exige un paramètre.\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: l'option « -W %s » est ambiguë\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: l'option « -W %s » n'admet pas d'argument\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "mémoire épuisée"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Note: pas de vérification des md5sums. Considérer l'installation de GNU "
+"coreutils."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "ATTENTION: les cachets des dates ne seront pas restaurés. Obtenir et"
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "installer `touch'\\'' de GNU, distribué dans GNU coreutils..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "le verrou du répertoire '${lock_dir}' existe"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "échec de création du verrou de répertoire."
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - verrou de répertoire créé `'%s\\''."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - échec de création du verrou de répertoire `'%s\\''."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "oui"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "écraser le fichier"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "non"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "escamoter le fichier"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "tous"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "écraser tous les fichiers"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "aucun"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "n'écraser aucun fichier"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "aide"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "expliciter les choix"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "quitter"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "quitter immédiatement"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Trop de répertoires à créer."
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - répertoire créé `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - échec de création du répertoire `%s'\\''."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Incapable d'accéder à %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "L'option -C tombe en désuétude, utilisez -Z de préférence."
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Incapable d'obtenir le nom du répertoire courant."
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Les archives doivent être dépaquetées en séquence!\n"
+"SVP dépaqueter la partie '`cat ${lock_dir}/seq`' ensuite."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Nouveau fichier, reste encore %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "La limite demeure %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "restauration de %s a échoué"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Fin du segment %d, poursuite avec le segment %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Traitement de %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: n'est pas un fichier régulier."
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "Dans « shar »: espace encore disponible %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "vide"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(vide)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Incapable d'ouvrir le fichier %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "de type « compress »"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "de type « gzip »"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "de type « bzip »"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binaire"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(format « compress »)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(format « gzip »)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(format « bzip »)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binaire)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Incapable de faire un clonage (fork)."
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Fichier %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "texte"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(texte)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "écrasement de %s"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "écraser de %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "ESCAMOTER %s"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "Extraction abandonnée."
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "ESCAMOTAGE de %s (le fichier existe déjà)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Compression de %s (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - extraction de %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "restauration de %s a échoué\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Fin du segment %ld, poursuite avec le segment %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Fin de %s segment %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "l'archive"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Fichier %s se poursuit dans le segment %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Prière de dépaqueter le premier segment d'abord!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Prière de dépaqueter le segment '${shar_sequence}' ensuite!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "ESCAMOTAGE TOUJOURS EN COURS %s"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "suite du fichier %s"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Le fichier %s est complet"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "uudécodage du fichier %s"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "décompression du fichier %s"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "décompression du fichier %s à l'aide de « gunzip »"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "décompression du fichier %s à l'aide de « bunzip »"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "La vérification MD5 a échouée."
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+"'AVERTISSEMENT de restauration warning: la taille de %s n'est pas %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "allocation du nom de ficheir de sortie"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Ouverture de « %s »"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Fermeture de « %s »"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pour en savoir davantage, faites: « %s --help ».\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Usage: %s [OPTION]... [FICHIER]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Les paramètres obligatoires pour les formes longues des options le sont "
+"aussi\n"
+"pour les formes courtes correspondantes.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Fournir de l'aide rétroactive:\n"
+" --help afficher l'aide-mémoire\n"
+" --version afficher le nom et la version du logiciel\n"
+" -q, --quiet, --silent ne pas afficher des messages trop longs\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Sélection des fichiers:\n"
+" -p, --intermix-type permettre -[BTzZ] dans la liste des fichiers pour "
+"changer le mode\n"
+" -S, --stdin-file-list lire la liste des fichiers à partir de l'entrée "
+"standard\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Sélection des fichiers:\n"
+" -p, --intermix-type permettre -[BTzZ] dans la liste des fichiers pour "
+"changer le mode\n"
+" -S, --stdin-file-list lire la liste des fichiers à partir de l'entrée "
+"standard\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Séparation de la sortie:\n"
+" -o, --output-prefix=PRÉFIXE produire la sortie dans les fichiers "
+"PREFIX.01 jusqu'à PREFIX.NN\n"
+" -l, --whole-size-limit=TAILLE scinder l'archive, pas les fichier, selon la "
+"TAILLE en kiloctets\n"
+" -L, --split-size-limit=TAILLE scinder l'archive, ou les fichiers, selon la "
+"TAILLLe en kiloctets\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Modes de contrôle des en-têtes:\n"
+" -n, --archive-name=NOM donner NOM comme titre de l'archive\n"
+" -s, --submitter=ADRESSE remplacer le nom du demandeur par défaut\n"
+" par l'ADRESSE\n"
+" -a, --net-headers générer les en-têtes: \"Submitted-by:\"\n"
+" et \"Archive-name:\"\n"
+" -c, --cut-mark insérer une ligne de démarcation au début (cut)\n"
+" -t, --translate traduire le message dans le script\n"
+"\n"
+"Sélection de la méthode de stockage:\n"
+" -M, --mixed-uuencode décider de l'uuencodage dynamiquement\n"
+" (option par défaut)\n"
+" -T, --text-files traiter tous les fichiers comme\n"
+" des fichiers de textes\n"
+" -B, --uuencode uuencoder tous les fichiers comme des "
+"binaires\n"
+" -z, --gzip comprimer avec « gzip » et uuencoder tous les "
+"fichiers\n"
+" -g, --level-for-gzip=NIVEAU passer -LEVEL (par défaut 9) à « gzip »\n"
+" -j, --bzip2 comprimer avec « bzip2 » et uuencoder tous "
+"les fichiers\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress compresser et uuencoder tous les fichiers\n"
+" -b, --bits-per-code=BITS utiliser -bBITS (par défaut 12) pour la "
+"compression\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Erreurs de transmission:\n"
+" -w, --no-character-count ne pas utiliser « wc -c » pour vérifier\n"
+" la taille en nombre de caractères\n"
+" -D, --no-md5-digest ne pas utiliser la somme de contrôle « "
+"md5sum »\n"
+" pour vérifier le contenu\n"
+" -F, --force-prefix placer le caractère préfixe sur chaque "
+"ligne\n"
+" -d, --here-delimiter=CHAÎNE délimiter chaque fichier d'archive par "
+"CHAÎNE\n"
+"\n"
+"Modalités d'archivage:\n"
+" -V, --vanilla-operation produire des archives simples et peu exigeantes\n"
+" -P, --no-piping utiliser des fichiers temporaires\n"
+" au moment du désarchivage\n"
+" -x, --no-check-existing écraser de façon aveugle les fichiers\n"
+" déjà existants\n"
+" -X, --query-user confirmer chaque écrasement (*pas* pour le "
+"réseau)\n"
+" -m, --no-timestamp ne pas restaurer les dates originales des "
+"fichiers\n"
+" -Q, --quiet-unshar inhiber le mode bavard pendant le désarchivage\n"
+" -f, --basename désarchiver tout au même niveau de répertoire\n"
+" --no-i18n ne pas produire un script non-internationalisé\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"L'option -o est requise pour -l ou -L, l'option -n est requise pour -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "L'option -g force -z, l'option -b force -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "L'option -g force l'option -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Rapporter toutes anomalies à <%s>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "limite `%s' invalide pour la taille de fichiers"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "format invlaide (champ trop grand pour le décompte): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG n'était pas configuré lors de la compilation"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Limite matérielle %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+"Le système ne supporte pas l'option -Z (compression), utiliser -z à la place."
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Limite logicielle %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "préfixe de sortie illégal\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright © %s Free Software Foundation, Inc.\n"
+"Ce logiciel est libre; voir les sources pour les conditions de \n"
+"reproduction. AUCUNE garantie n'est donnée; tant pour des raisons\n"
+"COMMERCIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr ""
+"AVERTISSEMENT: aucune interaction possible avec l'usager en mode « vanilla »."
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ATTENTION: annulation des options de stockage en mode non-texte."
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Aucun fichier à lire."
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "L'option -a requiert aussi l'option -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "L'option -l ou -L requiert aussi l'option -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"De grâce, évitez -X pour des archives devant transiter par réseaux publics"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Vous avez dépaqueté le dernier segment."
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "%d fichiers ont été créés.\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - retrait du verrou de répertoire `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - échec lors du retrait du verrou de répertoire `'%s\\''."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Aucune commande retrouvée dans %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s ressemble plus à du code C qu'à une archive de type « shar »."
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Aucune commande retrouvée après la ligne de démarcation (cut), dans %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s n'est probablement pas une archive de type « shar »."
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "La ligne de démarcation (cut) était suivie par %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Démarrage du processus « sh »."
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Les paramètres obligatoires pour les formes longues des options le sont "
+"aussi\n"
+"pour les formes courtes correspondantes.\n"
+"\n"
+" -d, --directory=RÉP effectuer le dépaquetage dans le RÉPertoire\n"
+" -c, --overwrite relayer -c au script shar pour réécrire les "
+"fichiers\n"
+" -e, --exit-0 identique à --split-at=\"exit 0\"»\n"
+" -E, --split-at=CHAÎNE scinder les archives concaténées après CHAÎNE\n"
+" -f, --force identique à -c\n"
+" --help afficher l'aide-mémoire\n"
+" --version afficher le nom et la version du logiciel\n"
+"\n"
+"Sans FICHIER, la lecture s'effectue à partir de l'entrée standard.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Ne peut changer le répertoire à « %s »"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "allocation d'un tampon de nom de fichier"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "entrée standard"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "allocation du tampon de fichier"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: erreur d'écriture"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: fichier tronqué."
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: ligne de démarcation de la fin (end) est manquante."
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: quelque chose après un « = » de remplissage."
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: ligne illégale."
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: ligne de démarcation du début (begin) est manquante."
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ~usager illégal."
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: n'est pas un usager « %s »"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "ne peut accéder %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "écriture interdite en PEPS (FIFO) (sur %s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "ne suit pas le lien symbolique (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "fropen de %s"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "chmod de %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Usage: %s [FICHIER]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Les paramètres obligatoires pour les formes longues des options le sont\n"
+"aussi pour les formes courtes correspondantes.\n"
+"\n"
+" -o, --output-file=FICHIER rediriger la sortie vers le FICHIER\n"
+" --help afficher l'aide-mémoire\n"
+" --version afficher le nom et la version du logiciel\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Erreur d'écriture."
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Erreur de lecture."
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Usage: %s [FICHIER_LOCAL] FICHIER_ELOIGNÉ\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 utiliser l'encodage base64, tel que décrit\n"
+" dans le RFC1521\n"
+" --help afficher l'aide-mémoire\n"
+" --version afficher le nom et la version du logiciel\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "ouverture par fopen %s"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "acquisition des stats par fstat %s"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[no=non, yes=oui, all=tout, quit=quitter] (n)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Prière de dépaqueter le segment"
+
+#~ msgid "next!"
+#~ msgstr "ensuite!"
+
+#~ msgid "File"
+#~ msgstr "Le fichier"
+
+#~ msgid "original size"
+#~ msgstr "taille originale"
+
+#~ msgid "current size"
+#~ msgstr "taillle courante"
+
+#~ msgid "lock directory"
+#~ msgstr "Création du verrou de répertoire."
+
+#~ msgid "created"
+#~ msgstr "créé"
+
+#~ msgid "failed to create"
+#~ msgstr "Ne peut créer le verrou de répertoire."
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Les archives doivent être dépaquetées dans l'ordre!"
+
+#~ msgid "failed"
+#~ msgstr "n'a pas réussi"
+
+#~ msgid "End of"
+#~ msgstr "Fin de"
+
+#~ msgid "part"
+#~ msgstr "segment"
+
+#~ msgid "removed"
+#~ msgstr "détruit"
+
+#~ msgid "failed to remove"
+#~ msgstr "échec de destruction"
+
+#~ msgid ""
+#~ "\n"
+#~ "Giving feedback:\n"
+#~ " --help display this help and exit\n"
+#~ " --version output version information and exit\n"
+#~ " -q, --quiet, --silent do not output verbose messages locally\n"
+#~ "\n"
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ "\n"
+#~ "Splitting output:\n"
+#~ " -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=SIZE split archive, not files, to SIZE "
+#~ "kilobytes\n"
+#~ " -L, --split-size-limit=SIZE split archive, or files, to SIZE "
+#~ "kilobytes\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Modes informatifs de sortie:\n"
+#~ " --help afficher l'aide-mémoire\n"
+#~ " --version afficher le nom et la version du logiciel\n"
+#~ " -q, --quiet, --silent inhiber le mode bavard\n"
+#~ "\n"
+#~ "Choix des fichiers:\n"
+#~ " -p, --intermix-type autoriser -[BTzZ] le changement de mode de\n"
+#~ " traitement sur les fichiers de la liste\n"
+#~ " -S, --stdin-file-list lire la liste des fichiers à partir de\n"
+#~ " l'entrée standard\n"
+#~ "\n"
+#~ "Découpage de la sortie:\n"
+#~ " -o, --output-prefix=PREFIXE produire le fichier d'archive selon\n"
+#~ " des fichiers segments portant le nom de\n"
+#~ " PREFIXE.01 à PREFIXE.NN\n"
+#~ " -l, --whole-size-limit=N scinder le fichier d'archive en segments "
+#~ "dont\n"
+#~ " la taille sera de N kilo-octets\n"
+#~ " -L, --split-size-limit=N scinder le fichier d'archive en segments "
+#~ "dont\n"
+#~ " fichiers auront une taille de N kilo-"
+#~ "octets\n"
+
+#~ msgid "Report bugs to <bug-gnu-utils@prep.ai.mit.edu>.\n"
+#~ msgstr ""
+#~ "Rapporter toutes anomalies à l'adresse: <bug-gnu-utils@prep.ai.mit.edu>.\n"
diff --git a/po/ga.gmo b/po/ga.gmo
new file mode 100644
index 0000000..8d805cc
--- /dev/null
+++ b/po/ga.gmo
Binary files differ
diff --git a/po/ga.po b/po/ga.po
new file mode 100644
index 0000000..241dab2
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,923 @@
+# Irish translations for sharutils.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+# Alastair McKinstry <mckinstry@computer.org>, 1998.
+# Kevin Patrick Scannell <scannell@SLU.EDU>, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-22 18:52-0500\n"
+"Last-Translator: Kevin Patrick Scannell <scannell@SLU.EDU>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Earráid anaithnid chórais"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: Tá an rogha `%s' débhríoch\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `--%s'\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `%c%s'\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: tá argóint de dhíth i ndiaidh na rogha `%s'\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: rogha anaithnid `--%s'\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: rogha anaithnid `%c%s'\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: rogha neamhcheadaithe -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: rogha neamhbhailí -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: tá argóint de dhíth i ndiaidh na rogha -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: Tá an rogha `-W %s' débhríoch\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `-W %s'\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "cuimhne ídithe"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Nóta: ní fhíorófar suimeanna MD5. Ba chóir duit coreutils GNU a shuiteáil "
+"(le fáil as Gaeilge freisin)."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "RABHADH: ní athchóireofar na stampaí ama. Ba chóir duit\""
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "`touch' GNU á shuiteáil, dáilte mar chuid de coreutils GNU..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "tá comhadlann ghlasála '${lock_dir}' ann"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "theip ar chruthú na comhadlainne glasála"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "z - cruthaíodh comhadlann ghlasála `'%s\\''."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - theip ar chruthú na comhadlainne glasála `'%s\\''."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "forscríobh"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "forscríobh an comhad seo"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "ná forscríobh"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "lig an comhad seo thart"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "gach comhad"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "forscríobh gach comhad"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "neamhní"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "ná forscríobh comhad ar bith"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "cabhair"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "mínigh na roghanna"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "scoir"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "scoir anois láithreach"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "An iomarca comhadlann le haghaidh cruthaithe ag mkdir"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - cruthaíodh comhadlann `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - theip ar chruthú na comhadlainne `%s'\\''."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Ní féidir %s a rochtain"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "tá -C i léig; bain úsáid as -Z ina áit"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Ní féidir ainm na comhadlainne reatha a fháil"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Ní mór cartlanna a dhíphacáil in ord!\n"
+"Ba chóir duit páirt '`cat ${lock_dir}/seq`' a dhíphacáil anois."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Comhad nua, fágtha: %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Teorainn = %s fós\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "theip ar athchóiriú de %s"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Deireadh %d, lean ar aghaidh leis an bpáirt %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Comhad %s á thosú\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Ní gnáthchomhad é"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "Sa chartlann: méid fágtha: %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "folamh"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(folamh)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Ní féidir comhad %s a oscailt"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "comhbhrúite"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "comhbhrúite le gzip"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "comhbhrúite le bzip"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "dénártha"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(comhbhrúite)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(comhbhrúite le gzip)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(comhbhrúite le bzip)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(dénártha)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Níorbh fhéidir forc a dhéanamh"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Comhad %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "téacs"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(téacs)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "%s á fhorscríobh"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "forscríobh %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "%s Á LIGEAN THART"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "tobscoireadh an bhaint amach"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "%s Á LIGEAN THART (tá an comhad ann cheana)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "%s á shábháil (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - %s %s á bhaint amach"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "theip ar athchóiriú de %s\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Deireadh %ld, lean ar aghaidh leis an bpáirt %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Deireadh %s, páirt %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "cartlann"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Comhad %s leanta ar aghaidh i bpáirt %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Díphacáil páirt a haon ar dtús, le do thoil!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Díphacáil páirt '${shar_sequence}' anois, le do thoil!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "%s Á LIGEAN THART FÓS"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "comhad %s á leanúint ar aghaidh"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Comhad %s curtha i gcrích"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "comhad %s á dhíchódú le uudecode"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "comhad %s á dhí-chomhbhrú"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "comhad %s á dhí-chomhbhrú le gunzip"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "comhad %s á dhí-chomhbhrú le bunzip"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "theip ar sheiceáil MD5"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'rabhadh athbhunaithe: ní ionann méid de %s agus %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "ainm an aschomhaid á dháileadh"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "`%s' á oscailt"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "`%s' á dhúnadh"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Bain triail as `%s --help' chun tuilleadh eolais a fháil.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Úsáid: %s [ROGHA]... [COMHAD]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Is riachtanach le rogha ghearr aon argóint atá riachtanach leis an rogha "
+"fhada.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Aiseolas:\n"
+" --help taispeáin an chabhair seo agus scoir\n"
+" --version taispeáin eolas faoin leagan agus scoir\n"
+" -q, --quiet, --silent ná taispeáin teachtaireachtaí foclacha go logánta\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Roghnú comhad:\n"
+" -p, --intermix-type ceadaigh -[BTzZ] i liosta comhad chun an mód a "
+"athrú\n"
+" -S, --stdin-file-list léigh liosta comhad ón ionchur caighdeánach\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Roghnú comhad:\n"
+" -p, --intermix-type ceadaigh -[BTz] i liosta comhad chun an mód a "
+"athrú\n"
+" -S, --stdin-file-list léigh liosta comhad ón ionchur caighdeánach\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Roinnt an aschuir:\n"
+" -o, --output-prefix=RÉIMÍR scríobh RÉIMÍR.01 go RÉIMÍR.NN i gcomhad\n"
+" -l, --whole-size-limit=MÉID roinn cartlann (amháin), MÉID KB ar a mhéad\n"
+" -L, --split-size-limit=MÉID roinn cartlann nó comhaid, MÉID KB ar a "
+"mhéad\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Rialú na gceanntásc sa chartlann:\n"
+" -n, --archive-name=AINM úsáid AINM chun an chartlann a dhoiciméadú\n"
+" -s, --submitter=SEOLADH sáraigh an t-ainm `Submitted-by'\n"
+" -a, --net-headers úsáid ceanntásca Submitted-by: & Archive-name:\n"
+" -c, --cut-mark tosaigh an chartlann le líne `cut'\n"
+" -t, --translate aistrigh teachtaireachtaí sa script\n"
+"\n"
+"Conas a líontar comhaid:\n"
+" -M, --mixed-uuencode socraigh úsáid de uuencode go dinimiciúil "
+"(réamhshocrú)\n"
+" -T, --text-files déileáil le gach comhad mar ghnáth-théacs\n"
+" -B, --uuencode déileáil le gach comhad mar dhénártha, úsáid "
+"uuencode\n"
+" -z, --gzip úsáid gzip agus uuencode ar gach comhad\n"
+" -g, --level-for-gzip=LBHL seachaid -LBHL (réamhshocrú=9) go gzip\n"
+" -j, --bzip2 úsáid bzip2 agus uuencode ar gach comhad\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress comhbhrúigh agus rith uuencode ar gach "
+"comhad\n"
+" -b, --bits-per-code=GIOTÁIN seol -bGIOTÁIN (réamhshocrú 12) go "
+"`compress'\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Cosaint ar tharchur:\n"
+" -w, --no-character-count ná húsáid `wc -c' chun an méid a sheiceáil\n"
+" -D, --no-md5-digest ná fíoraigh le díolaim `md5sum'\n"
+" -F, --force-prefix éiligh an carachtar réimíre ar gach líne\n"
+" -d, --here-delimiter=TEAGHRÁN úsáid TEAGHRÁN idir na comhaid sa chartlann\n"
+"\n"
+"Cruthú cartlanna difriúla:\n"
+" -V, --vanilla-operation cruthaigh cartlanna an-shimplí agus an-éasca\n"
+" -P, --no-piping úsáid comhaid shealadacha amháin ag am `unshar'\n"
+" -x, --no-check-existing forscríobh comhaid atá ann, gan idirdhealú\n"
+" -X, --query-user fiafraigh roimh fhorscríobh aon chomhad (seachas "
+"Líonra)\n"
+" -m, --no-timestamp ná hathchóirigh amanna mionathraithe\n"
+" -Q, --quiet-unshar ná taispeáin teachtaireachtaí foclacha ag am "
+"`unshar'\n"
+" -f, --basename athchóirigh i gcomhadlann aonair, d'ainneoin "
+"ordlathas\n"
+" --no-i18n ná cruthaigh script idirnáisiúntaithe bhlaoisce\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Tá gá le rogha -o in éineacht le -l nó -L, agus rogha -n in éineacht le -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+"Úsáidtear -z go huathoibríoch nuair a shonraítear -g, agus ar an nós céanna "
+"úsáidtear -Z le -b.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Úsáidtear -z go huathoibríoch nuair a shonraítear -g.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Seol tuairiscí fabhtanna chuig <%s>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "uasmhéid neamhbhailí na gcomhad `%s'"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "formáid neamhbhailí (réimse líonta róleathan): `%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "Níor úsáideadh DEBUG ag am tiomsaithe"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Uasteorainn chrua %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Ní thacaíonn an córas seo le -Z ('compress'), úsáid -z ina ionad"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Uasteorainn bhog %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "réimír neamhcheadaithe aschurtha\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright © %s Free Software Foundation, Inc.\n"
+"Is saorbhogearra é an ríomhchlár seo; féach ar an bhunchód le haghaidh\n"
+"coinníollacha cóipeála. Níl baránta ar bith ann; go fiú níl baránta ann\n"
+"d'INDÍOLTACHT nó FEILIÚNACHT D'FHEIDHM AR LEITH.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "RABHADH: níl idirghníomhú leis an úsáideoir sa mhód fanaile"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "RABHADH: Sáraíodh roghanna stórála neamhthéacs"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Gan inchomhaid"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Ní féidir rogha -a a úsáid gan -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Ní féidir rogha -l nó -L a úsáid gan -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "LE DO THOIL, seachain cartlanna -X ar Usenet nó líonraí poiblí eile"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Tá an pháirt deiridh díphacáilte agat"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Cruthaíodh %d comhad\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - baineadh comhadlann ghlasála `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - theip ar bhaint na comhadlainne glasála `'%s\\''."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Níor aimsíodh ordú ar bith i %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "Is dealraitheach %s le cód amh C, ní cosúil le cartlann bhlaoisce"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Níor aimsíodh aon ordú blaoisce i ndiaidh `cut' i %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "is dócha nach bhfuil %s ina chartlann bhlaoisce"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Is é seo a leanann an líne `cut': %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Próiseas `sh' á thosú"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Is riachtanach le rogha ghearr aon argóint atá riachtanach\n"
+"leis an rogha fhada.\n"
+"\n"
+" -d, --directory=COMHADLANN athraigh go COMHADLANN roimh dhíphacáil\n"
+" -c, --overwrite seachaid -c go script `shar' chun comhaid a "
+"fhorscríobh\n"
+" -e, --exit-0 ar comhbhrí le `--split-at=\"exit 0\"'\n"
+" -E, --split-at=TEAGHRÁN roinn cartlanna ceangailte tar éis TEAGHRÁN\n"
+" -f, --force ar comhbhrí le `-c'\n"
+" --help taispeáin an chabhair seo agus scoir\n"
+" --version taispeáin eolas faoin leagan agus scoir\n"
+"\n"
+"Mura bhfuil COMHAD ann, léigh ón ionchur caighdeánach.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Ní féidir an chomhadlann oibre a athrú go `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "dáil maolán le haghaidh comhadainm"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "ionchur caighdeánach"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "dáil maolán le haghaidh comhaid"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Earráid sa scríobh"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Comhad gearr"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Gan líne `end'"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: tá sonraí ann tar éis an charachtair stuála `='"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: líne neamhcheadaithe"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Gan líne `begin'"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ~Úsáideoir neamhcheadaithe"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Níl aon úsáideoir darb ainm `%s'"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "Ní féidir %s a rochtain"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "níor ceadaíodh FIFO a scríobh (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "ní leanfar nasc siombalach (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "%s á oscailt le freopen"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "chmod de %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Úsáid: %s [COMHAD]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Is riachtanach le rogha ghearr aon argóint atá riachtanach leis an rogha "
+"fhada.\n"
+" -o, --output-file=COMHAD scríobh i gCOMHAD go díreach\n"
+" --help taispeáin an chabhair seo agus scoir\n"
+" --version taispeáin eolas faoin leagan agus scoir\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Earráid sa scríobh"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Earráid sa léamh"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Úsáid: %s [INCHOMHAD] CIANCHOMHAD\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 úsáid ionchódú base64 de réir RFC1521\n"
+" --help taispeáin an chabhair seo agus scoir\n"
+" --version taispeáin eolas faoin leagan agus scoir\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "%s á oscailt le fopen"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "%s á léamh le fstat"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[níl, tá, uile, scoir] (níl)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Díphacáil páirt, le do thoil"
+
+#~ msgid "next!"
+#~ msgstr "ar aghaidh!"
+
+#~ msgid "File"
+#~ msgstr "Comhad"
+
+#~ msgid "original size"
+#~ msgstr "bunmhéid"
+
+#~ msgid "current size"
+#~ msgstr "méid faoi láthair"
+
+# lock not verb
+#~ msgid "lock directory"
+#~ msgstr "comhadlann ghlasála"
+
+#~ msgid "created"
+#~ msgstr "cruthaithe"
+
+#~ msgid "failed to create"
+#~ msgstr "theip ar chruthú"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Ní mór cartlanna a dhíphacáil in ord!"
+
+#~ msgid "failed"
+#~ msgstr "teipthe"
+
+#~ msgid "End of"
+#~ msgstr "Deireadh"
+
+#~ msgid "part"
+#~ msgstr "páirt"
+
+#~ msgid "removed"
+#~ msgstr "bainte"
+
+#~ msgid "failed to remove"
+#~ msgstr "theip ar bhaint"
diff --git a/po/gl.gmo b/po/gl.gmo
new file mode 100644
index 0000000..d16fff2
--- /dev/null
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..7ef93e9
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,986 @@
+# Galician translation of sharutils.
+# Copyright (C) 2000 Free Software Foundation, Inc
+# Jesús Bravo Álvarez <jba@pobox.com>, 2000.
+#
+# Se desexas colaborar connosco na traducción de programas libres ó galego,
+# vai mira-la páxina do noso grupo: http://www.ctv.es/USERS/jtarrio/trans
+#
+# First Version: 2000-01-22 00:01+0100
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.2c\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2000-05-30 09:45+0200\n"
+"Last-Translator: Jesús Bravo Álvarez <jba@pobox.com>\n"
+"Language-Team: Galician <gpul-traduccion@ceu.fi.udc.es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Erro de sistema descoñecido"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: a opción `%s' é ambigua\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: a opción `--%s' non permite ningún argumento\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: a opción `%c%s' non permite ningún argumento\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: a opción `%s' require un argumento\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opción `--%s' descoñecida\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opción `%c%s' descoñecida\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opción ilegal -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opción inválida -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: a opción require un argumento -- %c\n"
+
+#: lib/getopt.c:881
+#, fuzzy, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: a opción `%s' é ambigua\n"
+
+#: lib/getopt.c:899
+#, fuzzy, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: a opción `--%s' non permite ningún argumento\n"
+
+#: lib/xmalloc.c:67
+#, fuzzy
+msgid "memory exhausted"
+msgstr "Memoria esgotada"
+
+#: src/shar.c:608
+#, fuzzy
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"AVISO: non se están a restablece-las datas. Considere obter e instalar"
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+"AVISO: non se están a restablece-las datas. Considere obter e instalar"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "GNU \\`touch', distribuído coas Utilidades de Ficheiro de GNU..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "fallo ó crea-lo directorio de bloqueo"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "fallo ó crea-lo directorio de bloqueo"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "fallo ó crea-lo directorio de bloqueo"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "¿sobrescribir"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "¿sobrescribir"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "¿sobrescribir"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Demasiados directorios para xerar co mkdir"
+
+#: src/shar.c:737
+#, fuzzy, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "fallo ó crea-lo directorio de bloqueo"
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "fallo ó crea-lo directorio de bloqueo"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Non se pode acceder a %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C vai ficar obsoleta, utilice -Z no seu lugar"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Non se pode obte-lo nome do directorio actual"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, fuzzy, c-format
+msgid "New file, remaining %s, "
+msgstr "Novo ficheiro, quedan %ld, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, fuzzy, c-format
+msgid "Limit still %s\n"
+msgstr "O límite é aínda %d\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "a recuperación de"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "siga coa parte"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Comezando ficheiro %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Non é un ficheiro normal"
+
+#: src/shar.c:1067
+#, fuzzy, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "No shar: queda un tamaño de %ld\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "baleiro"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(baleiro)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Non se pode abri-lo ficheiro %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "comprimido"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "comprimido con gzip"
+
+#: src/shar.c:1150
+#, fuzzy
+msgid "bzipped"
+msgstr "comprimido con gzip"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binario"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(comprimido)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(comprimido con gzip)"
+
+#: src/shar.c:1154
+#, fuzzy
+msgid "(bzipped)"
+msgstr "(comprimido con gzip)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binario)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Non se puido facer un \"fork\""
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Ficheiro %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "texto"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(texto)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "sobrescribindo"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "¿sobrescribir"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "extracción abortada"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(o ficheiro xa existe)"
+
+#: src/shar.c:1272
+#, fuzzy, c-format
+msgid "Saving %s (%s)"
+msgstr "gardando %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "extraendo"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "a recuperación de"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "siga coa parte"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "Fin da parte"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "arquivo"
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "continúase na parte"
+
+#: src/shar.c:1456
+#, fuzzy
+msgid "Please unpack part 1 first!"
+msgstr "por favor, desempaquete primeiro a parte 1"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "por favor, desempaquete primeiro a parte 1"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "continuando o ficheiro"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "está completo"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "uu-decodificando ficheiro"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "descomprimindo ficheiro"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "descomprimindo con gunzip o ficheiro"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "descomprimindo con gunzip o ficheiro"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "a comprobación MD5 fallou"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Abrindo `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Pechando `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Probe `%s --help' para máis información.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Uso: %s [OPCIÓN]... [FICHEIRO]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Os argumentos obrigatorios para as opcións longas son tamén obligatorios "
+"para\n"
+"as opcións curtas.\n"
+
+#: src/shar.c:1730
+#, fuzzy
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+" -m, --base64 usar codificación base64 como no RFC1521\n"
+" --help amosar esta axuda e saír\n"
+" --version amosa-la información da versión e saír\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Controlando as cabeceiras do shar:\n"
+" -n, --archive-name=NOME usar NOME para documenta-lo arquivo\n"
+" -s, --submitter=ENDEREZO sustitui-lo nome do creador\n"
+" -a, --net-headers escribir cabeceiras Submitted-by: e Archive-"
+"name:\n"
+" -c, --cut-mark comeza-lo shar cunha liña de corte\n"
+"\n"
+"Escollendo o modo de almacenamento:\n"
+" -M, --mixed-uuencode decidir uuencode dinámicamente (defecto)\n"
+" -T, --text-files considerar tódolos ficheiros como texto\n"
+" -B, --uuencode considerar tódolos ficheiros como binarios,\n"
+" usar uuencode\n"
+" -z, --gzip aplicar gzip e uuencode a tódolos ficheiros\n"
+" -g, --level-for-gzip=NIVEL pasarlle -NIVEL (9 por omisión) a gzip\n"
+" -Z, --compress aplicar compress e uuencode a tódolos "
+"ficheiros\n"
+" -b, --bits-per-code=BITS pasarlle -bBITS (12 por omisión) a compress\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Protexendo os erros de transmisión:\n"
+" -w, --no-character-count non usar `wc -c' para comproba-lo tamaño\n"
+" -D, --no-md5-digest non usa-lo resume `md5sum' para comprobar\n"
+" -F, --force-prefix forza-lo carácter de prefixo en tódalas "
+"liñas\n"
+" -d, --here-delimiter=CADEA usar CADEA para delimita-los ficheiros no "
+"shar\n"
+"\n"
+"Producindo diferentes clases de shars:\n"
+" -V, --vanilla-operation producir shars moi sinxelos e sen preguntas\n"
+" -P, --no-piping usar ficheiros temporais exclusivamente no "
+"momento\n"
+" de facer unshar\n"
+" -x, --no-check-existing sobrescribi-los ficheiros que xa existan sen\n"
+" se preocupar\n"
+" -X, --query-user preguntar ó usuario antes de sobrescribi-los\n"
+" ficheiros (non para Internet)\n"
+" -m, --no-timestamp non restaura-la data de modificación dos "
+"ficheiros\n"
+" -Q, --quiet-unshar evitar mensaxes pormenorizadas ó face-lo unshar\n"
+" -f, --basename restaurar nun directorio, a pesar da xerarquía\n"
+" --no-i18n non producir un script de shell "
+"internacionalizado\n"
+
+#: src/shar.c:1800
+#, fuzzy
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Requérese a opción -o con -l ou -L, requérese a opción -n con -a.\n"
+"A opción -g implica -z, a opción -b implica -Z.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr ""
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "Non se escolleu DEBUG ó compilar"
+
+#: src/shar.c:1986
+#, fuzzy, c-format
+msgid "Hard limit %s\n"
+msgstr "Límite duro %dk\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+
+#: src/shar.c:2061
+#, fuzzy, c-format
+msgid "Soft limit %s\n"
+msgstr "Límite suave %dk\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Isto é software libre; mire o código fonte para as condicións de copia. Non\n"
+"hai NINGUNHA garantía; nin sequera de MERCABILIDADE ou VALIDEZ PARA UN FIN\n"
+"PARTICULAR.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "AVISO: Non hai interacción co usuario no modo `vanilla'"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "AVISO: As opcións de almacenamento non de texto están a ser ignoradas"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Non hai ficheiros de entrada"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Non se pode usa-la opción -a sen -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Non se pode usa-la opción -l ou -L sen -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "POR FAVOR, evite os shar -X en Usenet ou en redes públicas"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Desempaquetouse a última parte"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Creáronse %d ficheiros\n"
+
+#: src/shar.c:2310
+#, fuzzy, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "fallo ó crea-lo directorio de bloqueo"
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "fallo ó crea-lo directorio de bloqueo"
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Non se atoparon comandos de shell en %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s semella código C, non un arquivo de shell"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Non se atopou ningún comando de shell despois da liña de corte en %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s probablemente non é un arquivo de shell"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "A liña de corte estaba seguida por: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Executando o proceso `sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Os argumentos obrigatorios para as opcións longas son tamén obligatorios "
+"para\n"
+"as opcións curtas.\n"
+"\n"
+" -d, --directory=DIRECTORY cambiar a DIRECTORIO antes de desempaquetar\n"
+" -c, --overwrite pasarlle -c ó script shar para sobrescribir\n"
+" ficheiros\n"
+" -e, --exit-0 o mesmo que `--split-at=\"exit 0\"'\n"
+" -E, --split-at=CADEA dividir shars concatenados despois de CADEA\n"
+" -f, --force o mesmo que `-c'\n"
+" --help amosar esta axuda e saír\n"
+" --version amosa-la información da versión e saír\n"
+"\n"
+"Se non se indica FICHEIRO, lese da entrada estándar.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Non se pode cambiar ó directorio `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "entrada estándar"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, fuzzy, c-format
+msgid "%s: Write error"
+msgstr "Erro de escritura"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Ficheiro curto"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Non hai liña `end'"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: datos tralo carácter de recheo `='"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: liña ilegal"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Non hai liña `begin'"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ~usuario ilegal"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Non hai tal usuario `%s'"
+
+#: src/uudecode.c:390
+#, fuzzy, c-format
+msgid "cannot access %s"
+msgstr "Non se pode acceder a %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr ""
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr ""
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Abrindo `%s'"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Uso: %s [FICHEIRO]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Os argumentos obrigatorios para as opcións longas son tamén obligatorios "
+"para\n"
+"as opcións curtas.\n"
+" -o, --output-file=FICHEIRO redirixir a saída a FICHEIRO\n"
+" --help amosar esta axuda e saír\n"
+" --version amosa-la información da versión e saír\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Erro de escritura"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Erro de lectura"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Uso: %s [FICH-ENTRADA] FICH-REMOTO\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 usar codificación base64 como no RFC1521\n"
+" --help amosar esta axuda e saír\n"
+" --version amosa-la información da versión e saír\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Abrindo `%s'"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Comezando ficheiro %s\n"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[non (n), si (y), todos (a), saír (q)] (non)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Por favor, desempaquete a parte"
+
+#~ msgid "next!"
+#~ msgstr "trala anterior"
+
+#, fuzzy
+#~ msgid "File"
+#~ msgstr "ficheiro"
+
+#~ msgid "original size"
+#~ msgstr "tamaño orixinal"
+
+#~ msgid "current size"
+#~ msgstr "tamaño actual"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Debe desempaqueta-los arquivos en secuencia"
+
+#~ msgid "lock directory"
+#~ msgstr "directorio de bloqueo"
+
+#, fuzzy
+#~ msgid "created lock directory"
+#~ msgstr "directorio de bloqueo"
+
+#, fuzzy
+#~ msgid "created %s"
+#~ msgstr "creado"
+
+#, fuzzy
+#~ msgid "could not create %s"
+#~ msgstr "fallo ó crealo"
+
+#~ msgid "restore of"
+#~ msgstr "a recuperación de"
+
+#~ msgid "failed"
+#~ msgstr "fallou"
+
+#~ msgid "removed"
+#~ msgstr "borrado"
+
+#~ msgid "failed to remove"
+#~ msgstr "fallo ó borralo"
+
+#~ msgid "continue with part"
+#~ msgstr "siga coa parte"
+
+#, fuzzy
+#~ msgid "End of"
+#~ msgstr "fin de"
+
+#~ msgid "part"
+#~ msgstr "parte"
+
+#~ msgid ""
+#~ "\n"
+#~ "Giving feedback:\n"
+#~ " --help display this help and exit\n"
+#~ " --version output version information and exit\n"
+#~ " -q, --quiet, --silent do not output verbose messages locally\n"
+#~ "\n"
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ "\n"
+#~ "Splitting output:\n"
+#~ " -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=SIZE split archive, not files, to SIZE "
+#~ "kilobytes\n"
+#~ " -L, --split-size-limit=SIZE split archive, or files, to SIZE "
+#~ "kilobytes\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Obtendo información:\n"
+#~ " --help amosar esta axuda e saír\n"
+#~ " --version amosa-la información da versión e saír\n"
+#~ " -q, --quiet, --silent non escribir mensaxes pormenorizadas "
+#~ "localmente\n"
+#~ "\n"
+#~ "Escollendo os ficheiros:\n"
+#~ " -p, --intermix-type permitir -[BTzZ] nas listas de ficheiros para\n"
+#~ " cambia-lo modo\n"
+#~ " -S, --stdin-file-list le-la lista de ficheiros da entrada estándar\n"
+#~ "\n"
+#~ "Dividindo a saída:\n"
+#~ " -o, --output-prefix=PREFIXO escribir ós ficheiros PREFIXO.01 a "
+#~ "PREFIXO.NN\n"
+#~ " -l, --whole-size-limit=TAMAÑO dividi-lo arquivo, non os ficheiros, en\n"
+#~ " TAMAÑO kilobytes\n"
+#~ " -L, --split-size-limit=TAMAÑO dividi-lo arquivo, ou os ficheiros, en\n"
+#~ " TAMAÑO kilobytes\n"
+
+#~ msgid "Report bugs to <bug-gnu-utils@prep.ai.mit.edu>.\n"
+#~ msgstr "Comunique os erros a <bug-gnu-utils@prep.ai.mit.edu>.\n"
+
+#~ msgid "skipping"
+#~ msgstr "saltando"
+
+#~ msgid "still skipping"
+#~ msgstr "saltando"
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644
index 0000000..cd56ff0
--- /dev/null
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..6d46b42
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,950 @@
+# Hungarian translation of the GNU sharutils.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Gábor István <stive@mezobereny.hu>, 2002.
+# This file is distributed under the same license as the PACKAGE package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils-4.3.70\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2002-08-05 11:43GMT\n"
+"Last-Translator: Gábor István <stive@mezobereny.hu>\n"
+"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 0.9.5\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Ismeretlen rendszerhiba"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: a `%s' kapcsoló nem egyértelmû\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: a `--%s' kapcsoló nem enged meg argumentumot\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: a `%c%s' kapcsoló nem enged meg argumentumot\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: a `%s' kapcsolóhoz argumentum szükséges\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: a `--%s' kapcsoló ismeretlen\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: a `%c%s' kapcsoló ismeretlen\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: illegális kapcsoló -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: érvénytelen kapcsoló -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: a kapcsolónak szüksége van egy argumentumra -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: a `-W %s' kapcsoló nem egyértelmû\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: a `-W %s' kapcsoló nem enged meg argumentumot\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "elfogyott a memória"
+
+#: src/shar.c:608
+#, fuzzy
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr "FIGYELEM: nem lehet helyre állítani az idõbélyeget. Szerezze be a és"
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "FIGYELEM: nem lehet helyre állítani az idõbélyeget. Szerezze be a és"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+"telepítse a GNU \\'touch'-ot, amit a File Utilites csomagban találja meg..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "nem sikerült rázolni a könyvtárat"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "nem sikerült rázolni a könyvtárat"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "nem sikerült rázolni a könyvtárat"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "felülírva"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "felülírva"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "felülírva"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Túl sok a könyvtár ennek az mkdir verziónak"
+
+#: src/shar.c:737
+#, fuzzy, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "nem sikerült rázolni a könyvtárat"
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "nem sikerült rázolni a könyvtárat"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "A %s-t nem lehet elérni"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "a '-C'-vel való kezdés kifogásolható , használja helyette a '-Z'-t "
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Nem lehet megtudni az könyvtár nevét"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, fuzzy, c-format
+msgid "New file, remaining %s, "
+msgstr "Új fájl, megmaradt %ld,"
+
+#: src/shar.c:977 src/shar.c:1384
+#, fuzzy, c-format
+msgid "Limit still %s\n"
+msgstr "A határ %d\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "helyreállítás"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "folytatás ezzel a résszel"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "A %s fájl indítása\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Nem reguláris fájl"
+
+#: src/shar.c:1067
+#, fuzzy, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "In shar: fennmaradó hely %ld\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "üres"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(üres)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Nem lehet megnyitni a '%s' fájlt"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "tömörített"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gzippel tömörítve"
+
+#: src/shar.c:1150
+#, fuzzy
+msgid "bzipped"
+msgstr "gzippel tömörítve"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "bináris"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(tömörített)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gzippel tömörítve)"
+
+#: src/shar.c:1154
+#, fuzzy
+msgid "(bzipped)"
+msgstr "(gzippel tömörítve)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(bináris)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Nem lehet eldönteni"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Fájl %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "szöveg"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(szöveg)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "felülírás"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "felülírva"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "ÁTUGRÁS"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "Kitömörítés megszakítva"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(fájl már létezik)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Mentés %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "kitömörítés"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "helyreállítás"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "folytatás ezzel a résszel"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "Vége a résznek"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "archív fájl"
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "rész folytatva"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Kérem csomagolja az elsõ részt!"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Kérem csomagolja az elsõ részt!"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "MÉG MINDIG ÁTUGROM"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "fájl folytatása"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "kész"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "fájl uudekódólása"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "fájl kicsomagolása"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "fájl kicsomagolása"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "fájl kicsomagolása"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5 ellenõrzés sikertelen"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "A '%s' megnyitása"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "A '%s' bezárása"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Próbálja a `%s --help'-et több információért.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Használat: %s [KAPCSOLÓ]... [FÁJL]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Ha egy hosszú kapcsolóhoz kötelezõ argumentumot megadni, akkor ez a "
+"megfelelõ\n"
+"rövid kapcsolónál is kötelezõ.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Vissza jelzést ad\n"
+" --help megjeleníti ezt a segítséget és kilép\n"
+" --version kiírja a verziószámot és kilép\n"
+" -q, --quiet, --silent nem ír ki semilyen üzenetez helyileg\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Fájl kiválasztása:\n"
+" -p, --intermix-type engedélyezi a -[BTzZ] módok választásást a fájl "
+"listában\n"
+" -S, --stdin-file-list fájl listát olvas szabványos bemenetrõl\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Fájl kiválasztása:\n"
+" -p, --intermix-type engedélyezi a -[BTz] módok választásást a fájl "
+"listában\n"
+" -S, --stdin-file-list fájl listát olvas szabványos bemenetrõl\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"A kimenet szétvágása:\n"
+" -o, --output-prefix=ELÕTÉT a fájlmeneti fájlok ELÕTÉT.01-tõl ELÕTÉT.NN-"
+"ig lesznek\n"
+" -l, --whole-size-limit=MÉRET szétvágja az archívumot,a bemenetet nem "
+"vágja, MÉRET kilobájtra\n"
+" -L, --split-size-limit=MÉRET szétvágja az archívumot,a bemenetet ha kell "
+"vágja, MÉRET kilobájtra\n"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"A shar fejléc kezelése:\n"
+" -n, --archive-name=NÉV a NEVet használja a dokumentum arcíválához\n"
+" -s, --submitter=CÍM átírja a kitöltlõ nevét\n"
+" -a, --net-headers kiírja a kitöltõ és az archív név fejléceket\n"
+" -c, --cut-mark a shar indítása a sor kitvágásával\n"
+"\n"
+"A fájl tárolásának kiválasztása:\n"
+" -M, --mixed-uuencode dinamikusan uudekódolás (alapbeállítás)\n"
+" -T, --text-files az összes fájlt szövegként kezeli\n"
+" -B, --uuencode az összes fájlt binárisként kezeli, használja "
+"az uuencode-ot\n"
+" -z, --gzip gzippli és uuenkódolja az összes fájlt\n"
+" -g, --level-for-gzip=SZINT meghatározza a gzip tömörítés SZINTjét "
+"(alapból 9)\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress tömöríti és uuenkódolja az összes fájlt\n"
+" -b, --bits-per-code=BITEK átad egy -bBITEKet (alapból 12) a "
+"tömörítõnek\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Az átvitel védelme:\n"
+" -w, --no-character-count nem használja a `wc -c'-t a méret "
+"ellenõrzéshez\n"
+" -D, --no-md5-digest nem használja az `md5sum'-t az aláírás "
+"ellenõrzést\n"
+" -F, --force-prefix kierõleleti az elõtét karakterket minden "
+"sorban\n"
+" -d, --here-delimiter=SZTRING a SZTRINGET használja a fájlok "
+"elválasztásához\n"
+"\n"
+"Különbözõ fajtájú megosztások:\n"
+" -V, --vanilla-operation létrehozz egy nagyon egyszerû és "
+"beazonosíthatatlan fájlt\n"
+" -P, --no-piping különlegesen használja az ideiglenes fájlt az "
+"kicsomagolás során\n"
+" -x, --no-check-existing nem kérdez rá a felülírásra\n"
+" -X, --query-user rákérdez a fájl felülírására (nem a netten)\n"
+" -m, --no-timestamp nem állítja vissza a módosítás dátumát és "
+"idejét\n"
+" -Q, --quiet-unshar nem foglalja az idõt a kicsomagolás alatt az "
+"üzenetekkel\n"
+" -f, --basename helyreállít egy könyvtárat, az egész "
+"hiarerhiával\n"
+" --no-i18n nem egy nemzetközileg is használató "
+"parancsállományt hoz létre\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"A '-o' opciónak vagy a '-l' vagy a '-L'-re van szüksége, a '-n' opciónak a '-"
+"a'-ra van szüksége.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "A '-g' magába foglalja a '-z'-t és a '-b' a '-Z'-t.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "A '-g' magába foglalja a '-z'.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Hibajelentéseket a(z) <%s> címre küldj.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "A hiba keresés nincs volt kiválasztva a fordítás alatt"
+
+#: src/shar.c:1986
+#, fuzzy, c-format
+msgid "Hard limit %s\n"
+msgstr "Szigorú határ %dk\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+"Ez a rendszer nem támogatja a '-Z'-t ('compress'), használja a '-z'-t "
+"helyette"
+
+#: src/shar.c:2061
+#, fuzzy, c-format
+msgid "Soft limit %s\n"
+msgstr "Finom határ %dk\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Ez a szoftver egy szabad program; a részletekért nézze meg a másolási feltételeket. A\n"
+"program mûködésére NINCS semmilyen garancia\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr ""
+"FIGYELEM: A vanilla módba nincs semilyen felhasználói beavatkozásra lehetõség"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "FIGYELEM : Nem szöveges tárolás opció felülírva"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Nincs bementi fájl"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Az '-a' opciót nem használhatja az '-n' nélkül"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "A '-l' vagy a 'L' opciót nem használhatja a '-o' nélkül"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"KÉREM kerülja a '-X' -es megosztást a Useneten vagy egyéb nyilvános hálózaton"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Ön kicsomagolta az utolsó részt is"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Létrehozva a %d fájl\n"
+
+#: src/shar.c:2310
+#, fuzzy, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "nem sikerült rázolni a könyvtárat"
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "nem sikerült rázolni a könyvtárat"
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Találtam egy nem parancsértelmezõ parancsot a %s-ben"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "A %s C kódnak néz ki és nem parancsértelmezõ archívumnak"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Találtam egy nem parancsértelmezõ parancsot a %s cut után"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s talán nem parancsértelmezõ archív"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "A kivágás sort %s követte"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "'sh' mûvelet indítása"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Ha egy hosszú kapcsolóhoz kötelezõ argumentumot megadni, akkor ez a "
+"megfelelõ\n"
+"rövid kapcsolónál is kötelezõ.\n"
+" -d, --directory=KÖNYVTÁR belép a KÖNYVTÁRba mielöt kicsomagol\n"
+" -c, --overwrite a fájlokat felülírja\n"
+" -e, --exit-0 ugyanaz mint a `--split-at=\"exit 0\"'\n"
+" -E, --split-at=SZTRING szétvágja a SZTRINGnél összefûzött fájlokat\n"
+" -f, --force ugyanaz mint a `-c'\n"
+" --help megjeleniti ezt a segítséget és kilép\n"
+" --version kiírja a verziószámot és kilép\n"
+"\n"
+"Ha nincs bemeneti fájl akkor a szabványos bemenetrõl olvas.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Nem lehet belépni a '%s' könyvtárba"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "szabványos bemenet"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, fuzzy, c-format
+msgid "%s: Write error"
+msgstr "%s: írás hiba"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Rövid fájl"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s Nincs 'end' sor"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: az adatokat az `=' sortöltõ szó követi"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: érvénytelen sor"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Nincs 'begin' sor"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Érvénytelen ~felhasználó"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Nem felh. '%s'"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "%s: hozzáférés sikertelen"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "megtagadta a (%s) FIFO írását"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "nem követem a (%s) szimbolikus hivatkozást"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "A '%s' megnyitása"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Használat: %s [FÁJL]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Ha egy hosszú kapcsolóhoz kötelezõ argumentumot megadni, akkor ez a "
+"megfelelõ\n"
+"rövid kapcsolónál is kötelezõ.\n"
+" -o, --output-file=FÁJL közvetken kimenet a FÁJLba\n"
+" --help meg jeleniti ezt a segítséget és kilép\n"
+" --version kiírja a verzió információkat és kilép\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Írási hiba"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Olvasási hiba"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Használat: %s [BEFILE] KÜLSÕFÁJL\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 a base64 enkódólást az RFC1521 szerint végzi el\n"
+" --help megjeleniti ezt a segítséget és kilép\n"
+" --version kiírja a verzió információt és kilép\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "A '%s' megnyitása"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "A %s fájl indítása\n"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[nem, igen, az összest,kilép] (nem)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Kérem csomagolja ki"
+
+#~ msgid "next!"
+#~ msgstr "következõ!"
+
+#~ msgid "File"
+#~ msgstr "Fájl"
+
+#~ msgid "original size"
+#~ msgstr "az eredeti méret"
+
+#~ msgid "current size"
+#~ msgstr "az aktuális méret"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Ki kell csomagolni az archívumot ehhez!"
+
+#~ msgid "lock directory"
+#~ msgstr "könyvtár zárolása"
+
+#, fuzzy
+#~ msgid "created lock directory"
+#~ msgstr "könyvtár zárolása"
+
+#, fuzzy
+#~ msgid "created %s"
+#~ msgstr "létrehozva"
+
+#, fuzzy
+#~ msgid "could not create %s"
+#~ msgstr "nem sikerült létrehozni"
+
+#~ msgid "restore of"
+#~ msgstr "helyreállítás"
+
+#~ msgid "failed"
+#~ msgstr "sikertelen"
+
+#~ msgid "removed"
+#~ msgstr "eltávolítva"
+
+#~ msgid "failed to remove"
+#~ msgstr "nem sikerült eltávolítani"
+
+#~ msgid "continue with part"
+#~ msgstr "folytatás ezzel a résszel"
+
+#~ msgid "End of"
+#~ msgstr "Vége"
+
+#~ msgid "part"
+#~ msgstr "rész"
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644
index 0000000..55e74b1
--- /dev/null
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..50b5470
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,938 @@
+# Italian messages for sharutils.
+# Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+# Marco Colombo <m.colombo@ed.ac.uk>, 2004, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-23 11:50+0100\n"
+"Last-Translator: Marco Colombo <m.colombo@ed.ac.uk>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Errore di sistema sconosciuto"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: l'opzione '%s' è ambigua\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: l'opzione '--%s' non accetta argomenti\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: l'opzione '%c%s' non accetta argomenti\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: l'opzione '%s' richiede un argomento\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opzione '--%s' non riconosciuta\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opzione '%c%s' non riconosciuta\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opzione illecita -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opzione non valida -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'opzione richiede un argomento -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: l'opzione '-W %s' è ambigua\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: l'opzione '-W %s' non accetta argomenti\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "memoria esaurita"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Nota: md5sums non verificati. Si suggerisce di installare GNU coreutils."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "ATTENZIONE: orario del file non ripristinato. Si suggerisce"
+
+# NdT: cos'è questo \\?
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "di installare GNU 'touch', distribuito in GNU coreutil."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "la directory di lock '${lock_dir}' esiste"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "creazione della directory di lock non riuscita"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - creata directory di lock \"%s\\\"."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - creazione della directory di lock \"%s\\\" non riuscita."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "sì"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "sovrascrivere questo file"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "no"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "ignorare questo file"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "tutti"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "sovrascrivere tutti i file"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "nessuno"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "non sovrascrivere alcun file"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "aiuto"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "spiega le scelte"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "esci"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "uscire immediatamente"
+
+# Qui ho seguito la traduzione francese.
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Troppe directory da creare"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - creata directory \"%s\"."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - creazione della directory \"%s\" non riuscita."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Impossibile accedere a %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C è deprecato, usare -Z al suo posto"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Impossibile ottenere il nome della directory corrente"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Gli archivi vanno estratti in ordine!\n"
+"Estrarre la parte '`cat ${lock_dir}/seq`'."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Nuovo file, rimane %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Il limite è ancora %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "ripristino di %s non riuscito"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Fine della parte %d, continua con la parte %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Inizio file %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: non è un file normale"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "In shar: dimensione rimanente %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "vuoto"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(vuoto)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Impossibile aprire il file %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "compresso"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "compresso con gzip"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "compresso con bzip"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binario"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(compresso)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(compresso con gzip)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(compresso con bzip)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binario)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Impossibile effettuare un fork"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "File %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "testo"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(testo)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "sovrascrittura di %s in corso"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "sovrascrivere %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "%s IGNORATO"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "estrazione interrotta"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "%s IGNORATO (il file esiste già)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Salvataggio di %s (%s)"
+
+# FIXME
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - estrazione di %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "ripristino di %s non riuscito\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Fine della parte %ld, continua con la parte %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Fine di %s parte %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "archivio"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Il file %s continua in parte %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Estrarre prima la parte 1."
+
+# FIXME
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Adesso estrarre la parte ${shar_sequence}."
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "%s IGNORATO ANCORA"
+
+# FIXME
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "continuazione del file %s"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Il file %s è completo"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "esecuzione di uudecode sul file %s"
+
+# FIXME
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "estrazione di un file compress %s"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "estrazione di un file gzip %s"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "estrazione di un file bzip %s"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "Controllo MD5 fallito"
+
+# FIXME
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'attenzione: la dimensione di %s non è %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "allocazione nome del file di output"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Apertura di '%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Chiusura di '%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Usare '%s --help' per maggiori informazioni.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Uso: %s [OPZIONE]... [FILE]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Gli argomenti obbligatori per le opzioni lunghe lo sono anche per quelle "
+"corte.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Aiuto e informazioni:\n"
+" --help mostra questo aiuto ed esce\n"
+" --version mostra le informazioni sulla versione ed esce\n"
+" -q, --quiet, --silent non mostra messaggi prolissi localmente\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Selezione dei file:\n"
+" -p, --intermix-type permette -[BTzZ] nella lista dei file per "
+"modificare\n"
+" la modalità\n"
+" -S, --stdin-file-list legge la lista dei file dallo standard input\n"
+"\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Selezione dei file:\n"
+" -p, --intermix-type permette -[BTzZ] nella lista dei file per "
+"modificare\n"
+" la modalità\n"
+" -S, --stdin-file-list legge la lista dei file dallo standard input\n"
+"\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Divisione dell'output:\n"
+" -o, --output-prefix=PREFISSO i nomi dei file di output vanno da "
+"PREFISSO.01\n"
+" fino a PREFISSO.NN\n"
+" -l, --whole-size-limit=NUM divide gli archivi, non i file, ogni NUM "
+"kbyte\n"
+" -L, --split-size-limit=NUM divide gli archivi o i file ogni NUM "
+"kilobyte\n"
+
+# stock: impacchettare?
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Controllo delle intestazioni:\n"
+" -n, --archive-name=NOME usa NOME come titolo dell'archivio\n"
+" -s, --submitter=INDIRIZZO cambia il nome del creatore\n"
+" -a, --net-headers crea gli header Submitted-by: e Archive-name:\n"
+" -c, --cut-mark crea demarcazione di taglio all'inizio del "
+"file\n"
+" (riga 'Cut Here')\n"
+" -t, --translate traduci i messaggi nello script\n"
+"\n"
+"Modalità di impacchettamento:\n"
+" -M, --mixed-uuencode decide dinamicamente se usare uuencode\n"
+" (predefinito)\n"
+" -T, --text-files tratta tutti i file come testo\n"
+" -B, --uuencode tratta tutti i file come binari, usa "
+"uuencode\n"
+" -z, --gzip esegue gzip e uuencode su tutti i file\n"
+" -g, --level-for-gzip=LIVELLO passa -LIVELLO (predefinito 9) a gzip\n"
+" -j, --bzip2 esegue bzip2 e uuencode su tutti i file\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress esegue compress e uuencode su tutti i file\n"
+" -b, --bits-per-code=BITS passa -bBITS (predefinito 12) a compress\n"
+
+# Qui ho seguito la traduzione francese.
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Protezione contro errori di trasmissione:\n"
+" -w, --no-character-count non usa 'wc -c' per controllare le "
+"dimensioni\n"
+" -D, --no-md5-digest non usa 'md5sum' per verificare il "
+"contenuto\n"
+" -F, --force-prefix forza il carattere di prefisso su ogni riga\n"
+" -d, --here-delimiter=STRINGA usa STRINGA per delimitare i file in shar\n"
+"\n"
+"Modalità di archiviazione:\n"
+" -V, --vanilla-operation produce archivi semplici e poco esigenti\n"
+" -P, --no-piping usa file temporanei durante l'estrazione\n"
+" -x, --no-check-existing sovrascrive i file esistenti\n"
+" -X, --query-user chiede conferma prima di sovrascrivere i file\n"
+" (non per la rete)\n"
+" -m, --no-timestamp non ripristina le date originali dei file\n"
+" -Q, --quiet-unshar evita messaggi prolissi durante l'estrazione\n"
+" -f, --basename estrae i file in una sola directory\n"
+" --no-i18n non produce uno script internazionalizzato\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"L'opzione -o è richiesta con -l o -L, l'opzione -n è richiesta con -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "L'opzione -g implica -z, l'opzione -b implica -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "L'opzione -g implica -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Segnalare i bug a <%s>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "limite dimensione del file '%s' non valido"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "formato non valido (campo troppo largo): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG non è stato selezionato alla compilazione"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Limite duro %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Questo sistema non supporta -Z ('compress'), usare -z al suo posto"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Limite morbido %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "prefisso di output illecito\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Questo è software libero; si vedano i sorgenti per le condizioni di copia.\n"
+"NON c'è alcuna garanzia; neppure di COMMERCIABILITÀ o di IDONEITÀ AD UNO\n"
+"SCOPO PARTICOLARE.\n"
+
+# FIXME: vanilla: standard? semplice?
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ATTENZIONE: nessun intervento dell'utente in modalità standard."
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ATTENZIONE: cambiate le opzioni di archiviazione non di testo"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Nessun file di input"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Impossibile usare l'opzione -a senza -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Impossibile usare le opzioni -l o -L senza -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "PER FAVORE evitare di creare shar con -X su Usenet o reti pubbliche"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Ultima parte estratta"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Creati %d file\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - directory di lock \"%s\" rimossa."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - rimozione della directory di lock \"%s\" non riuscita."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Nessun comando di shell trovato in %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s sembra codice C grezzo, non un archivio della shell"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Nessun comando di shell trovato dopo 'cut' in %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s probabilmente non è un archivio della shell"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "La linea 'cut' era seguita da: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Avvio del processo 'sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Gli argomenti obbligatori per le opzioni lunghe lo sono anche per quelle "
+"corte.\n"
+"\n"
+" -d, --directory=DIRECTORY si sposta in DIRECTORY prima di estrarre\n"
+" -c, --overwrite passa -c allo script di shar per "
+"sovrascrivere\n"
+" i file\n"
+" -e, --exit-0 come '--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING divide dopo STRING i file di shar concatenati\n"
+" -f, --force come '-c'\n"
+" --help mostra questo aiuto ed esce\n"
+" --version mostra le informazioni sulla versione ed esce\n"
+"\n"
+"Se nessun FILE è indicato, viene letto lo standard input.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Impossibile spostarsi in '%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "allocare un buffer per il nome del file"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standard input"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "allocare un buffer per il file"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: errore di scrittura"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: file corto"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: riga 'end' mancante"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: altri dati seguono il carattere di riempimento '='"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: riga illecita"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: manca la riga 'begin'"
+
+# NdT: utente illecito mi sembra proprio brutto
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ~utente non valido"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: utente '%s' non esistente"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "impossibile accedere a %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "scrittura FIFO negata (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "collegamenti simbolici non seguiti (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "Riapertura di %s"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "Cambiamento dei permessi di %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Uso: %s [FILE]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Gli argomenti obbligatori per le opzioni lunghe lo sono anche per quelle "
+"corte.\n"
+" -o, --output-file=FILE salva l'output su FILE\n"
+" --help mostra questo aiuto ed esce\n"
+" --version mostra le informazioni sulla versione ed esce\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Errore di scrittura"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Errore di lettura"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Uso: %s [INFILE] FILEREMOTO\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 usa la codifica base64 come definita in RFC1521\n"
+" --help mostra questo aiuto ed esce\n"
+" --version mostra le informazioni sulla versione ed esce\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "Apertura di %s"
+
+# FIXME
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "Controllo di %s"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[n=no , y=sì, a=tutti, q=interrompi] (no)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Estrarre parte"
+
+#~ msgid "next!"
+#~ msgstr "prossimo"
+
+#~ msgid "File"
+#~ msgstr "File"
+
+#~ msgid "original size"
+#~ msgstr "dimensione originale"
+
+#~ msgid "current size"
+#~ msgstr "dimensione corrente"
+
+#~ msgid "lock directory"
+#~ msgstr "directory di lock"
+
+#~ msgid "created"
+#~ msgstr "creato"
+
+#~ msgid "failed to create"
+#~ msgstr "creazione non riuscita"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Gli archivi vanno estratti in sequenza."
+
+#~ msgid "failed"
+#~ msgstr "non riuscito"
+
+#~ msgid "End of"
+#~ msgstr "Fine di"
+
+#~ msgid "part"
+#~ msgstr "parte"
+
+#~ msgid "removed"
+#~ msgstr "rimosso"
+
+#~ msgid "failed to remove"
+#~ msgstr "eliminazione fallita"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644
index 0000000..75c806b
--- /dev/null
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..0913513
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,874 @@
+# Japanese messages for GNU sharutils
+# Copyright (C) 1995, 1996, 1999, 2002, 2005, 2006 Free Software Foundation, Inc.
+# IIDA Yosiaki <iida@gnu.org>, 1999, 2002, 2005, 2006.
+# This file is distributed under the same license as the sharutils package.
+# Contributed by
+# SAKAI Kiyotaka <ksakai@netwk.ntt-at.co.jp>, 1995.
+# And taken over on 1999-11-04 by IIDA.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU sharutils 4.6.3\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-08-30 08:15+0900\n"
+"Last-Translator: IIDA Yosiaki <iida@gnu.org>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "°ÕÌ£ÉÔÌÀ¤Î¥·¥¹¥Æ¥à¡¦¥¨¥é¡¼¤Ç¤¹"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó`%s'¤ÏÛ£Ëæ¤Ç¤¹\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó`--%s'¤Ï¡¢°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó`%c%s'¤Ï¡¢°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó`%s'¤Ï¡¢°ú¿ô¤¬É¬ÍפǤ¹\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó`--%s'\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó`%c%s'\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ̵¸ú¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: °ú¿ô¤ÎɬÍפʥª¥×¥·¥ç¥ó -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó`-W %s'¤ÏÛ£Ëæ¤Ç¤¹\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó`-W %s'¤Ï¡¢°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "¥á¥â¥ê¡¼¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Ãí°Õ: md5sum¤Î¸¡¾Ú¤ò¤·¤Þ¤»¤ó¡£GNU coreutils¤Î¥¤¥ó¥¹¥È¡¼¥ë¤ò¤´¸¡Æ¤¤¯¤À¤µ¤¤¡£"
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "·Ù¹ð: ¥¿¥¤¥à¡¦¥¹¥¿¥ó¥×¤òÌ᤻¤Þ¤»¤ó¡£"
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+"GNU coreutils¤ÇÇÛÉÛ¤µ¤ì¤ë`GNU touch'\\''¤ÎÆþ¼ê¡¢\n"
+"¥¤¥ó¥¹¥È¡¼¥ë¤ò¤´¸¡Æ¤¤¯¤À¤µ¤¤¡Ä"
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "¥í¥Ã¥¯¡¦¥Ç¥£¥ì¥¯¥È¥ê¡¼'${lock_dir}'¤¬¤¢¤ê¤Þ¤¹"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "¥í¥Ã¥¯¡¦¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - ¥í¥Ã¥¯¡¦¥Ç¥£¥ì¥¯¥È¥ê¡¼¤òºîÀ® `'%s\\''."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - ¥í¥Ã¥¯¡¦¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ÎºîÀ®¤Ë¼ºÇÔ `'%s\\''."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "yes"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "no"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤òÈô¤Ð¤¹"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "all"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "Á´¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "none"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "¾å½ñ¤­¤·¤Ê¤¤"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "help"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "ÁªÂò¤ÎÀâÌÀ"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "quit"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "¤¹¤°¤ËÈ´¤±¤ë"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "mkdir¤ÇÀ¸À®¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¡¼¤Î¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - ¥Ç¥£¥ì¥¯¥È¥ê¡¼¤òºîÀ® `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - ¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ÎºîÀ®¤Ë¼ºÇÔ `%s'\\''."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "%s¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C¤Ë¤Ï¥±¥Á¤¬¤Ä¤¤¤Æ¤¤¤Þ¤¹¡£-Z¤ò¤ª»È¤¤¤¯¤À¤µ¤¤"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼Ì¾¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"½ñ¸Ë¤Ï½ç½ø¤É¤ª¤ê¥¢¥ó¥Ñ¥Ã¥¯¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó!\n"
+"¼¡¤Ï'`cat ${lock_dir}/seq`'¤ò¥¢¥ó¥Ñ¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "¿·µ¬¥Õ¥¡¥¤¥ë¤Ç¡¢»Ä¤ê%s¡¢"
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "¤Þ¤À¸ÂÅÙ¤Ï%s¤Ç¤¹\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "%s¤Î²óÉü¤Ë¼ºÇÔ"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "¥Ñ¡¼¥È%d¤Î½ª¤ê¡¢¥Ñ¡¼¥È%d¤Ë³¤­¤Þ¤¹"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "¥Õ¥¡¥¤¥ë%s¤ò»Ï¤á¤Þ¤¹\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: ¤Õ¤Ä¤¦¤Î¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "sharÃæ: »Ä¤ê¥µ¥¤¥º%s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "¶õ¤Î"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(¶õ)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "¥Õ¥¡¥¤¥ë%s¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Þ¤»¤ó"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "compress¤Ç°µ½Ì¤µ¤ì¤¿"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gzip¤Ç°µ½Ì¤µ¤ì¤¿"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "bzip¤Ç°µ½Ì¤µ¤ì¤¿"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "¥Ð¥¤¥Ê¥ê¡¼"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(compress¤µ¤ì¤Æ¤¤¤Þ¤¹)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gzip¤µ¤ì¤Æ¤¤¤Þ¤¹)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(bzip¤µ¤ì¤Æ¤¤¤Þ¤¹)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(¥Ð¥¤¥Ê¥ê¡¼)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "fork¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "¥Õ¥¡¥¤¥ë%s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "¥Æ¥­¥¹¥È"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(¥Æ¥­¥¹¥È)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "%s¤Ë¾å½ñ¤­¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "%s¤ò¾å½ñ¤­"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "%s¤òÈô¤Ð¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "Ãê½Ð¤òÃæÃǤ·¤Þ¤¹"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "%s¤òÈô¤Ð¤·¤Æ¤¤¤Þ¤¹ (¥Õ¥¡¥¤¥ë¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Æ¤¤¤Þ¤¹)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "%s (%s) ¤òÊݸ¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - Ãê½ÐÃæ %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "%s¤Î²óÉü¤Ë¼ºÇÔ\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "¥Ñ¡¼¥È%ld¤Î½ª¤ê¡¢¥Ñ¡¼¥È%ld¤Ë³¤­¤Þ¤¹"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "%s¥Ñ¡¼¥È%d¤Î½ª¤ê"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "½ñ¸Ë"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "¥Õ¥¡¥¤¥ë%s¤Ï¼¡¤Î¥Ñ¡¼¥È%d¤Ë³¤­¤Þ¤¹"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "¥Ñ¡¼¥È1¤òºÇ½é¤Ë¥¢¥ó¥Ñ¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "¥Ñ¡¼¥È'${shar_sequence}'¤ò¼¡¤Ë¥¢¥ó¥Ñ¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "¤Þ¤À%s¤òÈô¤Ð¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "¥Õ¥¡¥¤¥ë%s¤Ë³¤­¤Þ¤¹"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "¥Õ¥¡¥¤¥ë%s¤¬½ª¤ê¤Þ¤·¤¿"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "¥Õ¥¡¥¤¥ë%s¤òuudecode¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "¥Õ¥¡¥¤¥ë%s¤òuncompress¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "¥Õ¥¡¥¤¥ë%s¤ògunzip¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "¥Õ¥¡¥¤¥ë%s¤òbunzip¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5¥Á¥§¥Ã¥¯¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'²óÉü»þ·Ù¹ð: %s¤Î¥µ¥¤¥º¤¬%s¤Ç¤Ê¤¤'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë̾¤Î³äÉÕ¤±"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "`%s'¤ò¤Ò¤é¤¤¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "`%s'¤òÊĤ¸¤Æ¤¤¤Þ¤¹"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "¾Ü¤·¤¯¤Ï`%s --help'¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "»ÈÍÑË¡: %s [¥ª¥×¥·¥ç¥ó]... [¥Õ¥¡¥¤¥ë]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr "Ĺ·Á¼°¤Î¥ª¥×¥·¥ç¥ó¤Çɬ¿Ü¤Ê°ú¿ô¤Ï¡¢Ã»·Á¼°¤Î¥ª¥×¥·¥ç¥ó¤Ç¤âɬ¿Ü¤Ç¤¹¡£\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"¥Õ¥£¡¼¥É¥Ð¥Ã¥¯¤ÎÄó¶¡:\n"
+" --help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¤Æ½ªÎ»\n"
+" --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»\n"
+" -q, --quiet, --silent ³Îǧ¤Î¤¿¤á¤Î¥á¥Ã¥»¡¼¥¸¤ò¥í¡¼¥«¥ë¤Ë½Ð¤µ¤Ê¤¤\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"¥Õ¥¡¥¤¥ë¤ÎÁªÂò:\n"
+" -p, --intermix-type ¥â¡¼¥É¤òÊѹ¹¤¹¤ë¤¿¤á¤Ë¥Õ¥¡¥¤¥ë¡¦¥ê¥¹¥È¤Ë-[BTzZ]¤òµö"
+"¤¹\n"
+" -S, --stdin-file-list ¥Õ¥¡¥¤¥ë¡¦¥ê¥¹¥È¤òɸ½àÆþÎϤ«¤éÆɤ߹þ¤à\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"¥Õ¥¡¥¤¥ë¤ÎÁªÂò:\n"
+" -p, --intermix-type ¥â¡¼¥É¤òÊѹ¹¤¹¤ë¤¿¤á¤Ë¥Õ¥¡¥¤¥ë¡¦¥ê¥¹¥È¤Ë-[BTz]¤òµö"
+"¤¹\n"
+" -S, --stdin-file-list ¥Õ¥¡¥¤¥ë¡¦¥ê¥¹¥È¤òɸ½àÆþÎϤ«¤éÆɤ߹þ¤à\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"½ÐÎϤÎʬ³ä:\n"
+" -o, --output-prefix=PREFIX PREFIX.01¤«¤éPREFIX.NN¤Ë½ÐÎÏ\n"
+" -l, --whole-size-limit=SIZE ¥Õ¥¡¥¤¥ë¤Ç¤Ê¤¯½ñ¸Ë¤òSIZE¥­¥í¥Ð¥¤¥È¤Ëʬ³ä\n"
+" -L, --split-size-limit=SIZE ½ñ¸Ë¤ä¥Õ¥¡¥¤¥ë¤òSIZE¥­¥í¥Ð¥¤¥È¤Ëʬ³ä\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"shar¥Ø¥Ã¥À¡¼¤ÎÀ©¸æ:\n"
+" -n, --archive-name=NAME ½ñ¸Ë̾¤È¤·¤ÆNAME¤ò»ÈÍÑ\n"
+" -s, --submitter=ADDRESS ºîÀ®¼Ô̾¤ò»ØÄê\n"
+" -a, --net-headers Submitted-by:¤ÈArchive-name:¥Ø¥Ã¥À¡¼¤ò½ÐÎÏ\n"
+" -c, --cut-mark cut¹Ô¤Çshar¤ò»Ï¤á¤ë\n"
+" -t, --translate ¥¹¥¯¥ê¥×¥È¤Î¥á¥Ã¥»¡¼¥¸¤òËÝÌõ\n"
+"\n"
+"³ÊǼÊýË¡¤ÎÁªÂò:\n"
+" -M, --mixed-uuencode uuencode¤òưŪ¤Ë·èÄê (´ûÄê)\n"
+" -T, --text-files ¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò¥Æ¥­¥¹¥È¤È¤·¤Æ°·¤¦\n"
+" -B, --uuencode ¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò¥Ð¥¤¥Ê¥ê¡¼¤È¤·¤Æ°·¤¤¡¢\n"
+" uuencode¤ò»ÈÍÑ\n"
+" -z, --gzip ¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ògzip¤·¤Æuuencode\n"
+" -g, --level-for-gzip=LEVEL gzip¤Ë-LEVEL (´ûÄê¤Ï9) ¤òÅϤ¹\n"
+" -j, --bzip2 ¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤òbzip2¤·¤Æuuencode\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress ¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤òcompress¤·¤Æuuencode\n"
+" -b, --bits-per-code=BITS compress¤Ë-bBITS (´ûÄê¤Ç¤Ï12) ¤òÅϤ¹\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"ÅÁÁ÷¤Ë¤¿¤¤¤¹¤ëÊݸî:\n"
+" -w, --no-character-count ¥µ¥¤¥º¤Î¥Á¥§¥Ã¥¯¤Ë`wc -c'¤ò»ÈÍѤ·¤Ê¤¤\n"
+" -D, --no-md5-digest ¥À¥¤¥¸¥§¥¹¥È¤Î¥Á¥§¥Ã¥¯¤Ë`md5sum'¤ò»ÈÍѤ·¤Ê"
+"¤¤\n"
+" -F, --force-prefix ÀÜƬʸ»ú¤ò³Æ¹Ô¤ÎÁ°¤ËÃÖ¤¯\n"
+" -d, --here-delimiter=STRING shar¤Ç¥Õ¥¡¥¤¥ë¤òʬ³ä¤¹¤ë¶èÀÚ¤ê¤ËSTRING¤ò»È"
+"ÍÑ\n"
+"\n"
+"Ê̼ïÎà¤Îshar¤ÎÀ¸À®:\n"
+" -V, --vanilla-operation ¤«¤Ê¤ê´Ê·é¤Ç¤æ¤ë¤¤shar¤òÀ¸À®\n"
+" -P, --no-piping unshar»þ¤ËÇÓ¾Ū¤Ê°ì»þ¥Õ¥¡¥¤¥ë¤ò»ÈÍÑ\n"
+" -x, --no-check-existing ¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Æ¤âɬ¤º¾å½ñ¤­\n"
+" -X, --query-user ¥Õ¥¡¥¤¥ë¤Î¾å½ñ¤­»þ¤Ë¥æ¡¼¥¶¡¼¤ËÌä¹ç¤» (not for "
+"Net)\n"
+" -m, --no-timestamp ¥Õ¥¡¥¤¥ë¤Î¹¹¿·Æü»þ¤òÌᤵ¤Ê¤¤\n"
+" -Q, --quiet-unshar unshar»þ¤Î³Îǧ¥á¥Ã¥»¡¼¥¸¤ò¾Êά\n"
+" -f, --basename ³¬Áز½¤»¤º¤Ë¡¢1¤Ä¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ËÌ᤹\n"
+" --no-i18n ¹ñºÝ²½¤µ¤ì¤¿¥·¥§¥ë¡¦¥¹¥¯¥ê¥×¥È¤òÀ¸À®¤·¤Ê¤¤\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"¥ª¥×¥·¥ç¥ó-l¤ä-L¤Ë¤Ï-o¤¬É¬Íפǡ¢¥ª¥×¥·¥ç¥ó-a¤Ë¤Ï-n¤¬É¬ÍפǤ¹¡£\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "¥ª¥×¥·¥ç¥ó-g¤Ï-z¤ò´Þ¤ß¡¢¥ª¥×¥·¥ç¥ó-b¤Ï-Z¤ò´Þ¤ß¤Þ¤¹¡£\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "¥ª¥×¥·¥ç¥ó-g¤Ï-z¤ò´Þ¤ß¤Þ¤¹¡£\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"¥Ð¥°Êó¹ð¤Ï¡¢<%s>¤Ø¤ªÁ÷¤ê¤¯¤À¤µ¤¤¡£\n"
+"ÏÂÌõ¤Î¸í¤ê¤Ï¡¢<translation-team-ja@lists.sourceforge.net>¤Ø¤ªÁ÷¤ê¤¯¤À¤µ¤¤¡£\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "̵¸ú¤Ê¥Õ¥¡¥¤¥ë¡¦¥µ¥¤¥º¾å¸Â `%s'"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "̵¸ú¤Ê·Á¼° (¥«¥¦¥ó¥ÈÍ󤬹­²á¤®): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "¥³¥ó¥Ñ¥¤¥ë»þ¤ËDEBUG¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "¥Ï¡¼¥É¡¦¥ê¥ß¥Ã¥È¤¬%s¤Ç¤¹\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+"¤³¤Î¥·¥¹¥Æ¥à¤Ç¤Ï-Z ('compress') ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó¤Î¤Ç¡¢-z¤ÇÂåÍѤ·¤Æ¤¯¤À¤µ¤¤"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "¥½¥Õ¥È¡¦¥ê¥ß¥Ã¥È¤¬%s¤Ç¤¹\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "̵¸ú¤Ê½ÐÎÏÀÜƬ¼­\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"ÌõÃí: Èó¾ï¤Ë½ÅÍפÊʸ¾Ï¤Î¤¿¤á¡¢¸¶Ê¸¤ò»Ä¤·¤Æ¤¤¤Þ¤¹¡£\n"
+" -- »²¹ÍÌõ\n"
+"¤³¤ì¤Ï¡¢¥Õ¥ê¡¼¡¦¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹¡£Ê£À½¤Î¾ò·ï¤Ï¡¢¥½¡¼¥¹¤ò¤´Í÷¤¯¤À¤µ¤¤¡£\n"
+"°ìÀÚ¤ÎÊݾڤϤ¢¤ê¤Þ¤»¤ó¡£¾¦¶ÈÀ­¤äÆÃÄêÌÜŪŬ¹çÀ­¤Ë´Ø¤¹¤ëÊݾڤ¹¤é¤¢¤ê¤Þ¤»¤ó¡£\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "·Ù¹ð: ´ÊÁǥ⡼¥É¤Ç¤Ï¥æ¡¼¥¶¡¼¤È¤ÎÂÐÏäϤ¢¤ê¤Þ¤»¤ó"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "·Ù¹ð: ¥Æ¥­¥¹¥È¤Ç¤Ê¤¤³ÊǼ¥ª¥×¥·¥ç¥ó¤Ï¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "-n¥ª¥×¥·¥ç¥ó¤Î»ØÄê¤Ì¤­¤Ç¡¢-a¥ª¥×¥·¥ç¥ó¤Ï»È¤¨¤Þ¤»¤ó"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "-o¥ª¥×¥·¥ç¥ó¤Î»ØÄê¤Ì¤­¤Ç¡¢-l¤ä-L¥ª¥×¥·¥ç¥ó¤Ï»È¤¨¤Þ¤»¤ó"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "Usenet¤ä¸ø½°Ì֤Ǥϡ¢-X shar¤ò»ÈÍѤ·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "ºÇ¸å¤Î¥Ñ¡¼¥È¤ò¥¢¥ó¥Ñ¥Ã¥¯¤·¤Þ¤·¤¿"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "%d¸Ä¤Î¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Þ¤·¤¿\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - ¥í¥Ã¥¯¡¦¥Ç¥£¥ì¥¯¥È¥ê¡¼¤òºï½ü `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - ¥í¥Ã¥¯¡¦¥Ç¥£¥ì¥¯¥È¥ê¡¼¤Îºï½ü¤Ë¼ºÇÔ `'%s\\''."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "%s¤Ë¤Ï¥·¥§¥ë¡¦¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s¤ÏC¤Î¥³¡¼¥É¤Ç¡¢¥·¥§¥ë½ñ¸Ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "%s¤Î`cut'¤Î¸å¤Ë¥·¥§¥ë¡¦¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s¤Ï¡¢¤ª¤½¤é¤¯¥·¥§¥ë½ñ¸Ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "%s¤Ë³¤¤¤Æ`cut'¹Ô¤¬¤¢¤ê¤Þ¤¹"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "`sh'¤Î¥×¥í¥»¥¹¤ò³«»Ï¤·¤Þ¤¹"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Ĺ·Á¼°¤Î¥ª¥×¥·¥ç¥ó¤Çɬ¿Ü¤Ê°ú¿ô¤Ï¡¢Ã»·Á¼°¤Î¥ª¥×¥·¥ç¥ó¤Ç¤âɬ¿Ü¤Ç¤¹¡£\n"
+" -d, --directory=DIRECTORY ¥¢¥ó¥Ñ¥Ã¥¯¤ÎÁ°¤ËDIRECTORY¤Ë°ÜÆ°\n"
+" -c, --overwrite ¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤¹¤ë¤è¤¦¡¢-c¤òshar¤ËÅϤ¹\n"
+" -e, --exit-0 `--split-at=\"exit 0\"'¤ÈƱ¤¸\n"
+" -E, --split-at=STRING ¤Ä¤Ê¤¬¤Ã¤¿shar¤òSTRING¤Î¸å¤í¤Çʬ³ä\n"
+" -f, --force `-c'¤ÈƱ¤¸\n"
+" --help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¤Æ½ªÎ»\n"
+" --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»\n"
+"\n"
+"¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¡¢É¸½àÆþÎϤòÆɤߤޤ¹¡£\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "`%s'¤Ëchdir¤Ç¤­¤Þ¤»¤ó"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "¥Õ¥¡¥¤¥ë̾¥Ð¥Ã¥Õ¥¡¡¼¤Î³äÉÕ¤±"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "ɸ½àÆþÎÏ"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "¥Õ¥¡¥¤¥ë¡¦¥Ð¥Ã¥Õ¥¡¡¼¤Î³äÉÕ¤±"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: ½ñ¹þ¤ß¥¨¥é¡¼"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: û¤¤¥Õ¥¡¥¤¥ë"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: `end'¹Ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: µÍ¤áʸ»ú¤Î`='¤Ë³¤¯¥Ç¡¼¥¿"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: ÉÔÀµ¤Ê¹Ô"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: `begin'¹Ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ÉÔÀµ¤Ê~user"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: `%s'¤È¤¤¤¦¥æ¡¼¥¶¡¼¤Ï¸ºß¤·¤Þ¤»¤ó"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "%s¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "FIFO (%s) ¤Ø¤Î½ñ¹þ¤ßµñÈÝ"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯ (%s) ¤ÏÄɤ¤¤Þ¤»¤ó"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "%s¤Îfreopen"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "%s¤Îchmod"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "»ÈÍÑË¡: %s [¥Õ¥¡¥¤¥ë]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Ĺ·Á¼°¤Î¥ª¥×¥·¥ç¥ó¤Çɬ¿Ü¤Ê°ú¿ô¤Ï¡¢Ã»·Á¼°¤Î¥ª¥×¥·¥ç¥ó¤Ç¤âɬ¿Ü¤Ç¤¹¡£\n"
+" -o, --output-file=FILE ľÀÜFILE¤Ë½ÐÎÏ\n"
+" --help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¤Æ½ªÎ»\n"
+" --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "½ñ¹þ¤ß¥¨¥é¡¼"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Æɼè¤ê¥¨¥é¡¼"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "»ÈÍÑË¡: %s [ÆþÎÏ¥Õ¥¡¥¤¥ë] ±ó³Ö¥Õ¥¡¥¤¥ë\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 RFC1521¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ëbase64Éä¹æ²½¤ò»ÈÍÑ\n"
+" --help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¤Æ½ªÎ»\n"
+" --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "%s¤òfopen¤·¤Æ¤¤¤Þ¤¹"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "%s¤òfstat¤·¤Æ¤¤¤Þ¤¹"
diff --git a/po/nb.gmo b/po/nb.gmo
new file mode 100644
index 0000000..e0fba47
--- /dev/null
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..33dcc9c
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,1248 @@
+# Norwegian messages for GNU gettext. (bokmål dialect)
+# Copyright (C) 1996 Free Software Foundation, Inc.
+# Karl Anders Øygard <karlo@ifi.uio.no>, 1996.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU gettext 0.10.12\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2002-06-25 20:04+0200\n"
+"Last-Translator: Karl Anders Øygard <karlo@ifi.uio.no>\n"
+"Language-Team: Norwegian-bokmål <no@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Ukjent systemfeil"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: flagg «%s» er flertydig\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: flagg «--%s» tar ikke argumenter\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: flagg «%c%s» tar ikke argumenter\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: flagg «%s» behøver et argument\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ukjent flagg «--%s»\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ukjent flagg «%c%s»\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ulovlig flagg -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ugyldig flagg -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flagg behøver et argument -- %c\n"
+
+#: lib/getopt.c:881
+#, fuzzy, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: flagg «%s» er flertydig\n"
+
+#: lib/getopt.c:899
+#, fuzzy, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: flagg «--%s» tar ikke argumenter\n"
+
+#: lib/xmalloc.c:67
+#, fuzzy
+msgid "memory exhausted"
+msgstr "minnet oppbrukt"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr ""
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr ""
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr ""
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr ""
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr ""
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr ""
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr ""
+
+#: src/shar.c:901 src/unshar.c:379
+#, fuzzy
+msgid "Cannot get current directory name"
+msgstr "kan ikke skifte til filkatalog \"%s\""
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, fuzzy, c-format
+msgid "New file, remaining %s, "
+msgstr "feil under lesing av \"%s\""
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr ""
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr ""
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr ""
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr ""
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr ""
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr ""
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr ""
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr ""
+
+#: src/shar.c:1111
+#, fuzzy, c-format
+msgid "Cannot open file %s"
+msgstr "kan ikke opprette utfilen \"%s\""
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr ""
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr ""
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr ""
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr ""
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr ""
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr ""
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr ""
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr ""
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr ""
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr ""
+
+#: src/shar.c:1227
+msgid "text"
+msgstr ""
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr ""
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr ""
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr ""
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr ""
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr ""
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr ""
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr ""
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr ""
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr ""
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr ""
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr ""
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr ""
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr ""
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr ""
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "ingen innfiler spesifisert"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr ""
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr ""
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "kan ikke opprette utfilen \"%s\""
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr ""
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr ""
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr ""
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr ""
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr ""
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, fuzzy, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv «%s --help» for mer informasjon\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr ""
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr ""
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr ""
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr ""
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr ""
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr ""
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr ""
+
+#: src/shar.c:2238
+#, fuzzy
+msgid "No input files"
+msgstr "ingen innfiler spesifisert"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr ""
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr ""
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr ""
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr ""
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr ""
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr ""
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr ""
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr ""
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr ""
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr ""
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr ""
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+
+#: src/unshar.c:397
+#, fuzzy, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "kan ikke skifte til filkatalog \"%s\""
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standard inn"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr ""
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr ""
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr ""
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr ""
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, fuzzy, c-format
+msgid "%s: illegal line"
+msgstr "%s: ulovlig flagg -- %c\n"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr ""
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr ""
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr ""
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr ""
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr ""
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr ""
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr ""
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr ""
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr ""
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr ""
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr ""
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr ""
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr ""
+
+#~ msgid "missing arguments"
+#~ msgstr "mangler argument"
+
+#~ msgid "too many arguments"
+#~ msgstr "for mange argumenter"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n"
+#~ " -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n"
+#~ " -e enable expansion of some escape sequences\n"
+#~ " -E (ignored for compatibility)\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -n suppress trailing newline\n"
+#~ " -V, --version display version information and exit\n"
+#~ " [TEXTDOMAIN] MSGID retrieve translated message corresponding\n"
+#~ " to MSGID from TEXTDOMAIN\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n"
+#~ " -d, --domain=TEXTDOMAIN hent oversatte meldinger fra TEXTDOMAIN\n"
+#~ " -e slå på ekspandering av noen escape-sekvenser\n"
+#~ " -E (tillatt av kompatibilitetshensyn)\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -n undertrykk etterfølgende linjeskift\n"
+#~ " -v, --version vis programversjon og avslutt\n"
+#~ " [TEXTDOMAIN] MSGID hent oversatt melding som stemmer overens med "
+#~ "MSGID\n"
+#~ " fra TEXTDOMAIN\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "If the TEXTDOMAIN parameter is not given, the domain is determined from "
+#~ "the\n"
+#~ "environment variable TEXTDOMAIN. If the message catalog is not found in "
+#~ "the\n"
+#~ "regular directory, another location can be specified with the "
+#~ "environment\n"
+#~ "variable TEXTDOMAINDIR.\n"
+#~ "When used with the -s option the program behaves like the `echo' "
+#~ "command.\n"
+#~ "But it does not simply copy its arguments to stdout. Instead those "
+#~ "messages\n"
+#~ "found in the selected catalog are translated.\n"
+#~ "Standard search directory: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Hvis TEXTDOMAIN-parameteren ikke er gitt, blir domenet valgt fra\n"
+#~ "miljøvariabelen TEXTDOMAIN. Hvis meldingskatalogen ikke finnes i den\n"
+#~ "vanlige filkatalogen, kan en annen filkatalog spesifiseres ved hjelp av\n"
+#~ "miljøvariabelen TEXTDOMAIN.\n"
+#~ "Når flagget -s blir brukt, oppfører programmet seg som kommandoen "
+#~ "«echo».\n"
+#~ "Programmet kopierer imidlertid ikke sine argumenter til standard ut. I\n"
+#~ "stedet blir meldinger i den valgte katalogen oversatt.\n"
+#~ "Standard søkekatalog er: %s\n"
+
+#~ msgid ""
+#~ "internationalized messages should not contain the `\\%c' escape sequence"
+#~ msgstr ""
+#~ "internasjonaliserte meldinger skal ikke inneholde escape-sekvensen «\\%c»"
+
+#~ msgid "standard output"
+#~ msgstr "standard ut"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "feil under skriving av filen \"%s\""
+
+#~ msgid "exactly 2 input files required"
+#~ msgstr "behøver nøyaktig to innfiler"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION] def.po ref.po\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -V, --version output version information and exit\n"
+#~ "\n"
+#~ "Compare two Uniforum style .po files to check that both contain the same\n"
+#~ "set of msgid strings. The def.po file is an existing PO file with the\n"
+#~ "old translations. The ref.po file is the last created PO file\n"
+#~ "(generally by xgettext). This is useful for checking that you have\n"
+#~ "translated each and every message in your program. Where an exact match\n"
+#~ "cannot be found, fuzzy matching is used to produce better diagnostics.\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] def.po ref.po\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+#~ "\n"
+#~ "Sammenligner to Uniforum .po-filer for å sjekke at begge inneholder det\n"
+#~ "samme settet msgid-strenger. def.po-filen er en eksisterende PO-fil med "
+#~ "de\n"
+#~ "gamle oversettelsene. ref.po-filen er den sist genererte PO-filen\n"
+#~ "(vanligvis generert med xgettext). Dette er nyttig for å sjekke at du "
+#~ "har\n"
+#~ "oversatt alle meldinger i programmet. Der en eksakt overensstemmelse "
+#~ "ikke\n"
+#~ "finnes, blir «fuzzy» sammenligning brukt for å få bedre diagnostikk.\n"
+
+#~ msgid "this message is used but not defined..."
+#~ msgstr "denne meldingen er brukt, men ikke definert..."
+
+#~ msgid "...but this definition is similar"
+#~ msgstr "... men denne definisjonen ligner"
+
+#~ msgid "this message is used but not defined in %s"
+#~ msgstr "denne meldingen er brukt, men ikke definert i %s"
+
+#~ msgid "warning: this message is not used"
+#~ msgstr "advarsel: denne meldingen er ikke brukt"
+
+#~ msgid "duplicate message definition"
+#~ msgstr "duplisert definisjon av melding"
+
+#~ msgid "this is the location of the first definition"
+#~ msgstr "den første definisjonen finnes her"
+
+#~ msgid "this message has no definition in the \"%s\" domain"
+#~ msgstr "denne meldingen har ingen definisjon i \"%s\"-domenet"
+
+#~ msgid "no input file given"
+#~ msgstr "ingen innfil spesifisert"
+
+#~ msgid "error while opening \"%s\" for writing"
+#~ msgstr "feil under åpning av \"%s\" for skriving"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION] filename.po ...\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n"
+#~ " -h, --help display this help and exit\n"
+#~ " --no-hash binary file will not include the hash table\n"
+#~ " -o, --output-file=FILE specify output file name as FILE\n"
+#~ " --strict enable strict Uniforum mode\n"
+#~ " -v, --verbose list input file anomalies\n"
+#~ " -V, --version output version information and exit\n"
+#~ "\n"
+#~ "If input file is -, standard input is read. If output file is -,\n"
+#~ "output is written to standard output.\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] filnavn.po ...\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -a, --alignment=ANTALL justér strenger til ANTALL bytes (forvalgt: %"
+#~ "d)\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " --no-hash binærfil skal ikke inneholde hash-tabell\n"
+#~ " -o, --output-file=FILNAVN sett utfil til FILNAVN\n"
+#~ " --strict lag strengt Uniforum-konform .po-fil\n"
+#~ " -v, --verbose list alle avvik i innfil\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+#~ "\n"
+#~ "Hvis innfil er -, vil inndata bli lest fra standard inn. Dersom utfil er "
+#~ "-,\n"
+#~ "vil utdata bli skrevet til standard ut.\n"
+
+#~ msgid "while creating hash table"
+#~ msgstr "mens hash-tabellen ble laget"
+
+#, fuzzy
+#~ msgid "warning: no header entry found"
+#~ msgstr "advarsel: denne meldingen er ikke brukt"
+
+#~ msgid "domain name \"%s\" not suitable as file name"
+#~ msgstr "domenenavnet \"%s\" passer ikke som filnavn"
+
+#~ msgid "domain name \"%s\" not suitable as file name: will use prefix"
+#~ msgstr "domenenavnet \"%s\" passer ikke som filnavn: bruker prefiks"
+
+#~ msgid "`domain %s' directive ignored"
+#~ msgstr "nøkkelord «domain %s» ignorert"
+
+#~ msgid "empty `msgstr' entry ignored"
+#~ msgstr "tom «msgstr»-linje ignorert"
+
+#~ msgid "headerfield `%s' missing in header"
+#~ msgstr "filhodefelt «%s» mangler i filhode"
+
+#~ msgid "header field `%s' should start at beginning of line"
+#~ msgstr "filhodefelt «%s» skulle ha startet ved begynnelsen av linjen"
+
+#~ msgid "some header fields still have the initial default value"
+#~ msgstr "noen filhodefelt har fremdeles sin initielle verdi"
+
+#~ msgid "field `%s' still has initial default value"
+#~ msgstr "feltet «%s» har fremdeles sin forvalgte verdi"
+
+#~ msgid "duplicate message ID"
+#~ msgstr "duplisert meldings-id"
+
+#~ msgid "WARNING: source file contains fuzzy translation"
+#~ msgstr "ADVARSEL: kildefil har «fuzzy» oversettelser"
+
+#~ msgid "`msgid' and `msgstr' entry does not both begin with '\\n'"
+#~ msgstr "«msgid»- og «msgstr»-verdiene begynner ikke begge med '\\n'"
+
+#~ msgid "`msgid' and `msgstr' entry does not both end with '\\n'"
+#~ msgstr "«msgid»- og «msgstr»-verdiene slutter ikke begge med '\\n'"
+
+#~ msgid ""
+#~ "number of format specifications in `msgid' and `msgstr' does not match"
+#~ msgstr ""
+#~ "antall format-spesifiseringer i «msgid» og «msgstr» stemmer ikke overens"
+
+#~ msgid "format specifications for argument %u are not the same"
+#~ msgstr "format-spesifiseringene for argument %u er ulike"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION] def.po ref.po\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -e, --no-escape do not use C escapes in output (default)\n"
+#~ " -E, --escape use C escapes in output, no extended chars\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -i, --indent indented output style\n"
+#~ " -o, --output-file=FILE result will be written to FILE\n"
+#~ " --strict strict Uniforum output style\n"
+#~ " -v, --verbose increase verbosity level\n"
+#~ " -V, --version output version information and exit\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] INNFIL ...\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -e, --no-escape ikke bruk C-escapekoder i utdata (forvalgt)\n"
+#~ " -E, --escape bruk C-escapekoder i utdata, ingen utvidede "
+#~ "tegn\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -i, --indent indentert utdata\n"
+#~ " -o, --output-file=FIL resultat blir skrevet til FIL\n"
+#~ " --strict lag strengt Uniforum-konformt utdata\n"
+#~ " -v, --verbose gi mer fyldige meldinger\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Merges two Uniforum style .po files together. The def.po file is an\n"
+#~ "existing PO file with the old translations which will be taken over to\n"
+#~ "the newly created file as long as they still match; comments will be\n"
+#~ "preserved, but extract comments and file positions will be discarded.\n"
+#~ "The ref.po file is the last created PO file (generally by xgettext), any\n"
+#~ "translations or comments in the file will be discarded, however dot\n"
+#~ "comments and file positions will be preserved. Where an exact match\n"
+#~ "cannot be found, fuzzy matching is used to produce better results. The\n"
+#~ "results are written to stdout unless an output file is specified.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Fletter sammen to Uniforum .po-filer. def.po-filen er en eksisterende\n"
+#~ "PO-fil med gamle oversettelser, som vil bli overført til den nye filen\n"
+#~ "dersom de fremdeles stemmer. Kommentarer blir tatt med, men kommentarer "
+#~ "om\n"
+#~ "selve ekstraheringen og fil-posisjoner blir slettet. ref.po-filen er "
+#~ "den\n"
+#~ "sist genererte PO-filen (vanligvis generert med xgettext). "
+#~ "Oversettelser\n"
+#~ "eller kommentarer i denne filen blir slettet, men punktum-kommentarer og\n"
+#~ "fil-posisjoner blir ivaretatt. Der det ikke lar seg gjøre å finne en\n"
+#~ "eksakt overensstemmelse, blir «fuzzy» sammenligning brukt for å få bedre\n"
+#~ "resultater. Resultatet blir skrevet til standard ut, med mindre en "
+#~ "utfil\n"
+#~ "er spesifisert.\n"
+
+#~ msgid ""
+#~ "%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete "
+#~ "%d.\n"
+#~ msgstr ""
+#~ "%sLeste %d gamle + %d referanser, flettet inn %d, antok %d, mangler %d,\n"
+#~ "utdaterte %d.\n"
+
+#~ msgid " done.\n"
+#~ msgstr " ferdig.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION] [FILE]...\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -e, --no-escape do not use C escapes in output (default)\n"
+#~ " -E, --escape use C escapes in output, no extended chars\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -i, --indent write indented output style\n"
+#~ " -o, --output-file=FILE write output into FILE instead of standard "
+#~ "output\n"
+#~ " --strict write strict uniforum style\n"
+#~ " -V, --version output version information and exit\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] INNFIL ...\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -e, --no-escape ikke bruk C-escapekoder i utdata (forvalgt)\n"
+#~ " -E, --escape bruk C-escapekoder i utdata, ingen utvidede "
+#~ "tegn\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -i, --indent indentert utdata\n"
+#~ " -o, --output-file=FIL resultat blir skrevet til FIL i stedet for\n"
+#~ " standard ut\n"
+#~ " --strict lag strengt Uniforum-konformt utdata\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Convert binary .mo files to Uniforum style .po files.\n"
+#~ "Both little-endian and big-endian .mo files are handled.\n"
+#~ "If no input file is given or it is -, standard input is read.\n"
+#~ "By default the output is written to standard output.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Konverter binære .mo-filer til Uniforum .po-filer.\n"
+#~ "Både «little-endian» og «big-endian» .mo filer blir håndtert.\n"
+#~ "Dersom innfil er -, blir standard inn lest.\n"
+#~ "Dersom intet annet er spesifisert, blir det skrevet til standard ut.\n"
+
+#~ msgid "file \"%s\" truncated"
+#~ msgstr "filen \"%s\" er avkuttet"
+
+#~ msgid "seek \"%s\" offset %ld failed"
+#~ msgstr "«seek» \"%s\" posisjon %ld feilet"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "feil under åpning av «%s» for lesing"
+
+#~ msgid "file \"%s\" is not in GNU .mo format"
+#~ msgstr "filen \"%s\" er ikke i GNU .mo-format"
+
+#~ msgid "missing `msgstr' section"
+#~ msgstr "mangler «msgstr»-seksjon"
+
+#, fuzzy
+#~ msgid "found %d fatal errors"
+#~ msgstr "fant %d fatale feil"
+
+#, fuzzy
+#~ msgid "too many errors, aborting"
+#~ msgstr "for mange feil, avslutter"
+
+#~ msgid "keyword \"%s\" unknown"
+#~ msgstr "nøkkelord \"%s\" ukjent"
+
+#~ msgid "illegal control sequence"
+#~ msgstr "ulovlig kontrollsekvens"
+
+#~ msgid "end-of-line within string"
+#~ msgstr "slutt-på-linje inne i streng"
+
+#~ msgid "end-of-file within string"
+#~ msgstr "slutt-på-fil inne i streng"
+
+#~ msgid "while preparing output"
+#~ msgstr "under klargjøring av utdata"
+
+#~ msgid "%s and %s are mutually exclusive"
+#~ msgstr "%s og %s utelukker hverandre"
+
+#~ msgid "--join-existing cannot be used when output is written to stdout"
+#~ msgstr ""
+#~ "--join-existing kan ikke brukes når utdata blir skrevet til standard ut"
+
+#~ msgid "warning: type of file `%s' is unknown; will try C"
+#~ msgstr "advarsel: typen til fil «%s» er ukjent, forsøker C"
+
+#~ msgid "cannot change back to directory \"%s\""
+#~ msgstr "kan ikke skifte tilbake til filkatalog \"%s\""
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION] INPUTFILE ...\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -a, --extract-all extract all strings\n"
+#~ " -c, --add-comments[=TAG] place comment block with TAG (or those\n"
+#~ " preceding keyword lines) in output file\n"
+#~ " -C, --c++ recognize C++ style comments\n"
+#~ " -d, --default-domain=NAME use NAME.po for output (instead of "
+#~ "messages.po)\n"
+#~ " -D, --directory=DIRECTORY change to DIRECTORY before processing\n"
+#~ " -e, --no-escape do not use C escapes in output "
+#~ "(default)\n"
+#~ " -E, --escape use C escapes in output, no extended "
+#~ "chars\n"
+#~ " -f, --files-from=FILE get list of input files from FILE\n"
+#~ " --force-po write PO file even if empty\n"
+#~ " -F, --sort-by-file sort output by file location\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] INNFIL ...\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -a, --extract-all ekstrahér alle strenger\n"
+#~ " -c, --add-comments[=TAG] lagre kommentarblokker med TAG (eller\n"
+#~ " kommentarer i linjer som kommer foran\n"
+#~ " nøkkelord) i utfilen\n"
+#~ " -C, --c++ kjenn igjen C++-kommentarer\n"
+#~ " -d, --default-domain=NAVN lagre utdata i NAVN.po (i stedet for\n"
+#~ " messages.po)\n"
+#~ " -D, --directory=FILKATALOG skift til FILKATALOG før prosessering\n"
+#~ " -e, --no-escape ikke bruk C-escapekoder i utdata "
+#~ "(forvalgt)\n"
+#~ " -E, --escape bruk C-escapekoder i utdata, ingen "
+#~ "utvidede tegn\n"
+#~ " -f, --files-from=FIL hent liste av innfiler fra FIL\n"
+#~ " --force-po skriv PO-fil selv om den vil bli tom\n"
+#~ " -F, --sort-by-file sorter utdata etter fil-lokasjon\n"
+
+#, fuzzy
+#~ msgid ""
+#~ " -h, --help display this help and exit\n"
+#~ " -i, --indent write the .po file using indented style\n"
+#~ " -j, --join-existing join messages with existing file\n"
+#~ " -k, --keyword[=WORD] additonal keyword to be looked for "
+#~ "(without\n"
+#~ " WORD means not to use default keywords)\n"
+#~ " -l, --string-limit=NUMBER set string length limit to NUMBER "
+#~ "instead %u\n"
+#~ " -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr "
+#~ "entries\n"
+#~ " -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr "
+#~ "entries\n"
+#~ " --no-location do not write '#: filename:line' lines\n"
+#~ msgstr ""
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -i, --indent lag indentert utdata\n"
+#~ " -j, --join-existing flett sammen meldinger med eksisterende "
+#~ "fil\n"
+#~ " -k, --keyword[=ORD] se også etter nøkkelordet ORD (mangler\n"
+#~ " ORD, skal ikke de vanlige nøkkelord "
+#~ "brukes)\n"
+#~ " -l, --string-limit=NUMMER sett største streng-lengde til NUMMER\n"
+#~ " i stedet for %u\n"
+#~ " -m, --msgstr-prefix[=STRENG] bruk STRENG eller \"\" som prefiks for\n"
+#~ " msgstr-verdier\n"
+#~ " -M, --msgstr-suffix[=STRENG] bruk STRENG eller \"\" som suffiks for\n"
+#~ " msgstr-verdier\n"
+#~ " --no-location ikke lag «#: filnavn:linje»-linjer\n"
+
+#, fuzzy
+#~ msgid ""
+#~ " -n, --add-location generate '#: filename:line' lines "
+#~ "(default)\n"
+#~ " --omit-header don't write header with `msgid \"\"' "
+#~ "entry\n"
+#~ " -p, --output-dir=DIR output files will be placed in directory "
+#~ "DIR\n"
+#~ " -s, --sort-output generate sorted output and remove "
+#~ "duplicates\n"
+#~ " --strict write out strict Uniforum conforming .po "
+#~ "file\n"
+#~ " -T, --trigraphs understand ANSI C trigraphs for input\n"
+#~ " -V, --version output version information and exit\n"
+#~ " -x, --exclude-file=FILE entries from FILE are not extracted\n"
+#~ "\n"
+#~ "If INPUTFILE is -, standard input is read.\n"
+#~ msgstr ""
+#~ " -n, --add-location lag «#: filenavn:linje»-linjer "
+#~ "(forvalgt)\n"
+#~ " --omit-header ikke lag startseksjon med «msgid \"\"»\n"
+#~ " -p, --output-dir=KAT plassér utfiler i filkatalogen KAT\n"
+#~ " -s, --sort-output sortér utdata og ta bort duplikater\n"
+#~ " --strict lag strengt Uniforum-konform .po-fil\n"
+#~ " -T, --trigraphs forstå ANSI C trigraphs i inndata\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+#~ " -x, --exclude-file=FIL innslag fra FIL blir ikke ekstrahert\n"
+#~ "\n"
+#~ "Dersom INNFIL er -, vil det bli lest fra standard inn.\n"
+
+#~ msgid "this file may not contain domain directives"
+#~ msgstr "denne filen kan ikke inneholde domene-nøkkelord"
+
+#~ msgid "...this is the location of the first definition"
+#~ msgstr "... dette er lokasjonen til den første definisjonen"
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644
index 0000000..08eadbb
--- /dev/null
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..e4e1612
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,881 @@
+# translation of sharutils-4.6.1-pre5.po to Dutch
+# Dutch messages for GNU sharutils.
+# Copyright (C) 1996, 2005, 2006 Free Software Foundation, Inc.
+#
+# Erick Branderhorst <branderh@debian.org>, 1996, 2005.
+# Freek de Kruijf <f.de.kruijf@hetnet.nl>, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.1-pre5\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-01-21 00:26+0100\n"
+"Last-Translator: Freek de Kruijf <f.de.kruijf@hetnet.nl>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Onbekende systeemfout"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: optie `%s' is niet eenduidig\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: optie `--%s' staat geen argument toe\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: optie `%c%s' staat geen argument toe\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: optie `%s' vereist een argument\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: onbekende optie `--%s'\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: onbekende optie `%c%s'\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ongeldige optie -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ongeldige optie -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: optie vereist een argument -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: optie `-W %s' is niet eenduidig\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: optie `-W %s' staat geen argument toe\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "geen geheugen meer beschikbaar"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Let op: md5sum is niet geverifi�rd. Overweeg de installatie van 'GNU "
+"coreutils'."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+"WAARSCHUWING: tijdsaanduidingen niet teruggezet. Overweeg het verkrijgen en"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+"installeren van GNU `touch'\\'', gedistribueerd in 'GNU File Utilities'..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "vergrendelmap '${lock_dir}' bestaat"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "het aanmaken van een vergrendelmap is mislukt"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - aangemaakte vergrendelmap is `'%s\\''."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - het aanmaken van vergrendelmap `'%s\\'' is mislukt."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "ja"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "dit bestand overschrijven"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "nee"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "dit bestand overslaan"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "alles"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "alle bestanden overschrijven"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "geen"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "geen bestanden overschrijven"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "help"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "verklaar de keuze"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "stop"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "be�ndig onmiddelijk"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Te veel mappen om aan te maken met mkdir"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - aangemaakte map is `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - aanmaken van map `%s'\\'' is mislukt."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Kan geen toegang krijgen tot %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C is verouderd, gebruik nu -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Kan de naam van de huidige map niet vinden"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Archieven moeten in volgorde uitgepakt worden!\n"
+"Pak aub als volgende het deel '`cat ${lock_dir}/seq`' uit."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Nieuw bestand, nu nog %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "De grens is nog steeds %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "terugzetten van %s is mislukt"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Einde van deel %d, doorgaan met deel %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Beginbestand %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Geen gewoon bestand"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "In shar: resterende grootte %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "leeg"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(leeg)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Kan bestand %s niet openen"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "gecomprimeerd"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gemaakt met gzip"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "gemaakt met bzip2"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binair"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(gecomprimeerd)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gemaakt met gzip)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(gemaakt met bzip2)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binair)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "'Fork' is mislukt"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Bestand %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "tekst"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(tekst)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "bezig met overschrijven %s"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "overschrijf %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "BEZIG MET OVERSLAAN VAN %s"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "extraheren afgebroken"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "BEZIG MET OVERSLAAN VAN %s (bestand bestaat al)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Bezig met opslaan van %s (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - bezig met extraheren %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "terugzetten van %s is mislukt\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Einde van deel %ld, doorgaan met deel %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Einde van %s deel %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "archief"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Bestand %s gaat verder in deel %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Pak eerst deel 1 uit!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Pak eerst deel '${shar_sequence}' uit!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "NOG STEEDS BEZIG MET OVERSLAAN VAN %s"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "doorgaan met bestand %s"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Bestand %s is compleet"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "bezig met decoderen (uudecode) van bestand %s"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "bezig met decomprimeren van bestand %s"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "bezig met decomprimeren (gunzip) van bestand %s"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "bezig met decomprimeren (bunzip2) van bestand %s"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5 controle is mislukt"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'herstelwaarschuwing: grootte van %s is niet %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "toevoegen van uitvoerbestandsnaam"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Bezig `%s' te openen"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Bezig `%s' te sluiten"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Probeer `%s --help' voor meer informatie.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Gebruik: %s [OPTIE]... [BESTAND]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Verplichte argumenten bij lange opties zijn ook verplicht bij korte opties.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Terugmelding:\n"
+" --help toon deze hulptekst en be�ndig programma\n"
+" --version toon versie-informatie en be�ndig programma\n"
+" -q, --quiet, --silent toon lokaal geen uitgebreide berichten\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Selectie van bestanden:\n"
+" -p, --intermix-type sta -[BTzZ] toe in bestandslijsten om\n"
+" de modus te veranderen\n"
+" -S, --stdin-file-list lees bestandslijst van standaardinvoer\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Selectie van bestanden:\n"
+" -p, --intermix-type sta -[BTz] toe in bestandslijsten om\n"
+" de modus te veranderen\n"
+" -S, --stdin-file-list lees bestandslijst van standaardinvoer\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Uitvoer splitsen:\n"
+" -o, --output-prefix=VOORL uitvoer naar bestand VOORL.01 tot VOORL.NN\n"
+" -l, --whole-size-limit=GRTT splits archief, geen bestanden, in GRTT "
+"kilobytes\n"
+" -L, --split-size-limit=GRTT splits archief, of bestanden, tot GRTT "
+"kilobytes\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Inhoud van de shar-kop:\n"
+" -n, --archive-name=NAAM geef het archief de (informatieve) naam NAAM\n"
+" -s, --submitter=ADRES vervang de naam van de archivaris door ADRES\n"
+" -a, --net-headers voeg de kopregels Submitted-by: en Archive-name: "
+"toe\n"
+" -c, --cut-mark begin de shar met een afbreekregel\n"
+" -t, --translate vertaal boodschappen in het script\n"
+"\n"
+"Hoe bestanden behandeld worden:\n"
+" -M, --mixed-uuencode laat shar beslissen of uuencode nodig is\n"
+" (dit is de standaard)\n"
+" -T, --text-files alle bestanden zijn tekstbestanden\n"
+" -B, --uuencode alle bestanden zijn binair, gebruik uuencode\n"
+" -z, --gzip pas gzip en uuencode toe op alle bestanden\n"
+" -g, --level-for-gzip=NIVEAU gebruik gzip met optie -NIVEAU (standaard -"
+"9)\n"
+" -j, --bzip2 pas bzip2 en uuencode toe op alle bestanden\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress pas compress en uuencode toe op alle "
+"bestanden\n"
+" -b, --bits-per-code=BITS geef -bBITS (default 12) door aan compress\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Bescherming tegen transmissie:\n"
+" -w, --no-character-count gebruik geen `wc -c' voor groottecontrole\n"
+" -D, --no-md5-digest gebruik geen `md5sum' om te verifi�en\n"
+" -F, --force-prefix gebruik het voorvoegkarakter op elke regel\n"
+" -d, --here-delimiter=TEKST gebruik TEKST om bestanden te scheiden in de "
+"shar\n"
+"\n"
+"Aanmaken van verschillende soorten shars:\n"
+" -V, --vanilla-operation maak eenvoudige en weinig eisende shars\n"
+" -P, --no-piping gebruik tijdelijke bestanden tijdens unshar\n"
+" -x, --no-check-existing overschrijf bestaande bestanden blindelings\n"
+" -X, --query-user vraag gebruiker voor overschrijven bestanden\n"
+" (niet voor Net)\n"
+" -m, --no-timestamp zet de bestandsmodificatie datum/tijd niet "
+"terug\n"
+" -Q, --quiet-unshar voorkom meldingen tijdens unshar\n"
+" -f, --basename terugzetten in �n directory, hi�archie "
+"negerend\n"
+" --no-i18n maak geen ge�ternationaliseerd shellscript\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Optie -o is vereist bij -l of -L, optie -n is vereist bij -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "Optie -g impliceert -z, optie -b impliceert -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Optie -g impliceert -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Rapporteer bugs naar <%s>.\n"
+"Rapporteer opmerkingen over de vertaling naar <vertaling@vrijschrift.org>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "ongeldige limiet, `%s', van de grootte van een bestand"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "ongeldige opmaak (telveld te breed): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG niet meevertaald"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Harde limiet %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Dit systeem ondersteunt -Z ('compress') niet, gebruik -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Zachte grens %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "onjuiste uitvoervoorloopnaam\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Dit is vrije software; zie de bronbestanden voor de kopieervoorwaarden.\n"
+"Er is GEEN garantie; ook niet voor VERKOOPBAARHEID of GESCHIKTHEID VOOR\n"
+"EEN BEPAALD DOEL.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "WAARSCHUWING: De normale mode is niet interactief"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "WAARSCHUWING: de opties voor opslag van niet-tekst worden genegeerd"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Geen invoerbestanden"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Optie -a kan niet zonder -n gebruikt worden"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "De opties -l of -L kunnen niet zonder -o gebruikt worden"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "Vermijd -X shars op Usenet en op openbare netwerken"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Het laatste deel is uitgepakt"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "%d bestand(en) aangemaakt\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - vergrendelmap `'%s\\'' is verwijderd."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - verwijderen van vergrendelmap `'%s\\'' is mislukt."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Geen shell-opdrachten gevonden in %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s ziet eruit als een C-programma, niet als een shell-archief"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Geen shell opdrachten gevonden na `cut' in %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s is waarschijnlijk geen shell-archief"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Na de `cut'-regel volgde: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Bezig een `sh'-proces op te starten"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Verplichte argumenten bij lange opties zijn ook verplicht bij korte opties.\n"
+"\n"
+" -d, --directory=MAP ga naar MAP alvorens uit te pakken\n"
+" -c, --overwrite geef -c aan shar script voor het\n"
+" overschrijven van bestanden\n"
+" -e, --exit-0 zelfde als `--split-at=\"exit 0\"'\n"
+" -E, --split-at=TEKST splits samengevoegde shars na TEKST\n"
+" -f, --force zelfde als `-c'\n"
+" --help toon hulptekst en be�ndig programma\n"
+" --version toon versie-informatie en be�ndig programma\n"
+"\n"
+"Als er geen BESTAND is, lees van standaardinvoer.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Huidige map op `%s' zetten is mislukt"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "voeg een buffer voor de bestandsnaam toe"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standaardinvoer"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "voeg een buffer voor het bestand toe"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Schrijffout"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Bestand is te kort"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Geen `end'-regel"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: gegevens aanwezig na het `='-vulteken"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: onjuiste regel"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Geen `begin'-regel"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Onjuiste ~gebruiker"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Er bestaat geen gebruiker `%s'"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "kan geen toegang krijgen tot %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "kan niet naar FIFO (%s) schrijven"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "symbolische koppeling (%s) wordt niet gevolgd"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Bezig fopen op %s toe te passen"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Gebruik: %s [BESTAND]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Verplichte argumenten bij lange opties zijn ook verplicht bij korte opties.\n"
+" -o, --output-file=BESTAND uitvoer naar BESTAND\n"
+" --help toon deze hulptekst en be�ndig programma\n"
+" --version toon versie-informatie en be�ndig programma\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Fout bij schrijven"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Fout bij lezen"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Gebruik: %s [LOKAAL_BESTAND] NIETLOKAAL_BESTAND\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 gebruik base64 codering zoals in RFC1521\n"
+" --help toon deze hulptekst en be�ndig programma\n"
+" --version toon versie-informatie en be�ndig programma\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "Bezig fopen op %s toe te passen"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "Bezig fstat op %s toe te passen"
diff --git a/po/nn.gmo b/po/nn.gmo
new file mode 100644
index 0000000..fea1385
--- /dev/null
+++ b/po/nn.gmo
Binary files differ
diff --git a/po/nn.po b/po/nn.po
new file mode 100644
index 0000000..caf8c87
--- /dev/null
+++ b/po/nn.po
@@ -0,0 +1,1212 @@
+# Norwegian messages for GNU gettext. (nynorsk dialect)
+# Copyright (C) 1996 Free Software Foundation, Inc.
+# Karl Anders Øygard <karlo@ifi.uio.no>, 1996.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU gettext 0.10.12\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2002-06-25 20:04+0200\n"
+"Last-Translator: Karl Anders Øygard <karlo@ifi.uio.no>\n"
+"Language-Team: Norwegian-nynorsk <no@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr ""
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: flagg «%s» er fleirtydig\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: flagg «--%s» tek ikkje argument\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: flagg «%c%s» tek ikkje argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: flagg «%s» treng eit argument\n"
+
+#: lib/getopt.c:771
+#, fuzzy, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ulovleg flagg -- %c\n"
+
+#: lib/getopt.c:775
+#, fuzzy, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ulovleg flagg -- %c\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ulovleg flagg -- %c\n"
+
+#: lib/getopt.c:804
+#, fuzzy, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ulovleg flagg -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flagg treng eit argument -- %c\n"
+
+#: lib/getopt.c:881
+#, fuzzy, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: flagg «%s» er fleirtydig\n"
+
+#: lib/getopt.c:899
+#, fuzzy, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: flagg «--%s» tek ikkje argument\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr ""
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr ""
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr ""
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr ""
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr ""
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr ""
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr ""
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr ""
+
+#: src/shar.c:901 src/unshar.c:379
+#, fuzzy
+msgid "Cannot get current directory name"
+msgstr "kan ikkje skifte til filkatalog \"%s\""
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, fuzzy, c-format
+msgid "New file, remaining %s, "
+msgstr "feil under skriving av fila \"%s\""
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr ""
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr ""
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr ""
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr ""
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr ""
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr ""
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr ""
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr ""
+
+#: src/shar.c:1111
+#, fuzzy, c-format
+msgid "Cannot open file %s"
+msgstr "kan ikkje opprette utfila \"%s\""
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr ""
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr ""
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr ""
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr ""
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr ""
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr ""
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr ""
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr ""
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr ""
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr ""
+
+#: src/shar.c:1227
+msgid "text"
+msgstr ""
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr ""
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr ""
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr ""
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr ""
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr ""
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr ""
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr ""
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr ""
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr ""
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr ""
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr ""
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr ""
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr ""
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr ""
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "inga innfil spesifisert"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr ""
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr ""
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "kan ikkje opprette utfila \"%s\""
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr ""
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr ""
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr ""
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr ""
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr ""
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, fuzzy, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv «%s --help» for meir informasjon\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr ""
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr ""
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr ""
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr ""
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr ""
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr ""
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr ""
+
+#: src/shar.c:2238
+#, fuzzy
+msgid "No input files"
+msgstr "inga innfil spesifisert"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr ""
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr ""
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr ""
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr ""
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr ""
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr ""
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr ""
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr ""
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr ""
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr ""
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr ""
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+
+#: src/unshar.c:397
+#, fuzzy, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "kan ikkje skifte til filkatalog \"%s\""
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr ""
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr ""
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr ""
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr ""
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr ""
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, fuzzy, c-format
+msgid "%s: illegal line"
+msgstr "%s: ulovleg flagg -- %c\n"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr ""
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr ""
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr ""
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr ""
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr ""
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr ""
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr ""
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr ""
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr ""
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr ""
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr ""
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr ""
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr ""
+
+#~ msgid "missing arguments"
+#~ msgstr "manglar argument"
+
+#, fuzzy
+#~ msgid "too many arguments"
+#~ msgstr "manglar argument"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n"
+#~ " -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n"
+#~ " -e enable expansion of some escape sequences\n"
+#~ " -E (ignored for compatibility)\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -n suppress trailing newline\n"
+#~ " -V, --version display version information and exit\n"
+#~ " [TEXTDOMAIN] MSGID retrieve translated message corresponding\n"
+#~ " to MSGID from TEXTDOMAIN\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n"
+#~ " -d, --domain=TEXTDOMAIN hent oversette meldingar frå TEXTDOMAIN\n"
+#~ " -e slå på ekspandering av nokre escape-"
+#~ "sekvensar\n"
+#~ " -E (tillete av kompatibilitetsomsyn)\n"
+#~ " -h, --help vis denne hjelpeteksta og avslutt\n"
+#~ " -n undertrykk etterfølgjande linjeskift\n"
+#~ " -v, --version vis programversjon og avslutt\n"
+#~ " [TEXTDOMAIN] MSGID hent oversett melding som stemmer overeins "
+#~ "med\n"
+#~ " MSGID frå TEXTDOMAIN\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "If the TEXTDOMAIN parameter is not given, the domain is determined from "
+#~ "the\n"
+#~ "environment variable TEXTDOMAIN. If the message catalog is not found in "
+#~ "the\n"
+#~ "regular directory, another location can be specified with the "
+#~ "environment\n"
+#~ "variable TEXTDOMAINDIR.\n"
+#~ "When used with the -s option the program behaves like the `echo' "
+#~ "command.\n"
+#~ "But it does not simply copy its arguments to stdout. Instead those "
+#~ "messages\n"
+#~ "found in the selected catalog are translated.\n"
+#~ "Standard search directory: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Dersom TEXTDOMAIN-parameteren ikkje er gjeven, vert domenet valgt frå\n"
+#~ "miljøvariabelen TEXTDOMAIN. Dersom meldingskatalogen ikkje finst i den\n"
+#~ "vanlege filkatalogen, kan ein annan filkatalog spesifiserast ved hjelp "
+#~ "av\n"
+#~ "miljøvariabelen TEXTDOMAIN.\n"
+#~ "Når flagget -s vert brukt, oppfører programmet seg som kommandoen "
+#~ "«echo»,\n"
+#~ "men gjer ikkje ein enkel kopiering av argumenta sine til standard ut. I\n"
+#~ "staden vert meldingar som er funne i den valgte katalogen oversatt.\n"
+#~ "Standard søkekatalog er: %s\n"
+
+#~ msgid ""
+#~ "internationalized messages should not contain the `\\%c' escape sequence"
+#~ msgstr ""
+#~ "internasjonaliserte meldingar skal ikkje innehalde escape-sekvensen «\\%c»"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "feil under skriving av fila \"%s\""
+
+#~ msgid "exactly 2 input files required"
+#~ msgstr "treng nøyaktig to innfiler"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION] def.po ref.po\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -V, --version output version information and exit\n"
+#~ "\n"
+#~ "Compare two Uniforum style .po files to check that both contain the same\n"
+#~ "set of msgid strings. The def.po file is an existing PO file with the\n"
+#~ "old translations. The ref.po file is the last created PO file\n"
+#~ "(generally by xgettext). This is useful for checking that you have\n"
+#~ "translated each and every message in your program. Where an exact match\n"
+#~ "cannot be found, fuzzy matching is used to produce better diagnostics.\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] def.po ref.po\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -h, --help vis denne hjelpeteksta og avslutt\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+#~ "\n"
+#~ "Samanliknar to Uniforum .po-filer for å sjekke at begge inneheld det "
+#~ "samme\n"
+#~ "settet msgid-strengar. def.po-filen er ein eksisterende PO-fil med dei\n"
+#~ "gamle oversetjingane. ref.po-filen er den sist genererte PO-fila\n"
+#~ "(vanligvis generert med xgettext). Dette er nyttig for å sjekke at du "
+#~ "har\n"
+#~ "oversett alle meldingar i programmet. Der samsvar ikkje kan finnast, "
+#~ "vert\n"
+#~ "«fuzzy» samanlikning brukt for å få betre diagnostikk.\n"
+
+#~ msgid "this message is used but not defined..."
+#~ msgstr "denne meldinga er brukt, men ikkje definert..."
+
+#~ msgid "...but this definition is similar"
+#~ msgstr "... men denne definisjonen liknar"
+
+#~ msgid "this message is used but not defined in %s"
+#~ msgstr "denne meldinga er brukt, men ikkje definert i %s"
+
+#~ msgid "warning: this message is not used"
+#~ msgstr "advarsel: denne meldinga er ikkje brukt"
+
+#~ msgid "this is the location of the first definition"
+#~ msgstr "den første definisjonen finst her"
+
+#~ msgid "this message has no definition in the \"%s\" domain"
+#~ msgstr "denne meldinga har ingen definisjon i \"%s\"-domenet"
+
+#~ msgid "no input file given"
+#~ msgstr "inga innfil spesifisert"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for writing"
+#~ msgstr "feil under skriving av fila \"%s\""
+
+#~ msgid ""
+#~ "Usage: %s [OPTION] filename.po ...\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n"
+#~ " -h, --help display this help and exit\n"
+#~ " --no-hash binary file will not include the hash table\n"
+#~ " -o, --output-file=FILE specify output file name as FILE\n"
+#~ " --strict enable strict Uniforum mode\n"
+#~ " -v, --verbose list input file anomalies\n"
+#~ " -V, --version output version information and exit\n"
+#~ "\n"
+#~ "If input file is -, standard input is read. If output file is -,\n"
+#~ "output is written to standard output.\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] filnavn.po ...\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -a, --alignment=ANTALL justér strengar til ANTALL bytes (forvalgt: %"
+#~ "d)\n"
+#~ " -h, --help vis denne hjelpeteksta og avslutt\n"
+#~ " --no-hash binærfil skal ikkje innehalde hash-tabell\n"
+#~ " -o, --output-file=FILNAVN sett utfil til FILNAVN\n"
+#~ " --strict lag strengt Uniforum-konform .po-fil\n"
+#~ " -v, --verbose list alle avvik i innfil\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+#~ "\n"
+#~ "Dersom innfil er -, vil inndata verte lest frå standard inn. Dersom "
+#~ "utfil\n"
+#~ "er -, vil utdata verte skrive til standard ut.\n"
+
+#~ msgid "while creating hash table"
+#~ msgstr "mens hash-tabellen vart laga"
+
+#, fuzzy
+#~ msgid "warning: no header entry found"
+#~ msgstr "advarsel: denne meldinga er ikkje brukt"
+
+#~ msgid "domain name \"%s\" not suitable as file name"
+#~ msgstr "domenenamnet \"%s\" passar ikkje som filnavn"
+
+#~ msgid "domain name \"%s\" not suitable as file name: will use prefix"
+#~ msgstr "domenenamnet \"%s\" passar ikkje som filnavn: brukar prefiks"
+
+#~ msgid "headerfield `%s' missing in header"
+#~ msgstr "filhovud-feltet «%s» manglar i filhovud"
+
+#~ msgid "header field `%s' should start at beginning of line"
+#~ msgstr "filhovud-feltet «%s» skulle ha starta på byrjinga av linja"
+
+#~ msgid "some header fields still have the initial default value"
+#~ msgstr "nokre filhovud-felt har framleis sin initielle verdi"
+
+#~ msgid "field `%s' still has initial default value"
+#~ msgstr "feltet «%s» har framleis sin forvalgte verdi"
+
+#~ msgid "WARNING: source file contains fuzzy translation"
+#~ msgstr "ADVARSEL: kildefila har «fuzzy» oversetjingar"
+
+#~ msgid "`msgid' and `msgstr' entry does not both begin with '\\n'"
+#~ msgstr "«msgid»- og «msgstr»-verdiane byrjarr ikkje båe med '\\n'"
+
+#~ msgid "`msgid' and `msgstr' entry does not both end with '\\n'"
+#~ msgstr "«msgid»- og «msgstr»-verdiane sluttar ikkje båe med '\\n'"
+
+#~ msgid ""
+#~ "number of format specifications in `msgid' and `msgstr' does not match"
+#~ msgstr ""
+#~ "antall format-spesifiseringar i «msgid» og «msgstr» stemmer ikkje overeins"
+
+#~ msgid "format specifications for argument %u are not the same"
+#~ msgstr "format-spesifiseringane for argument %u er ulike"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION] def.po ref.po\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -e, --no-escape do not use C escapes in output (default)\n"
+#~ " -E, --escape use C escapes in output, no extended chars\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -i, --indent indented output style\n"
+#~ " -o, --output-file=FILE result will be written to FILE\n"
+#~ " --strict strict Uniforum output style\n"
+#~ " -v, --verbose increase verbosity level\n"
+#~ " -V, --version output version information and exit\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] INNFIL ...\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -e, --no-escape ikkje bruk C-escapekoder i utdata (forvalgt)\n"
+#~ " -E, --escape bruk C-escapekoder i utdata, ingen utvida "
+#~ "teikn\n"
+#~ " -h, --help vis denne hjelpeteksta og avslutt\n"
+#~ " -i, --indent indentert utdata\n"
+#~ " -o, --output-file=FIL resultat vert skrive til FIL\n"
+#~ " --strict lag strengt Uniforum-konformt utdata\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Merges two Uniforum style .po files together. The def.po file is an\n"
+#~ "existing PO file with the old translations which will be taken over to\n"
+#~ "the newly created file as long as they still match; comments will be\n"
+#~ "preserved, but extract comments and file positions will be discarded.\n"
+#~ "The ref.po file is the last created PO file (generally by xgettext), any\n"
+#~ "translations or comments in the file will be discarded, however dot\n"
+#~ "comments and file positions will be preserved. Where an exact match\n"
+#~ "cannot be found, fuzzy matching is used to produce better results. The\n"
+#~ "results are written to stdout unless an output file is specified.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Fletter saman to Uniforum .po-filer. def.po-filen er ei eksisterande\n"
+#~ "PO-fil med gamle oversetjingar, som vil verte overført til den nye fila\n"
+#~ "dersom dei framleis stemmer. Kommentarar vert teke med, men kommentarer "
+#~ "om\n"
+#~ "sjølve ekstraheringa og fil-posisjoner vert sletta. ref.po-filen er den\n"
+#~ "sist genererte PO-fila (vanlegvis generert med xgettext). Oversetjingar\n"
+#~ "eller kommentarer i denne fila vert sletta, men punktum-kommentarer og\n"
+#~ "fil-posisjonar vert teke vare på. Der det ikkje er mogleg å finne ei\n"
+#~ "eksakt overeinsstemming, vert «fuzzy» samanlikning brukt for å få betre\n"
+#~ "resultat. Resultatet vert skrive til standard ut, med mindre ei utfil "
+#~ "er\n"
+#~ "spesifisert.\n"
+
+#~ msgid ""
+#~ "%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete "
+#~ "%d.\n"
+#~ msgstr ""
+#~ "%sLeste %d gamle + %d referansar, fletta inn %d, «fuzzya» %d, manglar %"
+#~ "d,\n"
+#~ "utdaterte %d.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION] [FILE]...\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -e, --no-escape do not use C escapes in output (default)\n"
+#~ " -E, --escape use C escapes in output, no extended chars\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -i, --indent write indented output style\n"
+#~ " -o, --output-file=FILE write output into FILE instead of standard "
+#~ "output\n"
+#~ " --strict write strict uniforum style\n"
+#~ " -V, --version output version information and exit\n"
+#~ msgstr ""
+#~ "Usage: %s [OPTION] [FILE]...\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -e, --no-escape do not use C escapes in output (default)\n"
+#~ " -E, --escape use C escapes in output, no extended chars\n"
+#~ " -h, --help display this help and exit\n"
+#~ " -i, --indent write indented output style\n"
+#~ " -o, --output-file=FILE write output into FILE instead of standard "
+#~ "output\n"
+#~ " --strict write strict uniforum style\n"
+#~ " -V, --version output version information and exit\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Convert binary .mo files to Uniforum style .po files.\n"
+#~ "Both little-endian and big-endian .mo files are handled.\n"
+#~ "If no input file is given or it is -, standard input is read.\n"
+#~ "By default the output is written to standard output.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Konverter binære .mo-filer til Uniforum .po-filer. Både «little-endian» "
+#~ "og\n"
+#~ "«big-endian» .mo filer vert håndtert. Dersom innfil er -, blir standard\n"
+#~ "inn lest. Dersom utfil er -, vert det skrive til standard ut.\n"
+
+#~ msgid "file \"%s\" truncated"
+#~ msgstr "filen \"%s\" er avkutta"
+
+#~ msgid "seek \"%s\" offset %ld failed"
+#~ msgstr "«seek» \"%s\" posisjon %ld feila"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "feil under skriving av fila \"%s\""
+
+#~ msgid "file \"%s\" is not in GNU .mo format"
+#~ msgstr "fila \"%s\" er ikkje i GNU .mo-format"
+
+#~ msgid "missing `msgstr' section"
+#~ msgstr "manglar «msgstr»-seksjon"
+
+#, fuzzy
+#~ msgid "found %d fatal errors"
+#~ msgstr "fann %d fatale feil"
+
+#, fuzzy
+#~ msgid "too many errors, aborting"
+#~ msgstr "for mange feil, avsluttar"
+
+#~ msgid "while preparing output"
+#~ msgstr "under klargjering av utdata"
+
+#~ msgid "%s and %s are mutually exclusive"
+#~ msgstr "%s og %s utelukker kvarandre"
+
+#~ msgid "--join-existing cannot be used when output is written to stdout"
+#~ msgstr ""
+#~ "--join-existing kan ikkje brukast når utdata vert skrive til standard ut"
+
+#~ msgid "cannot change back to directory \"%s\""
+#~ msgstr "kan ikkje skifte tilbake til filkatalog \"%s\""
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION] INPUTFILE ...\n"
+#~ "Mandatory arguments to long options are mandatory for short options too.\n"
+#~ " -a, --extract-all extract all strings\n"
+#~ " -c, --add-comments[=TAG] place comment block with TAG (or those\n"
+#~ " preceding keyword lines) in output file\n"
+#~ " -C, --c++ recognize C++ style comments\n"
+#~ " -d, --default-domain=NAME use NAME.po for output (instead of "
+#~ "messages.po)\n"
+#~ " -D, --directory=DIRECTORY change to DIRECTORY before processing\n"
+#~ " -e, --no-escape do not use C escapes in output "
+#~ "(default)\n"
+#~ " -E, --escape use C escapes in output, no extended "
+#~ "chars\n"
+#~ " -f, --files-from=FILE get list of input files from FILE\n"
+#~ " --force-po write PO file even if empty\n"
+#~ " -F, --sort-by-file sort output by file location\n"
+#~ msgstr ""
+#~ "Bruk: %s [FLAGG] INNFIL ...\n"
+#~ "Obligatoriske argumenter til lange flagg er obligatoriske også til korte "
+#~ "flagg.\n"
+#~ " -a, --extract-all ekstrahér alle strengar\n"
+#~ " -c, --add-comments[=TAG] lagre kommentarblokker med TAG (eller\n"
+#~ " kommentarar i linjer som kjem foran\n"
+#~ " nøkkelord) i utfila\n"
+#~ " -C, --c++ kjenn igjen C++-kommentarar\n"
+#~ " -d, --default-domain=NAVN lagre utdata i NAVN.po (i staden for\n"
+#~ " messages.po)\n"
+#~ " -D, --directory=FILKATALOG skift til FILKATALOG før prosessering\n"
+#~ " -e, --no-escape ikkje bruk C-escapekoder i utdata "
+#~ "(forvalgt)\n"
+#~ " -E, --escape bruk C-escapekoder i utdata, ingen utvida "
+#~ "teikn\n"
+#~ " -f, --files-from=FIL hent liste av innfiler frå FIL\n"
+#~ " -F, --sort-by-file sorter utdata etter fil-lokasjon\n"
+
+#, fuzzy
+#~ msgid ""
+#~ " -h, --help display this help and exit\n"
+#~ " -i, --indent write the .po file using indented style\n"
+#~ " -j, --join-existing join messages with existing file\n"
+#~ " -k, --keyword[=WORD] additonal keyword to be looked for "
+#~ "(without\n"
+#~ " WORD means not to use default keywords)\n"
+#~ " -l, --string-limit=NUMBER set string length limit to NUMBER "
+#~ "instead %u\n"
+#~ " -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr "
+#~ "entries\n"
+#~ " -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr "
+#~ "entries\n"
+#~ " --no-location do not write '#: filename:line' lines\n"
+#~ msgstr ""
+#~ " -h, --help vis denne hjelpeteksta og avslutt\n"
+#~ " -i, --indent lag indentert utdata\n"
+#~ " -j, --join-existing flett saman meldingar med eksisterande "
+#~ "fil\n"
+#~ " -k, --keyword[=ORD] sjå også etter nøkkelordet ORD (manglar "
+#~ "ORD,\n"
+#~ " skal ikkje dei vanlege nøkkelorda "
+#~ "nyttast)\n"
+#~ " -l, --string-limit=NUMMER sett største streng-lengde til NUMMER\n"
+#~ " i staden for %u\n"
+#~ " -m, --msgstr-prefix[=STRENG] bruk STRENG eller \"\" som prefiks for\n"
+#~ " msgstr-verdiar\n"
+#~ " -M, --msgstr-suffix[=STRENG] bruk STRENG eller \"\" som suffiks for\n"
+#~ " msgstr-verdiar\n"
+#~ " --no-location ikkje lag «#: filnavn:linje»-linjer\n"
+
+#, fuzzy
+#~ msgid ""
+#~ " -n, --add-location generate '#: filename:line' lines "
+#~ "(default)\n"
+#~ " --omit-header don't write header with `msgid \"\"' "
+#~ "entry\n"
+#~ " -p, --output-dir=DIR output files will be placed in directory "
+#~ "DIR\n"
+#~ " -s, --sort-output generate sorted output and remove "
+#~ "duplicates\n"
+#~ " --strict write out strict Uniforum conforming .po "
+#~ "file\n"
+#~ " -T, --trigraphs understand ANSI C trigraphs for input\n"
+#~ " -V, --version output version information and exit\n"
+#~ " -x, --exclude-file=FILE entries from FILE are not extracted\n"
+#~ "\n"
+#~ "If INPUTFILE is -, standard input is read.\n"
+#~ msgstr ""
+#~ " -n, --add-location lag «#: filenavn:linje»-linjer "
+#~ "(forvalgt)\n"
+#~ " --omit-header ikkje lag startseksjon med «msgid \"\"»\n"
+#~ " -p, --output-dir=KAT plassér utfiler i filkatalogen KAT\n"
+#~ " -s, --sort-output sortér utdata og ta bort duplikat\n"
+#~ " --strict lag strengt Uniforum-konform .po-fil\n"
+#~ " -T, --trigraphs forstå ANSI C trigraphs i inndata\n"
+#~ " -V, --version vis programversjon og avslutt\n"
+#~ " -x, --exclude-file=FIL innslag frå FIL vert ikkje ekstrahert\n"
+#~ "\n"
+#~ "Dersom INNFIL er -, vil det verte lese frå standard inn.\n"
+
+#~ msgid "this file may not contain domain directives"
+#~ msgstr "denne fila kan ikkje innehalde domene-nøkkelord"
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644
index 0000000..55e05f7
--- /dev/null
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..b3009be
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,882 @@
+# Polish translation for sharutils.
+# Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2005-2006.
+# partially based on initial translation by Wojtek ¦lusarczyk of PLD, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-20 09:26+0200\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Nieznany b³±d systemowy"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opcja `%s' jest niejednoznaczna\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opcja `--%s' nie mo¿e mieæ argumentu\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opcja `%c%s' nie mo¿e mieæ argumentu\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opcja `%s' wymaga argumentu\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nierozpoznana opcja `--%s'\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nierozpoznana opcja `%c%s'\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: niedopuszczalna opcja -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: b³êdna opcja -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcja wymaga argumentu -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opcja `-W %s' jest niejednoznaczna\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opcja `-W %s' nie mo¿e mieæ argumentu\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "pamiêæ wyczerpana"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr "Uwaga: sumy md5 nie s± sprawdzane. Do tego potrzebne s± GNU coreutils."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "UWAGA: nie przywrócono znacznika czasu."
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "Do tego potrzebny jest GNU `touch'\\'' z pakietu GNU coreutils..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "katalog blokuj±cy '${lock_dir}' istnieje"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "nie uda³o siê utworzyæ katalogu blokuj±cego"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - utworzono katalog blokuj±cy `'%s\\''."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - nie uda³o siê utworzyæ katalogu blokuj±cego `'%s\\''."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "tak"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "nadpisanie tego pliku"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "nie"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "pominiêcie tego pliku"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "wszystkie"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "nadpisanie wszystkich plików"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "¿aden"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "nie nadpisywanie ¿adnego pliku"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "pomoc"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "wyja¶nienie opcji"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "koniec"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "natychmiastowe zakoñczenie"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Zbyt wiele katalogów dla programu mkdir"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - utworzono katalog `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - nie uda³o siê utworzyæ katalogu `%s'\\''."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Brak dostêpu do %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C jest przestarza³e, nale¿y u¿yæ opcji -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Nie mo¿na pobraæ nazwy bie¿±cego katalogu"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Archiwa musz± byæ rozpakowywane w kolejno¶ci!\n"
+"Proszê rozpakowaæ teraz czê¶æ '`cat ${lock_dir}/seq`'."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Nowy plik, pozosta³o %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Ograniczenie rozmiaru to nadal %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "przywrócenie %s nie powiod³o siê"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Koniec czê¶ci %d, ci±g dalszy w czê¶ci %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Pocz±tkowy plik %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: To nie jest zwyk³y plik"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "W shar: pozosta³y rozmiar %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "pusty"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(pusty)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Nie mo¿na otworzyæ pliku %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "skompresowany"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "skompresowany gzipem"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "skompresowany bzipem"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binarny"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(skompresowany"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(skompresowany gzipem)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(skompresowany bzipem)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binarny)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Nie mo¿na wykonaæ fork"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Plik %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "tekst"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(tekst)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "nadpisywanie %s"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "nadpisaæ %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "POMINIÊTO %s"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "rozpakowywanie przerwane"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "POMINIÊTO %s (plik ju¿ istnieje)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Zapisywanie %s (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - rozpakowywanie %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "przywrócenie %s nie powiod³o siê\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Koniec czê¶ci %ld, ci±g dalszy w czê¶ci %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Koniec czê¶ci %2$d %1$s"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "archiwum"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Plik %s bêdzie kontynuowany w czê¶ci %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Proszê najpierw rozpakowaæ pierwsz± czê¶æ!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Proszê nastêpnie rozpakowaæ czê¶æ '${shar_sequence}'!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "NADAL POMINIÊTO %s"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "ci±g dalszy pliku %s"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Plik %s jest kompletny"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "dekodowanie pliku %s programem uudecode"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "rozpakowywanie pliku %s programem uncompress"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "rozpakowywanie pliku %s programem gunzip"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "rozpakowywanie pliku %s programem bunzip"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "Sprawdzenie sumy kontrolnej MD5 nie powiod³o siê"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'uwaga odzyskiwania: rozmiar %s nie wynosi %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "przydzielanie nazwy pliku wyj¶ciowego"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Otwieranie `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Zamykanie `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Wywo³anie `%s --help' poda wiêcej informacji.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Sk³adnia: %s [OPCJA]... [PLIK]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Argumenty obowi±zkowe dla opcji d³ugich obowi±zuj± równie¿ dla opcji "
+"krótkich.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Sterowanie komunikatami:\n"
+" --help wy¶wietlenie tego opisu i zakoñczenie\n"
+" --version wy¶wietlenie informacji o wersji i zakoñczenie\n"
+" -q, --quiet, --silent nie wypisywanie lokalnie szczegó³owych "
+"komunikatów\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Wybór plików:\n"
+" -p, --intermix-type dopuszczenie -[BTzZ] w listach plików do zmiany "
+"trybu\n"
+" -S, --stdin-file-list odczyt listy plików ze standardowego wej¶cia\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Wybór plików:\n"
+" -p, --intermix-type dopuszczenie -[BTz] w listach plików do zmiany "
+"trybu\n"
+" -S, --stdin-file-list odczyt listy plików ze standardowego wej¶cia\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Dzielenie wyj¶cia:\n"
+" -o, --output-file=PREFIKS zapis do plików PREFIKS.01 do PREFIKS.NN\n"
+" -l, --whole-size-limit=ILE dzielenie archiwum, nie plików, na ILE kB\n"
+" -L, --split-size-limit=ILE dzielenie archiwum lub plików, na ILE kB\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Sterowanie nag³ówkami shara:\n"
+" -n, --archive-name=NAZWA u¿ycie NAZWY dla archiwum\n"
+" -s, --submitter=ADRES nadpisanie nazwy wysy³aj±cego\n"
+" -a, --net-headers dodanie nag³ówków Submitted-by: oraz Archive-"
+"name:\n"
+" -c, --cut-mark rozpoczêcie archiwum lini± obciêcia\n"
+" -t, --translate przet³umaczenie wiadomo¶ci w skrypcie\n"
+"\n"
+"Wybór sposobu zapisu plików:\n"
+" -M, --mixed-uuencode dynamiczny wybór uuencode (domy¶lne)\n"
+" -T, --text-files wszystkie pliki s± tekstowe\n"
+" -B, --uuencode wszystkie pliki s± binarne, wymagaj± "
+"uuencode\n"
+" -z, --gzip u¿ycie gzipa i uuencode dla wszystkich "
+"plików\n"
+" -g, --level-for-gzip=POZIOM przekazanie -POZIOM do gzipa (domy¶lnie 9)\n"
+" -j, --bzip2 u¿ycie bzip2 i uuencode dla wszystkich "
+"plików\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress u¿ycie compress i uuencode dla wszystkich "
+"plików\n"
+" -b, --bits-per-code=BITÓW przekazanie -bBITÓW (domy¶lnie 12) do "
+"compress\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Ochrona transmisji:\n"
+" -w, --no-character-count nie u¿ywanie `wc -c' do sprawdzania "
+"rozmiaru\n"
+" -D, --no-md5-digest nie u¿ywanie skrótu `md5sum' do weryfikacji\n"
+" -F, --force-prefix wymuszenie znaku lokalizacji dla ka¿dej "
+"linii\n"
+" -d, --here-delimiter=£AÑCUCH u¿yj £AÑCUCHA do ograniczania plików\n"
+"\n"
+"Tworzenie ró¿nych rodzajów archiwów shar:\n"
+" -V, --vanilla-operation tworzenie bardzo prostych i niewymagaj±cych "
+"sharów\n"
+" -P, --no-piping tworzenie tymczasowych plików na czas "
+"rozpakowywania\n"
+" -x, --no-check-existing nadpisywanie istniej±cych plików bez "
+"ostrze¿enia\n"
+" -X, --query-user pytanie przed nadpisywaniem plików (nie dla "
+"sieci)\n"
+" -m, --no-timestamp nie przywracanie czasu modyfikacji plików\n"
+" -Q, --quiet-unshar nie wy¶wietlanie informacji podczas dekompresji\n"
+" -f, --basename odtwarzanie w jednym podkatalogu, bez "
+"hierarchii\n"
+" --no-i18n nie tworzenie umiêdzynarodowionego skryptu\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Opcja -o jest wymagana przy -l lub -L, opcja -n jest wymagana przy -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "Opcja -g implikuje -z, opcja -b implikuje -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Opcja -g implikuje -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"B³êdy w programie nale¿y zg³aszaæ na adres <%s>, natomiast b³êdy\n"
+"w t³umaczeniu - na <translation-team-pl@lists.sourceforge.net>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "b³êdne ograniczenie rozmiaru pliku `%s'"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "b³êdny format (pole liczbowe zbyt szerokie): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG nie zosta³o wybrane na etapie kompilacji"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Twarde ograniczenie %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Ten system nie obs³uguje -Z ('compress'), nale¿y u¿yæ -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Miêkkie ograniczenie %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "niedozwolony prefiks wyj¶cia\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"To oprogramowanie jest darmowe; warunki kopiowania s± opisane w ¼ród³ach.\n"
+"Autorzy nie daj± ¯ADNYCH gwarancji, w tym równie¿ gwarancji PRZYDATNO¦CI\n"
+"DO SPRZEDA¯Y LUB DO KONKRETNYCH CELÓW.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "UWAGA: Tryb vanilla nie jest interakcyjny"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "UWAGA: nadpisano opcje zachowywania nietekstowego"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Brak pliku wej¶ciowego"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Nie mo¿na u¿yæ opcji -a bez -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Nie mo¿na u¿yæ opcji -l ani -L bez -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "PROSZÊ unikaæ archiwów -X na Usenecie i w sieciach publicznych"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Rozpakowano ostatni± czê¶æ"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Utworzono %d plików\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - usuniêto katalog blokuj±cy `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - nie uda³o siê usun±æ katalogu blokuj±cego `'%s\\''."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Nie znaleziono poleceñ pow³oki w %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s wygl±da jak surowy kod w jêzyku C, nie archiwum shellowe"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Nie znaleziono poleceñ shellowych po `cut' w %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s prawdopodobnie nie jest archiwum shellowym"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Po linii `cut' nastêpuje: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Uruchamianie procesu `sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Argumenty obowi±zkowe dla opcji d³ugich obowi±zuj± równie¿ dla opcji "
+"krótkich.\n"
+"\n"
+" -d, --directory=KATALOG przej¶cie do KATALOGU przed rozpakowaniem\n"
+" -c, --overwrite przekazanie opcji -c dla shar aby nadpisaæ "
+"pliki\n"
+" -e, --exit-0 to samo co `--split-at=\"exit 0\"'\n"
+" -E, --split-at=£AÑCUCH dzielenie po³±czonych sharów po £AÑCUCHU\n"
+" -f, --force to samo co `-c'\n"
+" --help wy¶wietlenie tego opisu i zakoñczenie\n"
+" --version wy¶wietlenie informacji o wersji i "
+"zakoñczenie\n"
+"\n"
+"Je¿eli nie podano PLIKU, dane zostan± pobrane ze standardowego wej¶cia.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Nie mo¿na zmieniæ katalogu na `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "przydzielanie bufora na nazwy plików"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standardowe wej¶cie"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "przydzielanie bufora na pliki"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: B³±d zapisu"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Krótki plik"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Brak lini `end'"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: dane nastêpuj±ce po znaku dope³niaj±cym `='"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: niedozwolona linia"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Brak linii `begin'"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Niedozwolony ~u¿ytkownik"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: U¿ytkownik `%s' nie istnieje"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "brak dostêpu do %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "odmowa zapisu do FIFO (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "nie pod±¿anie za dowi±zaniem symbolicznym (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "freopen %s"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "chmod %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Sk³adnia: %s [PLIK]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Argumenty obowi±zkowe dla opcji d³ugich obowi±zuj± równie¿ dla opcji "
+"krótkich.\n"
+" -o, --output-file=PLIK zapis bezpo¶rednio do PLIKU\n"
+" --help wy¶wietlenie tego opisu i zakoñczenie\n"
+" --version wy¶wietlenie informacji o wersji i zakoñczenie\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "B³±d zapisu"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "B³±d odczytu"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Sk³adnia: %s [PLIK_WEJ¦CIOWY] PLIK_ZDALNY\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 u¿ycie kodowanie base64 zgodnie z RFC1521\n"
+" --help wy¶wietlenie tego opisu i zakoñczenie\n"
+" --version wy¶wietlenie informacji o wersji i zakoñczenie\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "Otwieranie przez fopen %s"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "Wykonywanie fstat na %s"
diff --git a/po/pt.gmo b/po/pt.gmo
new file mode 100644
index 0000000..7594492
--- /dev/null
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..187ee84
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,855 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU sharutils\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2002-06-24 20:30+0200\n"
+"Last-Translator: unknown\n"
+"Language-Team: Portugese <pt@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr ""
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr ""
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr ""
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr ""
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr ""
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr ""
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Demasiados nomes de directorias para poder criar uma directoria"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "No possvel aceder a %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C est a cair em desuso, utilize antes -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "No se consegue obter o nome da directoria corrente"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, fuzzy, c-format
+msgid "New file, remaining %s, "
+msgstr "Ficheiro novo, espao ainda disponvel %ld,"
+
+#: src/shar.c:977 src/shar.c:1384
+#, fuzzy, c-format
+msgid "Limit still %s\n"
+msgstr "O limite dura %d\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr ""
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr ""
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Arrancando o ficheiro %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: No um ficheiro ordinrio"
+
+#: src/shar.c:1067
+#, fuzzy, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "Em shar: o espao ainda disponvel %ld\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "vazio"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr ""
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "No possvel abrir o ficheiro %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "via `compress'"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "via `gzip'"
+
+#: src/shar.c:1150
+#, fuzzy
+msgid "bzipped"
+msgstr "via `gzip'"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binrio"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr ""
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr ""
+
+#: src/shar.c:1154
+#, fuzzy
+msgid "(bzipped)"
+msgstr "via `gzip'"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr ""
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "No possvel fazer um `fork'"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Ficheiro %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "texto"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr ""
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr ""
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr ""
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr ""
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr ""
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Gravando %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "Gravando %s (%s)"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "Foram criados %d ficheiros\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr ""
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr ""
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr ""
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr ""
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr ""
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr ""
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "Arrancando o ficheiro %s\n"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr ""
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "Arrancando o ficheiro %s\n"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "No possvel abrir o ficheiro %s"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "Arrancando o ficheiro %s\n"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "Arrancando o ficheiro %s\n"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr ""
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Abrindo `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Fechando `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Para mais informao, tente `%s --help'.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Utilizao: %s [OPO]... [FICHEIRO]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Os argumentos obrigatrios para as opes na forma longa so tambm\n"
+"obrigatrios para a forma curta que lhe corresponde.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Controlo dos cabealhos de `shar':\n"
+" -n, --archive-name=NOME atribui ao arquivo o nome NOME\n"
+" -s, --submitter=ENDERECO altera o nome original\n"
+" -a, --net-headers produz os cabealhos Submitted-by: e Archive-"
+"name:\n"
+" -c, --cut-mark coloca uma linha de demarcao no incio de `shar'\n"
+"\n"
+"Metodos de armazenamento:\n"
+" -M, --mixed-uuencode faz `uuencode' dinamicamente (por defeito)\n"
+" -T, --text-files considera todos os ficheiros de texto\n"
+" -B, --uuencode considera todos os ficheiros binrios,\n"
+" usa `uuencode'\n"
+" -z, --gzip aplica `gzip' e `uuencode' a todos os "
+"ficheiros\n"
+" -g, --level-for-gzip=NIVEL fornece -NIVEL (valor defeito 9) a `gzip'\n"
+" -Z, --compress aplica `compress' e `uuencode' a todos os\n"
+" ficheiros\n"
+" -b, --bits-per-code=BITS fornece -bBITS (valor defeito 12) a "
+"`compress'\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+
+#: src/shar.c:1800
+#, fuzzy
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Exige-se a opo -o com -l ou -L, exige-se a opo -n com -a.\n"
+"A opo -g implica -z, a opo -b implica -Z.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr ""
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "No se escolheu DEBUG durante a compilao"
+
+#: src/shar.c:1986
+#, fuzzy, c-format
+msgid "Hard limit %s\n"
+msgstr "Limite tipo `hard' de %dk\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+
+#: src/shar.c:2061
+#, fuzzy, c-format
+msgid "Soft limit %s\n"
+msgstr "Limite tipo `soft' de %dk\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ATENO: No h interveno do utilizador no modo `vanilla'"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ATENO: As opes para armazenamento no-textual foram anuladas"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Nenhum ficheiro de entrada"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "No se pode usar a opo -a sem a opo -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "No se pode usar a opo -l ou -L sem a opo -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"Por favor, evite -X em arquivos de shell com grande difuso (redes pblicas)"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr ""
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Foram criados %d ficheiros\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr ""
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "No foi encontrado nenhum comando de shell, em %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s parece ser cdigo C em bruto, no um arquivo de shell"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "No foi encontrado nenhum comando de shell aps o `cut', em %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s provavelmente nao um arquivo de shell"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr " linha de demarcao seguiu-se: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Arrancando o processo `sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "No possvel mudar para a directoria `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "entrada standard"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, fuzzy, c-format
+msgid "%s: Write error"
+msgstr "Erro durante a escrita"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Ficheiro de dimenso reduzida"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Falta a linha `end'"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr ""
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr ""
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Falta a linha `begin'"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ~utilizador no permitido"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: No existe o utilizador `%s'"
+
+#: src/uudecode.c:390
+#, fuzzy, c-format
+msgid "cannot access %s"
+msgstr "No possvel aceder a %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr ""
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr ""
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Abrindo `%s'"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Utilizao: %s [FICHEIRO]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Erro durante a escrita"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Erro durante a leitura"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Utilizao: %s [FICHEIRO_DE_ENTRADA] FICHEIRO_REMOTO\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Abrindo `%s'"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Arrancando o ficheiro %s\n"
+
+#, fuzzy
+#~ msgid "created %s"
+#~ msgstr "Foram criados %d ficheiros\n"
+
+#, fuzzy
+#~ msgid "could not create %s"
+#~ msgstr "No possvel fazer um `fork'"
+
+#~ msgid ""
+#~ "\n"
+#~ "Giving feedback:\n"
+#~ " --help display this help and exit\n"
+#~ " --version output version information and exit\n"
+#~ " -q, --quiet, --silent do not output verbose messages locally\n"
+#~ "\n"
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ "\n"
+#~ "Splitting output:\n"
+#~ " -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=SIZE split archive, not files, to SIZE "
+#~ "kilobytes\n"
+#~ " -L, --split-size-limit=SIZE split archive, or files, to SIZE "
+#~ "kilobytes\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Mensagens informativas:\n"
+#~ " --help apresenta esta mensagem de apoio e termina\n"
+#~ " --version identifica o programa e termina\n"
+#~ " -q, --quiet, --silent no apresenta mensagens pormenorizadas "
+#~ "localmente\n"
+#~ "\n"
+#~ "Escolha dos ficheiros:\n"
+#~ " -p, --intermix-type permite -[BTzZ] na lista de ficheiros para\n"
+#~ " mudar de modo\n"
+#~ " -S, --stdin-file-list ler a lista de ficheiros da entrada standard\n"
+#~ "\n"
+#~ "Delimitar os resultados:\n"
+#~ " -o, --output-prefix=PREFIXO gera os ficheiros PREFIXO.01 a PREFIXO."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=TAMANHO limita os arquivos, no os ficheiros,\n"
+#~ " a TAMANHO kbytes\n"
+#~ " -L, --split-size-limit=TAMANHO limita os arquivos, ou os ficheiros,\n"
+#~ " a TAMANHO kbytes\n"
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644
index 0000000..42b8585
--- /dev/null
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..db1ad0d
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,880 @@
+# Translation of sharutils-4.6.3-pre4.po to Russian
+# Copyright (C) 1998, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# Const Kaplinsky <const@ce.cctpu.edu.ru>, 1998.
+# Pavel Maryanov <acid_jack@ukr.net>, 2004, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-22 14:35+0300\n"
+"Last-Translator: Pavel Maryanov <acid_jack@ukr.net>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=KOI8-R\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ÏÐÃÉÑ `%s' ÎÅ ÏÄÎÏÚÎÁÞÎÁ\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ÏÐÃÉÑ `--%s' ÎÅ ÒÁÚÒÅÛÁÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÒÇÕÍÅÎÔ\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ÏÐÃÉÑ `%c%s' ÎÅ ÒÁÚÒÅÛÁÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÒÇÕÍÅÎÔ\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ÄÌÑ ÏÐÃÉÉ `%s' ÔÒÅÂÕÅÔÓÑ ÁÒÇÕÍÅÎÔ\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ÎÅÒÁÓÐÏÚÎÁÎÎÁÑ ÏÐÃÉÑ `--%s'\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ÎÅÒÁÓÐÏÚÎÁÎÎÁÑ ÏÐÃÉÑ `%c%s'\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÁÑ ÏÐÃÉÑ -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ÎÅ×ÅÒÎÁÑ ÏÐÃÉÑ -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ÄÌÑ ÏÐÃÉÉ ÔÒÅÂÕÅÔÓÑ ÁÒÇÕÍÅÎÔ -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ÏÐÃÉÑ `-W %s' ÎÅÏÄÎÏÚÎÁÞÎÁ\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ÏÐÃÉÑ `-W %s' ÎÅ ÒÁÚÒÅÛÁÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÒÇÕÍÅÎÔ\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"úÁÍÅÞÁÎÉÅ: md5-ÓÕÍÍÙ ÎÅ ÐÒÏ×ÅÒÑÀÔÓÑ. ëÁË ÎÁÓÞ£Ô ÕÓÔÁÎÏ×ËÉ coreutils ÏÔ GNU?"
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "ðòåäõðòåöäåîéå: ×ÒÅÍÅÎÎÙÅ ÍÅÔËÉ ÎÅ ×ÏÓÓÔÁÎÁ×ÌÉ×ÁÀÔÓÑ."
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ GNU `touch'\\'' ÉÚ ÐÁËÅÔÁ GNU coreutils..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "ËÁÔÁÌÏÇ ÂÌÏËÉÒÏ×ËÉ '${lock_dir}' ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ ÂÌÏËÉÒÏ×ËÉ"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - ÓÏÚÄÁÎ ËÁÔÁÌÏÇ ÂÌÏËÉÒÏ×ËÉ `'%s\\''."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ ÂÌÏËÉÒÏ×ËÉ `'%s\\''."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "ÄÁ"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "ÐÅÒÅÚÁÐÉÓÁÔØ ÜÔÏÔ ÆÁÊÌ"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "ÎÅÔ"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "ÐÒÏÐÕÓÔÉÔØ ÜÔÏÔ ÆÁÊÌ"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "×ÓÅ"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "ÐÅÒÅÚÁÐÉÓÁÔØ ×ÓÅ ÆÁÊÌÙ"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "ÎÉ ÏÄÎÏÇÏ"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "ÎÅ ÐÅÒÅÚÁÐÉÓÙ×ÁÔØ ÆÁÊÌÙ"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "ÐÏÍÏÝØ"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "ÏÂßÑÓÎÅÎÉÅ ×ÁÒÉÁÎÔÏ×"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "×ÙÈÏÄ"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "×ÙÊÔÉ ÎÅÍÅÄÌÅÎÎÏ"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ËÁÔÁÌÏÇÏ× ÄÌÑ ÓÏÚÄÁÎÉÑ Ó ÐÏÍÏÝØÀ mkdir"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - ÓÏÚÄÁÎ ËÁÔÁÌÏÇ `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ `%s'\\''."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÄÏÓÔÕÐ Ë %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "ïÐÃÉÑ C ÎÅ ÏÄÏÂÒÑÅÔÓÑ, ÉÓÐÏÌØÚÕÊÔÅ -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÉÍÑ ÔÅËÕÝÅÇÏ ËÁÔÁÌÏÇÁ"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"áÒÈÉ×Ù ÄÏÌÖÎÙ ÂÙÔØ ÒÁÓÐÁËÏ×ÁÎÙ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏ!\n"
+"ðÏÖÁÌÕÊÓÔÁ, ÓÌÅÄÕÀÝÅÊ ÒÁÓÐÁËÕÊÔÅ ÞÁÓÔØ '`cat ${lock_dir}/seq`'."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "îÏ×ÙÊ ÆÁÊÌ, ÏÓÔÁÌÏÓØ %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "ïÇÒÁÎÉÞÅÎÉÅ ×ÓÅ ÅÝÅ %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ×ÏÓÓÔÁÎÏ×ÉÔØ %s"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "ëÏÎÅà ÞÁÓÔÉ %d, ÐÒÏÄÏÌÖÅÎÉÅ × ÞÁÓÔÉ %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "îÁÞÁÌÏ ÆÁÊÌÁ %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: îÅ Ñ×ÌÑÅÔÓÑ ÏÂÙÞÎÙÍ ÆÁÊÌÏÍ"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "÷ shar: ÏÓÔÁ×ÛÉÊÓÑ ÒÁÚÍÅÒ %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "ÐÕÓÔÏÊ"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(ÐÕÓÔÏÊ)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "ÓÖÁÔÙÊ"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "ÓÖÁÔÙÊ gzip"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "ÓÖÁÔÙÊ bzip"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "Ä×ÏÉÞÎÙÊ"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(ÓÖÁÔÙÊ)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(ÓÖÁÔÙÊ gzip)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(ÓÖÁÔÙÊ bzip)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(Ä×ÏÉÞÎÙÊ)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÄÏÞÅÒÎÉÊ ÐÒÏÃÅÓÓ"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "æÁÊÌ %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "ÔÅËÓÔÏ×ÙÊ"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(ÔÅËÓÔÏ×ÙÊ)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "ÐÅÒÅÚÁÐÉÓÙ×ÁÅÔÓÑ %s"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "ÐÅÒÅÚÁÐÉÓÁÔØ %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "ðòïðõóëáåôóñ %s"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "ÉÚ×ÌÅÞÅÎÉÅ ÐÒÅÒ×ÁÎÏ"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "ðòïðõóëáåôóñ %s (ÆÁÊÌ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "óÏÈÒÁÎÑÅÔÓÑ %s (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - ÉÚ×ÌÅËÁÅÔÓÑ %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ×ÏÓÓÔÁÎÏ×ÉÔØ%s\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "ëÏÎÅà ÞÁÓÔÉ %ld, ÐÒÏÄÏÌÖÅÎÉÅ × ÞÁÓÔÉ %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "ëÏÎÅà %s ÞÁÓÔÉ %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "ÁÒÈÉ×Á"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "æÁÊÌ %s ÐÒÏÄÏÌÖÁÅÔÓÑ × ÞÁÓÔÉ %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "òÁÓÐÁËÕÊÔÅ ÓÎÁÞÁÌÁ ÞÁÓÔØ 1, ÐÏÖÁÌÕÊÓÔÁ!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "ðÏÖÁÌÕÊÓÔÁ, ÓÌÅÄÕÀÝÅÊ ÒÁÓÐÁËÕÊÔÅ ÞÁÓÔØ '${shar_sequence}'!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "÷ó³ åý³ ðòïðõóëáåôóñ %s"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "ÐÒÏÄÏÌÖÅÎÉÅ ÆÁÊÌÁ %s"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "æÁÊÌ %s ÚÁ×ÅÒÛ£Î"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "ÄÅËÏÄÉÒÕÅÔÓÑ uue-ÆÁÊÌ %s"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "ÒÁÓÐÁËÏ×Ù×ÁÅÔÓÑ ÆÁÊÌ %s"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "ÒÁÓÐÁËÏ×Ù×ÁÅÔÓÑ gzip-ÆÁÊÌ %s"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "ÒÁÓÐÁËÏ×Ù×ÁÅÔÓÑ bzip-ÆÁÊÌ %s"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "óÂÏÊ ÐÒÏ×ÅÒËÉ MD5"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ ÐÒÉ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÉ: ÒÁÚÍÅÒ %s ÎÅ ÒÁ×ÅÎ %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "ÎÁÚÎÁÞÁÅÔÓÑ ÉÍÑ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "ïÔËÒÙ×ÁÅÔÓÑ `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "úÁËÒÙ×ÁÅÔÓÑ `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "ðÏÐÒÏÂÕÊÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ïðãéñ]... [æáêì]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"ïÂÑÚÁÔÅÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÄÌÑ ÄÌÉÎÎÙÈ ÏÐÃÉÊ ÔÁËÖÅ Ñ×ÌÑÀÔÓÑ ÏÂÑÚÁÔÅÌØÎÙÍÉ\n"
+"É ÄÌÑ ËÏÒÏÔËÉÈ ÏÐÃÉÊ.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"ïÂÒÁÔÎÁÑ Ó×ÑÚØ:\n"
+" --help ×Ù×ÏÄ ÜÔÏÊ ÓÐÒÁ×ËÉ É ×ÙÈÏÄ\n"
+" --version ×Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÅÒÓÉÉ É ×ÙÈÏÄ\n"
+" -q, --quiet, --silent ÎÅ ×Ù×ÏÄÉÔØ ÌÏËÁÌØÎÏ ÐÏÄÒÏÂÎÙÅ ÓÏÏÂÝÅÎÉÑ\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"÷ÙÂÏÒ ÆÁÊÌÏ×:\n"
+" -p, --intermix-type ÒÁÚÒÅÛÅÎÉÅ -[BTzZ] × ÓÐÉÓËÁÈ ÆÁÊÌÏ×\n"
+" ÄÌÑ ÉÚÍÅÎÅÎÉÑ ÒÅÖÉÍÁ\n"
+" -S, --stdin-file-list ÞÔÅÎÉÅ ÓÐÉÓËÁ ÆÁÊÌÏ× ÓÏ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"÷ÙÂÏÒ ÆÁÊÌÏ×:\n"
+" -p, --intermix-type ÒÁÚÒÅÛÅÎÉÅ -[BTz] × ÓÐÉÓËÁÈ ÆÁÊÌÏ× ÄÌÑ ÉÚÍÅÎÅÎÉÑ "
+"ÒÅÖÉÍÁ\n"
+" -S, --stdin-file-list ÞÔÅÎÉÅ ÓÐÉÓËÁ ÆÁÊÌÏ× ÓÏ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"òÁÚÂÉ×ËÁ ×Ù×ÏÄÁ:\n"
+" -o, --output-prefix=ðòåæéëó ×Ù×ÏÄ × ÆÁÊÌ ðòåæéëó.01 ÞÅÒÅÚ ðòåæéëó.NN\n"
+" -l, --whole-size-limit=òáúíåò ÒÁÚÂÉ×ËÁ ÁÒÈÉ×Á, Á ÎÅ ÆÁÊÌÏ×, ÎÁ òáúíåò "
+"ËÉÌÏÂÁÊÔ\n"
+" -L, --split-size-limit=òáúíåò ÒÁÚÂÉ×ËÁ ÁÒÈÉ×Á ÉÌÉ ÆÁÊÌÏ× ÎÁ òáúíåò "
+"ËÉÌÏÂÁÊÔ\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"õÐÒÁ×ÌÅÎÉÅ ÚÁÇÏÌÏ×ËÁÍÉ shar:\n"
+" -n, --archive-name=éíñ ÉÓÐÏÌØÚÏ×ÁÎÉÅ éíåîé ÄÌÑ ÏÐÉÓÁÎÉÑ ÁÒÈÉ×Á\n"
+" -s, --submitter=áäòåó ÐÅÒÅÏÐÒÅÄÅÌÅÎÉÅ ÉÍÅÎÉ ÏÔÐÒÁ×ÉÔÅÌÑ\n"
+" -a, --net-headers ×Ù×ÏÄ ÚÁÇÏÌÏ×ËÏ× Submitted-by: É Archive-name:\n"
+" -c, --cut-mark ÎÁÞÁÌÏ shar Ó ÌÉÎÉÉ ÏÔÒÅÚÁ\n"
+" -t, --translate ÐÅÒÅ×ÏÄ ÓÏÏÂÝÅÎÉÊ × ÓËÒÉÐÔÅ\n"
+"\n"
+"÷ÙÂÏÒ ÔÉÐÁ ËÏÄÉÒÏ×ÁÎÉÑ ÆÁÊÌÏ×:\n"
+" -M, --mixed-uuencode ÄÉÎÁÍÉÞÅÓËÏÅ ×ËÌÀÞÅÎÉÅ uue-ËÏÄÉÒÏ×ÁÎÉÑ (ÐÏ "
+"ÕÍÏÌÞÁÎÉÀ)\n"
+" -T, --text-files ÉÎÔÅÒÐÒÅÔÁÃÉÑ ×ÓÅÈ ÆÁÊÌÏ× ËÁË ÔÅËÓÔÏ×ÙÈ\n"
+" -B, --uuencode ÉÎÔÅÒÐÒÅÔÁÃÉÑ ×ÓÅÈ ÆÁÊÌÏ× ËÁË Ä×ÏÉÞÎÙÈ,\n"
+" ÉÓÐÏÌØÚÏ×ÁÎÉÅ uue-ËÏÄÉÒÏ×ÁÎÉÑ\n"
+" -z, --gzip ÓÖÁÔÉÅ gzip É uue-ËÏÄÉÒÏ×ÁÎÉÅ ×ÓÅÈ ÆÁÊÌÏ×\n"
+" -g, --level-for-gzip=õòï÷åîø ÐÅÒÅÄÁÞÁ -õòï÷åîø (ÐÏ ÕÍÏÌÞÁÎÉÀ 9) × gzip\n"
+" -j, --bzip2 ÓÖÁÔÉÅ bzip É uue-ËÏÄÉÒÏ×ÁÎÉÅ ×ÓÅÈ ÆÁÊÌÏ×\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress ÓÖÁÔÉÅ compress É uue-ËÏÄÉÒÏ×ÁÎÉÅ ×ÓÅÈ "
+"ÆÁÊÌÏ×\n"
+" -b, --bits-per-code=âéôù ÐÅÒÅÄÁÞÁ -bâéôù (ÐÏ ÕÍÏÌÞÁÎÉÀ 12) × compress\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"úÁÝÉÔÁ ÐÒÉ ÐÅÒÅÄÁÞÅ:\n"
+" -w, --no-character-count ÎÅ ÉÓÐÏÌØÚÏ×ÁÔØ `wc -c' ÄÌÑ ÐÒÏ×ÅÒËÉ ÒÁÚÍÅÒÁ\n"
+" -D, --no-md5-digest ÎÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÉÇÎÁÔÕÒÕ `md5sum' ÄÌÑ "
+"ÐÒÏ×ÅÒËÉ\n"
+" -F, --force-prefix ÐÒÉÎÕÄÉÔÅÌØÎÁÑ ×ÓÔÁ×ËÁ ÓÉÍ×ÏÌÁ ÐÒÅÆÉËÓÁ "
+"ËÁÖÄÕÀ ÓÔÒÏËÕ\n"
+" -d, --here-delimiter=óôòïëá ÉÓÐÏÌØÚÏ×ÁÎÉÅ óôòïëé ÄÌÑ ÏÔÄÅÌÅÎÉÑ ÆÁÊÌÏ× × "
+"shar\n"
+"\n"
+"óÏÚÄÁÎÉÅ ÒÁÚÌÉÞÎÙÈ ÔÉÐÏ× shar:\n"
+" -V, --vanilla-operation ÓÏÚÄÁÎÉÅ ÏÞÅÎØ ÐÒÏÓÔÙÈ É ÎÅÔÒÅÂÏ×ÁÔÅÌØÎÙÈ "
+"ÁÒÈÉ×Ï×\n"
+" -P, --no-piping ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÔÏÌØËÏ ×ÒÅÍÅÎÎÙÈ ÆÁÊÌÏ× ÐÒÉ "
+"ÒÁÓÐÁËÏ×ËÅ\n"
+" -x, --no-check-existing ÓÌÅÐÁÑ ÐÅÒÅÚÁÐÉÓØ ÓÕÝÅÓÔ×ÕÀÝÉÈ ÆÁÊÌÏ×\n"
+" -X, --query-user ÚÁÐÒÏÓ Õ ÐÏÌØÚÏ×ÁÔÅÌÑ ÐÅÒÅÄ ÐÅÒÅÚÁÐÉÓØÀ ÆÁÊÌÏ×\n"
+" -m, --no-timestamp ÎÅ ×ÏÓÓÔÁÎÁ×ÌÉ×ÁÔØ ÄÁÔÙ É ×ÒÅÍÅÎÁ ÉÚÍÅÎÅÎÉÑ "
+"ÆÁÊÌÏ×\n"
+" -Q, --quiet-unshar ÐÏÄÁ×ÌÅÎÉÅ ÐÏÄÒÏÂÎÙÈ ÓÏÏÂÝÅÎÉÊ ÐÒÉ ÒÁÓÐÁËÏ×ËÅ\n"
+" -f, --basename ÒÁÓÐÁËÏ×ËÁ × ÏÄÉÎ ËÁÔÁÌÏÇ ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ "
+"ÉÅÒÁÒÈÉÉ\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"äÌÑ ÏÐÃÉÉ -o ÔÒÅÂÕÅÔÓÑ -l ÉÌÉ -L, ÄÌÑ ÏÐÃÉÉ -n is ÔÒÅÂÕÅÔÓÑ -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+"ïÐÃÉÑ -g ÐÏÄÒÁÚÕÍÅ×ÁÅÔ ÉÓÐÏÌØÚÏ×ÁÎÉÅ -z, ÏÐÃÉÑ -b ÐÏÄÒÁÚÕÍÅ×ÁÅÔ "
+"ÉÓÐÏÌØÚÏ×ÁÎÉÅ -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "ïÐÃÉÑ -g ÐÏÄÒÁÚÕÍÅ×ÁÅÔ ÉÓÐÏÌØÚÏ×ÁÎÉÅ -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "ïÔÞÅÔÙ Ï ÏÛÉÂËÁÈ ÏÔÐÒÁ×ÌÑÊÔÅ ÎÁ <%s>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "ÎÅ×ÅÒÎÏÅ ÐÒÅÄÅÌØÎÏÅ ÚÎÁÞÅÎÉÅ ÒÁÚÍÅÒÁ ÆÁÊÌÁ `%s'"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ (ÐÏÌÅ ÓÞ£ÔÞÉËÁ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "ïÐÃÉÑ DEBUG ÎÅ ÂÙÌÁ ×ÙÂÒÁÎÁ ×Ï ×ÒÅÍÑ ËÏÍÐÉÌÑÃÉÉ"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "öÅÓÔËÏÅ ÏÇÒÁÎÉÞÅÎÉÅ %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "üÔÁ ÓÉÓÔÅÍÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ -Z ('compress'), ×ÍÅÓÔÏ ÎÅÅ ÉÓÐÏÌØÚÕÊÔÅ -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "íÑÇËÏÅ ÏÇÒÁÎÉÞÅÎÉÅ %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "ÎÅÄÏÐÕÓÔÉÍÙÊ ÐÒÅÆÉËÓ ×Ù×ÏÄÁ\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"üÔÏ Ó×ÏÂÏÄÎÏÅ ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ. õÓÌÏ×ÉÑ ÅÇÏ ËÏÐÉÒÏ×ÁÎÉÑ ÓÍÏÔÒÉÔÅ ×\n"
+"ÉÓÈÏÄÎÙÈ ÔÅËÓÔÁÈ. îÅ ÐÒÅÄÏÓÔÁ×ÌÑÅÔÓÑ îéëáëïê ÇÁÒÁÎÔÉÉ; ÄÁÖÅ ÇÁÒÁÎÔÉÉ\n"
+"ðòéçïäîïóôé äìñ ðòïäáöé ÉÌÉ ðòéíåîéíïóôé äìñ ëïîëòåôîïê ãåìé.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ðòåäõðòåöäåîéå: ÷ ÒÅÖÉÍÅ vanilla ÎÅÔ ÄÉÁÌÏÇÁ Ó ÐÏÌØÚÏ×ÁÔÅÌÅÍ"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ðòåäõðòåöäåîéå: ïÐÃÉÉ ÈÒÁÎÅÎÉÑ ÎÅÔÅËÓÔÏ×ÙÈ ÆÁÊÌÏ× ÐÅÒÅÏÐÒÅÄÅÌÅÎÙ"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "îÅÔ ×ÈÏÄÎÙÈ ÆÁÊÌÏ×"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "ïÐÃÉÀ -a ÎÅ×ÏÚÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÂÅÚ -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "ïÐÃÉÉ -l ÉÌÉ -L ÎÅ×ÏÚÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÂÅÚ -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "ðïöáìõêóôá, ÉÚÂÅÇÁÊÔÅ ÒÅÖÉÍÁ -X × Usenet ÉÌÉ ÏÂÝÅÄÏÓÔÕÐÎÙÈ ÓÅÔÑÈ"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "÷Ù ÒÁÓÐÁËÏ×ÁÌÉ ÐÏÓÌÅÄÎÀÀ ÞÁÓÔØ"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "óÏÚÄÁÎÏ ÆÁÊÌÏ×: %d\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - ÕÄẠ́ΠËÁÔÁÌÏÇ ÂÌÏËÉÒÏ×ËÉ `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - ÎÅ ÕÄÁÌÏÓØ ÕÄÁÌÉÔØ ËÁÔÁÌÏÇ ÂÌÏËÉÒÏ×ËÉ `'%s\\''."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "÷ %s ÎÅ ÎÁÊÄÅÎÙ shell-ËÏÍÁÎÄÙ"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s ÐÏÈÏÖ ÎÁ ÎÅÏÂÒÁÂÏÔÁÎÎÙÊ ËÏÄ C, Á ÎÅ ÎÁ shell-ÁÒÈÉ×"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "÷ %s ÐÏÓÌÅ `cut' ÎÅ ÎÁÊÄÅÎÙ shell-ËÏÍÁÎÄÙ"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "÷ÅÒÏÑÔÎÏ, %s ÎÅ Ñ×ÌÑÅÔÓÑ shell-ÁÒÈÉ×ÏÍ"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "ðÏÓÌÅ ÓÔÒÏËÉ `cut' ÓÌÅÄÕÅÔ: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "úÁÐÕÓËÁÅÔÓÑ ÐÒÏÃÅÓÓ `sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"ïÂÑÚÁÔÅÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÄÌÑ ÄÌÉÎÎÙÈ ÏÐÃÉÊ ÔÁËÖÅ Ñ×ÌÑÀÔÓÑ ÏÂÑÚÁÔÅÌØÎÙÍÉ\n"
+"É ÄÌÑ ËÏÒÏÔËÉÈ ÏÐÃÉÊ.\n"
+"\n"
+" -d, --directory=ëáôáìïç ÐÅÒÅÈÏÄ × ëáôáìïç ÐÅÒÅÄ ÒÁÓÐÁËÏ×ËÏÊ\n"
+" -c, --overwrite ÐÅÒÅÄÁÞÁ -c × ÓËÒÉÐÔ shar ÄÌÑ ÐÅÒÅÚÁÐÉÓÉ "
+"ÆÁÊÌÏ×\n"
+" -e, --exit-0 ÜË×É×ÁÌÅÎÔ `--split-at=\"exit 0\"'\n"
+" -E, --split-at=óôòïëá ÒÁÚÂÉÅÎÉÅ ÏÂßÅÄÉÎÅÎÎÙÈ shar-ÁÒÈÉ×Ï× ÐÏÓÌÅ "
+"óôòïëé\n"
+" -f, --force ÜË×É×ÁÌÅÎÔ `-c'\n"
+" --help ×Ù×ÏÄ ÜÔÏÊ ÓÐÒÁ×ËÉ É ×ÙÈÏÄ\n"
+" --version ×Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÅÒÓÉÉ É ×ÙÈÏÄ\n"
+"\n"
+"åÓÌÉ æáêì ÎÅ ÕËÁÚÁÎ, ÞÔÅÎÉÅ ÐÒÏÉÚ×ÏÄÉÔÓÑ ÓÏ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÊÔÉ × ËÁÔÁÌÏÇ `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "ÎÁÚÎÁÞÅÎÉÅ ÂÕÆÅÒÁ ÉÍÅÎÉ ÆÁÊÌÁ"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "ÎÁÚÎÁÞÅÎÉÅ ÂÕÆÅÒÁ ÆÁÊÌÁ"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: ïÛÉÂËÁ ÚÁÐÉÓÉ"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: ëÏÒÏÔËÉÊ ÆÁÊÌ"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: îÅÔ ÓÔÒÏËÉ `end'"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: ÄÁÎÎÙÅ, ÓÌÅÄÕÀÝÉÅ ÐÏÓÌÅ ÓÉÍ×ÏÌÁ `='"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÁÑ ÓÔÒÏËÁ"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: îÅÔ ÓÔÒÏËÉ `begin'"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: îÅÄÏÐÕÓÔÉÍÙÊ ~ÐÏÌØÚÏ×ÁÔÅÌØ"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: îÅÔ ÐÏÌØÚÏ×ÁÔÅÌÑ `%s'"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÄÏÓÔÕÐ Ë %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "ÚÁÐÒÅÝÅÎÁ ÚÁÐÉÓØ FIFO (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "ÎÅÔ ÓÌÅÄÕÀÝÅÊ ÓÉÍ×ÏÌÉÞÅÓËÏÊ ÓÓÙÌËÉ (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "÷ÙÐÏÌÎÑÅÔÓÑ freopen %s"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "÷ÙÐÏÌÎÑÅÔÓÑ chmod %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [æáêì]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"ïÂÑÚÁÔÅÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÄÌÑ ÄÌÉÎÎÙÈ ÏÐÃÉÊ ÔÁËÖÅ Ñ×ÌÑÀÔÓÑ ÏÂÑÚÁÔÅÌØÎÙÍÉ\n"
+"É ÄÌÑ ËÏÒÏÔËÉÈ ÏÐÃÉÊ.\n"
+" -o, --output-file=æáêì ÎÁÐÒÁ×ÌÅÎÉÅ ×Ù×ÏÄÁ × æáêì\n"
+" --help ×Ù×ÏÄ ÜÔÏÊ ÓÐÒÁ×ËÉ É ×ÙÈÏÄ\n"
+" --version ×Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÅÒÓÉÉ É ×ÙÈÏÄ\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [÷èïäîïê_æáêì] õäáìåîîùê_æáêì\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 ÉÓÐÏÌØÚÏ×ÁÎÉÅ base64-ËÏÄÉÒÏ×ÁÎÉÑ ÓÏÇÌÁÓÎÏ RFC1521\n"
+" --help ×Ù×ÏÄ ÜÔÏÊ ÓÐÒÁ×ËÉ É ×ÙÈÏÄ\n"
+" --version ×Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÅÒÓÉÉ É ×ÙÈÏÄ\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "÷ÙÐÏÌÎÑÅÔÓÑ fopen %s"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "÷ÙÐÏÌÎÑÅÔÓÑ fstat %s"
diff --git a/po/rw.gmo b/po/rw.gmo
new file mode 100644
index 0000000..f2f2014
--- /dev/null
+++ b/po/rw.gmo
Binary files differ
diff --git a/po/rw.po b/po/rw.po
new file mode 100644
index 0000000..84b6943
--- /dev/null
+++ b/po/rw.po
@@ -0,0 +1,962 @@
+# Kinyarwanda translations for sharutils package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+# Steve Murphy <murf@e-tools.com>, 2005.
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.
+# Antoine Bigirimana <antoine@e-tools.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.3.78\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2005-04-04 10:55-0700\n"
+"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
+"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+#, fuzzy
+msgid "Unknown system error"
+msgstr "Sisitemu Ikosa"
+
+#: lib/getopt.c:694
+#, fuzzy, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s:Ihitamo ni"
+
+#: lib/getopt.c:719
+#, fuzzy, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s:Ihitamo Kwemerera"
+
+#: lib/getopt.c:724
+#, fuzzy, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s:Ihitamo Kwemerera"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, fuzzy, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s:Ihitamo"
+
+#: lib/getopt.c:771
+#, fuzzy, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s:Ihitamo"
+
+#: lib/getopt.c:775
+#, fuzzy, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s:Ihitamo"
+
+#: lib/getopt.c:801
+#, fuzzy, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s:Ihitamo"
+
+#: lib/getopt.c:804
+#, fuzzy, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s:Sibyo Ihitamo"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s:Ihitamo"
+
+#: lib/getopt.c:881
+#, fuzzy, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s:Ihitamo ni"
+
+#: lib/getopt.c:899
+#, fuzzy, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s:Ihitamo Kwemerera"
+
+#: lib/xmalloc.c:67
+#, fuzzy
+msgid "memory exhausted"
+msgstr "Ububiko"
+
+#: src/shar.c:608
+#, fuzzy
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr "OYA Na"
+
+#: src/shar.c:643
+#, fuzzy
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "OYA Na"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "gukora iyinjizaporogaramu:%s in Idosiye"
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "Byanze Kuri Kurema bushyinguro"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "Byanze Kuri Kurema bushyinguro"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "Byanze Kuri Kurema bushyinguro"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+# sfx2/source\doc\new.src:DLG_NEW_FILE.CB_MERGE_STYLE.text
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "Guhindura"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+# sfx2/source\doc\new.src:DLG_NEW_FILE.CB_MERGE_STYLE.text
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "Guhindura"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+# sfx2/source\doc\new.src:DLG_NEW_FILE.CB_MERGE_STYLE.text
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "Guhindura"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+#, fuzzy
+msgid "Too many directories for mkdir generation"
+msgstr "ububiko bw'amaderese kugirango"
+
+#: src/shar.c:737
+#, fuzzy, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "Byanze Kuri Kurema bushyinguro"
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "Byanze Kuri Kurema bushyinguro"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr ""
+
+#: src/shar.c:860
+#, fuzzy
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C ni Bitemewe. Gukoresha"
+
+#: src/shar.c:901 src/unshar.c:379
+#, fuzzy
+msgid "Cannot get current directory name"
+msgstr "Kubona KIGEZWEHO bushyinguro Izina:"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, fuzzy, c-format
+msgid "New file, remaining %s, "
+msgstr "IDOSIYE"
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr ""
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "Kugarura Bya"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "urifuzagukomeza Na:"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, fuzzy, c-format
+msgid "Starting file %s\n"
+msgstr "IDOSIYE"
+
+#: src/shar.c:1052
+#, fuzzy, c-format
+msgid "%s: Not a regular file"
+msgstr "%s:a Ibisanzwe IDOSIYE"
+
+#: src/shar.c:1067
+#, fuzzy, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "Ingano"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "kirimo ubusa"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(ubusa)"
+
+#: src/shar.c:1111
+#, fuzzy, c-format
+msgid "Cannot open file %s"
+msgstr "Gufungura IDOSIYE"
+
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Save.Graphic.Format..1.text
+#: src/shar.c:1148
+#, fuzzy
+msgid "compressed"
+msgstr "Byegeranijwe"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr ""
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr ""
+
+# #-#-#-#-# goodies.pot (PACKAGE VERSION) #-#-#-#-#
+# goodies/source\filter.vcl\epbm\dlgepbm.src:DLG_EXPORT_EPBM.RB_RAW.text
+# #-#-#-#-# goodies.pot (PACKAGE VERSION) #-#-#-#-#
+# goodies/source\filter.vcl\epgm\dlgepgm.src:DLG_EXPORT_EPGM.RB_RAW.text
+# #-#-#-#-# goodies.pot (PACKAGE VERSION) #-#-#-#-#
+# goodies/source\filter.vcl\eppm\dlgeppm.src:DLG_EXPORT_EPPM.RB_RAW.text
+#: src/shar.c:1151
+#, fuzzy
+msgid "binary"
+msgstr "Nyabibiri"
+
+#: src/shar.c:1152
+#, fuzzy
+msgid "(compressed)"
+msgstr "(Byegeranijwe"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr ""
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr ""
+
+#: src/shar.c:1155
+#, fuzzy
+msgid "(binary)"
+msgstr "(Nyabibiri"
+
+#: src/shar.c:1168
+#, fuzzy
+msgid "Could not fork"
+msgstr "OYA"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_HFCMD_FILE.text
+#: src/shar.c:1173 src/shar.c:1233
+#, fuzzy, c-format
+msgid "File %s (%s)"
+msgstr "IDOSIYE"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "umwandiko"
+
+# #-#-#-#-# scp.pot (PACKAGE VERSION) #-#-#-#-#
+# scp/source\office\profile.lng:STR_VALUE_OBJECT_TEXT.text
+# #-#-#-#-# scp.pot (PACKAGE VERSION) #-#-#-#-#
+# scp/source\office\profile.lng:STR_DIR_OFFICEOBJECT_WRITER.text
+#: src/shar.c:1228
+#, fuzzy
+msgid "(text)"
+msgstr "(Umwandiko"
+
+# sfx2/source\doc\new.src:DLG_NEW_FILE.CB_MERGE_STYLE.text
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "Guhindura"
+
+# sfx2/source\doc\new.src:DLG_NEW_FILE.CB_MERGE_STYLE.text
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "Guhindura"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "Gusimbuka:%s"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr ""
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(IDOSIYE"
+
+#: src/shar.c:1272
+#, fuzzy, c-format
+msgid "Saving %s (%s)"
+msgstr "Mu kubika"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "Mu kubika"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "Kugarura Bya"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "urifuzagukomeza Na:"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "Impera Bya"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr ""
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "ni in"
+
+#: src/shar.c:1456
+#, fuzzy
+msgid "Please unpack part 1 first!"
+msgstr "1. Itangira"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "1. Itangira"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "Gusimbuka:%s"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "IDOSIYE"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "ni Byuzuye"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "IDOSIYE"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "IDOSIYE"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "IDOSIYE"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "IDOSIYE"
+
+#: src/shar.c:1585
+#, fuzzy
+msgid "MD5 check failed"
+msgstr "Kugenzura... Byanze"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, fuzzy, c-format
+msgid "Opening `%s'"
+msgstr "Gufungura %s%S"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr ""
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, fuzzy, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "kugirango Birenzeho Ibisobanuro"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr ""
+
+#: src/shar.c:1727
+#, fuzzy
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr "ingingo Kuri Amahitamo kugirango Amahitamo"
+
+#: src/shar.c:1730
+#, fuzzy
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"Ifashayobora Kugaragaza iyi Ifashayobora Na Verisiyo Ibisohoka Verisiyo "
+"Ibisobanuro Na Q OYA Ibisohoka Ubutumwa"
+
+#: src/shar.c:1738
+#, fuzzy
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"Idosiye P Ubwoko Kwemerera in IDOSIYE Intonde Kuri Guhindura>> IDOSIYE "
+"Urutonde Gusoma IDOSIYE Urutonde Bivuye Bisanzwe"
+
+#: src/shar.c:1745
+#, fuzzy
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"Idosiye P Ubwoko Kwemerera in IDOSIYE Intonde Kuri Guhindura>> IDOSIYE "
+"Urutonde Gusoma IDOSIYE Urutonde Bivuye Bisanzwe"
+
+#: src/shar.c:1752
+#, fuzzy
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"Ibisohoka o Ibisohoka Imbanziriza Ibisohoka Kuri IDOSIYE 01 Gihinguranya L "
+"Ingano Gutandukanya OYA Idosiye Kuri Gutandukanya Ingano Gutandukanya "
+"Cyangwa Idosiye Kuri"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"i Imitwe N Izina: Gukoresha Kuri Inyandiko i S i a Cyuzuye Imitwe Ibisohoka "
+"ku Izina: C Gukata Ikimenyetso Gutangira i Na: a Gukata Idosiye Bivanze "
+"Mburabuzi Umwandiko Idosiye Byose Idosiye Nka Byose Idosiye Nka Nyabibiri "
+"Gukoresha Z Na Byose g urwego kugirango Mburabuzi 9 Kuri j Na Byose"
+
+#: src/shar.c:1777
+#, fuzzy
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr "-Kwegeranya Kwegeranya Na Byose B ITEGEKONGENGA Mburabuzi 12 Kuri"
+
+#: src/shar.c:1782
+#, fuzzy
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"W Oya Inyuguti IBARA OYA Gukoresha Kuri Kugenzura... Oya OYA Gukoresha Kuri "
+"Imbanziriza i Imbanziriza Inyuguti ku buri D Gukoresha Kuri i Idosiye in i "
+"Bya V Byoroheje Na Oya Gukoresha By'igihe gito Idosiye ku X Oya Kugenzura... "
+"Guhindura Ikibazo# Ukoresha: Ukoresha: Mbere Idosiye OYA kugirango M Oya OYA "
+"Kugarura IDOSIYE Amatariki Ubutumwa ku F Kugarura in bushyinguro Oya OYA "
+"Igikonoshwa"
+
+#: src/shar.c:1800
+#, fuzzy
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr "o ni Bya ngombwa Na: L Cyangwa Ihitamo N ni Bya ngombwa Na: a"
+
+#: src/shar.c:1804
+#, fuzzy
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "g Z Ihitamo B"
+
+#: src/shar.c:1807
+#, fuzzy
+msgid "Option -g implies -z.\n"
+msgstr "g Z"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Kuri"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+#, fuzzy
+msgid "DEBUG was not selected at compile time"
+msgstr "OYA Byahiswemo ku Gukusanya Igihe"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr ""
+
+#: src/shar.c:2028
+#, fuzzy
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Sisitemu Gushigikira Gukoresha Z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr ""
+
+#: src/shar.c:2076
+#, fuzzy, c-format
+msgid "illegal output prefix\n"
+msgstr "Ibisohoka"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, fuzzy, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr "C ni Kigenga i Inkomoko kugirango ni OYA ATARIIGIHARWE kugirango Cyangwa A"
+
+#: src/shar.c:2170
+#, fuzzy
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "Ukoresha: Imikoranire in Ubwoko"
+
+#: src/shar.c:2182
+#, fuzzy
+msgid "WARNING: Non-text storage options overridden"
+msgstr "Umwandiko Amahitamo"
+
+#: src/shar.c:2238
+#, fuzzy
+msgid "No input files"
+msgstr "Iyinjiza Idosiye"
+
+#: src/shar.c:2244
+#, fuzzy
+msgid "Cannot use -a option without -n"
+msgstr "Gukoresha a Ihitamo N"
+
+#: src/shar.c:2250
+#, fuzzy
+msgid "Cannot use -l or -L option without -o"
+msgstr "Gukoresha L Cyangwa Ihitamo o"
+
+#: src/shar.c:2262
+#, fuzzy
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "ku Cyangwa Rusange"
+
+#: src/shar.c:2303
+#, fuzzy
+msgid "You have unpacked the last part"
+msgstr "i Iheruka"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr ""
+
+#: src/shar.c:2310
+#, fuzzy, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "Byanze Kuri Kurema bushyinguro"
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "Byanze Kuri Kurema bushyinguro"
+
+#: src/unshar.c:171
+#, fuzzy, c-format
+msgid "Found no shell commands in %s"
+msgstr "Oya Igikonoshwa Amabwiriza in"
+
+#: src/unshar.c:187
+#, fuzzy, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%snka C ITEGEKONGENGA OYA a Igikonoshwa"
+
+#: src/unshar.c:223
+#, fuzzy, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Oya Igikonoshwa Amabwiriza Nyuma in"
+
+#: src/unshar.c:244
+#, fuzzy, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%sni OYA a Igikonoshwa"
+
+#: src/unshar.c:245
+#, fuzzy, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Umurongo ku"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr ""
+
+#: src/unshar.c:320
+#, fuzzy
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"ingingo Kuri Amahitamo kugirango Amahitamo D bushyinguro Guhindura>> Kuri "
+"Mbere C Guhindura C Kuri IYANDIKA kugirango E Gusohoka 0 Nka Gutandukanya ku "
+"Gusohoka 0 E Gutandukanya ku Gutandukanya Nyuma F Nka Ifashayobora "
+"Kugaragaza iyi Ifashayobora Na Verisiyo Ibisohoka Verisiyo Ibisobanuro Na "
+"Oya Bisanzwe Iyinjiza ni Gusoma"
+
+#: src/unshar.c:397
+#, fuzzy, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Kuri"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+#, fuzzy
+msgid "standard input"
+msgstr "Bisanzwe Iyinjiza"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, fuzzy, c-format
+msgid "%s: Write error"
+msgstr "%s:Ikosa"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, fuzzy, c-format
+msgid "%s: Short file"
+msgstr "%s:IDOSIYE"
+
+#: src/uudecode.c:180
+#, fuzzy, c-format
+msgid "%s: No `end' line"
+msgstr "%s:Umurongo"
+
+#: src/uudecode.c:241
+#, fuzzy, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s:Ibyatanzwe Wuzuza: Inyuguti"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, fuzzy, c-format
+msgid "%s: illegal line"
+msgstr "%s:Umurongo"
+
+#: src/uudecode.c:327
+#, fuzzy, c-format
+msgid "%s: No `begin' line"
+msgstr "%s:Umurongo"
+
+#: src/uudecode.c:359
+#, fuzzy, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s:Ukoresha:"
+
+#: src/uudecode.c:366
+#, fuzzy, c-format
+msgid "%s: No user `%s'"
+msgstr "%s:Ukoresha:"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr ""
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr ""
+
+#: src/uudecode.c:400
+#, fuzzy, c-format
+msgid "not following symlink (%s)"
+msgstr "OYA"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Gufungura %s%S"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr ""
+
+#: src/uudecode.c:447
+#, fuzzy
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"ingingo Kuri Amahitamo Kuri Amahitamo o Ibisohoka IDOSIYE Ibisohoka Kuri "
+"Ifashayobora Kugaragaza iyi Ifashayobora Na Verisiyo Ibisohoka Verisiyo "
+"Ibisobanuro Na"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_CLASS_WRITE.text
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+#, fuzzy
+msgid "Write error"
+msgstr "Kwandika ikosa"
+
+# 4952
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+#, fuzzy
+msgid "Read error"
+msgstr "Ikosa ryo mu Isoma"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr ""
+
+#: src/uuencode.c:210
+#, fuzzy
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"-M Gukoresha Imisobekere: Nka Bya Ifashayobora Kugaragaza iyi Ifashayobora "
+"Na Verisiyo Ibisohoka Verisiyo Ibisobanuro Na"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Gufungura %s%S"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "IDOSIYE"
+
+#, fuzzy
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[Oya Yego Byose Kuvamo Oya"
+
+#, fuzzy
+#~ msgid "next!"
+#~ msgstr "Ibikurikira>"
+
+#~ msgid "File"
+#~ msgstr "Idosiye "
+
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.Graphic.Export.BMP.ExportMode..0.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.Graphic.Export.MET.ExportMode..0.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.Graphic.Export.PCT.ExportMode..0.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.Graphic.Export.SVM.ExportMode..0.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.Graphic.Export.WMF.ExportMode..0.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.Graphic.Export.EMF.ExportMode..0.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Math.xcs:....Print.Size..0.text
+#, fuzzy
+#~ msgid "original size"
+#~ msgstr "Ingano mwimerere"
+
+#, fuzzy
+#~ msgid "current size"
+#~ msgstr "KIGEZWEHO Ingano"
+
+#, fuzzy
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Ubushyinguro in"
+
+#, fuzzy
+#~ msgid "lock directory"
+#~ msgstr "bushyinguro"
+
+#, fuzzy
+#~ msgid "created lock directory"
+#~ msgstr "bushyinguro"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_DOC_CREATED.text
+#, fuzzy
+#~ msgid "created %s"
+#~ msgstr "Byaremwe"
+
+#, fuzzy
+#~ msgid "could not create %s"
+#~ msgstr "Byanze Kuri Kurema"
+
+#, fuzzy
+#~ msgid "restore of"
+#~ msgstr "Kugarura Bya"
+
+#, fuzzy
+#~ msgid "failed"
+#~ msgstr "Byanze"
+
+# 5072
+#, fuzzy
+#~ msgid "removed"
+#~ msgstr "Cyavanyweho"
+
+#, fuzzy
+#~ msgid "failed to remove"
+#~ msgstr "Byanze Kuri Gukuraho..."
+
+#, fuzzy
+#~ msgid "continue with part"
+#~ msgstr "urifuzagukomeza Na:"
+
+#, fuzzy
+#~ msgid "End of"
+#~ msgstr "Impera Bya"
diff --git a/po/sharutils.pot b/po/sharutils.pot
new file mode 100644
index 0000000..9782cfd
--- /dev/null
+++ b/po/sharutils.pot
@@ -0,0 +1,779 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr ""
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr ""
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr ""
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr ""
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr ""
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr ""
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr ""
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr ""
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr ""
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr ""
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr ""
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr ""
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr ""
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr ""
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr ""
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr ""
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr ""
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr ""
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr ""
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr ""
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr ""
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr ""
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr ""
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr ""
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr ""
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr ""
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr ""
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr ""
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr ""
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr ""
+
+#: src/shar.c:1227
+msgid "text"
+msgstr ""
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr ""
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr ""
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr ""
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr ""
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr ""
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr ""
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr ""
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr ""
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr ""
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr ""
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr ""
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr ""
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr ""
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr ""
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr ""
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr ""
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr ""
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr ""
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr ""
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr ""
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr ""
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr ""
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr ""
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr ""
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr ""
+
+#: src/shar.c:1727
+msgid "Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr ""
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr ""
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr ""
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr ""
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr ""
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr ""
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr ""
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr ""
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr ""
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr ""
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr ""
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr ""
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr ""
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr ""
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr ""
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr ""
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr ""
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr ""
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr ""
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr ""
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr ""
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr ""
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr ""
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr ""
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr ""
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr ""
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr ""
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr ""
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr ""
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr ""
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr ""
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr ""
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr ""
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr ""
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr ""
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr ""
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr ""
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr ""
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr ""
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr ""
diff --git a/po/sr.gmo b/po/sr.gmo
new file mode 100644
index 0000000..5278746
--- /dev/null
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..0a71343
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,923 @@
+# sharutils translation into Serbian
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sharutils package.
+#
+# Translators so far:
+# Filip Miletić <f.miletic@ewi.tudelft.nl>, 2005.
+# Aleksandar Jelenak <jelenak@verizon.net>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.1-pre1\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2005-12-13 21:07-0500\n"
+"Last-Translator: Aleksandar Jelenak <jelenak@verizon.net>\n"
+"Language-Team: Serbian <gnu@prevod.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Ðеодређена ÑиÑтемÑка грешка"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: опција `%s' је двоÑмиÑлена\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: опција `--%s' не допушта аргумент\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: опција `%c%s' не допушта аргумент\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: за опцију `%s' потребан је аргумент\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: опција `--%s' није препозната\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: опција `%c%s' није препозната\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: неиÑправна опција -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: неважећа опција -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: опција захтева да Ñе наведе аргумент -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: опција `-W %s' је двоÑмиÑлена\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: опција `-W %s' не допушта навођење аргумента\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "нема довољно меморије"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr "Примедба: без провере md5sum. Размотрите инÑталирање GNU coreutils."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "УПОЗОРЕЊЕ: време и датум Ñе не мењају. Како би било да инÑталирате"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "инÑталирам GNU touch, који Ñе налази међу GNU алатима за датотеке..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "креирање директоријума за браву није уÑпело"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - креиран директоријум за браву `'%s\\''."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x — креирање директоријума за браву `'%s\\'' није уÑпело."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "препиÑати"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "препиÑати"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "препиÑати"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Директоријума има превише за mkdir"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x — креирао директоријум `%s'\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x — креирање директоријума `%s'\\'' није уÑпело."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Ðе може Ñе приÑтупити %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C је заÑтарела опција, кориÑтите -Z"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Ðе може Ñе прочитати име тренутног директоријума"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Ðрхиве Ñе морају раÑпаковати по реду!\n"
+"РаÑпакујте Ñледећи '`cat ${lock_dir}/seq`' део."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Ðова датотека, оÑтаје %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Граница је и даље %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "обнављање „%s“ није уÑпело"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Крај дела „%d“, наÑтави Ñа делом „%d“"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Крећем Ñа датотеком %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Ðије уобичајен тип датотеке"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "У архиви: преоÑтала величина %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "празно"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(празно)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Ðе може Ñе отворити %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "Ñабијен"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "гзипован"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "бзипован"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "бинарни"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(Ñабијен)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(гзипован)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(бзипован)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(бинаран)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Програм Ñе није могао поделити (fork)"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Датотека %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "текÑÑ‚"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(текÑÑ‚)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "препиÑивање"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "препиÑати"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "ПРЕСКÐЧЕМ"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "раÑпакивање je обуÑтављено"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(датотека већ поÑтоји)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Снимам %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "раÑпакујем"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "обнављање „%s“ није уÑпело\n"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Крај дела „%d“, наÑтави Ñа делом „%d“"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Крај „%s“ део %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "архиве"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Датотека „%s“ Ñе наÑтавља Ñа делом %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Молим прво отпакујте део 1!"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Молим прво отпакујте део 1!"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "И ДÐЉЕ ПРЕСКÐЧЕМ"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "наÑтављам датотеку"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "је довршен"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "декодирам датотеку (uudecode)"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "раÑпакујем датотеку"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "раÑпакујем гзипом"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "раÑпакујем бзипом"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "МД5 провера није уÑпела"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "добављам име излазне датотеке"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Отварам `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Затварам `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Ðавођењем `%s --help' добијате помоћ.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Usage: %s [OPTION]... [FILE]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr "Обавезни аргументи за дугачке опције Ñу обавезни и за кратке опције.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Информације:\n"
+" --help прикажи текÑÑ‚ помоћи и заврши рад\n"
+" --version прикажи ознаку верзије и заврши рад\n"
+" -q, --quiet, --silent не иÑпиÑуј детаљне извештаје\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Избор датотека:\n"
+" -p, --intermix-type допуÑти да -[BTzZ] у ÑпиÑку датотека промени мод\n"
+" -S, --stdin-file-list учитај ÑпиÑак датотека Ñа Ñтандардног улаза\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Избор датотека:\n"
+" -p, --intermix-type допуÑти да -[BTz] у ÑпиÑку датотека промени мод\n"
+" -S, --stdin-file-list учитај ÑпиÑак датотека Ñа Ñтандардног улаза\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Дељење излаза:\n"
+" -o, --output-prefix=PREFIX излазне датотеке ће имати име PREFIX.01 \n"
+" до PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE подели архиву, не датотеке, у делове "
+"величине \n"
+" SIZE килобајта\n"
+" -L, --split-size-limit=SIZE подели архиву, или датотеке у делове "
+"величине\n"
+" SIZE килобајта\n"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Управљање shar заглављима:\n"
+" -n, --archive-name=NAME кориÑти NAME као документацију архиве\n"
+" -s, --submitter=ADDRESS преправи име пошиљаоца\n"
+" -a, --net-headers запиши заглавља Submitted-by: и Archive-name:\n"
+" -c, --cut-mark започни архиву ознаком за Ñечење\n"
+"\n"
+"Бирање начина за паковање датотека:\n"
+" -M, --mixed-uuencode динамички одреди да ли ће Ñе кориÑтити "
+"uuencode\n"
+" -T, --text-files проглаÑи Ñве датотеке за текÑтуалне\n"
+" -B, --uuencode проглаÑи Ñве датотеке за бинарне и кориÑти\n"
+" uuencode\n"
+" -z, --gzip Ñве датотеке пропуÑти кроз gzip и uuencode\n"
+" -g, --level-for-gzip=LEVEL задај ниво компреÑије -LEVEL (Ñада је 9) за "
+"gzip\n"
+" -j, --bzip2 Ñве датотеке пропуÑти кроз bzip2 и uuencode\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress Ñабиј и кодирај Ñве датотеке Ñа uuencode\n"
+" -b, --bits-per-code=BITS поÑтави опцију -bBITS (Ñада 12) за compress\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Заштита од грешака у преноÑу:\n"
+" -w, --no-character-count не проверавај величину Ñа `wc -c'\n"
+" -D, --no-md5-digest не кориÑти проверу Ñа `md5sum'\n"
+" -F, --force-prefix Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ñваке линије биће задати знак\n"
+" -d, --here-delimiter=STRING кориÑти STRING за раздвајање датотека\n"
+"\n"
+"Прављење разних врÑта архива:\n"
+" -V, --vanilla-operation направи једноÑтавне и мало захтевне архиве\n"
+" -P, --no-piping обавезно кориÑти привремене датотеке при раду\n"
+" -x, --no-check-existing увек бриши поÑтојеће датотеке\n"
+" -X, --query-user питај кориÑника пре бриÑања датотека\n"
+" -m, --no-timestamp не мењај датум и време креирања датотеке\n"
+" -Q, --quiet-unshar избегавај иÑÐ¿Ð¸Ñ Ð´ÐµÑ‚Ð°Ñ™Ð½Ð¸Ñ… порука при раду\n"
+" -f, --basename раÑпакуј у иÑти директоријум без обзира на Ñве\n"
+" --no-i18n не кориÑти подршку за интернационализацију\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Опција -o Ñе мора кориÑтити Ñа -l или -L, опција -n Ñе мора кориÑтити Ñа -"
+"a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "Опција -g повлачи -z, опција -b повлачи -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Опција -g повлачи -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Грешке пријавите на адреÑу <%s>.\n"
+"Поруке у вези овог превода Ñлати на адреÑу <gnu@prevod.org>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "неважећа граница величине датотеке `%s'"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "Ðеважећи формат (бројно поље прешироко): „%s“\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "Прекидач DEBUG није био одабран при превођењу"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Строго ограничење %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Овај ÑиÑтем не подржава -Z ('compress'), кориÑтите умеÑто тога -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Благо ограничење %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "неиÑправан излазни префикÑ\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Задужбина за Ñлободан Ñофтвер, корп.\n"
+"Ово је Ñлободан Ñофтвер; погледајте изворни код за уÑлове копирања. ÐЕМР\n"
+"гаранције; не гарантује Ñе ни да је програм одговарајућег квалитета нити\n"
+"да одговара намени.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "УПОЗОРЕЊЕ: у обичном моду рада Ñе не интерагује Ñа кориÑником"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "УПОЗОРЕЊЕ: Опције за обраду не-текÑтуалних датотека Ñу промењене"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "ÐиÑу наведене улазне датотеке"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Опција -a Ñе не може кориÑтити без -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Опције -l или -L Ñе не могу кориÑтити без -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"МОЛИМО да не кориÑтите архиве прављене Ñа -X на Usenet-у и јавним мрежама"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "РаÑпаковали Ñте поÑледњи део"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "ЗапиÑано је %d фајл(ов)(а)\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x — уклоњен директоријум за браву `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x — уклањање директоријума за браву `'%s\\'' није уÑпело."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Ðема команди шкољке у %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s личи на изворни код у језику C, а не на архиву"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Ðема команди шкољке поÑле `cut' у %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s вероватно није архива"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Линију `cut' пратило је: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Покрећем Ð¿Ñ€Ð¾Ñ†ÐµÑ `sh'"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Обавезни аргументи за дугачке опције Ñу обавезни такође и за кратке опције.\n"
+"\n"
+" -d, --directory=DIRECTORY иди у директоријум DIRECTORY пре раÑпакивања\n"
+" -c, --overwrite доÑтави опцију -c Ñкрипти за препиÑивање "
+"датотека\n"
+" -e, --exit-0 иÑто као `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING подели архиве поÑле STRING\n"
+" -f, --force иÑто као `-c'\n"
+" --help прикажи овај текÑÑ‚ помоћи и заврши Ñа радом\n"
+" --version прикажи ознаку верзије и заврши Ñа радом\n"
+"\n"
+"Ðко ДÐТОТЕКРније наведена, чита Ñе Ñа Ñтандардног улаза.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Ðије могуће пребацити Ñе у `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "добави бафер за име датотеке"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "Ñтандардни улаз"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "добави бафер за датотеку"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Грешка при упиÑу"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Кратка датотека"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: Ðема линије за крај (`end') "
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: подаци Ñледе иза знака `='"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: неиÑправна линија"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: Ðема почетне линије (`begin')"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: ÐеиÑправан ~кориÑник"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: КориÑник `%s' не поÑтји"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "није могуће приÑтупити %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "не може Ñе упиÑати FIFO (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "не пратим Ñимболичку везу (%s)"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "Отварам `%s'"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Употреба: %s [ДÐТОТЕКÐ]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Обавезни аргументи за дуге опције Ñу обавезни и за кратке опције.\n"
+" -o, --output-file=FILE директан излаз у FILE\n"
+" --help прикажи текÑÑ‚ помоћи и заврши Ñа радом\n"
+" --version прикажи ознаке верзије и заврши Ñа радом\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Грешка при упиÑу"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Грешка при читању"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "УПОТРЕБÐ: %s [УЛÐЗÐÐ_ДÐТ] УДÐЉЕÐÐ_ДÐТ\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 кориÑти base64 кодирање, према RFC1521\n"
+" --help прикажи текÑÑ‚ помоћи и заврши Ñа радом\n"
+" --version прикажи ознаку верзије и заврши Ñа радом\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "Отварам `%s'"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "Крећем Ñа датотеком %s\n"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[не: no, да: yes, Ñве: all, крај: quit] (no)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "Молим раÑпакујте део"
+
+#~ msgid "next!"
+#~ msgstr "Ñледећи!"
+
+#~ msgid "File"
+#~ msgstr "Датотека"
+
+#~ msgid "original size"
+#~ msgstr "полазна величина"
+
+#~ msgid "current size"
+#~ msgstr "тренутна величина"
+
+#~ msgid "lock directory"
+#~ msgstr "директоријум за браву"
+
+#~ msgid "created"
+#~ msgstr "направљен"
+
+#~ msgid "failed to create"
+#~ msgstr "није направљен"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "Ðрхиве Ñе морају отпаковати редом!"
+
+#~ msgid "failed"
+#~ msgstr "није уÑпело"
+
+#~ msgid "End of"
+#~ msgstr "Крај"
+
+#~ msgid "part"
+#~ msgstr "дела"
+
+#~ msgid "removed"
+#~ msgstr "уклоњен"
+
+#~ msgid "failed to remove"
+#~ msgstr "није уклоњен"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644
index 0000000..749cdb9
--- /dev/null
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..1088f47
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,873 @@
+# Swedish messages for sharutils
+# Copyright © 1996, 2002, 2005, 2006 Free Software Foundation, Inc.
+# Jan Djärv <jan.h.d@swipnet.se>, 1996, 2002, 2005, 2006.
+# Revision: 1.27
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-20 10:39+0200\n"
+"Last-Translator: Jan Djärv <jan.h.d@swipnet.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Okänt systemfel"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: flaggan \"%s\" är tvetydig\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"--%s\" tar inget argument\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"%c%s\" tar inget argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: flaggan \"%s\" behöver ett argument\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: okänd flagga \"--%s\"\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: okänd flagga \"%c%s\"\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: otillåten flagga -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ogiltig flagga -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flaggan behöver ett argument -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: flaggan \"-W %s\" är tvetydig\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "minnet slut"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"OBS: verifierar inte md5-summor. Överväg att installera GNU coreutils."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+"VARNING: Tidsinformation för filer återskapas inte. Du borde skaffa och "
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "installera GNUs \"touch\" som medföljer GNU coreutils..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "låskatalogen '${lock_dir}' finns"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "misslyckades med att skapa låskatalog"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - skapade låskatalog \"%s\""
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - misslyckades med att skapa låskatalog \"%s\""
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "ja"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "skriv över den här filen"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "nej"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "hoppa över den här filen"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "alla"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "skriv över alla filer"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "inga"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "skriv inte över någon fil"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "hjälp"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "förklara alternativ"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "avsluta"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "avsluta omedelbart"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Kan inte generera mkdir-kommandon för så många kataloger"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - skapade katalog \"%s\"."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - misslyckades med att skapa katalog \"%s\""
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Kan inte komma åt %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C kommer att tas bort, använd -Z i stället"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Kan inte komma åt namnet på aktuell katalog"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Arkiv måste packas upp i ordning.\n"
+"Packa upp del \"`cat ${lock_dir}/seq`\" härnäst."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Ny fil, återstår %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Begränsningen är fortfarande %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "Ã¥terskapande av %s misslyckades"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Slut på del %d, fortsätt med del %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Påbörjar filen %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Inte en normal fil"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "I shar: kvarvarande storlek %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "tom"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(tom)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Filen %s kunde inte öppnas"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "komprimerad"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gzip-komprimerad"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "bzip-komprimerad"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "binär"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(komprimerad)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gzip-komprimerad)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(bzip-komprimerad)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(binär)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Kunde inte grena"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Fil %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "text"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(text)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "skriver över %s"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "skriva över %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "HOPPAR ÖVER %s"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "Ã¥terskapandet avbryts"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "HOPPAR ÖVER %s (filen finns redan)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Sparar %s (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - extraherar %s %s"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "Ã¥terskapande av %s misslyckades\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Slut på del %ld, fortsätt med del %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Slut på %s del %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "arkiv"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Fil %s fortsätter i arkivdel %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Packa upp arkivdel 1 först!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Packa upp arkivdel '${shar_sequence}' härnäst!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "FORTSÄTTER ATT HOPPA ÖVER %s"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "fortsätter fil %s"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Fil %s är komplett"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "uudecode:ar fil %s"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "uncompress:ar upp fil %s"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "gunzip:ar fil %s"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "bunzip:ar fil %s"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5-kontrollen misslyckades"
+
+# 'återskapningsvarning: storleken på %s är inte %s'
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'återskapningsvarning: storleken på %s är inte %s'\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "allokerar utfilnamn"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Öppnar \"%s\""
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Stänger \"%s\""
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Försök med \"%s --help\" för ytterligare information.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Användning: %s [FLAGGA]... [FIL]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Obligatoriska argument för långa flaggor är obligatoriska även för korta.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Välja information:\n"
+" -h, --help visa denna hjälptext och avsluta\n"
+" -v, --version visa versionsinformation och avsluta\n"
+" -q, --quiet, --silent använd inte utförliga meddelanden lokalt\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Välja filer:\n"
+" -p, --intermix-type tillåt -[BTzZ] i fillistor för att ändra lagring\n"
+" -S, --stdin-file-list läs fillista från standard in\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Välja filer:\n"
+" -p, --intermix-type tillåt -[BTz] i fillistor för att ändra lagring\n"
+" -S, --stdin-file-list läs fillista från standard in\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Dela arkivet:\n"
+" -o, --output-prefix=PREFIX gör filerna PREFIX.01 till PREFIX.NN\n"
+" -l, --whole-size-limit=STORLEK dela arkivet i STORLEK kbyte bitar,\n"
+" individuella filer delas inte\n"
+" -L, --split-size-limit=STORLEK som ovan, individuella filer delas\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Kontroll av fält i arkivhuvudet:\n"
+" -n, --archive-name=NAMN använd NAMN för att dokumentera arkivet\n"
+" -s, --submitter=ADRESS ange explicit adress för arkivinlämnaren\n"
+" -a, --net-headers lägg in Submitted-by: och Archive-name:\n"
+" -c, --cut-mark börja arkivet med en \"klipp-här\"-rad\n"
+" -t, --translate översätt meddelanden i skriptet\n"
+"\n"
+"Kontroll av hur filer lagras:\n"
+" -M, --mixed-uuencode avgör automatiskt om uuencode behövs\n"
+" (standardvärde: på)\n"
+" -T, --text-files behandla alla filer som text\n"
+" -B, --uuencode behandla alla filer som binär data,\n"
+" använd uuencode\n"
+" -z, --gzip kör gzip och uuencode på alla filer\n"
+" -g, --level-for-gzip=NIVÅ ge flaggan -NIVÅ till gzip (standardvärde: "
+"9)\n"
+" -j, --bzip2 kör bzip2 och uuencode på alla filer\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress kör compress och uuencode på alla filer\n"
+" -b, --bits-per-code=BITAR ge flaggan -bBITAR till compress\n"
+" (standardvärde: 12)\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Skydd mot överföringsfel:\n"
+" -w, --no-character-count använd inte \"wc -c\" för att kontrollera\n"
+" storleken\n"
+" -D, --no-md5-digest använd inte \"md5sum\" för kontroll\n"
+" -F, --force-prefix skriv prefixtecknet på alla rader\n"
+" -d, --here-delimiter=STRÄNG skilj filer åt i arkivet med STRÄNG\n"
+"\n"
+"Olika typer av skalarkiv:\n"
+" -V, --vanilla-operation gör enkla arkiv som använder få kommandon\n"
+" -P, --no-piping använd enbart temporärfiler vid uppackning\n"
+" -x, --no-check-existing skriv över existerande filer vid uppackning\n"
+" -X, --query-user fråga uppackaren om filer ska skrivas över\n"
+" (inte för arkiv till nätet)\n"
+" -m, --no-timestamp återskapa inte filers modifieringstid\n"
+" -Q, --quiet-unshar undvik utförliga meddelanden vid uppackning\n"
+" -f, --basename packa upp filer i en katalog, oavsett hierarki\n"
+" --no-i18n skapa inte internationaliserade skalarkiv\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Flaggan -o krävs tillsammans med -l eller -L,\n"
+"flaggan -n krävs tillsammans med -a.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "Flaggan -g medför -z, flaggan -b medför -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Flaggan -g medför -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Rapportera fel till <%s>.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv."
+"se>.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "ogiltig begränsning på filstorlek \"%s\""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "ogiltigt format (räknarfält för stort): \"%s\"\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "DEBUG valdes inte när programmet kompilerades"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Hård begränsning på %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Det här systemet stöder inte -Z (\"compress\"), använd -z istället"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Mjuk begränsning på %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "otillåtet prefix för utfiler\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright © %s Free Software Foundation, Inc.\n"
+"Detta är fri programvara; se källkoden för kopieringsvillkor. Det finns\n"
+"INGEN garanti; inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT\n"
+"ÄNDAMÅL.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "VARNING: Ingen användarinteraktion i \"vanilla\"-läge"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "VARNING: Lagringsflaggor för icke-text åsidosatta"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Inga infiler"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Flaggan -a kan inte användas utan -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Flaggan -l eller -L kan inte användas utan -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"Vänligen undvik -X för skalarkiv som ska till Usenet eller offentliga nätverk"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Du har packat upp den sista arkivdelen"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Skapade %d filer\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - tog bort låskatalog \"%s\"."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - misslyckades med att ta bort låskatalog \"%s\""
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Hittade inga skalkommandon i %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s ser ut som C-kod, inte som ett skalarkiv"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Hittade inga skalkommandon efter \"klipp-här\" i %s"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s är förmodligen inte ett skalarkiv"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "\"klipp-här\"-raden följdes av: %s"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Startar en skalprocess"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Obligatoriska argument för långa flaggor är obligatoriska även för korta.\n"
+"\n"
+" -d, --directory=KATALOG gå till KATALOG före uppackning\n"
+" -c, --overwrite ge -c flaggan till arkivet för överskrivning\n"
+" -e, --exit-0 samma sak som `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRÄNG dela upp ihoplagda arkiv efter STRÄNG\n"
+" -f, --force samma sak som \"-c\"\n"
+" --help visa denna hjälptext och avsluta\n"
+" --version visa versionsinformation och avsluta\n"
+"\n"
+"Om ingen FIL ges så läses standard in.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Kan inte gå till katalog \"%s\""
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "allokera filnamnsbuffert"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standard in"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "allokera filbuffert"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Skrivfel"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Stympad fil"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: \"end\"-rad saknas"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: det finns data efter utfyllnadstecknet \"=\" "
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: felaktig rad"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: \"begin\"-rad saknas"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Otillåten ~user"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Det finns ingen användare \"%s\""
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "kan inte komma åt %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "skriver inte till FIFO (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "följer inte symbolisk länk (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "öppnar (freopen) %s"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "åtkomständring (chmod) av %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Användning: %s [FIL]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Obligatoriska argument för långa flaggor är obligatoriska även för korta.\n"
+" -o, --output-file=FIL skriv resultatet till FIL\n"
+" --help visa denna hjälptext och avsluta\n"
+" --version visa versionsinformation och avsluta\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Skrivfel"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Fel vid läsning"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Användning: %s [LOKAL_FIL] ICKE_LOKAL_FIL\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 använd base64-kodning enligt RFC1521\n"
+" --help visa denna hjälptext och avsluta\n"
+" --version visa versionsinformation och avsluta\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "öppnar (fopen) %s"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "tar status (fstat) på %s"
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644
index 0000000..ddbabb9
--- /dev/null
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..de15dee
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,873 @@
+# translation of sharutils-4.6.3-pre4.po to Turkish
+# sharutils-4.6.3-pre4'ün Türkçe çevirisi
+# Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+# Eyüp Hakan Duran <hakan_duran@hotmail.com>, 2002, 2004, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils-4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-21 23:09-0400\n"
+"Last-Translator: Eyüp Hakan Duran <hakan_duran@hotmail.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Bilinmeyen sistem hatasý"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: `%s' seçeneði belirsiz\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: `--%s' seçeneði argümansýz kullanýlýr\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: `%c%s' seçeneði argümansýz kullanýlýr\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: `%s' seçeneði bir argümanla kullanýlýr\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: `--%s' seçeneði bilinmiyor\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: `%c%s' seçeneði bilinmiyor\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: kuraldýþý seçenek -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: geçersiz seçenek -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: seçenek bir argümanla kullanýlýr -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: `-W %s' seçeneði belirsiz\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: `-W %s' seçeneði argümansýz kullanýlýr\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "bellek tükendi"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Not: md5toplamlarý control edilmiyor. GNU coreutils kurmayý gözününde "
+"bulundurun."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "UYARI: Zaman belirteçleri geri yüklenmiyor. GNU Dosya Hizmetleri"
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+"GNU `touch'\\'' yükleniyor, GNU çekirdek araçlarý altýnda daðýtýlmaktadýr..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "kilit dizini '${lock_dir}' mevcut"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "Kilitleyici dizin oluþturulamadý"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - kilitleyici dizini oluþturuldu `'%s\\\"."
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - kilitleyici dizini oluþturulamadý `'%s\\\"."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "evet"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "bu dosyanýn üstüne yaz"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "hayýr"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "bu dosyayý atla"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "tümü"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "tüm dosyalarýn üstüne yaz"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "hiçbiri"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "hiçbir dosyanýn üstüne yazma"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "yardým"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "seçenekleri açýkla"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "çýkýþ"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "derhal çýk"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "mkdir için çok sayýda dizin"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - dizini oluþturdu `'%s\\''."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - dizini oluþturamadý `'%s\\\"."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "%s'e girilemedi"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C reddediliyor, yerine -Z kullanýn"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Yürürlükteki dizin adý okunamýyor"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"Arþivlerin paketi sýrayla açýlmalýdýr!\n"
+"Lütfen bir sonra '`cat ${lock_dir}/seq`' bölümünü açýnýz."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Yeni dosya, kalan %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Halen sýnýr %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "%s'nin geri yüklemesi baþarýsýz"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "%d bölümünün sonu, %d bölümüyle devam edin"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "%s dosyasý baþlatýlýyor\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: Sýradan bir dosya deðil"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "Shar içinde kalan boyut: %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "boþ"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(boþ)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "%s dosyasý açýlamýyor"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "sýkýþtýrýlmýþ"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gziplendi"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "bziplendi"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "iki tabanlý"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(sýkýþtýrýlmýþ)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gziplenmiþ)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(bziplenmiþ)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(iki tabanlý)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Çatallanamadý"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "%s dosyasý (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "metin"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(metin)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "%s'in üstüne yazýlýyor"
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "%s'in üstüne yaz"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "%s ATLANIYOR"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "açýlma iptal edildi"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "%s ATLANIYOR (dosya zaten var)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "%s kaydediliyor (%s)"
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x - %s %s açýlýyor"
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "%s'nin geri yüklemesi baþarýsýz\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "%1$ld bölümünün sonu, %2$ld bölümüyle devam edin"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "%s bölümünün sonu %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "arþiv"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "%s dosyasý %d bölümünde devam etmektedir"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "Lütfen önce ilk bölümü açýnýz!"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "Lütfen önce '${shar_sequence}' bölümünü açýnýz!"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "HÂLÂ ATLANIYOR %s"
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "%s dosyasýna devam ediliyor"
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Dosya %s tamamlandý"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "dosya %s uuçözülüyor"
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "dosya %s'in sýkýþtýrmasý açýlýyor"
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "dosya %s gunzipleniyor"
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "dosya %s bunzipleniyor"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5 kontrolü baþarýsýz"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "'yenileme uyarýsý: %1$s'in boyutu %2$s deðill\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "çýktý dosya adý atanýyor"
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "`%s' açýlýyor"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "`%s' kapatýlýyor"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Daha fazla bilgi için `%s --help' yazýn.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Kullanýmý: %s [SEÇENEK]... [DOSYA]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Uzun seçenekler için zorunlu olan argümanlar, kýsa seçenekler için de "
+"zorunludur.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Geribesleme verme:\n"
+" --help bu yardýmý görüntüle ve çýk\n"
+" --version sürüm bilgisini göster ve çýk\n"
+" -q, --quiet, --silent sözlü mesajlarý yerel görüntüleme\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Dosya seçme:\n"
+" -p, --intermix type kip deðiþtirmek için dosya listesinde -[BTzZ]'ye "
+"izin ver\n"
+" -S, --stdin-file-list dosya listesini standart girdiden oku\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Dosya seçme:\n"
+" -p, --intermix-type kip deðiþtirmek için dosya listesinde -[BTz]'ye "
+"izin ver\n"
+" -S, --stdin-file-list dosya listesini standart girdiden oku\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Çýktý bölme:\n"
+" -o, --output-prefix=ÖNEK Çýktýyý ÖNEK.01'den ÖNEK.NN'e dek dosyalara "
+"gönder\n"
+" -l, --whole-size-limit=BOYUT Dosyalarý deðil arþivi, BOYUT kilobayta "
+"böl\n"
+" -L, --spilt-size-limit=BOYUT Dosyalarý ya da arþivi BOYUT kilobayta böl\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Shar baþlýklarýný belirleme:\n"
+" -n, --archive-name=AD arþivi belgelemek için AD'ý kullan\n"
+" -s, --submitter=ADRES gönderici ismini belirle\n"
+" -a, --net-headers çýktýyý gönderen: & Arþiv ismi: baþlýklar\n"
+" -c, --cut-mark shar'ý kesim çizgisiyle baþlat\n"
+" -t, --translate mesajlarý betik içinde çevir\n"
+"\n"
+"Dosya depolanma þeklini seçme:\n"
+" -M, --mixed-uuencode uukodlamayý dinamik kararlaþtýr (öntanýmlý)\n"
+" -T, --text-files tüm dosyalarý metin varsay\n"
+" -B, --uuencode tüm dosyalarý iki tabanlý varsay, uukodla\n"
+" -z, --gzip tüm dosyalarý gzipleyip uukodla\n"
+" -g, --level-for-gzip=DÜZEY gzip'e geçiþ -DÜZEY'i (öntanýmlýsý:9)\n"
+" -j, --bzip2 tüm dosyalarý bzip2'leyip uukodla\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress tüm dosyalarý sýkýþtýr ve uukodla\n"
+" -b, --bits-per-code=BIT sýkýþtýrmaya geçiþ -BIT'i (öntanýmlýsý:12)\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Ýletime karþý koruma:\n"
+" -w, --no-character-count boyutu kontrol etmek için `wc -c' kullanma\n"
+" -D, --no-md5-digest doðrulamak için `md5sum' özütünü kullanma\n"
+" -F, --force-prefix önek karakterini her satýrda zorla kullan\n"
+" -d, --here-delimiter=DÝZGÝ shar'daki dosyalarý sýnýrlamak için "
+"DÝZGÝ'yi kullan\n"
+"\n"
+"Deðiþik türlerde shar'lar üretme:\n"
+" -V, --vanilla-operation çok basit ve esnek shar'lar üret\n"
+" -P, --no-piping shar çözüleceðinde tamamen geçici dosyalar "
+"kullanarak çöz\n"
+" -x, --no-check-existing mevcut dosyalarýn üzerine körlemesine yaz\n"
+" -X, --query-user dosyalarýn üzerine yazmadan önce kullanýcýyý sor "
+"(Að için deðil)\n"
+" -m, --no-timestamp dosya deðiþim tarih ve zamanýný geri yükleme\n"
+" -Q, --quit-unshar shar çözüleceðinde mesajlarý dillendirmekten "
+"kaçýn\n"
+" -f, --basename sýradüzeni yok sayýp, bir dizine geri yükle\n"
+" --no-i18n uluslararasýlaþtýrýlmýþ kabuk senaryosu üretme\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"-o seçeneði -l ya da -L ile, -n seçeneði -a ile kullanýlmalýdýr.\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "-g seçeneði -z, -b seçeneði -Z gerektirir.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "-g seçeneði -z gerektirir.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Yazýlým hatalarýný <%s>'e bildiriniz.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "geçersiz dosya boyutu limiti `%s'"
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "geçersiz biçem (sayma alaný çok geniþ): '%s'\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "HATA AYIKLAMA, derleme sýrasýnda seçilmemiþtir."
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Donaným sýnýrý %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "Bu sistem -Z'yi ('sýkýþtýr') desteklemiyor, yerine -z kullanýnýz"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Yazýlým sýnýrý %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "kuraldýþý çýktý öneki\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Kopyahakký (C) %s Free Software Foundation, Inc.\n"
+"Bu bir serbest yazýlýmdýr; kopyalama koþullarý için kaynak koduna bakýnýz.\n"
+"Hiçbir garantisi yoktur; hatta SATILABÝLÝRLÝÐÝ veya ÞAHSÝ KULLANIMINIZA\n"
+"UYGUNLUÐU için bile garanti verilmez.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "UYARI: Vanilla kipinde kullanýcý etkileþimi olmaz"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "UYARI: Metin dýþý depolama seçenekleri geçersiz kýlýndý"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Hiçbir girdi dosyasý yok"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "-a seçeneði, -n seçeneði olmaksýzýn kullanýlamaz"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "-l ya da -L seçeneði, -o'suz kullanýlamaz"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "LÜTFEN Usenet ya da halka açýk aðlarda -X shar'lardan kaçýnýnýz"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Son kýsmý açtýnýz"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "%d dosya oluþturuldu\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x - kilitleyici dizini sildi `'%s\\''."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x - kilitleyici dizini silemedi `'%s\\''."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "%s'de kabuk komutu bulunamadý"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s, kabuk arþivinden çok, ham C kodunu andýrýyor."
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "%s'deki `kesme'den sonra kabuk komutu bulunamadý"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s, muhtemelen bir kabuk arþivi deðil"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "`kesme' çizgisini %s izliyor"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "`sh' iþlemi baþlatýlýyor"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Uzun seçenekler için zorunlu argümanlar, kýsa seçenekler için de "
+"zorunludur.\n"
+"\n"
+" -d, --directory=DÝZÝN açmadan önce DÝZÝN'e gidin\n"
+" -c, --overwrite dosyalarýn üstüne yazmak için shar senaryosuna "
+"-c geçin\n"
+" -e, --exit-0 `--split-at=\"exit 0\"' ile ayný\n"
+" -E, --split-at=DÝZGÝ birleþtirilmiþ shar'larý DÝZGÝ'den sonra böl\n"
+" -f, --force `-c' ile ayný\n"
+" --help bu yardýmý görüntüle ve çýk\n"
+" --version sürüm bilgisini göster ve çýk\n"
+"\n"
+"DOSYA yoksa, standart girdi okunur.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "`%s' e girilemiyor"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "dosya adý tamponu ata"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "standart girdi"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "dosya tamponu ata"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: Yazma hatasý"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: Kýsa dosya"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: `son' çizgisi yok"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: dolgulama karakteri `=' sonrasý veri"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: kuraldýþý çizgi"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: `baþlangýç' çizgisi yok"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: Kuraldýþý ~kullanýcý"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: Kullanýcý yok `%s'"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "%s'e eriþilemedi"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "FIFO (%s) yazýmý reddedildi"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "simgesel link (%s) izlenemiyor"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "%s'in freaçýlýmý"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "%s'in chkipi"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Kullaným: %s [DOSYA] \n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Uzun seçenekler için zorunlu argümanlar, kýsa seçenekler için de zorunludur\n"
+" -o, --output-file=DOSYA DOSYA'ya doðrudan çýktý\n"
+" --help bu yardýmý görüntüle ve çýk\n"
+" --version sürüm bilgisini göster ve çýk\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Yazma hatasý"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Okuma hatasý"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "Kullaným: %s [ÝÇDOSYA] DIÞDOSYA\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 RFC1521'deki gibi 64 tabanlý kodlama kullan\n"
+" --help bu yardýmý görüntüle ve çýk\n"
+" --version sürüm bilgisini göster ve çýk\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "%s 'f'açýlýyor"
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "%s 'f'statlanýyor"
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644
index 0000000..684a55e
--- /dev/null
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..80ef783
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,901 @@
+# Vietnamese Translation for Sharutils.
+# Copyright © 2005, 2006 Free Software Foundation, Inc.
+# Clytie Siddall <clytie@riverland.net.au>, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.6.3-pre4\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2006-05-24 16:12+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"X-Generator: LocFactoryEditor 1.6b36\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "Lỗi hệ thống không rõ"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: tùy chá»n « %s » mÆ¡ hồ.\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: tùy chá»n « --%s » không cho phép đối số.\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: tùy chá»n « %c%s » không cho phép đối số.\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: tùy chá»n « %s » cần đến đối số.\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: không nhận biệt tùy chá»n « --%s ».\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: không nhận biệt tùy chá»n « %c%s ».\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: không cho phép tùy chá»n « -- %c ».\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: tùy chá»n không thích hợp « -- %c ».\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: tùy chá»n cần đến đối số « -- %c ».\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: tùy chá»n « -W %s » mÆ¡ hồ.\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: tùy chá»n « -W %s » không cho phép đối số.\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "hết bộ nhớ hoàn toàn"
+
+#: src/shar.c:608
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr ""
+"Ghi chú : không thể kiểm tra các md5sum. Như thế thì bạn nên suy tính việc "
+"cài đặt chương trình coreutils của GNU."
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr ""
+"CẢNH BÃO: không thể phục hồi nhãn thá»i gian. NhÆ° thế thì bạn nên suy tính "
+"việc lấy và"
+
+#: src/shar.c:645
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr ""
+"Ä‘ang cài đặt trình « touch'\\' » của GNU, được phát hành trong gói phần má»m "
+"coreutils (các tiện ích lõi) của GNU"
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr "thư mục khóa « ${lock_dir} » đã có"
+
+#: src/shar.c:657
+msgid "failed to create lock directory"
+msgstr "việc tạo thư mục khóa bị lỗi"
+
+#: src/shar.c:661
+#, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "x - đã tạo thư mục khóa « %s\\'' »"
+
+#: src/shar.c:663
+#, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "x - việc tạo thư mục khóa « %s'\\' » bị lỗi."
+
+#: src/shar.c:671
+msgid "yes"
+msgstr "có"
+
+#: src/shar.c:671
+msgid "overwrite this file"
+msgstr "ghi đè lên tập tin này"
+
+#: src/shar.c:672
+msgid "no"
+msgstr "không"
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr "bỠqua tập tin này"
+
+#: src/shar.c:673
+msgid "all"
+msgstr "hết"
+
+#: src/shar.c:673
+msgid "overwrite all files"
+msgstr "ghi đè lên má»i tập tin"
+
+#: src/shar.c:674
+msgid "none"
+msgstr "không có"
+
+#: src/shar.c:674
+msgid "overwrite no files"
+msgstr "đừng ghi đè gì"
+
+#: src/shar.c:675
+msgid "help"
+msgstr "trợ giúp"
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr "giải thích các lá»±a chá»n"
+
+#: src/shar.c:676
+msgid "quit"
+msgstr "thoát"
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr "đi vào ngay"
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "Quá nhiá»u thÆ° mục để tạo ra cách mkdir (tạo thÆ° mục)"
+
+#: src/shar.c:737
+#, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "x - đã tạo thư mục « %s'\\' »."
+
+#: src/shar.c:739
+#, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "x - việc tạo thư mục « %s'\\' » bị lỗi."
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "Không thể truy cập %s."
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "« -C » bị phản đối nên hãy sử dụng « -Z » thay thế."
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "Không thể lấy tên thư mục hiện có."
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+"• Phải giải nén các khó theo thứ tự. •\n"
+"Lần kế bạn hãy giải nén phần « `c« t ${lock_dir}/seq` »."
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "Tập tin mới, còn lại %s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "Lại bị hạn chế %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, c-format
+msgid "restore of %s failed"
+msgstr "việc phục hồi %s bị lỗi"
+
+#: src/shar.c:987
+#, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "Kết thúc phần %d, tiếp tục lại với phần %d"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "Äang bắt đầu tập tin %s...\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s: không phải là tập tin chuẩn"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "Trong « shar: » kích cỡ còn lại %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "trống"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(trống)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Không thể mở tập tin %s."
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "bị nén"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "bị nén gzip"
+
+#: src/shar.c:1150
+msgid "bzipped"
+msgstr "bị nén bzip"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "nhị phân"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(bị nén)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(bị nén gzip)"
+
+#: src/shar.c:1154
+msgid "(bzipped)"
+msgstr "(bị nén bzip)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(nhị phân)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "Không thể tạo tiến trình con"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "Tập tin %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "văn bản"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(văn bản)"
+
+#: src/shar.c:1251
+#, c-format
+msgid "overwriting %s"
+msgstr "đang ghi đè lên %s..."
+
+#: src/shar.c:1253
+#, c-format
+msgid "overwrite %s"
+msgstr "ghi đè lên %s"
+
+#: src/shar.c:1257
+#, c-format
+msgid "SKIPPING %s"
+msgstr "ÄANG BỎ QUA %s..."
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "việc giải nén bị hủy bá»"
+
+#: src/shar.c:1262
+#, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "ÄANG BỎ QUA %s (tập tin đã có)..."
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Äang lÆ°u %s (%s)..."
+
+#: src/shar.c:1276
+#, c-format
+msgid "x - extracting %s %s"
+msgstr "x — đang giải nén %s %s..."
+
+#: src/shar.c:1392
+#, c-format
+msgid "restore of %s failed\n"
+msgstr "việc phục hồi %s bị lỗi\n"
+
+#: src/shar.c:1401
+#, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "Kết thúc phần %ld, tiếp tục lại với phần %ld"
+
+#: src/shar.c:1407
+#, c-format
+msgid "End of %s part %d"
+msgstr "Kết thức %s phần %d"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "kho"
+
+#: src/shar.c:1412
+#, c-format
+msgid "File %s is continued in part %d"
+msgstr "Tập tin %s có tiếp tục trong phần %d"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "• Hãy giải nén phần 1 trước tiên. •"
+
+#: src/shar.c:1460
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "• Hãy giải nén phần « ${shar_sequence} » lần kế tiếp. •"
+
+#: src/shar.c:1471
+#, c-format
+msgid "STILL SKIPPING %s"
+msgstr "LẠI ÄANG BỎ QUA %s..."
+
+#: src/shar.c:1479
+#, c-format
+msgid "continuing file %s"
+msgstr "đang tiếp tục lại tập tin %s..."
+
+#: src/shar.c:1497
+#, c-format
+msgid "File %s is complete"
+msgstr "Tập tin %s đã hoàn tất"
+
+#: src/shar.c:1504
+#, c-format
+msgid "uudecoding file %s"
+msgstr "đang giải nén tập tin mã « uu » %s..."
+
+#: src/shar.c:1514
+#, c-format
+msgid "uncompressing file %s"
+msgstr "đang giải nén tập tin %s..."
+
+#: src/shar.c:1522
+#, c-format
+msgid "gunzipping file %s"
+msgstr "đang giải nén tập tin gzip %s..."
+
+#: src/shar.c:1530
+#, c-format
+msgid "bunzipping file %s"
+msgstr "đang giải nén tập tin bzip %s..."
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "Việc kiểm tra MD5 bị lỗi"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr "« cảnh báo phục hồi »: kích cỡ của %s không phải là %s\n"
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr "đang cấp phát tên tập tin xuất..."
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "Äang mở « %s »..."
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Äang đóng « %s »..."
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Hãy thử lệnh « %s --help » để tìm thông tin thêm (_trợ giúp_).\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "Cách sử dụng: %s [TÙY_CHỌN]... [TẬP_TIN]...\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Tất cả đối số bắt buá»™c phải sá»­ dụng vá»›i tùy chá»n dài cÅ©ng bắt buá»™c vá»›i tùy "
+"chá»n ngắn.\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"Cách gởi thông tin phải hồi:\n"
+" --help hiển thị _trợ giúp_ này rồi thoát\n"
+" --version xuất thông tin _phiên bản_ rồi thoát\n"
+" -q, --quiet, --silent không xuất thông điệp dài trên máy cục bộ (_im_)\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Cách chá»n tập tin:\n"
+" -p, --intermix-type\n"
+"\tcho phép đối số « -[BTzZ] » trong danh sách tập tin để đổi chế độ (_kiểu-"
+"trộn-lẫn_)\n"
+" -S, --stdin-file-list Ä‘á»c _danh sách tập tin_ từ _thiết bị nhập chuẩn_\n"
+
+#: src/shar.c:1745
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"Cách chá»n tập tin:\n"
+" -p, --intermix-type cho phép đối số -[BTz] trong danh sách tập tin để "
+"đổi chế độ (_kiểu-trộn-lẫn_)\n"
+" -S, --stdin-file-list Ä‘á»c _danh sách tập tin_ từ _thiết bị nhập chuẩn_\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"Cách chia tách dữ liệu xuất:\n"
+" -o, --output-prefix=TIỀN_Tá» _xuất_ ra các tập tin TIỀN_Tá».01 đến "
+"TIỀN_Tá».NN (_tiá»n tố_\n"
+" -l, --whole-size-limit=CỠ \tchia tách kho (không phải tập tin) ra phần "
+"Cá»  KB\n"
+"\t(_hạn-chế-toàn-kích_cỡ_)\n"
+" -L, --split-size-limit=CỠ \t_chia tách_ kho, hay tập tin, ra phần CỠ KB\n"
+"\t(_hạn-chế-kích_cỡ-bị-chia-tách_)\n"
+
+#: src/shar.c:1759
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"Cách Ä‘iá»u kiện dòng đầu « shar »:\n"
+" -n, --archive-name=TÊN sử dụng _TÊN_ để ghi thông tin vỠ_kho_\n"
+" -s, --submitter=ÄỊA_CHỈ không chiụ nghe theo tên _ai Ä‘Æ°a ra_\n"
+" -a, --net-headers xuất _dòng đầu_ « Submitted-by: » (ai đưa ra)\n"
+":\t\t\t\t\t\tvà « Archive-name: » (tên kho) (_mạng_) \n"
+" -c, --cut-mark bắt đầu « shar » với dòng bị _cắt_ (_dấu_)\n"
+"\n"
+"Chá»n cách lÆ°u trữ tập tin:\n"
+" -M, --mixed-uuencode quyết định động _mã uu_ (mặc định) (_bị "
+"trá»™n_)\n"
+" -T, --text-files xá»­ lý má»i _tập tin_ là _văn bản_\n"
+" -B, --uuencode xá»­ lý má»i tập tin là nhị phân, sá»­ dụng _mã "
+"uu_\n"
+" -z, --gzip nén má»i tập tin bằng _gzip_ và mã uu\n"
+" -g, --level-for-gzip=CẤP chuyển « -CẤP » (mặc định 9) sang trình gzip\n"
+" -j, --bzip2 nén má»i tập tin bằng _bzip2_ và mã uu\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress _nén_ và mã uu hóa má»i tập tin\n"
+" -b, --bits-per-code=BIT chuyển « -bBITS » (mặc định 12) sang trình "
+"nén\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"Cách bảo vệ chống việc truyá»n:\n"
+" -w, --no-character-count _không_ sử dụng lệnh « wc -c » để kiểm tra "
+"kích cỡ\n"
+"\t\t(_không-đếm ký-tự_)\n"
+" -D, --no-md5-digest\n"
+"\t\t_không_ sá»­ dụng digest (Ä‘iá»u tóm tắt) kiểu « md5sum » để kiểm chứng\n"
+" -F, --force-prefix \t_ép buá»™c_ ký tá»± _tiá»n tố_ trong má»i dòng\n"
+" -d, --here-delimiter=CHUá»–I\n"
+"\t\tsử dụng CHUỖI để _định giới_ những tập tin khác trong « shar » (_đây_)\n"
+"\n"
+"Cách tạo những « shar » kiểu khác nhau:\n"
+" -V, --vanilla-operation \t\ttạo « shar » kiểu rất đơn giản và dễ sử "
+"dụng\n"
+"\t\t(_vani [sá»± chá»n cÆ¡ bản] thì hành_\n"
+" -P, --no-piping \t\tsá»­ dụng chỉ tập tin tạm thá»i khi « unshar »\n"
+"\t\t(_không sử dụng ống dẫn_)\n"
+" -x, --no-check-existing \t\tghi đè lên tập tin _tồn tại, không kiểm tra_ "
+"trÆ°á»›c\n"
+" -X, --query-user \t\t_há»i ngÆ°á»i dùng_ trÆ°á»›c khi ghi đè lên tập "
+"tin\n"
+"\t\t\t\t\t\t\t\t\t\t\t(không phải cho Mạng)\n"
+" -m, --no-timestamp \t_không_ phục hồi _giá»_ và ngày sá»­a đổi tập tin "
+"(_nhãn_) \n"
+" -Q, --quiet-unshar \ttránh hiển thị thông điệp dài khi « unshar "
+"» (_im_)\n"
+" -f, --basename \tphục hồi trong cùng một thư mục, không kể phân "
+"cấp\n"
+"\t\t(_tên-cơ-bản_)\n"
+" --no-i18n \t\t\t_không_ ghi tập lệnh vỠđã _quốc tế hóa_\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"Cần đến tùy chá»n « -o » vá»›i « -l » or « -L », tùy chá»n « -n » vá»›i « -a ».\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "Tùy chá»n « -g » ngụ ý « -z », tùy chá»n « -b » ngụ ý « -Z ».\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "Tùy chá»n « -g » ngụ ý « -z ».\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Hãy thông báo lỗi dịch nào cho <gnomevi-list@lists.sourceforge.net>%.0s.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr "hạn chế kích thước tập tin không hợp lệ « %s »."
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr "định dạng không hợp lệ (trÆ°á»ng đếm quá rá»™ng): « %s »\n"
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "ChÆ°a chá»n tùy chá»n DEBUG (gỡ lá»—i) vào lúc biên dich."
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "Hạn chế cứng %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr ""
+"Hệ thống này không há»— trợ tùy chá»n « -Z » (nén) nên hãy sá»­ dụng « -z » thay "
+"thế."
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "Hạn chế má»m %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr "không cho phép tiá»n tố xuất\n"
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Bản quyá»n © năm %s Tổ chức Phần má»m Tá»± do.\n"
+"Phần má»m này tá»± do; hãy xem nguồn để tìm Ä‘iá»u kiện sao chép.\n"
+"Không có bảo đảm gì cả, dù khả năng bán hay khả năng làm việc dứt khoát.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr ""
+"CẢNH BÃO : Trong chế Ä‘á»™ vani (Ä‘Æ¡n giản) thì ngÆ°á»i dùng không tÆ°Æ¡ng tác."
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "CẢNH BÃO : Không chịu nghe theo tùy chá»n lÆ°u trữ không là văn bản."
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "Không có tập tin nhập"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "Cách sá»­ dụng tùy chá»n « -a » phải cÅ©ng nhập « -n »."
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "Cách sá»­ dụng tùy chá»n « -l » hay « -L » phải cÅ©ng nhập « -o »."
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr ""
+"• Quan trá»ng là bạn không shar kiểu « -X » trên Usenet (nhóm tin) hay mạng "
+"công. •"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "Má»›i giải nén xong má»i phần."
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "Äã tạo %d tập tin.\n"
+
+#: src/shar.c:2310
+#, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "x — đã gỡ bỠthư mục khóa « %s'\\' »."
+
+#: src/shar.c:2312
+#, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "x — việc gỡ bỠthư mục khóa « %s'\\' » bị lỗi."
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "Không tìm thấy lệnh vỠnào trong %s"
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s hình nhÆ° mã C thô, không phải kho vá»."
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "Sau lệnh « cut » (cắt) trong %s, chưa tìm lệnh vỠnào."
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "Rất có thể là %s không phải là kho vá»"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr "Dòng « cut » (cắt) có %s theo sau"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "Äang bắt đầu tiến trình « sh »..."
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"Tất cả đối số bắt buá»™c phải sá»­ dụng vá»›i tùy chá»n dài cÅ©ng bắt buá»™c vá»›i tùy "
+"chá»n ngắn.\n"
+"\n"
+" -d, --directory=THƯ_MỤC \tchuyển đổi sang _THƯ MỤC_ trước khi giải nén\n"
+" -c, --overwrite chuyển tùy chá»n « -c » sang tập lệnh shar để "
+"_ghi đè_ tập tin\n"
+" -e, --exit-0 bằng « --split-at=\"exit 0\" »\n"
+" -E, --split-at=CHUỖI _chia tách_ các shar nối nhau sau CHUỖI\n"
+" -f, --force \tbằng « -c » (_ép buộc_)\n"
+" --help \thiển thị _trợ giúp_ này rồi thoát\n"
+" --version \txuất thông tin _phiên bản_ rồi thoát\n"
+"\n"
+"Nếu không có TẬP TIN nào thì sẽ Ä‘á»c thiết bị nhập chuẩn.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "Không thể chdir (chuyển đổi thư mục) sang « %s »"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr "cấp phát bộ đệm tên tập tin"
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "thiết bị nhập chuẩn"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr "cấp phát bộ đệm tập tin"
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: lá»—i ghi"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: tập tin ngắn"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: không có dòng « end » (kết thúc)"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: có dữ liệu theo ký tự đệm « = »"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: không cho phép dòng này"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: không có dòng « begin » (bắt đầu) nào"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: không cho phép « ~user » (ngÆ°á»i dùng) này"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: không có ngÆ°á»i dùng « %s »"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "không thể truy cập %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "việc ghi FIFO (nhập trước, xuất trước) bị từ chối (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "không theo liên kết tượng trưng (%s)"
+
+#: src/uudecode.c:408
+#, c-format
+msgid "freopen of %s"
+msgstr "việc freopen %s"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr "việc chmod (thay đổi chế độ) %s"
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "Cách sử dụng: %s [TẬP_TIN]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"Tất cả đối số bắt buá»™c phải sá»­ dụng vá»›i tùy chá»n dài cÅ©ng bắt buá»™c vá»›i tùy "
+"chá»n ngắn.\n"
+" -o, --output-file=TẬP_TIN hướng _xuất_ ra _TẬP TIN_\n"
+" --help hiển thị _trợ giúp_ này rồi thoát\n"
+" --version xuất thông tin _phiên bản_ rồi thoát\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "Lá»—i ghi"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Lá»—i Ä‘á»c"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr ""
+"Cách sử dụng: %s [TTN] TTX\n"
+"[TTN\t\ttập tin nhập\n"
+"TTX\t\ttập tin từ xa]\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 sử dụng mã hóa _cơ số 64_ như theo RFC1521\n"
+" --help hiển thị _trợ giúp_ này rồi thoát\n"
+" --version xuất thông tin _phiên bản_ rồi thoát\n"
+
+#: src/uuencode.c:276
+#, c-format
+msgid "fopen-ing %s"
+msgstr "Äang fopen (mở f) %s..."
+
+#: src/uuencode.c:278
+#, c-format
+msgid "fstat-ing %s"
+msgstr "Äang fstat (lấy các thông tin f) %s..."
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644
index 0000000..904d81d
--- /dev/null
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..e5e689f
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,965 @@
+# Translation of `sharutils' messages to Chinese (traditional).
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Yuan-Chen Cheng <ycheng@sinica.edu.tw>, 2002
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sharutils 4.3.73\n"
+"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n"
+"POT-Creation-Date: 2007-07-01 04:57-0700\n"
+"PO-Revision-Date: 2002-08-03 20:13 +8\n"
+"Last-Translator: Yuan-Chen Cheng <ycheng@sinica.edu.tw>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=Big5\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/error.c:131 lib/error.c:159
+msgid "Unknown system error"
+msgstr "¥¼ª¾ªº¨t²Î¿ù»~"
+
+#: lib/getopt.c:694
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s¡G¿ï¶µ `%s' ¬O¤£©ú½Tªº\n"
+
+#: lib/getopt.c:719
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s¡G¿ï¶µ `--%s' ¤£¤¹³\¤@­Ó°Ñ¼Æ\n"
+
+#: lib/getopt.c:724
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s¡G¿ï¶µ `%c%s' ¤£¤¹³\¤@­Ó°Ñ¼Æ\n"
+
+#: lib/getopt.c:742 lib/getopt.c:915
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s¡G¿ï¶µ`%s' »Ý­n¤@­Ó°Ñ¼Æ\n"
+
+#: lib/getopt.c:771
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s¡GµLªk¿ë»{¿ï¶µ `--%s'\n"
+
+#: lib/getopt.c:775
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s¡GµLªk¿ë»{ªº¿ï¶µ `%c%s'\n"
+
+#: lib/getopt.c:801
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s¡G«Dªkªº¿ï¶µ -- %c\n"
+
+#: lib/getopt.c:804
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s¡GµL®Äªº¿ï¶µ -- %c\n"
+
+#: lib/getopt.c:834 lib/getopt.c:964
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s¡G¿ï¶µ»Ý­n¤@­Ó°Ñ¼Æ -- %c\n"
+
+#: lib/getopt.c:881
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s¡G¿ï¶µ `-W %s' ¬O¤£©ú½Tªº\n"
+
+#: lib/getopt.c:899
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s¡G¿ï¶µ `-W %s' ¤£¤¹³\¤@­Ó°Ñ¼Æ\n"
+
+#: lib/xmalloc.c:67
+msgid "memory exhausted"
+msgstr "°O¾Ð¥ÎºÉ"
+
+#: src/shar.c:608
+#, fuzzy
+msgid "Note: not verifying md5sums. Consider installing GNU coreutils."
+msgstr "ĵ§i¡G¤£«ì´_ timestamps¡C¦Ò¼{®³µ¹©M"
+
+#: src/shar.c:643
+msgid "WARNING: not restoring timestamps. Consider getting and"
+msgstr "ĵ§i¡G¤£«ì´_ timestamps¡C¦Ò¼{®³µ¹©M"
+
+#: src/shar.c:645
+#, fuzzy
+msgid "installing GNU `touch'\\'', distributed in GNU coreutils..."
+msgstr "¦w¸Ëªº GNU \\`touch'¡A¤À¥¬¦bGNUÀɮפu¨ã¸Ì­±..."
+
+#: src/shar.c:652
+msgid "lock directory '${lock_dir}' exists"
+msgstr ""
+
+#: src/shar.c:657
+#, fuzzy
+msgid "failed to create lock directory"
+msgstr "µLªk«Ø¥ßÂê¤Wªº¥Ø¿ý"
+
+#: src/shar.c:661
+#, fuzzy, c-format
+msgid "x - created lock directory `'%s\\''."
+msgstr "µLªk«Ø¥ßÂê¤Wªº¥Ø¿ý"
+
+#: src/shar.c:663
+#, fuzzy, c-format
+msgid "x - failed to create lock directory `'%s\\''."
+msgstr "µLªk«Ø¥ßÂê¤Wªº¥Ø¿ý"
+
+#: src/shar.c:671
+msgid "yes"
+msgstr ""
+
+#: src/shar.c:671
+#, fuzzy
+msgid "overwrite this file"
+msgstr "§ï¼g"
+
+#: src/shar.c:672
+msgid "no"
+msgstr ""
+
+#: src/shar.c:672
+msgid "skip this file"
+msgstr ""
+
+#: src/shar.c:673
+msgid "all"
+msgstr ""
+
+#: src/shar.c:673
+#, fuzzy
+msgid "overwrite all files"
+msgstr "§ï¼g"
+
+#: src/shar.c:674
+msgid "none"
+msgstr ""
+
+#: src/shar.c:674
+#, fuzzy
+msgid "overwrite no files"
+msgstr "§ï¼g"
+
+#: src/shar.c:675
+msgid "help"
+msgstr ""
+
+#: src/shar.c:675
+msgid "explain choices"
+msgstr ""
+
+#: src/shar.c:676
+msgid "quit"
+msgstr ""
+
+#: src/shar.c:676
+msgid "exit immediately"
+msgstr ""
+
+#: src/shar.c:718
+msgid "Too many directories for mkdir generation"
+msgstr "¹ïmkdir¨Ó»¡¤Ó¦hªº¥Ø¿ý­n²£¥Í"
+
+#: src/shar.c:737
+#, fuzzy, c-format
+msgid "x - created directory `%s'\\''."
+msgstr "µLªk«Ø¥ßÂê¤Wªº¥Ø¿ý"
+
+#: src/shar.c:739
+#, fuzzy, c-format
+msgid "x - failed to create directory `%s'\\''."
+msgstr "µLªk«Ø¥ßÂê¤Wªº¥Ø¿ý"
+
+#: src/shar.c:806 src/shar.c:1057
+#, c-format
+msgid "Cannot access %s"
+msgstr "¤£¯à¦s¨ú %s"
+
+#: src/shar.c:860
+msgid "-C is being deprecated, use -Z instead"
+msgstr "-C ³Q«Å§i¬°¤£¾A¥Î¡A¨Ï¥Î -Z ¥N´À"
+
+#: src/shar.c:901 src/unshar.c:379
+msgid "Cannot get current directory name"
+msgstr "¤£¯à±o¨ì¥Ø«e¤l¥Ø¿ý¦W¦r"
+
+#: src/shar.c:965
+msgid ""
+"Archives must be unpacked in sequence!\n"
+"Please unpack part '`cat ${lock_dir}/seq`' next."
+msgstr ""
+
+#: src/shar.c:976 src/shar.c:1383
+#, c-format
+msgid "New file, remaining %s, "
+msgstr "·sÀɮסAÁÙ¦³%s, "
+
+#: src/shar.c:977 src/shar.c:1384
+#, c-format
+msgid "Limit still %s\n"
+msgstr "­­«×¤´¦³ %s\n"
+
+#: src/shar.c:983 src/shar.c:1558 src/shar.c:1574
+#, fuzzy, c-format
+msgid "restore of %s failed"
+msgstr "«ì´_ªº"
+
+#: src/shar.c:987
+#, fuzzy, c-format
+msgid "End of part %d, continue with part %d"
+msgstr "¥H³¡¤À±µÄò"
+
+#: src/shar.c:1001 src/shar.c:1477
+#, c-format
+msgid "Starting file %s\n"
+msgstr "¶}©lÀÉ®× %s\n"
+
+#: src/shar.c:1052
+#, c-format
+msgid "%s: Not a regular file"
+msgstr "%s¡G¤£¬O¤@­Ó¥¿±`ªºÀÉ®×"
+
+#: src/shar.c:1067
+#, c-format
+msgid "In shar: remaining size %s\n"
+msgstr "¦b shar¡G«O«ù¤j¤p %s\n"
+
+#: src/shar.c:1086
+msgid "empty"
+msgstr "ªÅªº"
+
+#: src/shar.c:1087
+msgid "(empty)"
+msgstr "(ªÅªº)"
+
+#: src/shar.c:1111
+#, c-format
+msgid "Cannot open file %s"
+msgstr "¤£¯à¥´¶}ÀÉ®× %s"
+
+#: src/shar.c:1148
+msgid "compressed"
+msgstr "À£ÁYªº"
+
+#: src/shar.c:1149
+msgid "gzipped"
+msgstr "gzipÀ£ÁYªº"
+
+#: src/shar.c:1150
+#, fuzzy
+msgid "bzipped"
+msgstr "gzipÀ£ÁYªº"
+
+#: src/shar.c:1151
+msgid "binary"
+msgstr "¤G¶i¦ì"
+
+#: src/shar.c:1152
+msgid "(compressed)"
+msgstr "(À£ÁY)"
+
+#: src/shar.c:1153
+msgid "(gzipped)"
+msgstr "(gzipÀ£ÁYªº)"
+
+#: src/shar.c:1154
+#, fuzzy
+msgid "(bzipped)"
+msgstr "(gzipÀ£ÁYªº)"
+
+#: src/shar.c:1155
+msgid "(binary)"
+msgstr "(¤G¶i¦ì)"
+
+#: src/shar.c:1168
+msgid "Could not fork"
+msgstr "¤£¯à fork"
+
+#: src/shar.c:1173 src/shar.c:1233
+#, c-format
+msgid "File %s (%s)"
+msgstr "ÀÉ®× %s (%s)"
+
+#: src/shar.c:1227
+msgid "text"
+msgstr "¤å¥»"
+
+#: src/shar.c:1228
+msgid "(text)"
+msgstr "(¤å¥»)"
+
+#: src/shar.c:1251
+#, fuzzy, c-format
+msgid "overwriting %s"
+msgstr "§ï¼g"
+
+#: src/shar.c:1253
+#, fuzzy, c-format
+msgid "overwrite %s"
+msgstr "§ï¼g"
+
+#: src/shar.c:1257
+#, fuzzy, c-format
+msgid "SKIPPING %s"
+msgstr "²¤¹L"
+
+#: src/shar.c:1258
+msgid "extraction aborted"
+msgstr "©ñ±ó¨ú¥X"
+
+#: src/shar.c:1262
+#, fuzzy, c-format
+msgid "SKIPPING %s (file already exists)"
+msgstr "(Àɮפw¸g¦s¦b)"
+
+#: src/shar.c:1272
+#, c-format
+msgid "Saving %s (%s)"
+msgstr "Àx¦s %s (%s)"
+
+#: src/shar.c:1276
+#, fuzzy, c-format
+msgid "x - extracting %s %s"
+msgstr "¨ú¥X"
+
+#: src/shar.c:1392
+#, fuzzy, c-format
+msgid "restore of %s failed\n"
+msgstr "«ì´_ªº"
+
+#: src/shar.c:1401
+#, fuzzy, c-format
+msgid "End of part %ld, continue with part %ld"
+msgstr "¥H³¡¤À±µÄò"
+
+#: src/shar.c:1407
+#, fuzzy, c-format
+msgid "End of %s part %d"
+msgstr "³¡¤Àªº²×ÂI"
+
+#: src/shar.c:1408
+msgid "archive"
+msgstr "¦sÀÉ"
+
+#: src/shar.c:1412
+#, fuzzy, c-format
+msgid "File %s is continued in part %d"
+msgstr "±µÄò¦b³¡¥÷"
+
+#: src/shar.c:1456
+msgid "Please unpack part 1 first!"
+msgstr "½Ð¥ý¸Ñ¶}³¡¤À 1¡I"
+
+#: src/shar.c:1460
+#, fuzzy
+msgid "Please unpack part '${shar_sequence}' next!"
+msgstr "½Ð¥ý¸Ñ¶}³¡¤À 1¡I"
+
+#: src/shar.c:1471
+#, fuzzy, c-format
+msgid "STILL SKIPPING %s"
+msgstr "¤´¬O²¤¹L"
+
+#: src/shar.c:1479
+#, fuzzy, c-format
+msgid "continuing file %s"
+msgstr "Ä~ÄòÀÉ®×"
+
+#: src/shar.c:1497
+#, fuzzy, c-format
+msgid "File %s is complete"
+msgstr "¬O§¹¥þªº"
+
+#: src/shar.c:1504
+#, fuzzy, c-format
+msgid "uudecoding file %s"
+msgstr "¸Ñ¶}ÀÉ®×"
+
+#: src/shar.c:1514
+#, fuzzy, c-format
+msgid "uncompressing file %s"
+msgstr "¸ÑÀ£ÁYÀÉ®×"
+
+#: src/shar.c:1522
+#, fuzzy, c-format
+msgid "gunzipping file %s"
+msgstr "gzip¸ÑÀ£ÁYÀÉ®×"
+
+#: src/shar.c:1530
+#, fuzzy, c-format
+msgid "bunzipping file %s"
+msgstr "gzip¸ÑÀ£ÁYÀÉ®×"
+
+#: src/shar.c:1585
+msgid "MD5 check failed"
+msgstr "MD5 Àˬd¥¢±Ñ"
+
+#: src/shar.c:1641
+#, c-format
+msgid "'restoration warning: size of %s is not %s'\n"
+msgstr ""
+
+#: src/shar.c:1693
+msgid "allocating output file name"
+msgstr ""
+
+#: src/shar.c:1699
+#, c-format
+msgid "Opening `%s'"
+msgstr "¥´¶} `%s'"
+
+#: src/shar.c:1710
+#, c-format
+msgid "Closing `%s'"
+msgstr "Ãö³¬ `%s'"
+
+#: src/shar.c:1722 src/unshar.c:315 src/uudecode.c:442 src/uuencode.c:205
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "¹Á¸Õ `%s --help' ¥HŪ¨ú§ó¦h¸ê°T.\n"
+
+#: src/shar.c:1726 src/unshar.c:319
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]...\n"
+msgstr "¨Ï¥Î¡G%s [°Ñ¼Æ] ¡C¡C¡C[ÀÉ®×]¡C¡C¡C\n"
+
+#: src/shar.c:1727
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr "¹ïªø«¬ªº¿ï¶µ©Ò´£¨Ñªº°Ñ¼Æ®æ¦¡»P¹ïµu¦æªº¿ï¶µ¤@¼Ë¡C\n"
+
+#: src/shar.c:1730
+msgid ""
+"\n"
+"Giving feedback:\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+" -q, --quiet, --silent do not output verbose messages locally\n"
+msgstr ""
+"\n"
+"´£¨Ñ¦^õX:\n"
+" --help Åã¥Ü¥»­¶¨D§U¸ê°T«áÂ÷¶}\n"
+" --version ¿é¥Xª©¥»¸ê°T«áÂ÷¶}\n"
+" -q, --quiet, --silent ¿é¥X¸û¤Öªº°T®§\n"
+
+#: src/shar.c:1738
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"¿ï¾ÜÀÉ®×:\n"
+" -p, --intermix-type ¦bÀɮײM³æ¤¤¤¹³\¨Ï¥Î -[BTzZ] ¨Ó§ï«K¼Ò¦¡\n"
+" -S, --stdin-file-list ¥Ñ¼Ð·Ç¿é¤JŪ¨úÀɮײM³æ\n"
+
+#: src/shar.c:1745
+#, fuzzy
+msgid ""
+"\n"
+"Selecting files:\n"
+" -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+" -S, --stdin-file-list read file list from standard input\n"
+msgstr ""
+"\n"
+"¿ï¾ÜÀÉ®×:\n"
+" -p, --intermix-type ¦bÀɮײM³æ¤¤¤¹³\¨Ï¥Î -[BTzZ] ¨Ó§ï«K¼Ò¦¡\n"
+" -S, --stdin-file-list ¥Ñ¼Ð·Ç¿é¤JŪ¨úÀɮײM³æ\n"
+
+#: src/shar.c:1752
+msgid ""
+"\n"
+"Splitting output:\n"
+" -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n"
+" -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"
+msgstr ""
+"\n"
+"¤Á¶}¿é¥X:\n"
+" -o, --output-prefix=PREFIX Àɮ׿é¥X¥ÑÀÉ®× PREFIX.01 ¨ì PREFIX.NN\n"
+" -l, --whole-size-limit=SIZE ±N archive, «DÀÉ®×, ¨ì SIZE ¤d bytes\n"
+" -L, --split-size-limit=SIZE ±N archive, ©ÎÀÉ®×, ¨ì SIZE ¤d bytes\n"
+
+#: src/shar.c:1759
+#, fuzzy
+msgid ""
+"\n"
+"Controlling the shar headers:\n"
+" -n, --archive-name=NAME use NAME to document the archive\n"
+" -s, --submitter=ADDRESS override the submitter name\n"
+" -a, --net-headers output Submitted-by: & Archive-name: headers\n"
+" -c, --cut-mark start the shar with a cut line\n"
+" -t, --translate translate messages in the script\n"
+"\n"
+"Selecting how files are stocked:\n"
+" -M, --mixed-uuencode dynamically decide uuencoding (default)\n"
+" -T, --text-files treat all files as text\n"
+" -B, --uuencode treat all files as binary, use uuencode\n"
+" -z, --gzip gzip and uuencode all files\n"
+" -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n"
+" -j, --bzip2 bzip2 and uuencode all files\n"
+msgstr ""
+"\n"
+"±±¨î shar ¼ÐÀY:\n"
+" -n, --archive-name=NAME ¨Ï¥Î NAME ¨Ó±Ô­z¸ÓÀÉ®×Âd\n"
+" -s, --submitter=ADDRESS Âмg´£¥æªÌ¦WºÙ\n"
+" -a, --net-headers ¿é¥X´£¥æªÌ¤è¦¡: & ÀÉ®×Âd¦WºÙ: ¼ÐÀY\n"
+" -c, --cut-mark ¨Ï¥Î¤@­Ó cut ¦æ¨Ó¶}©l shar\n"
+"\n"
+"¿ï¾ÜÀÉ®×°ïÅ|ªº¤è¦¡:\n"
+" -M, --mixed-uuencode °ÊºA¨M©w½s½X¤è¦¡ (¹w³])\n"
+" -T, --text-files ±N©Ò¦³ÀÉ®×·í§@¤å¦rÀɳB²z\n"
+" -B, --uuencode ±N©Ò¦³ÀɮרϥΤG¶i¦ìÀÉ¡A¨Ï¥Î uuencode\n"
+" -z, --gzip gzip À£ÁY¨Ã uuencode ½s½X©Ò¦³ªºÀÉ®×\n"
+" -g, --level-for-gzip=LEVEL ±NÀ£ÁY¤ñ -LEVEL (¹w³]¬O 9) µ¹ gzipÀ£ÁYµ{¦¡\n"
+
+#: src/shar.c:1777
+msgid ""
+" -Z, --compress compress and uuencode all files\n"
+" -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"
+msgstr ""
+" -Z, --compress ±N©Ò¦³ÀÉ®× compress ¨Ã uuencode\n"
+" -b, --bits-per-code=BITS ±N°Ñ¼Æ -bBITS (¹w³] 12) µ¹ compress\n"
+
+#: src/shar.c:1782
+msgid ""
+"\n"
+"Protecting against transmission:\n"
+" -w, --no-character-count do not use `wc -c' to check size\n"
+" -D, --no-md5-digest do not use `md5sum' digest to verify\n"
+" -F, --force-prefix force the prefix character on every line\n"
+" -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n"
+"\n"
+"Producing different kinds of shars:\n"
+" -V, --vanilla-operation produce very simple and undemanding shars\n"
+" -P, --no-piping exclusively use temporary files at unshar time\n"
+" -x, --no-check-existing blindly overwrite existing files\n"
+" -X, --query-user ask user before overwriting files (not for Net)\n"
+" -m, --no-timestamp do not restore file modification dates & times\n"
+" -Q, --quiet-unshar avoid verbose messages at unshar time\n"
+" -f, --basename restore in one directory, despite hierarchy\n"
+" --no-i18n do not produce internationalized shell script\n"
+msgstr ""
+"\n"
+"¦bÂà´«¹Lµ{¤¤ªº«OÅ@:\n"
+" -w, --no-character-count ¤£¨Ï¥Î `wc -c' ¨ÓÀˬd¤j¤p\n"
+" -D, --no-md5-digest ¤£¨Ï¥Î `md5sum' ºK­n¨Ó½T»{\n"
+" -F, --force-prefix ±j­¢¦b¨C¤@¦æ«e­±¥[¦r¤¸\n"
+" -d, --here-delimiter=STRING ¨Ï¥Î STRING ¦b shar ¸Ì­±°µ¬°Àɮתº¤À¹j\n"
+"\n"
+"²£¥Í¤£¦PºØÃþªº shar:\n"
+" -V, --vanilla-operation ²£¥Í«D±`²³æ¥B¹ïÀô¹Ò­n¨D¤£°ªªºªº shar\n"
+" -P, --no-piping ¦b shar ®i¶}®É¨Ï¥Î¼È¦sÀÉ\n"
+" -x, --no-check-existing ¤£Àˬd¦aÂмg²{¦³ÀÉ®×\n"
+" -X, --query-user ¦bÂмgÀɮ׫e¸ß°Ý¨Ï¥ÎªÌ («D¬° Net ³]­p)\n"
+" -m, --no-timestamp ¨Ã¤£¦^´_Àɮתº­×§ï¤é´Á»P®É¶¡\n"
+" -Q, --quiet-unshar ¦b¸Ñ¶} shar ®ÉÁקKÅã¥Ü¥X¸Ô²Óªº°T®§\n"
+" -f, --basename ¤£ºÞ­ì¦³ªº¥Ø¿ýµ²ºc¡A¦b¤@­Ó¥Ø¿ý¤U¦^¦sÀÉ®×\n"
+" --no-i18n ¤£²£¥Í°ê»Ú¤Æªº shell µ{¦¡\n"
+
+#: src/shar.c:1800
+msgid ""
+"\n"
+"Option -o is required with -l or -L, option -n is required with -a.\n"
+msgstr ""
+"\n"
+"¨Ï¥Î -l ©Î -L ®É»Ý­n¥[ -o °Ñ¼Æ¡A¨Ï¥Î -a °Ñ¼Æ®É»Ý­n -n °Ñ¼Æ¡C\n"
+
+#: src/shar.c:1804
+msgid "Option -g implies -z, option -b implies -Z.\n"
+msgstr "°Ñ¼Æ -g ¥]¨ç -z, °Ñ¼Æ -b ¥]§t -Z.\n"
+
+#: src/shar.c:1807
+msgid "Option -g implies -z.\n"
+msgstr "°Ñ¼Æ -g ¥]¨ç -z.\n"
+
+#. TRANSLATORS: add the contact address for your translation team!
+#: src/shar.c:1811 src/unshar.c:334 src/uudecode.c:453 src/uuencode.c:215
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "±Nµ{¦¡¿ù»~³ø§i°e¨ì <%s>, ½Ķ¿ù»~³ø§i°e¨ì zh-l10n@linux.org.tw.\n"
+
+#: src/shar.c:1869
+#, c-format
+msgid "invalid file size limit `%s'"
+msgstr ""
+
+#: src/shar.c:1905
+#, c-format
+msgid "invalid format (count field too wide): '%s'\n"
+msgstr ""
+
+#: src/shar.c:1966
+msgid "DEBUG was not selected at compile time"
+msgstr "°£¿ù¿ï¶µ¦b½sĶ®É¨S¦³³Q¿ï¾Ü"
+
+#: src/shar.c:1986
+#, c-format
+msgid "Hard limit %s\n"
+msgstr "±jªº­­«× %s\n"
+
+#: src/shar.c:2028
+msgid "This system doesn't support -Z ('compress'), use -z instead"
+msgstr "¦¹¨t²Î¤£¤ä´© -Z ('compress'), ½Ð§ï¥Î -z"
+
+#: src/shar.c:2061
+#, c-format
+msgid "Soft limit %s\n"
+msgstr "®zªº­­«× %s\n"
+
+#: src/shar.c:2076
+#, c-format
+msgid "illegal output prefix\n"
+msgstr ""
+
+#: src/shar.c:2123 src/unshar.c:417 src/uudecode.c:491 src/uuencode.c:255
+#, fuzzy, c-format, no-wrap
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"ª©Åv©Ò¦³ (C) %s ¦Û¥Ñ³nÅé°òª÷·|\n"
+"³o¬O¤@­Ó¦Û¥Ñ³nÅé; Ãö©ó½Æ¨î±ø¥ó½Ð¾\Ū·½½X. ¨S¦³¾á«O;\n"
+"¦ý¤£¥]§t´N¾A°â©Ê¥H¤Î¯S©w¥Øªºªº¾A¥Î©Ê.\n"
+
+#: src/shar.c:2170
+msgid "WARNING: No user interaction in vanilla mode"
+msgstr "ĵ§i: ¦b²©ö¼Ò¦¡¤¤¤£¤ä´©¨Ï¥ÎªÌ¤¬°Ê"
+
+#: src/shar.c:2182
+msgid "WARNING: Non-text storage options overridden"
+msgstr "ĵ§i: «D¤å¦rÀx¦s°Ñ¼ÆÂмg"
+
+#: src/shar.c:2238
+msgid "No input files"
+msgstr "¨S¦³¿é¤JªºÀÉ®×"
+
+#: src/shar.c:2244
+msgid "Cannot use -a option without -n"
+msgstr "¤£¯à¨Ï¥Î -a ¿ï¶µ¦Ó¨S¦³ -n"
+
+#: src/shar.c:2250
+msgid "Cannot use -l or -L option without -o"
+msgstr "¤£¯à¨Ï¥Î -l ©Î -L ¿ï¶µ¦Ó¨S¦³ -o"
+
+#: src/shar.c:2262
+msgid "PLEASE avoid -X shars on Usenet or public networks"
+msgstr "½ÐÁקK -X shars ¤W Usenet ©Î¤½¥Îºô¸ô"
+
+#: src/shar.c:2303
+msgid "You have unpacked the last part"
+msgstr "§A¤w¸g¸Ñ¶}³Ì«á³¡¤À"
+
+#: src/shar.c:2305
+#, c-format
+msgid "Created %d files\n"
+msgstr "«Ø¥ß %d ÀÉ®×\n"
+
+#: src/shar.c:2310
+#, fuzzy, c-format
+msgid "x - removed lock directory `'%s\\''."
+msgstr "µLªk«Ø¥ßÂê¤Wªº¥Ø¿ý"
+
+#: src/shar.c:2312
+#, fuzzy, c-format
+msgid "x - failed to remove lock directory `'%s\\''."
+msgstr "µLªk«Ø¥ßÂê¤Wªº¥Ø¿ý"
+
+#: src/unshar.c:171
+#, c-format
+msgid "Found no shell commands in %s"
+msgstr "§ä¤£¨ì shell ©R¥O¡A¦b %s "
+
+#: src/unshar.c:187
+#, c-format
+msgid "%s looks like raw C code, not a shell archive"
+msgstr "%s¬Ý°_¨Ó¹³­ì©lªº C µ{¦¡½X¡A¤£¤@­Ó Shell Àɮק¨"
+
+#: src/unshar.c:223
+#, c-format
+msgid "Found no shell commands after `cut' in %s"
+msgstr "¦b %s ¸Ì­±ªº `cut' ¤§«á§ä¤£¨ì shell ©R¥O"
+
+#: src/unshar.c:244
+#, c-format
+msgid "%s is probably not a shell archive"
+msgstr "%s ¥i¯à¤£¬O¤@­Ó shell Àɮק¨"
+
+#: src/unshar.c:245
+#, c-format
+msgid "The `cut' line was followed by: %s"
+msgstr " `cut' ©Ò¦b¨º¤@¦æ¦b: %s ¤§«á"
+
+#: src/unshar.c:271
+msgid "Starting `sh' process"
+msgstr "±Ò°Ê `sh' µ{§Ç"
+
+#: src/unshar.c:320
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"\n"
+" -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n"
+" -c, --overwrite pass -c to shar script for overwriting files\n"
+" -e, --exit-0 same as `--split-at=\"exit 0\"'\n"
+" -E, --split-at=STRING split concatenated shars after STRING\n"
+" -f, --force same as `-c'\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+"\n"
+"If no FILE, standard input is read.\n"
+msgstr ""
+"¹ïªø«¬ªº¿ï¶µ©Ò´£¨Ñªº°Ñ¼Æ®æ¦¡»P¹ïµu¦æªº¿ï¶µ¤@¼Ë\n"
+"\n"
+" -d, --directory=DIRECTORY ¦b¸Ñ¶}«e§ïÅܥؿý¨ì DIRECTORY\n"
+" -c, --overwrite ±N -c ¶Çµ¹ shar ÀÉ®×Âd¨Ó³]©wÂмgÀÉ®×\n"
+" -e, --exit-0 »P `--split-at=\"exit 0\"' ¬Û¦P\n"
+" -E, --split-at=STRING ¦b STRING ¤§«á¤À³Î¦X¨Ö¹Lªº shar\n"
+" -f, --force »P `-c' ¬Û¦P\n"
+" --help Åã¥Ü¥»­¶¸ê°T«áÂ÷¶}\n"
+" --version Åã¥Üª©¥»¸ê°T«áÂ÷¶}\n"
+"\n"
+"¦pªG¨S¦³ FILE, ¥Ñ¼Ð·Ç¿é¤JŪ¤J.\n"
+
+#: src/unshar.c:397
+#, c-format
+msgid "Cannot chdir to `%s'"
+msgstr "µLªk¤Á¤J¥Ø¿ý `%s'"
+
+#: src/unshar.c:448 src/unshar.c:510
+msgid "allocate file name buffer"
+msgstr ""
+
+#: src/unshar.c:469
+msgid "standard input"
+msgstr "¼Ð·Ç¿é¤J"
+
+#: src/unshar.c:531
+msgid "allocate file buffer"
+msgstr ""
+
+#: src/uudecode.c:126 src/uudecode.c:430
+#, c-format
+msgid "%s: Write error"
+msgstr "%s: ¼g¥X¿ù»~"
+
+#: src/uudecode.c:144 src/uudecode.c:232
+#, c-format
+msgid "%s: Short file"
+msgstr "%s: µuÀÉ®×"
+
+#: src/uudecode.c:180
+#, c-format
+msgid "%s: No `end' line"
+msgstr "%s: ¨S¦³ `end' ¨º¤@¦æ"
+
+#: src/uudecode.c:241
+#, c-format
+msgid "%s: data following `=' padding character"
+msgstr "%s: ¸ê®Æ¸òÀH¦b `=' ³o­Ó¶ñ¥R¦r¤¸¤§«á"
+
+#: src/uudecode.c:265 src/uudecode.c:273 src/uudecode.c:287
+#, c-format
+msgid "%s: illegal line"
+msgstr "%s: «Dªkªº¤@¦æ"
+
+#: src/uudecode.c:327
+#, c-format
+msgid "%s: No `begin' line"
+msgstr "%s: ¦b¸Ó¦æ¤º¨S¦³ `begin'"
+
+#: src/uudecode.c:359
+#, c-format
+msgid "%s: Illegal ~user"
+msgstr "%s: «Dªk¨Ï¥ÎªÌ ~user"
+
+#: src/uudecode.c:366
+#, c-format
+msgid "%s: No user `%s'"
+msgstr "%s: ¤£¦s¦b¨Ï¥ÎªÌ `%s'"
+
+#: src/uudecode.c:390
+#, c-format
+msgid "cannot access %s"
+msgstr "¤£¯à¦s¨ú %s"
+
+#: src/uudecode.c:395
+#, c-format
+msgid "denied writing FIFO (%s)"
+msgstr "©Úµ´¼g¥X FIFO (%s)"
+
+#: src/uudecode.c:400
+#, c-format
+msgid "not following symlink (%s)"
+msgstr "¨Ã¤£¸òÀH symlink (%s)"
+
+#: src/uudecode.c:408
+#, fuzzy, c-format
+msgid "freopen of %s"
+msgstr "¥´¶} `%s'"
+
+#: src/uudecode.c:414
+#, c-format
+msgid "chmod of %s"
+msgstr ""
+
+#: src/uudecode.c:446
+#, c-format
+msgid "Usage: %s [FILE]...\n"
+msgstr "¨Ï¥Î¤èªk¡G%s [ÀÉ®×]...\n"
+
+#: src/uudecode.c:447
+msgid ""
+"Mandatory arguments to long options are mandatory to short options too.\n"
+" -o, --output-file=FILE direct output to FILE\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"¹ïªø«¬ªº¿ï¶µ©Ò´£¨Ñªº°Ñ¼Æ®æ¦¡»P¹ïµu¦æªº¿ï¶µ¤@¼Ë¡C\n"
+" -o, --output-file=FILE ª½±µ¿é¥X¨ìÀÉ®× FILE\n"
+" --help Åã¥Ü¥»­¶¸ê°T«áÂ÷¶}\n"
+" --version ¿é¥Xª©¥»¸ê°T«áÂ÷¶}\n"
+
+#: src/uuencode.c:136 src/uuencode.c:304 src/uuencode.c:311
+msgid "Write error"
+msgstr "¼g¥X¿ù»~"
+
+#: src/uuencode.c:158 src/uuencode.c:189 src/uuencode.c:191
+msgid "Read error"
+msgstr "Ū¨ú¿ù»~"
+
+#: src/uuencode.c:209
+#, c-format
+msgid "Usage: %s [INFILE] REMOTEFILE\n"
+msgstr "¨Ï¥Î¤èªk:%s [¿é¤JÀÉ®×] »·ºÝÀÉ®×\n"
+
+#: src/uuencode.c:210
+msgid ""
+"\n"
+" -m, --base64 use base64 encoding as of RFC1521\n"
+" --help display this help and exit\n"
+" --version output version information and exit\n"
+msgstr ""
+"\n"
+" -m, --base64 ¨Ï¥Î base64 ½s½X¦p¦P RFC1521\n"
+" --help Åã¥Ü¥»­¶¨D§U¸ê°T«áÂ÷¶}\n"
+" --version ¿é¥Xª©¥»¸ê°T«áÂ÷¶}\n"
+
+#: src/uuencode.c:276
+#, fuzzy, c-format
+msgid "fopen-ing %s"
+msgstr "¥´¶} `%s'"
+
+#: src/uuencode.c:278
+#, fuzzy, c-format
+msgid "fstat-ing %s"
+msgstr "¶}©lÀÉ®× %s\n"
+
+#~ msgid "[no, yes, all, quit] (no)?"
+#~ msgstr "[no§_, yes¬O, all¥þ³¡, quitÂ÷¶}] (no)?"
+
+#~ msgid "Please unpack part"
+#~ msgstr "½Ð¸Ñ¶}³¡¤À"
+
+#~ msgid "next!"
+#~ msgstr "¤U¤@­Ó¡I"
+
+#~ msgid "File"
+#~ msgstr "ÀÉ®×"
+
+#~ msgid "original size"
+#~ msgstr "­ì¨Óªº¤j¤p"
+
+#~ msgid "current size"
+#~ msgstr "¥Ø«e¤j¤p"
+
+#~ msgid "Must unpack archives in sequence!"
+#~ msgstr "¥²¶·¨Ì·Ó¶¶§Ç¸Ñ¶}¸ê®ÆÀÉ¡I"
+
+#~ msgid "lock directory"
+#~ msgstr "Âê¤W¥Ø¿ý"
+
+#, fuzzy
+#~ msgid "created lock directory"
+#~ msgstr "Âê¤W¥Ø¿ý"
+
+#, fuzzy
+#~ msgid "created %s"
+#~ msgstr "¤w«Ø¥ß"
+
+#, fuzzy
+#~ msgid "could not create %s"
+#~ msgstr "µLªk«Ø¥ß"
+
+#~ msgid "restore of"
+#~ msgstr "«ì´_ªº"
+
+#~ msgid "failed"
+#~ msgstr "¥¢±Ñ"
+
+#~ msgid "removed"
+#~ msgstr "²¾°£"
+
+#~ msgid "failed to remove"
+#~ msgstr "²¾°£¥¢±Ñ"
+
+#~ msgid "continue with part"
+#~ msgstr "¥H³¡¤À±µÄò"
+
+#~ msgid "End of"
+#~ msgstr "µ²§ô"
+
+#~ msgid "part"
+#~ msgstr "³¡¤À"
+
+#~ msgid ""
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTz] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ msgstr ""
+#~ "¿ï¾ÜÀÉ®×:\n"
+#~ " -p, --intermix-type ¦bÀɮײM³æ¤¤¤¹³\¨Ï¥Î -[BTzZ] ¨Ó§ï«K¼Ò¦¡\n"
+#~ " -S, --stdin-file-list ¥Ñ¼Ð·Ç¿é¤JŪ¨úÀɮײM³æ\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Giving feedback:\n"
+#~ " --help display this help and exit\n"
+#~ " --version output version information and exit\n"
+#~ " -q, --quiet, --silent do not output verbose messages locally\n"
+#~ "\n"
+#~ "Selecting files:\n"
+#~ " -p, --intermix-type allow -[BTzZ] in file lists to change mode\n"
+#~ " -S, --stdin-file-list read file list from standard input\n"
+#~ "\n"
+#~ "Splitting output:\n"
+#~ " -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX."
+#~ "NN\n"
+#~ " -l, --whole-size-limit=SIZE split archive, not files, to SIZE "
+#~ "kilobytes\n"
+#~ " -L, --split-size-limit=SIZE split archive, or files, to SIZE "
+#~ "kilobytes\n"
+#~ msgstr ""
+#~ "\n"
+#~ "µ¹¤©¦^õX:\n"
+#~ " --help Åã¥Ü¥»­¶¸ê°T«áÂ÷¶}\n"
+#~ " --version ¿é¥Xª©¥»¸ê°T«áÂ÷¶}\n"
+#~ " -q, --quiet, --silent ¿é¥X¸ûºë²ªº¸ê°T\n"
+#~ "\n"
+#~ "¿ï¾ÜÀÉ®×:\n"
+#~ " -p, --intermix-type ¤¹³\Àɮפ¤ªº -[BTzZ] ¥H¤Á·|¼Ò¦¡\n"
+#~ " -S, --stdin-file-list ±q¼Ð·Ç¿é¤JŪ¨úÀÉ®×\n"
+#~ "\n"
+#~ "±N¿é¥XÀɮפÁ¶}:\n"
+#~ " -o, --output-prefix=PREFIX ¿é¥XÀÉ®×±q PREFIX.01 ¨ì PREFIX.NN\n"
+#~ " -l, --whole-size-limit=SIZE ¤Á¶}ÀÉ®×ÂdÀÉ, «DÀÉ®×, ¨ì¤j¤p SIZE KBytes\n"
+#~ " -L, --split-size-limit=SIZE ¤Á¶}ÀÉ®×ÂdÀÉ, ©ÎÀÉ®×, ¨ì¤j¤p SIZE KBytes\n"
+
+#~ msgid "creating directory"
+#~ msgstr "«Ø¥ß¥Ø¿ý"
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..154a9ea
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,64 @@
+## Makefile for program src directory in GNU Shar utilities package.
+##
+## Copyright (C) 1995, 1996, 2002, 2007 Free Software Foundation, Inc.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+## Process this file with automake to produce Makefile.in.
+
+bin_PROGRAMS = shar unshar
+if UUCODE
+ bin_PROGRAMS += uuencode uudecode
+endif
+bin_SCRIPTS = $(ADD_SCRIPT)
+EXTRA_SCRIPTS = compress-dummy mail-files mailshar remsync
+EXTRA_DIST = scripts.def scripts.tpl scripts.x
+
+DISTCLEANFILES = $(bin_SCRIPTS)
+
+localedir = $(datadir)/locale
+
+AM_CPPFLAGS = -I$(srcdir) -I.. -I$(top_srcdir)/lib -I../intl
+DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
+
+# stolen from fileutils-4.1.9:
+# Sometimes, the expansion of $(LIBINTL) includes -lc which may
+# include modules defining variables like `optind', so libfetish.a
+# must precede $(LIBINTL) in order to ensure we use GNU getopt.
+# But libshar.a must also follow $(LIBINTL), since libintl uses
+# replacement functions defined in libshar.a.
+LDADD = ../lib/libshar.a $(LIBINTL) ../lib/libshar.a
+
+# Source dependecies.
+shar_SOURCES = shar.c encode.c
+unshar_SOURCES = unshar.c encode.c
+uudecode_SOURCES = uudecode.c
+uuencode_SOURCES = uuencode.c
+
+all: exe-bits
+installcheck: exe-bits
+
+$(bin_PROGRAMS): ../lib/libshar.a
+
+install-exec-hook: $(INSTALL_COMPRESS_LINK)
+
+compress-link:
+ test -f $(DESTDIR)$(bindir)/compress-dummy \
+ && ln -sf compress-dummy $(DESTDIR)$(bindir)/compress
+
+exe-bits : $(bin_SCRIPTS)
+ chmod ugo+x $(bin_SCRIPTS)
+
+## src/Makefile.am ends here
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..b409c4c
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,607 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = shar$(EXEEXT) unshar$(EXEEXT) $(am__EXEEXT_1)
+@UUCODE_TRUE@am__append_1 = uuencode uudecode
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/compress-dummy.in $(srcdir)/mail-files.in \
+ $(srcdir)/mailshar.in $(srcdir)/remsync.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/realloc.m4 \
+ $(top_srcdir)/m4/sharutils.m4 $(top_srcdir)/m4/signed.m4 \
+ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrtoimax.m4 \
+ $(top_srcdir)/version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = remsync compress-dummy mail-files mailshar
+@UUCODE_TRUE@am__EXEEXT_1 = uuencode$(EXEEXT) uudecode$(EXEEXT)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_shar_OBJECTS = shar.$(OBJEXT) encode.$(OBJEXT)
+shar_OBJECTS = $(am_shar_OBJECTS)
+shar_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+shar_DEPENDENCIES = ../lib/libshar.a $(am__DEPENDENCIES_1) \
+ ../lib/libshar.a
+am_unshar_OBJECTS = unshar.$(OBJEXT) encode.$(OBJEXT)
+unshar_OBJECTS = $(am_unshar_OBJECTS)
+unshar_LDADD = $(LDADD)
+unshar_DEPENDENCIES = ../lib/libshar.a $(am__DEPENDENCIES_1) \
+ ../lib/libshar.a
+am_uudecode_OBJECTS = uudecode.$(OBJEXT)
+uudecode_OBJECTS = $(am_uudecode_OBJECTS)
+uudecode_LDADD = $(LDADD)
+uudecode_DEPENDENCIES = ../lib/libshar.a $(am__DEPENDENCIES_1) \
+ ../lib/libshar.a
+am_uuencode_OBJECTS = uuencode.$(OBJEXT)
+uuencode_OBJECTS = $(am_uuencode_OBJECTS)
+uuencode_LDADD = $(LDADD)
+uuencode_DEPENDENCIES = ../lib/libshar.a $(am__DEPENDENCIES_1) \
+ ../lib/libshar.a
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(shar_SOURCES) $(unshar_SOURCES) $(uudecode_SOURCES) \
+ $(uuencode_SOURCES)
+DIST_SOURCES = $(shar_SOURCES) $(unshar_SOURCES) $(uudecode_SOURCES) \
+ $(uuencode_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_SCRIPT = @ADD_SCRIPT@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMPRESS = @COMPRESS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
+DEPDIR = @DEPDIR@
+DIFF = @DIFF@
+DIRENT_HEADER = @DIRENT_HEADER@
+DIST_ALPHA = @DIST_ALPHA@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+INSTALL = @INSTALL@
+INSTALL_COMPRESS_LINK = @INSTALL_COMPRESS_LINK@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAILER = @MAILER@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SH = @SH@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TAR = @TAR@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = $(datadir)/locale
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+bin_SCRIPTS = $(ADD_SCRIPT)
+EXTRA_SCRIPTS = compress-dummy mail-files mailshar remsync
+EXTRA_DIST = scripts.def scripts.tpl scripts.x
+DISTCLEANFILES = $(bin_SCRIPTS)
+AM_CPPFLAGS = -I$(srcdir) -I.. -I$(top_srcdir)/lib -I../intl
+
+# stolen from fileutils-4.1.9:
+# Sometimes, the expansion of $(LIBINTL) includes -lc which may
+# include modules defining variables like `optind', so libfetish.a
+# must precede $(LIBINTL) in order to ensure we use GNU getopt.
+# But libshar.a must also follow $(LIBINTL), since libintl uses
+# replacement functions defined in libshar.a.
+LDADD = ../lib/libshar.a $(LIBINTL) ../lib/libshar.a
+
+# Source dependecies.
+shar_SOURCES = shar.c encode.c
+unshar_SOURCES = unshar.c encode.c
+uudecode_SOURCES = uudecode.c
+uuencode_SOURCES = uuencode.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnits src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+remsync: $(top_builddir)/config.status $(srcdir)/remsync.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+compress-dummy: $(top_builddir)/config.status $(srcdir)/compress-dummy.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+mail-files: $(top_builddir)/config.status $(srcdir)/mail-files.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+mailshar: $(top_builddir)/config.status $(srcdir)/mailshar.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+installcheck-binPROGRAMS: $(bin_PROGRAMS)
+ bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
+ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+ esac; \
+ f=`echo "$$p" | \
+ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ for opt in --help --version; do \
+ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+ 2>c$${pid}_.err </dev/null \
+ && test -n "`cat c$${pid}_.out`" \
+ && test -z "`cat c$${pid}_.err`"; then :; \
+ else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+ done; \
+ done; rm -f c$${pid}_.???; exit $$bad
+shar$(EXEEXT): $(shar_OBJECTS) $(shar_DEPENDENCIES)
+ @rm -f shar$(EXEEXT)
+ $(LINK) $(shar_OBJECTS) $(shar_LDADD) $(LIBS)
+unshar$(EXEEXT): $(unshar_OBJECTS) $(unshar_DEPENDENCIES)
+ @rm -f unshar$(EXEEXT)
+ $(LINK) $(unshar_OBJECTS) $(unshar_LDADD) $(LIBS)
+uudecode$(EXEEXT): $(uudecode_OBJECTS) $(uudecode_DEPENDENCIES)
+ @rm -f uudecode$(EXEEXT)
+ $(LINK) $(uudecode_OBJECTS) $(uudecode_LDADD) $(LIBS)
+uuencode$(EXEEXT): $(uuencode_OBJECTS) $(uuencode_DEPENDENCIES)
+ @rm -f uuencode$(EXEEXT)
+ $(LINK) $(uuencode_OBJECTS) $(uuencode_LDADD) $(LIBS)
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+installcheck-binSCRIPTS: $(bin_SCRIPTS)
+ bad=0; pid=$$$$; list="$(bin_SCRIPTS)"; for p in $$list; do \
+ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+ esac; \
+ f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \
+ for opt in --help --version; do \
+ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+ 2>c$${pid}_.err </dev/null \
+ && test -n "`cat c$${pid}_.out`" \
+ && test -z "`cat c$${pid}_.err`"; then :; \
+ else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+ done; \
+ done; rm -f c$${pid}_.???; exit $$bad
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encode.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unshar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uudecode.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uuencode.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am: installcheck-binPROGRAMS installcheck-binSCRIPTS
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS
+
+.MAKE: install-am install-exec-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic ctags distclean distclean-compile \
+ distclean-generic distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-binSCRIPTS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-exec-hook \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installcheck-binPROGRAMS installcheck-binSCRIPTS installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-binSCRIPTS
+
+
+all: exe-bits
+installcheck: exe-bits
+
+$(bin_PROGRAMS): ../lib/libshar.a
+
+install-exec-hook: $(INSTALL_COMPRESS_LINK)
+
+compress-link:
+ test -f $(DESTDIR)$(bindir)/compress-dummy \
+ && ln -sf compress-dummy $(DESTDIR)$(bindir)/compress
+
+exe-bits : $(bin_SCRIPTS)
+ chmod ugo+x $(bin_SCRIPTS)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/compress-dummy.in b/src/compress-dummy.in
new file mode 100644
index 0000000..4421e8d
--- /dev/null
+++ b/src/compress-dummy.in
@@ -0,0 +1,50 @@
+#! @SH@
+# compress dummy script for uncompressing legacy shar files.
+# Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+# Karl Eichwalder <ke@suse.de>, 2002.
+
+package="@PACKAGE@"
+version="@VERSION@"
+
+progname=`echo $0 | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $progname OPTION FILE
+Replacement script for uncompressing legacy shar files.
+
+with OPTION in:
+ --help display this help and exit
+ --version output version information and exit
+
+ -d uncompress
+
+Use \`gzip' for compressing files."
+
+while test $# -gt 0; do
+ case $1 in
+ -d) mode=$1; shift ;;
+# -x) trace=-x; set -x; shift ;;
+ --v* ) echo "$progname - $package $version"; exit 0 ;;
+ --h* ) echo "$usage"; exit 0 ;;
+ -) break ;;
+ -*) echo "Try \`$progname --help' for more information."; exit 1 ;;
+ *) break
+ esac
+done
+
+if test -z "$mode"; then
+ exec 1>&2
+ cat <<_EOF_
+This is not compress.
+This is a replacement script that invokes \`gzip -d' for uncompressing
+files compressed with the compress program.
+Try \`$progname --help' for more information.
+_EOF_
+ exit 1
+fi
+
+gzip -d
+
+exit $?
+
+# compress-dummy.in ends here
diff --git a/src/encode.c b/src/encode.c
new file mode 100644
index 0000000..be5b820
--- /dev/null
+++ b/src/encode.c
@@ -0,0 +1,98 @@
+/* Handle so called `shell archives'.
+
+ Copyright (C) 1994, 1995, 2007 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 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#include "system.h"
+
+/* Basic one-character encoding function to make a char printing. */
+#define ENCODE_BYTE(Byte) ((((Byte) + 63) & 63) + ' ' + 1)
+
+/* Buffer size for one line of output. */
+#define LINE_BUFFER_SIZE 45
+
+/*------------------------------------------.
+| Output one GROUP of three bytes on FILE. |
+`------------------------------------------*/
+
+static void
+write_encoded_bytes (group, file)
+ char *group;
+ FILE *file;
+{
+ int c1, c2, c3, c4;
+
+ c1 = group[0] >> 2;
+ c2 = ((group[0] << 4) & (3 << 4)) | ((group[1] >> 4) & 15);
+ c3 = ((group[1] << 2) & (15 << 2)) | ((group[2] >> 6) & 3);
+ c4 = group[2] & 63;
+ putc (ENCODE_BYTE (c1), file);
+ putc (ENCODE_BYTE (c2), file);
+ putc (ENCODE_BYTE (c3), file);
+ putc (ENCODE_BYTE (c4), file);
+}
+
+/*--------------------------------------------------------------------.
+| From FILE, refill BUFFER up to BUFFER_SIZE raw bytes, returning the |
+| number of bytes read. |
+`--------------------------------------------------------------------*/
+
+static int
+read_raw_bytes (file, buffer, buffer_size)
+ FILE *file;
+ char *buffer;
+ int buffer_size;
+{
+ int character;
+ int counter;
+
+ for (counter = 0; counter < buffer_size; counter++)
+ {
+ character = getc (file);
+ if (character == EOF)
+ return counter;
+ buffer[counter] = character;
+ }
+ return buffer_size;
+}
+
+/*----------------------------------------------------.
+| Copy INPUT file to OUTPUT file, while encoding it. |
+`----------------------------------------------------*/
+
+void
+copy_file_encoded (input, output)
+ FILE *input;
+ FILE *output;
+{
+ char buffer[LINE_BUFFER_SIZE];
+ int counter;
+ int number_of_bytes;
+
+ while (1)
+ {
+ number_of_bytes = read_raw_bytes (input, buffer, LINE_BUFFER_SIZE);
+ putc (ENCODE_BYTE (number_of_bytes), output);
+
+ for (counter = 0; counter < number_of_bytes; counter += 3)
+ write_encoded_bytes (&buffer[counter], output);
+ putc ('\n', output);
+
+ if (number_of_bytes == 0)
+ break;
+ }
+}
diff --git a/src/mail-files.in b/src/mail-files.in
new file mode 100644
index 0000000..846914e
--- /dev/null
+++ b/src/mail-files.in
@@ -0,0 +1,108 @@
+#! @SH@
+# Mail a list of files, as they are.
+# Copyright (C) 1990, 1995, 2005 Free Software Foundation, Inc.
+# François Pinard <pinard@iro.umontreal.ca>, 1991.
+
+package="@PACKAGE@"
+version="@VERSION@"
+
+progname=`echo $0 | sed -e 's,.*/,,'`
+
+usage()
+{
+ if test $# -gt 0
+ then
+ exec >&2
+ echo "$*"
+ fi
+ cat <<- _EOF_
+ Usage: $progname [OPTION] DESTIN TYPE SUBJECT FILE ...
+ Where:
+ OPTION is:
+ --help display this help and exit
+ --version output version information and exit
+
+ -x trace script
+
+ DESTIN is a list of email addresses
+ TYPE is a subject introduction word or short phrase
+ SUBJECT is a longer description of the contents
+ FILE ... is a list of files to send
+ _EOF_
+ exit $#
+}
+
+SLEEP=2
+
+### Decode the options.
+
+while test $# -gt 0
+do
+ case $1 in
+ -x) trace=-x; set -x; shift ;;
+ --v* ) echo "$progname - $package $version"; exit 0 ;;
+ --h* | \
+ '-?' ) usage ;;
+ --) shift ; break ;;
+ -*) usage "'$1' is an unknown option" ;;
+ *) break
+ esac
+done
+
+test $# -ge 4 || usage "Too few arguments."
+
+destin="$1"; shift
+type="$1"; shift
+subject="$1"; shift
+
+maxcount=$#
+files="$*"
+
+for f in ${files}
+do test -f ${f} || usage "Error: \`$f' is not a file" ; done
+
+### Mail all files, making a proper subject for each message.
+
+( if [ -f $destin ]; then
+ cat $destin
+ else
+ echo $destin
+ fi
+) | (
+ total=0
+ while read destin; do
+ count=0
+ for file in $files; do
+ count=`expr $count + 1`
+ if [ $maxcount = 1 ]; then
+ string="$type"
+ else
+ string="$type ($count/$maxcount)"
+ fi
+ echo "Mailing $string to $destin"
+ [ $total -ne 0 ] && sleep $SLEEP
+ @MAILER@ -s "$string: $subject" $destin < $file
+ total=`expr $total + 1`
+ [ $count -lt $maxcount ] && sleep $SLEEP
+ done
+ done
+ if [ $total -eq 0 ]; then
+ echo 'No message queued'
+ elif [ $total -eq 1 ]; then
+ echo 'Message queued'
+ else
+ echo "$count messages queued"
+ fi
+)
+
+exit 0
+
+## Local Variables:
+## mode: shell-script
+## tab-width: 8
+## indent-tabs-mode: nil
+## sh-indentation: 2
+## sh-basic-offset: 2
+## End:
+##
+## end of get-incidents.sh
diff --git a/src/mailshar.in b/src/mailshar.in
new file mode 100644
index 0000000..daed0ae
--- /dev/null
+++ b/src/mailshar.in
@@ -0,0 +1,106 @@
+#! @SH@
+# -*- Mode: shell-script -*-
+# Mail a multi-part shar from a list of files.
+# Copyright (C) 1990, 1994, 1995, 2002 Free Software Foundation, Inc.
+# François Pinard <pinard@iro.umontreal.ca>, 1991.
+
+package="@PACKAGE@"
+version="@VERSION@"
+
+prefix='@prefix@'
+bindir="@exec_prefix@/bin"
+transform='@program_transform_name@'
+
+shar=$bindir/`echo shar | sed "$transform"`
+mail_files=$bindir/`echo mail-files | sed "$transform"`
+
+progname=`echo $0 | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $progname [OPTION...] DEST FILE ...
+
+with OPTION in:
+ --help display this help and exit
+ --version output version information and exit
+
+ -S SUBJECT use \"shar: SUBJECT\" as subject line
+ -s SIZE decide size of each part in Kb, default 60
+ -M decide how to send each file separately
+ -T avoid calling compress, gzip, bzip2 nor uuencode
+ -B force calling uuencode
+ -z force calling gzip and uuencode
+ -j force calling bzip2 and uuencode
+ -Z force calling compress and uuencode
+ -x trace script
+
+If none of -MTBzjZ are given, -z is automatically selected if *none*
+of the FILEs have an .arc, .exz, .gif, .z, .gz, .bz2, .Z, .zip, .tgz
+or .zoo suffix."
+
+if type -p mktemp >/dev/null 2>/dev/null; then
+ temp=`mktemp /var/tmp/$$.shar.XXXXXX` || exit 1
+else
+ temp=/var/tmp/$$.shar
+ rm -f $temp*
+fi
+trap "rm -f $temp*; exit 1" 1 2 3 7 13 15
+trap "rm -f $temp*" 0
+
+### Decode the options.
+
+size=60
+
+while test $# -gt 0; do
+ case $1 in
+ -S) if test $# -gt 1; then mysubject=$2; shift 2;
+ else echo "$usage"; exit 1; fi ;;
+ -s) if test $# -gt 1; then size=$2; shift 2;
+ else echo "$usage"; exit 1; fi ;;
+ -[MTBzZ]) mode=$1; shift ;;
+ -x) trace=-x; set -x; shift ;;
+ --v* ) echo "$progname - $package $version"; exit 0 ;;
+ --h* ) echo "$usage"; exit 0 ;;
+ -) break ;;
+ -*) echo "Try \`$progname --help' for more information."; exit 1 ;;
+ *) break
+ esac
+done
+
+if test $# -lt 2; then
+ echo "$usage"
+ exit 1
+fi
+
+dest="$1"
+shift
+if test -z "$mysubject" ; then
+ subject="$*"
+else
+ subject="$mysubject"
+fi
+
+### Check if we should gzip.
+
+if test -z "$mode"; then
+ mode=-z
+ find "$@" -type f -print 2> /dev/null > $temp
+ while read file; do
+ case "`echo $file | sed -n 's|.*/||;/\./s|.*\.||p' \
+ | tr '[A-Z]' '[a-z]'`" in
+ arc|exz|gif|gz|bz2|tgz|z|zip|zoo) mode=; break ;;
+ esac
+ done < $temp
+ rm $temp
+fi
+
+### Construct the multi-part shar files and mail them.
+
+$shar $mode -P -L$size -o$temp -c -F "$@" \
+ && $mail_files $trace $dest shar "$subject" $temp* \
+ && rm ${temp}* \
+ && exit 0
+
+rm -f ${temp}*
+exit 1
+
+# mailshar.in ends here
diff --git a/src/remsync.in b/src/remsync.in
new file mode 100644
index 0000000..517ea58
--- /dev/null
+++ b/src/remsync.in
@@ -0,0 +1,2277 @@
+#! @PERL@
+# @configure_input@
+eval "exec @PERL@ -S $0 $*"
+ if $running_under_some_shell;
+
+use File::Temp qw/ :mktemp /;
+
+# Synchronization tool for remote directories.
+#
+# Copyright (C) 1994, 2007 Free Software Foundation, Inc.
+#
+# François Pinard <pinard@iro.umontreal.ca>, 1994.
+
+# 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 3, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+## Parameters, but not meant to be changed.
+
+$PACKAGE = '@PACKAGE@'; # name of package for this program
+$VERSION = '@VERSION@'; # version number for the whole package
+$PROGRAM = 'remsync'; # name of this particular program
+$FORMAT = '1.3'; # version of format for files
+
+$CONFIG = '.remsync'; # file containing synchronization information
+$INVOICE = '.remsync.tar.gz'; # default file name of packed synchro. package
+$WORKDIR = '.remsync-work'; # directory name of unpacked synchro. package
+$ORDERS = 'orders'; # file name containaing synchro. directives
+
+$DIFF = '@DIFF@'; # GNU diff path
+$TAR = '@TAR@'; # GNU tar path
+$SH = '@SH@'; # Bash or sh path
+
+# Special constants.
+
+$NEWLY_CREATED_SCAN = 2; # Instead of 1, when by remote request
+
+# Help strings.
+
+$INITIAL_HELP = "$PROGRAM (format $FORMAT) - GNU $PACKAGE $VERSION
+ Remote synchronization of files and directories.
+
+The following commands are available at *any* \`$PROGRAM\' prompt:
+
+ ? reminder for available commands
+ ! [COMMAND] shell escape for processing COMMAND
+ abort get out of the current command right away
+";
+
+$NORMAL_HELP = "Usage: $PROGRAM [COMMANDS...]
+
+ ! [COMMAND] shell escape for processing COMMAND (defaults to shell)
+ abort get out of the current command right away
+ quit get out of program, saving file \`$CONFIG\' if modified
+
+Synchronizing commands:
+ chdir [DIRECTORY] change current directory to DIRECTORY
+ mode [MODE] init (do not send contents) or noop (send nothing)
+ broadcast [SET] export a synchronization package to each site of SET
+ process [FILE] import a FILE (defaults to \`$INVOICE\')
+ process [DIRECTORY] or use an already exploded DIRECTORY (\`$WORKDIR\')
+
+Maintenance commands:
+ list list title, here, remotes, scans and ignores
+ files list all files and their known signatures
+ title [DESCRIPTION] use DESCRIPTION as project title (or list it)
+ here [ADDRESS [DIRECTORY]] declare our ADDRESS, modify visited DIRECTORY
+ remote [ADDRESS [DIRECTORY]] declare remote ADDRESS, modify its DIRECTORY
+ scan [PATTERN] scan directory with \`find\' for shell PATTERN
+ ignore [REGEXP] ignore scanned files if name matched by REGEXP
+ delete TYPE DATA delete the remote, scan or ignore having DATA
+
+To obtain partial lists, use appropriate commands without their parameters.
+Commands and keyword arguments may be abbreviated to one letter.
+";
+
+## Meaning of global variables introduced and used in this program.
+##
+## Config (.remsync) file:
+## $config_filename expanded file name of the $CONFIG file
+## $new_config if $CONFIG did not exist prior to this run
+## $fetch_config if $CONFIG file should be read and studied
+## $save_config if $CONFIG file should be rewritten
+##
+## Local description:
+## $project_title title of the project, from $CONFIG
+## $project_title_received title of the project, from invoice
+## $here_email our email address, from $CONFIG
+## $here_email_received our email address, from invoice
+## $here_home normalized project home directory, from $CONFIG
+## $here_home_received normalized project home directory, from invoice
+##
+## Remote descriptions:
+## @remote array of remote email addresses, from $CONFIG
+## @remote_received array of remote email addresses, from invoice
+## %remote for each remote: home directory, from $CONFIG
+## %remote_received for each remote: home directory, from invoice
+## @site_set selected set of remote ordinals, counted from 0
+## @copy_list mapping of invoice remote indices to $CONFIG's
+## $originator index of remote having sent the package
+##
+## File signatures:
+## $study_files if list of local files has to be recomputed
+## $checksum_command system command to compute file signatures
+## $maximum_name_width maximum length of all studied file names
+## %scan for each defined scan, from $CONFIG
+## %scan_received for each defined scan, from invoice
+## @scan sorted %scan, for numbered selection
+## %ignore for each defined ignore, from $CONFIG
+## %ignore_received for each defined ignore, from invoice
+## @ignore sorted %ignore, for numbered selection
+## %local_signature for each file: its signature computed here
+## %signature for each file: list of signatures, from $CONFIG
+## %signature_received for each file: list of signatures, from invoice
+##
+## Command control:
+## $commands_ahead semi-colon separated list of commands
+## $command_loop if dynamically within &command_loop
+## $process_loop if dynamically within &process_loop
+## $noop_mode if \`mode noop\' was given
+## $init_mode if \`mode init\' was given
+## $work_directory expanded work directory name
+## $workdir_to_unlink expanded work directory name, to later delete
+## $invoice_to_unlink expanded invoice file name, to later delete
+
+## Programming notes around probable Perl 4.X problems:
+## * local($_) is avoided, so beware $_ may be destroyed by any routine.
+## * @_ is always saved on each routine entry, where sub-routines are used.
+
+foreach (@ARGV)
+{
+ if (/^--/)
+ {
+ if (length $_ == 2)
+ {
+ shift;
+ last;
+ }
+ if ($_ eq substr ('--version', 0, length $_))
+ {
+ print "$PROGRAM (format $FORMAT) - GNU $PACKAGE $VERSION\n";
+ exit 0;
+ }
+ if ($_ eq substr ('--help', 0, length $_))
+ {
+ print $NORMAL_HELP;
+ exit 0;
+ }
+ &interrupt ("Unknown option \`$_\'");
+ }
+ else
+ {
+ last;
+ }
+}
+
+if (@ARGV)
+{
+ $commands_ahead = join (';', @ARGV);
+ @ARGV = ();
+}
+else
+{
+ print STDERR $INITIAL_HELP;
+}
+
+$fetch_config = 1;
+
+&command_loop;
+
+&maybe_save_config;
+
+exit 0;
+
+# Interactive command decoding.
+
+## Read user commands and dispatch them.
+
+sub command_loop
+{
+ $command_loop = 1;
+
+ COMMAND_LOOP:
+ while (1)
+ {
+ if ($commands_ahead)
+ {
+ if ($commands_ahead =~ /^([^;]*);(.*)/)
+ {
+ $_ = $1;
+ $commands_ahead = $2;
+ }
+ else
+ {
+ $_ = $commands_ahead;
+ $commands_ahead = 'quit';
+ }
+ }
+ else
+ {
+ if ($noop_mode)
+ {
+ &query ("\nnoop>>");
+ }
+ elsif ($init_mode)
+ {
+ &query ("\ninit>>");
+ }
+ else
+ {
+ &query ("\n>>");
+ }
+ }
+ s/^ +//;
+ s/ +$//;
+
+ next if /^$/;
+ next if /^#/;
+ last if /^q(uit)?$/;
+
+ if (/^c(hdir)?$/ || /^pwd$/)
+ {
+ &command_list_cwd;
+ }
+ elsif (/^c(hdir|d)? +(.+)/)
+ {
+ &command_set_cwd ($2);
+ }
+ elsif (/^m(ode)?$/)
+ {
+ &command_list_mode;
+ }
+ elsif (/^m(ode)? +([^ ]+)$/)
+ {
+ &command_set_mode ($2);
+ }
+ elsif (/^b(roadcast)?$/)
+ {
+ &command_broadcast ('');
+ }
+ elsif (/^b(roadcast)? +(.+)$/)
+ {
+ &command_broadcast ($2);
+ }
+ elsif (/^p(rocess)?$/)
+ {
+ &command_process ('');
+ }
+ elsif (/^p(rocess)? +([^ ]+)$/)
+ {
+ &command_process ($2);
+ }
+ elsif (/^l(ist)?$/)
+ {
+ &command_list_almost_all;
+ }
+ elsif (/^f(iles)?$/)
+ {
+ &command_list_files;
+ }
+ elsif (/^t(itle)?$/)
+ {
+ &command_list_title;
+ }
+ elsif (/^t(itle)? +(.+)$/)
+ {
+ &command_set_title ($2);
+ }
+ elsif (/^h(ere)?$/)
+ {
+ &command_list_here;
+ }
+ elsif (/^h(ere)? +([^ ]+) *([^ ]*)$/)
+ {
+ &command_set_here ($2, $3);
+ }
+ elsif (/^r(emote)?$/)
+ {
+ &command_list_remote;
+ }
+ elsif (/^r(emote)? +([^ ]+) *([^ ]*)$/)
+ {
+ &command_set_remote ($2, $3);
+ }
+ elsif (/^s(can)?$/)
+ {
+ &command_list_scan;
+ }
+ elsif (/^s(can)? +([^ ]+)$/)
+ {
+ &command_set_scan ($2);
+ }
+ elsif (/^i(gnore)?$/)
+ {
+ &command_list_ignore;
+ }
+ elsif (/^i(gnore)? +([^ ]+)$/)
+ {
+ &command_set_ignore ($2);
+ }
+ elsif (/^d(elete)? *r(emote)? +([^ ]+)$/)
+ {
+ &command_delete_remote ($3);
+ }
+ elsif (/^d(elete)? *s(can)? +([^ ]+)$/)
+ {
+ &command_delete_scan ($3);
+ }
+ elsif (/^d(elete)? *i(gnore)? +([^ ]+)$/)
+ {
+ &command_delete_ignore ($3);
+ }
+ else
+ {
+ &diagnose ("Unrecognized command \`$_\', try \`?\' for help");
+ }
+ }
+
+ $command_loop = 0;
+}
+
+## List current working directory.
+## Synopses: `chdir' or `pwd'.
+
+sub command_list_cwd
+{
+ print `pwd`;
+}
+
+## Change current working directory.
+## Synopses: `chdir DIRECTORY' or `cd DIRECTORY'.
+
+sub command_set_cwd
+{
+ local ($directory) = @_;
+
+ $directory = &expand_filename ($directory);
+
+ if (-d $directory)
+ {
+ &maybe_save_config;
+
+ if (chdir ($directory))
+ {
+ $fetch_config = 1;
+ }
+ else
+ {
+ &diagnose ("Unable to change to directory \`$directory\'");
+ }
+ }
+ else
+ {
+ &diagnose ("Non-existing directory \`$directory\'");
+ }
+}
+
+## List all modes.
+## Synopsis: `mode'.
+
+sub command_list_mode
+{
+ print STDERR "\n";
+ printf STDERR
+ "Init mode %-5s Send file signatures, but no file contents\n",
+ ($init_mode ? '(on)' : '(off)');
+ printf STDERR
+ "Noop mode %-5s Avoid sending email, do not update \`$CONFIG\'",
+ ($noop_mode ? '(on)' : '(off)');
+ print STDERR "\n";
+}
+
+## Set one of modes.
+## Synopsis: `mode MODE'.
+
+sub command_set_mode
+{
+ local ($mode) = @_;
+
+ if ($mode eq 'i' || $mode eq 'init')
+ {
+ $init_mode = 1;
+ }
+ elsif ($mode eq 'n' || $mode eq 'noop')
+ {
+ $noop_mode = 1;
+ }
+ else
+ {
+ &diagnose ("Unrecognized mode \`$mode\'");
+ }
+}
+
+## List title, here information, all remotes, all scans and all ignores.
+## Synopsis: `list'.
+
+sub command_list_almost_all
+{
+ &maybe_fetch_config;
+
+ print "\n$project_title\n\n";
+
+ print "HERE:\n";
+ &command_list_here;
+
+ print "REMOTE:\n" if @remote;
+ &command_list_remote;
+
+ print "SCAN:\n" if %scan;
+ &command_list_scan;
+
+ print "IGNORE:\n" if %ignore;
+ &command_list_ignore;
+}
+
+## List information for all files.
+## Synopsis: `files'.
+
+sub command_list_files
+{
+ local ($format, $field);
+
+ &maybe_fetch_config;
+ &maybe_study_files;
+
+ $format = " %-5s %-${maximum_name_width}s ";
+ foreach (sort keys %signature)
+ {
+ printf $format, $local_signature{$_}, $_;
+ foreach $field (split (/ /, $signature{$_}))
+ {
+ $field = ' ...' if $field eq $local_signature{$_};
+ printf '%-7s', $field;
+ }
+ print "\n";
+ }
+}
+
+## List the title of the project.
+## Synopsis: `title'.
+
+sub command_list_title
+{
+ &maybe_fetch_config;
+
+ print "$project_title\n";
+}
+
+## Set the title of the project.
+## Synopsis: `title DESCRIPTION'.
+
+sub command_set_title
+{
+ local ($description) = @_;
+
+ &maybe_fetch_config;
+
+ if ($description ne $project_title)
+ {
+ $project_title = $description;
+ $save_config = 1;
+ }
+}
+
+## List local information.
+## Synopsis: `here'.
+
+sub command_list_here
+{
+ &maybe_fetch_config;
+
+ print " [0]\t$here_email $here_home\n";
+}
+
+## Modify our local information to ADDRESS and DIRECTORY.
+## Synopsis: `here ADDRESS DIRECTORY'.
+
+sub command_set_here
+{
+ local ($email, $directory) = @_;
+
+ &maybe_fetch_config;
+
+ $email =~ tr/A-Z/a-z/;
+ if ($email ne '-' && $email ne $here_email)
+ {
+ $here_email = $email;
+ $save_config = 1;
+ }
+
+ if ($directory && $directory ne $here_home)
+ {
+ $here_home = &normalize_directory ($directory);
+ $config_filename = &expand_filename ("$here_home/$CONFIG");
+ $save_config = 1;
+ }
+}
+
+## List information for all remotes.
+## Synopsis: `remote'.
+
+sub command_list_remote
+{
+ local ($index, $email);
+
+ &maybe_fetch_config;
+
+ $index = 0;
+ foreach (@remote)
+ {
+ $index++;
+ print " [$index]\t$_ $remote{$_}\n";
+ }
+}
+
+## Create a new remote given its REMOTE address, modify its DIRECTORY.
+## Synopsis: `remote REMOTE DIRECTORY'.
+
+sub command_set_remote
+{
+ local ($remote, $directory) = @_;
+ local ($index);
+
+ &maybe_fetch_config;
+
+ $remote =~ tr/A-Z/a-z/;
+ $remote = $remote[$remote - 1] if ($remote > 0 && $remote <= @remote);
+
+ if (defined $remote{$remote})
+ {
+ if ($directory && $remote{$remote} ne $directory)
+ {
+ $remote{$remote} = $directory;
+ $save_config = 1;
+ }
+ elsif ($remote{$remote} ne '-')
+ {
+ &diagnose ("Remote directory is known to be \`$remote{$remote}\'");
+ &query ('Do you want me to keep this knowledge (y/n)? [y]');
+ if (! /(y|yes)/i)
+ {
+ $remote{$remote} = '-';
+ $save_config = 1;
+ }
+ }
+ }
+ else
+ {
+ if ($directory)
+ {
+ &create_remote ($remote, $directory);
+ }
+ else
+ {
+ &create_remote ($remote, '-');
+ $index = @remote;
+ &warn ("You may also use \`remote $index DIRECTORY\'"
+ . ' if you know the remote directory');
+ }
+ }
+}
+
+## Delete an existing remote given its ADDRESS address.
+## Synopsis: `delete remote ADDRESS'.
+
+sub command_delete_remote
+{
+ local ($remote) = @_;
+
+ &maybe_fetch_config;
+
+ $remote = $remote[$remote - 1] if ($remote > 0 && $remote <= @remote);
+ &delete_remote ($remote);
+}
+
+## List information for all scans.
+## Synopsis: `scan'.
+
+sub command_list_scan
+{
+ local ($index);
+## FIXME: local (@scan); ?
+
+ &maybe_fetch_config;
+
+ $index = 0;
+ @scan = ();
+ foreach (sort keys %scan)
+ {
+ $index++;
+ push (@scan, $_);
+ print " [$index]\t$_\n";
+ }
+}
+
+## Create a new SCAN.
+## Synopsis: `scan SCAN'.
+
+sub command_set_scan
+{
+ local ($scan) = @_;
+
+ &maybe_fetch_config;
+
+ if (defined $scan{$scan})
+ {
+ &diagnose ("Redundant creation of scan \`$scan\'");
+ }
+ else
+ {
+ $scan{$scan} = 1;
+ $save_config = 1;
+ $study_files = 1;
+ }
+}
+
+## Delete an existing SCAN.
+## Synopsis: `delete scan SCAN'.
+
+sub command_delete_scan
+{
+ local ($scan) = @_;
+
+ &maybe_fetch_config;
+
+ $scan = $scan[$scan - 1] if ($scan > 0 && $scan <= @scan);
+ if (defined $scan{$scan})
+ {
+ delete $scan{$scan};
+ $save_config = 1;
+ $study_files = 1;
+ }
+ else
+ {
+ &diagnose ("Cannot delete inexisting scan \`$scan\'");
+ }
+}
+
+## List information for all ignores.
+## Synopsis: `ignore'.
+
+sub command_list_ignore
+{
+ local ($index);
+## FIXME: local (@ignore); ?
+
+ &maybe_fetch_config;
+
+ $index = 0;
+ @ignore = ();
+ foreach (sort keys %ignore)
+ {
+ $index++;
+ push (@ignore, $_);
+ print " [$index]\t$_\n";
+ }
+}
+
+## Create a new IGNORE.
+## Synopsis: `ignore IGNORE'.
+
+sub command_set_ignore
+{
+ local ($ignore) = @_;
+
+ &maybe_fetch_config;
+
+ if (defined $ignore{$ignore})
+ {
+ &diagnose ("Redundant creation of ignore \`$ignore\'");
+ }
+ else
+ {
+ $ignore{$ignore} = 1;
+ $save_config = 1;
+ $study_files = 1;
+ }
+}
+
+## Delete an existing IGNORE.
+## Synopsis: `delete ignore IGNORE'.
+
+sub command_delete_ignore
+{
+ local ($ignore) = @_;
+ local ($index);
+
+ &maybe_fetch_config;
+
+ $ignore = $ignore[$ignore - 1] if ($ignore > 0 && $ignore <= @ignore);
+ if (defined $ignore{$ignore})
+ {
+ delete $ignore{$ignore};
+ $save_config = 1;
+ $study_files = 1;
+ }
+ else
+ {
+ &diagnose ("Cannot delete inexisting ignore \`$ignore\'");
+ }
+}
+
+# Broadcasting away synchronization packages.
+
+## Export a synchronization package to each site of SET.
+## Synopsis: `broadcast SET'.
+
+sub command_broadcast
+{
+ local ($set) = @_;
+ local ($site, $index, $ordinal, $file, @signature);
+
+ &maybe_fetch_config;
+
+ &decode_site_set ($set);
+ foreach $site (@site_set)
+ {
+ &warn ('');
+ &warn ("Broadcasting to address \`$remote[$site]\'");
+
+ if (-f $INVOICE && ! $noop_mode)
+ {
+ &diagnose ("The invoice \`$INVOICE\' already exists!");
+ &query ('Should I delete it for you (y/n)? [n]');
+ &interrupt ('Command aborted!') if ! /^(y|yes)/i;
+ unlink $INVOICE
+ || &interrupt ("Cannot delete file \`$INVOICE\'");
+ }
+ if (-d $WORKDIR && ! $noop_mode)
+ {
+ &diagnose ("The work directory \`$WORKDIR\' already exists!");
+ &query ('Should I remove all of it first (y/n)? [y]');
+ &interrupt ('Command aborted!') if ! /^(y|yes)/i;
+ system "rm -rf $WORKDIR"
+ || &interrupt ("Cannot remove directory \`$WORKDIR\'");
+ }
+
+ &maybe_study_files;
+ &update_file_registry;
+
+ # Initialize the invoice.
+
+ if (! $noop_mode)
+ {
+ mkdir ($WORKDIR, 0700)
+ || &interrupt ("Unable to make directory \`$WORKDIR\'");
+ open (OUTPUT, ">$WORKDIR/$ORDERS")
+ || &interrupt ("Cannot create file \`$WORKDIR/$ORDERS\'");
+
+ print OUTPUT "format\t$PROGRAM $FORMAT\n";
+ print OUTPUT "title\t$project_title\n";
+ print OUTPUT "here\t$here_email $here_home\n";
+ foreach (@remote)
+ {
+ print OUTPUT "remote\t$_ $remote{$_}\n";
+ }
+ foreach (sort keys %scan)
+ {
+ print OUTPUT "scan\t$_\n";
+ }
+ foreach (sort keys %ignore)
+ {
+ print OUTPUT "ignore\t$_\n";
+ }
+
+ print OUTPUT "visit\t$site\n";
+ print OUTPUT "copy\t", join (' ', @site_set), "\n";
+ }
+
+ # Transmit all file signatures and replacement orders.
+
+ $ordinal = 0;
+ foreach $file (sort keys %signature)
+ {
+ if (! $noop_mode)
+ {
+ print OUTPUT "check\t$file $local_signature{$file}";
+ @signature = split (/ /, $signature{$file});
+ foreach (@site_set)
+ {
+ print OUTPUT ' ', $signature[$_];
+ }
+ print OUTPUT "\n";
+ }
+
+ next if $init_mode;
+ next if $signature[$site] eq $local_signature{$file};
+
+ &warn ("Packaging file \`$file\'");
+ if (! $noop_mode)
+ {
+ $ordinal++;
+ symlink ("../$file", "$WORKDIR/$ordinal");
+ print OUTPUT "update\t$file $signature[$site] $ordinal\n";
+ }
+ $signature[$site] = $local_signature{$file};
+ $signature{$file} = join (' ', @signature);
+ $save_config = 1;
+ }
+
+ # Complete the invoice.
+
+ if (! $noop_mode)
+ {
+ close OUTPUT;
+ system "$TAR cfzh $INVOICE $WORKDIR"
+ || &interrupt ("Cannot construct invoice \`$INVOICE\'"
+ . " from directory \`$WORKDIR\'");
+ system "rm -rf $WORKDIR"
+ || &interrupt ("Cannot remove directory \`$WORKDIR\'");
+ system "mailshar $remote[$site] $INVOICE"
+ || &interrupt ("Cannot send file \`$INVOICE\'"
+ . " to address \`$remote[$site]\'");
+ unlink $INVOICE
+ || &interrupt ("Cannot delete file \`$INVOICE\'");
+ }
+ }
+ &warn ("Command \`broadcast\' done");
+}
+
+# Processing received synchronization packages.
+
+## Import a FILE or use an already exploded DIRECTORY.
+## Synopses: `process [FILE]' or `process [DIRECTORY]'.
+
+sub command_process
+{
+ local ($argument) = @_;
+ local ($invoice, $prior, $file, @signature);
+
+ $work_directory = &expand_filename ($WORKDIR);
+
+ if ($argument)
+ {
+ $invoice = &expand_filename ($argument);
+ }
+ elsif (-f $INVOICE)
+ {
+ $invoice = &expand_filename ($INVOICE);
+ $invoice_to_unlink = $invoice if ! $noop_mode;
+ }
+ elsif (-d $WORKDIR)
+ {
+ $invoice = $work_directory;
+ }
+ else
+ {
+ &interrupt ("No argument, no invoice \`$INVOICE\'"
+ . " and no directory \`$WORKDIR\'");
+ }
+
+ if (-f $invoice)
+ {
+ &warn ("Exploding invoice \`$invoice\'");
+
+ if (-d $WORKDIR)
+ {
+ &diagnose ("The work directory \`$WORKDIR\' already exists!");
+ &query ('Should I remove all of it first (y/n)? [y]');
+ &interrupt ('Command aborted!') if ! /^(y|yes)/i;
+ system "rm -rf $WORKDIR"
+ || &interrupt ("Cannot remove directory \`$WORKDIR\'");
+ }
+
+ system "$TAR xfoz $invoice"
+ || &interrupt ("Failure while untarring file \`$invoice\'");
+ $workdir_to_unlink = $work_directory;
+ }
+
+ chop ($prior = `pwd`);
+ open (ORDERS, "$work_directory/$ORDERS")
+ || &interrupt ("Cannot read file \`$work_directory/$ORDERS\'");
+
+ &process_loop;
+
+ close ORDERS;
+ chdir $prior;
+
+ if ($workdir_to_unlink)
+ {
+ unlink "$workdir_to_unlink/$ORDERS~"; # in case edited in place
+ unlink "$workdir_to_unlink/$ORDERS"
+ || &diagnose ("Cannot delete file \`$workdir_to_unlink/$ORDERS\'");
+ rmdir $workdir_to_unlink
+ || &diagnose ("Cannot remove directory \`$workdir_to_unlink\'");
+ $workdir_to_unlink = '';
+ }
+
+ if ($invoice_to_unlink)
+ {
+ unlink $invoice_to_unlink
+ || &diagnose ("Cannot delete file \`$invoice_to_unlink\'");
+ $invoice_to_unlink = '';
+ }
+ &warn ('Command `process\' done');
+}
+
+## Decode each received package orders, in turn. Most validation
+## is delayed until the `visit' order.
+
+sub process_loop
+{
+ local (@signature, $auto);
+
+ $process_loop = 1;
+
+ PROCESS_LOOP:
+ while (<ORDERS>)
+ {
+ chop;
+
+ # Handle commands not requiring the analysis of file $CONFIG.
+
+ if (/^format\t$PROGRAM ([^ ]+)$/o)
+ {
+ &interrupt
+ ("Need $PROGRAM (format $FORMAT) to process this package!")
+ if $1 ne $FORMAT;
+ }
+ elsif (/^title\t(.*)/)
+ {
+ $project_title_received = $1;
+ }
+ elsif (/^here\t([^ ]+) ([^ ]+)$/)
+ {
+ ($here_email_received, $here_home_received) = ($1, $2);
+ $here_email_received =~ tr/A-Z/a-z/;
+ }
+ elsif (/^remote\t([^ ]+) ([^ ]+)$/)
+ {
+ warn "Remote-1 $1 $2\n"; # FIXME
+ $_ = $1;
+ tr/A-Z/a-z/;
+ push (@remote_received, $_);
+ $remote_received{$_} = $2;
+ warn "Remote-2 $1 $2\n"; # FIXME
+ }
+ elsif (/^scan\t([^ ]+)$/)
+ {
+ $scan_received{$1} = 1;
+ }
+ elsif (/^ignore\t([^ ]+)$/)
+ {
+ $ignore_received{$1} = 1;
+ }
+ elsif (/^visit\t([^ ]+)$/)
+ {
+ &process_visit ($1);
+ }
+ elsif (/^copy\t(.+)/)
+ {
+ &process_copy ($1);
+ }
+ elsif (/^check\t([^ ]+) ([^ ]+) (.+)/)
+ {
+ &process_check ($1, $2, $3);
+ }
+ elsif (/^update\t([^ ]+) ([^ ]+) ([^ ]+)$/)
+ {
+ &process_update ($1, $2, $3);
+ }
+ else
+ {
+ &interrupt ("Unrecognized command \`$_\' in process input");
+ }
+ }
+
+ $process_loop = 0;
+ &update_file_registry;
+
+ if (%signature_received)
+ {
+ foreach $file (sort keys %signature)
+ {
+ &diagnose ("File \`$file\' is unknown remotely")
+ if ! defined $signature_received{$file};
+ $auto = 'warn';
+ }
+ if ($auto)
+ {
+ &warn ('Replying `y\' (yes) deletes the said file');
+ &warn (' `n\' (no) keeps the said file');
+ &warn (' `a\' (all) deletes the file and all following');
+ &warn (' `q\' (quit) keeps the file and all following');
+ $auto = '';
+ }
+ foreach $file (sort keys %signature)
+ {
+ if (! defined $signature_received{$file})
+ {
+ @signature = split (/ /, $signature{$file});
+ if ($signature[$originator] ne '-')
+ {
+ $signature[$originator] = '-';
+ $save_config = 1;
+ $signature{$file} = join (' ', @signature);
+ }
+
+ if ($auto)
+ {
+ $_ = $auto;
+ }
+ else
+ {
+ &query
+ ("Should I delete file \`$file\' here (y/n/a/q)? [n]");
+ }
+
+ if (/^(a|all)$/i)
+ {
+ $auto = 'yes';
+ $_ = $auto;
+ }
+ elsif (/^(q|quit)$/i)
+ {
+ $auto = 'no';
+ $_ = $auto;
+ }
+
+ if (/^(y|yes)$/i)
+ {
+ if (! $noop_mode)
+ {
+ unlink $file
+ || &diagnose ("Cannot delete file \`$file\'");
+ }
+ delete $signature{$file};
+ }
+ }
+ }
+ }
+}
+
+## Prepare to visit a directory, conciliating all received information.
+## Synopsis: `visit VISITED', where VISITED is an index in remotes.
+
+sub process_visit
+{
+ local ($visited) = @_;
+ local ($email, $home, $string, $scan, $ignore);
+
+ &maybe_save_config;
+
+ &warn ('');
+ &warn ('Package being received:');
+ &warn (" from address \`$here_email_received\'");
+ &warn (" for project \`$project_title_received\'");
+
+ # Check the recipient address.
+
+ $email = &guess_here_email;
+ $string = $remote_received[$visited];
+
+ if (! &equivalent_email ($email, $string))
+ {
+ &diagnose ("This package was sent to address \`$string\'");
+ &warn ("but your address is known to be \`$email\'");
+ &warn ('');
+ &warn ('The possibilities at this point are:');
+ &warn (" 1. Correct your full email address to \`$string\'");
+ &warn (" 2. Use your current email address \`$email\'");
+ &warn (' 3. Specify another full email address (beware!)');
+ &warn (' 4. Abandon the processing of this package');
+ $_ = '';
+ &query ('Which action do you choose (1-4)? [1]')
+ while ! /^[1-4]$/;
+ if ($_ eq '1')
+ {
+ $email = $string;
+ }
+ elsif ($_ eq '3')
+ {
+ $_ = &guess_here_email;
+ &query ("What is your full email address, here? [$_]");
+ $email = $_;
+ }
+ elsif ($_ eq '4')
+ {
+ &interrupt ('Command aborted!');
+ }
+ }
+
+ # Check the recipient directory.
+
+ $string = $remote_received{$string};
+ $_ = &expand_filename ($string);
+ if (-d $_)
+ {
+ $home = $string;
+ }
+ else
+ {
+ chop ($_ = `pwd`);
+ $home = &normalize_directory ($_);
+
+ &diagnose ("This package was aimed for directory \`$string\'");
+ &warn ('but this directory does not exist here');
+ &warn ('');
+ &warn ('The possibilities at this point are:');
+ &warn (" 1. Attempt creating the \`$string\' directory");
+ &warn (" 2. Use the current directory \`$home\' (are you sure?)");
+ &warn (' 3. Specify another synchronized directory (beware!)');
+ &warn (' 4. Abandon the processing of this package');
+ $_ = '';
+ &query ('Which action do you choose (1-4)? [1]')
+ while ! /^[1-4]$/;
+ if ($_ eq '1')
+ {
+ $home = $string;
+ }
+ elsif ($_ eq '3')
+ {
+ &query ("Which directory should be used? [$home]");
+ $home = &normalize_directory ($_);
+ }
+ elsif ($_ eq '4')
+ {
+ &interrupt ('Command aborted!');
+ }
+ }
+
+ # Force our way to the wanted directory.
+
+ &warn ("Visiting directory \`$home',"
+ . " remote was \`$here_home_received\'");
+
+ $home = &expand_filename ($home);
+ &prepare_filename ("$home/$CONFIG");
+ chdir $home || &interrupt ("Cannot change directory to \`$home\'");
+
+ # Swallow or simulate the $CONFIG file.
+
+ if (-f "$home/$CONFIG")
+ {
+ $fetch_config = 1;
+ &maybe_fetch_config;
+
+ # Reconciliate $project_title.
+
+ if ($project_title ne $project_title_received)
+ {
+ &diagnose ("The package title is \`$project_title_received\'");
+ &warn ("but \`$CONFIG\' says it should be \`$project_title\'");
+ &warn ('');
+ &warn ('The possibilities at this point are:');
+ &warn (" 1. Use \`$project_title_received\' as title");
+ &warn (" 2. Keep \`$project_title' as title\'");
+ &warn (' 3. Specify another project title');
+ $_ = '';
+ &query ('Which action do you choose (1-3)? [1]')
+ while ! /^[1-3]$/;
+ if ($_ eq '1')
+ {
+ $project_title = $project_title_received;
+ }
+ elsif ($_ eq '3')
+ {
+ &query ('What will be the new project title?');
+ $project_title = $_;
+ }
+ }
+
+ # Reconciliate $here_email.
+
+ if (! &equivalent_email ($email, $here_email))
+ {
+ &diagnose ("This package is sent to address \`$here_email\'");
+ &warn ("but \`$CONFIG\' says it should have been \`$email\'");
+ &warn ('');
+ &warn ('The possibilities at this point are:');
+ &warn (" 1. Use your current full email address \`$email\'");
+ &warn (" 2. Correct your full email address to \`$here_email\'");
+ &warn (' 3. Specify another full email address');
+ $_ = '';
+ &query ('Which action do you choose (1-3)? [1]')
+ while ! /^[1-3]$/;
+ if ($_ eq '1')
+ {
+ $here_email = $email;
+ }
+ elsif ($_ eq '3')
+ {
+ $_ = &guess_here_email;
+ &query ("What is your full email address, here? [$_]");
+ $here_email = $_;
+ }
+ }
+
+ # Reconciliate $here_home.
+
+ $home = &normalize_directory ($home);
+ if ($home ne $here_home)
+ {
+ &diagnose ("This package is aimed for directory \`$here_home\'");
+ &warn ("but \`$CONFIG\' says it should have been \`$home\'");
+ &warn ('');
+ &warn ('The possibilities at this point are:');
+ &warn (" 1. Record the \`$home\' directory in the configuration");
+ &warn (" 2. Correct the directory to \`$here_home\'");
+ &warn (' 3. Record another name for this directory (beware!)');
+ $_ = '';
+ &query ('Which action do you choose (1-3)? [1]')
+ while ! /^[1-3]$/;
+ if ($_ eq '1')
+ {
+ $here_home = $home;
+ $config_filename = &expand_filename ("$here_home/$CONFIG");
+ }
+ elsif ($_ eq '3')
+ {
+ &query ("Which directory should be used? [$home]");
+ $here_home = &normalize_directory ($_);
+ $config_filename = &expand_filename ("$here_home/$CONFIG");
+ }
+ }
+
+ # Reconciliate remote information.
+
+ foreach $remote (sort keys %remote)
+ {
+ if (defined $remote_received{$remote})
+ {
+ if ($remote{$remote} ne $remote_received{$remote})
+ {
+ &diagnose ("Conflicting directories for \`$remote\'");
+ &warn (" known as \`$remote{$remote}\' here and");
+ &warn (" as \`$remote_received{$remote}\' remotely");
+ &warn ('');
+ &warn ('The possibilities at this point are:');
+ &warn (" 1. Accept \`$remote_received{$remote}\'");
+ &warn (" 2. Keep \`$remote{$remote}\'");
+ &warn (' 3. Declare another directory...');
+ $_ = '';
+ &query ('Which action do you choose (1-3)? [1]')
+ while ! /^[1-3]$/;
+ if ($_ eq '1')
+ {
+ $remote{$remote} = $remote_received{$remote};
+ $save_config = 1;
+ }
+ elsif ($_ eq '3')
+ {
+ &query ("\
+Which directory should be used? [$remote_received{$remote}]");
+ if ($_ ne $remote{remote})
+ {
+ $remote{$remote} = &normalize_directory ($_);
+ $save_config = 1;
+ }
+ }
+ }
+ delete $remote_received{$remote};
+ }
+ elsif ($remote ne $here_email_received)
+ {
+ &diagnose ("Remote \`$remote\' is unknown remotely");
+ &query ('Should I forget it here (y/n)? [n]');
+ # FIXME: this might require more adjustments?
+ delete $remote{$remote} if /(y|yes)/i;
+ }
+ }
+ foreach $remote (sort keys %remote_received)
+ {
+ if ($remote ne $here_email)
+ {
+ &diagnose
+ ("Remote \`$remote\' is known remotely but not here");
+ &query ('Should I learn it here (y/n)? [y]');
+ &create_remote ($remote, $remote_received{$remote})
+ if (/(y|yes)/i);
+ }
+ delete $remote_received{$remote};
+ }
+
+ # At last, finally, decide who is sending the package.
+
+ $originator = &validated_remote_index ($here_email_received);
+
+ # Reconciliate scan information.
+
+ foreach $scan (sort keys %scan)
+ {
+ if (defined $scan_received{$scan})
+ {
+ delete $scan_received{$scan};
+ }
+ else
+ {
+ &diagnose ("Scan \`$scan\' is unknown remotely");
+ &query ('Should I forget it here (y/n)? [n]');
+ delete $scan{$scan} if /(y|yes)/i;
+ }
+ }
+ foreach $scan (sort keys %scan_received)
+ {
+ &diagnose
+ ("Scan \`$scan\' is known remotely but not here");
+ &query ('Should I learn it here (y/n)? [y]');
+ $scan{$scan} = $NEWLY_CREATED_SCAN if /(y|yes)/i;
+ delete $scan_received{$scan};
+ }
+
+ # Reconciliate ignore information.
+
+ foreach $ignore (sort keys %ignore)
+ {
+ if (defined $ignore_received{$ignore})
+ {
+ delete $ignore_received{$ignore};
+ }
+ else
+ {
+ &diagnose ("Ignore \`$ignore\' is unknown remotely");
+ &query ('Should I forget it here (y/n)? [n]');
+ delete $ignore{$ignore} if /(y|yes)/i;
+ }
+ }
+ foreach $ignore (sort keys %ignore_received)
+ {
+ &diagnose
+ ("Ignore \`$ignore\' is known remotely but not here");
+ &query ('Should I learn it here (y/n)? [y]');
+ $ignore{$ignore} = 1 if /(y|yes)/i;
+ delete $ignore_received{$ignore};
+ }
+ }
+ else
+ {
+
+ # Use remote information for initializing the local one.
+
+ &warn ('Initializing file \`$CONFIG\' from received information');
+
+ $project_title = $project_title_received;
+ $here_email = $remote_received[$visited];
+ $here_home = $remote_received{$here_email};
+ $config_filename = &expand_filename ("$here_home/$CONFIG");
+
+ if ($here_email ne $here_email_received)
+ {
+ $remote_received[$visited] = $here_email_received;
+ $remote_received{$here_email_received} = $here_home_received;
+ delete $remote_received{$here_email};
+ }
+
+ @remote = @remote_received;
+
+ %remote = %remote_received;
+ %remote_received = ();
+ %scan = %scan_received;
+ %scan_received = ();
+ %ignore = %ignore_received;
+ %ignore_received = ();
+
+ $new_config = 1;
+ $save_config = 1;
+ $fetch_config = 0;
+ $study_files = 1;
+ }
+}
+
+## Package was sent to each address in SET.
+## Synopsis: `copy SET'.
+
+sub process_copy
+{
+ local ($set) = @_;
+ local ($counter);
+
+ &maybe_fetch_config;
+
+ @copy_list = ();
+ $counter = 0;
+ foreach (split (' ', $set))
+ {
+ $_ = $remote_received[$_];
+
+ $copy_list[$counter++]
+ = $_ eq $here_email ? -1 : &validated_remote_index ($_);
+ }
+}
+
+## Set FILE signatures to SIGNATURE, given a SET of previous values.
+## Synopsis: `check FILE SIGNATURE SET'.
+
+sub process_check
+{
+ local ($file, $signature, $set) = @_;
+ local (@signature, @check, $counter, $new_signature);
+
+ @check = split (' ', $set);
+ &interrupt ("Unmatching number of signatures for file \`$file\'")
+ if @check != @copy_list;
+
+# &maybe_fetch_config;
+ &maybe_study_files;
+
+ if (defined $signature{$file})
+ {
+ @signature = split (/ /, $signature{$file});
+ }
+ else
+ {
+ @signature = ('-') x @remote;
+ }
+ if ($signature ne $signature[$originator])
+ {
+ $signature[$originator] = $signature;
+ $save_config = 1;
+ }
+ for ($counter = 0; $counter < @check; $counter++)
+ {
+ if ($copy_list[$counter] >= 0 && $check[$counter] ne '-')
+ {
+ if ($signature[$copy_list[$counter]] eq '-'
+ || $signature[$copy_list[$counter]] eq $check[$counter])
+ {
+ $new_signature = $signature;
+ }
+ else
+ {
+ # If we do have an idea of a remote file\'s signature, and
+ # if this idea is contradicted by a synchronization
+ # package, rather say we know nothing besides that the
+ # file merely exists. Give it a signature from hell.
+
+ $new_signature = '666';
+ }
+ if ($new_signature ne $signature[$copy_list[$counter]])
+ {
+ $signature[$copy_list[$counter]] = $new_signature;
+ $save_config = 1;
+ }
+ }
+ }
+
+ $signature{$file} = join (' ', @signature);
+ $signature_received{$file} = 1;
+}
+
+## If FILE checks to SIGNATURE, replace it by PACKAGED.
+## Synopsis: `update FILE SIGNATURE PACKAGED'.
+
+sub process_update
+{
+ local ($file, $old_signature, $packaged) = @_;
+ local ($action, $cautious, $packaged_signature);
+
+ $packaged = "$work_directory/$packaged";
+
+# &maybe_fetch_config;
+# &maybe_study_files;
+
+ if (&ignorable_file ($file))
+ {
+ &diagnose ("File \`$file\' is the subject of some \`ignore\'");
+ &query ('Should I accept it nevertheless (y/n)? [n]');
+ $action = 'UNLINK' if ! /^(y|yes)$/i;
+ }
+
+ if (! $action && -f $file && ! defined $local_signature{$file})
+ {
+ &diagnose ("File \`$file\' was not found here");
+ $local_signature{$file} = &single_signature ($file);
+ $cautious = 1;
+ }
+
+ if (! $action && -f $file && $old_signature eq $local_signature{$file})
+ {
+ if ($cautious)
+ {
+ &query ('Show diffs before updating it (y/n)? [y]');
+ $action = /^(y|yes)$/i ? 'DIFF' : 'MOVE';
+ }
+ else
+ {
+ &warn ("Updating file \`$file\'");
+ $action = 'MOVE';
+ }
+ }
+
+ if (! $action && -f $file)
+ {
+ $packaged_signature = &single_signature ($packaged);
+ if ($old_signature eq '-')
+ {
+ if ($packaged_signature eq $local_signature{$file})
+ {
+ &diagnose ("Redundant creation of file \`$file\'");
+ $action = 'UNLINK';
+ }
+ else
+ {
+ &diagnose ("Unexpected preexisting file \`$file'");
+ $action = 'DIFF';
+ }
+ }
+ else
+ {
+ if ($packaged_signature eq $local_signature{$file})
+ {
+ &diagnose ("Redundant updating of file \`$file\'");
+ $action = 'UNLINK';
+ }
+ else
+ {
+ &diagnose ("Local changes occurred to file \`$file\'");
+ $action = 'DIFF';
+ }
+ }
+ }
+
+ if (! $action) # $file does not exist here
+ {
+ if ($old_signature eq '-')
+ {
+ &warn ("Creating new file \`$file\'");
+ $action = 'MOVE';
+ }
+ else
+ {
+ &diagnose ("File \`$file\' has disappeared from here");
+ &query ('Should I recreate it from remote copy (y/n)? [y]');
+ $action = /^(y|yes)$/i ? 'MOVE' : 'UNLINK';
+ }
+ }
+
+ if ($action eq 'DIFF')
+ {
+ &warn ('');
+ &warn ("$DIFF -u $here_home/$file $packaged");
+ system "$DIFF -u $here_home/$file $packaged";
+ &warn ('');
+ &warn ('Before replying to next question, please reconciliate:');
+ &warn (" -) \`$here_home/$file\'");
+ &warn (" +) \`$packaged\'");
+ &warn ('');
+ &query ('Now, which of these files should be kept (-/+)? [-]');
+ $action = /^\+$/ ? 'MOVE' : 'UNLINK';
+ }
+
+ if ($action eq 'UNLINK' && ! $noop_mode)
+ {
+ unlink $packaged || &diagnose ("Cannot delete file \`$packaged\'");
+ }
+
+ if ($action eq 'MOVE' && ! $noop_mode)
+ {
+ if (-f $file)
+ {
+ unlink $file || &diagnose ("Cannot delete file \`$file\'");
+ }
+ &prepare_filename ($file);
+ system "mv $packaged $file"
+ || &interrupt ("Cannot move packaged file into \`$file\'");
+ $local_signature{$file} = &single_signature ($file);
+ }
+}
+
+# $CONFIG file maintainance.
+
+## Digest in file \`$CONFIG\' if not done already.
+
+sub maybe_fetch_config
+{
+ local (@signature, $index, $string);
+
+ return if ! $fetch_config;
+
+ %remote = ();
+ %scan = ();
+ %ignore = ();
+ %signature = ();
+
+ if (open (CONFIG, $CONFIG))
+ {
+ while (chop ($_ = <CONFIG>))
+ {
+ next if /^$/;
+ next if /^#/;
+
+ if (/^format\t$PROGRAM ([^ ]+)$/o)
+ {
+ &interrupt ("$CONFIG:$.: Unmatching format for $CONFIG")
+ if $1 ne $FORMAT;
+ }
+ elsif (/^title\t(.*)$/)
+ {
+ $project_title = $1;
+ &warn ("Reading configuration for project \`$project_title\'");
+ }
+ elsif (/^here\t([^ ]+) ([^ ]+)$/)
+ {
+ ($here_email, $here_home) = ($1, $2);
+ $here_email =~ tr/A-Z/a-z/;
+ $config_filename = &expand_filename ("$here_home/$CONFIG");
+ }
+ elsif (/^remote\t([^ ]+) ([^ ]+)$/)
+ {
+ local ($save_config); # protect against &create_remote;
+
+ $string = $1;
+ $string =~ tr/A-Z/a-z/;
+ &create_remote ($1, $2);
+ }
+ elsif (/^scan\t([^ ]+)$/)
+ {
+ $scan{$1} = 1;
+ }
+ elsif (/^ignore\t([^ ]+)$/)
+ {
+ if ($1 eq '\\.remsync')
+ {
+ $ignore{'\\.remsync.*'} = 1;
+ }
+ else
+ {
+ $ignore{$1} = 1;
+ }
+ }
+ elsif (/^\t([^ ]+) (.*)/)
+ {
+
+ # Temporary code, the time everything is getting updated.
+ # Was: $signature{$1} = $2;
+
+ @signature = split (/ /, $2);
+ for ($index = 0; $index < @remote; $index++)
+ {
+ if (! $signature[$index])
+ {
+ &diagnose ("Empty signature for file \`$1\' [$index]");
+ $signature[$index] = '-';
+ $save_config = 1;
+ }
+ }
+ $signature{$1} = join (' ', @signature);
+ }
+ else
+ {
+ &interrupt ("** $CONFIG:$.: Illegal format for $CONFIG");
+ }
+ }
+ close CONFIG;
+
+ if (! $project_title)
+ {
+ &diagnose ('There is no title for this project.');
+ &query ('Please enter a short project description:');
+ $project_title = $_;
+ }
+ }
+ else
+ {
+ chop ($_ = `pwd`);
+ $_ = &normalize_directory ($_);
+ &diagnose ("Directory \`$_\' is not ready for synchronization");
+ &query ('Should I prepare it for its first time (y/n)? [y]');
+ &interrupt ('Command aborted!') if ! /^(y|yes)$/i;
+ $new_config = 1;
+
+ &query ('Please enter a short project description:');
+ $project_title = $_;
+
+ $_ = &guess_here_email;
+ &query ("What is your full email address, here? [$_]");
+ $here_email = $_;
+
+ chop ($_ = `pwd`);
+ $here_home = &normalize_directory ($_);
+ $config_filename = &expand_filename ("$here_home/$CONFIG");
+
+ foreach (('(.*/)?core(\\..*)?',
+ '.*,v',
+ '.*/RCS/.*',
+ '.*\\.(bak|BAK)',
+ '.*\\.[oa]',
+ '.*~',
+ "\\$CONFIG.*",
+ '\\\#.*'))
+ {
+ $ignore{$_} = 1;
+ }
+ }
+
+ $fetch_config = 0;
+ $save_config = 1;
+ $study_files = 1;
+}
+
+## Write back file \`$CONFIG\' if it has been modified.
+
+sub maybe_save_config
+{
+ local ($index);
+
+ return if ! $save_config;
+ $save_config = 0;
+ return if $noop_mode;
+
+ if (! $new_config)
+ {
+ unlink "$config_filename.bak";
+ rename ("$config_filename", "$config_filename.bak")
+ || &interrupt ("Cannot backup file \`$config_filename'");
+ }
+
+ open (CONFIG, ">$config_filename")
+ || &interrupt ("Cannot create file \`$config_filename\'");
+ print CONFIG
+ "# This file is maintained automatically by program \`$PROGRAM\'.",
+ " DO NOT EDIT!\n";
+ print CONFIG "\n";
+ print CONFIG "format\t$PROGRAM $FORMAT\n";
+ print CONFIG "title\t$project_title\n";
+ &diagnose ('There is no project title, yet') if ! $project_title;
+ print CONFIG "here\t$here_email $here_home\n";
+ &diagnose ('There are no declared remote connections, yet')
+ if ! @remote;
+ foreach (@remote)
+ {
+ print CONFIG "remote\t$_ $remote{$_}\n";
+ }
+ print CONFIG "\n";
+ foreach (sort keys %scan)
+ {
+ print CONFIG "scan\t$_\n";
+ }
+ foreach (sort keys %ignore)
+ {
+ print CONFIG "ignore\t$_\n";
+ }
+ foreach (sort keys %signature)
+ {
+ print CONFIG "\t", $_, ' ', $signature{$_}, "\n";
+ }
+ close CONFIG;
+}
+
+## Scan for files with `find' and `sum', unless this is done already.
+
+sub maybe_study_files
+{
+ local ($list, $signature, $file);
+
+ # Do not execute this lengthy process without reason.
+
+ return if ! $study_files;
+ &warn ('Studying local files for their signature');
+
+ # Find the proper "sum" command.
+
+ if (! $checksum_command)
+ {
+ foreach (('sum', 'sum -r'))
+ {
+ if (`echo x | $_` =~ /^00070 /)
+ {
+ $checksum_command = $_;
+ last;
+ }
+ }
+ &interrupt ('Cannot find BSD program `sum\' around')
+ if ! $checksum_command;
+ }
+
+ # Trigger execution of find with all the %scan parameters.
+
+ if (%scan == 0)
+ {
+ $list = ' .';
+ }
+ else
+ {
+ $list = '';
+ foreach (sort keys %scan)
+ {
+ $list .= " '$_'";
+ }
+ }
+
+ $findtempfile = mktemp( "./remsync.XXXXXX" );
+
+ open (SCAN,
+ "find$list -type f 2> $findtempfile | xargs -r $checksum_command |")
+ || &interrupt ('Cannot launch program `find\'');
+
+ # Process each existing file in turn.
+
+ %local_signature = ();
+ $maximum_name_width = 0;
+
+ while (<SCAN>)
+ {
+ if (/^([0-9]+) +[0-9]+ +(\.\/)?(.*)/)
+ {
+ ($signature, $file) = ($1, $3);
+ }
+ else
+ {
+ chop;
+ &diagnose ("Unrecognized output from program \`sum\': \`$_\'");
+ next;
+ }
+
+ next if &ignorable_file ($file);
+
+ $local_signature{$file} = $signature;
+ $maximum_name_width = length $file
+ if length $file > $maximum_name_width;
+ }
+ close SCAN;
+
+ # Clean out scanning for non-existing files.
+
+ open (SCAN, $findtempfile);
+ while (<SCAN>)
+ {
+ chop;
+ if (/^find: (.*): No such file or directory$/)
+ {
+ $file = $1;
+ &diagnose ("No files found while scanning for \`$file\'");
+ if (! defined $scan{$file})
+ {
+ &diagnose ('And this is not even a valid scan. Bizarre...');
+ }
+ elsif ($scan{$file} != $NEWLY_CREATED_SCAN)
+ {
+ &warn ('\
+To get rid of this warning, delete the scan or have it find something!');
+ &query ('Should I delete this scan now (y/n)? [y]');
+ &command_delete_scan ($file) if /^(y|yes)$/i;
+ }
+ }
+ else
+ {
+ &diagnose ("Scan error: $_");
+ }
+ }
+ close SCAN;
+ unlink $findtempfile;
+
+ $study_files = 0;
+}
+
+## Compute `sum' over a single file.
+
+sub single_signature
+{
+ (split (' ', `$checksum_command $_[0]`))[0];
+}
+
+## Update file and signature matrix according to what exists here.
+
+sub update_file_registry
+{
+ local ($cautious, $size);
+
+ foreach (sort keys %signature)
+ {
+ if (! defined $local_signature{$_})
+ {
+ &warn ("Forgetting file \`$_\'");
+ delete $signature{$_};
+ $save_config = 1;
+ }
+ }
+
+ foreach (sort keys %local_signature)
+ {
+ if (! defined $signature{$_})
+ {
+ $size = int (((stat $_)[7] + 999) / 1000);
+ &warn ("Noticing new file \`$_\' [${size}K]");
+ $signature{$_} = join (' ', ('-') x @remote);
+ $save_config = 1;
+ $cautious = 1 if $size > 100;
+ }
+ }
+
+ if ($cautious && !$process_loop)
+ {
+ &diagnose ('There were new files bigger than 100K');
+ &query ('Should I resume the current command (y/n)? [y]');
+ &interrupt ('Command aborted!') if ! /^(y|yes)$/i;
+ }
+}
+
+# Identification and filename services.
+
+## Return a sensible suggestion for our probable email address.
+
+sub guess_here_email
+{
+ return $here_email if $here_email;
+
+ chop ($_ = `hostname`);
+ if (/\./)
+ {
+ $_ = "$ENV{'LOGNAME'}@$_";
+ }
+ else
+ {
+ $_ .= "!$ENV{'LOGNAME'}";
+ }
+ tr/A-Z/a-z/;
+ return $_;
+}
+
+## Use forgiving rules to test for equivalence between EMAIL_LEFT
+## and EMAIL_RIGHT.
+
+sub equivalent_email
+{
+ local ($email_left, $email_right) = @_;
+ local ($user_left, $user_right, $domain_left, $domain_right);
+
+ if ($email_left =~ /(.+)@(.+)/)
+ {
+ ($user_left, $domain_left) = ($1, $2);
+ }
+ elsif ($email_left =~ /(.+)!([^!]+)/)
+ {
+ ($user_left, $domain_left) = ($2, $1);
+ }
+ else
+ {
+ ($user_left, $domain_left) = ($email_left, '');
+ }
+
+ if ($email_right =~ /(.+)@(.+)/)
+ {
+ ($user_right, $domain_right) = ($1, $2);
+ }
+ elsif ($email_right =~ /(.+)!([^!]+)/)
+ {
+ ($user_right, $domain_right) = ($2, $1);
+ }
+ else
+ {
+ ($user_right, $domain_right) = ($email_right, '');
+ }
+
+ $domain_left =~ s/\.uucp$//;
+ $domain_right =~ s/\.uucp$//;
+
+ return 0 if ($user_left !~ /^$user_right(-batch)?$/
+ && $user_right !~ /^$user_left(-batch)?$/);
+
+ return 0 if ($domain_left !~ /$domain_right$/
+ && $domain_right !~ /$domain_left$/);
+ 1;
+}
+
+## Return the given filename expanded so the system will recognize it.
+
+sub expand_filename
+{
+ local ($pwd);
+
+ $_ = $_[0];
+ if (/^~/)
+ {
+ return $ENV{'HOME'} if /^~$/;
+ s|^~/|$ENV{'HOME'}/|;
+ }
+ return $_ if /^\//;
+
+ chop ($pwd = `pwd`);
+ "$pwd/$_";
+}
+
+## Return the given directory normalized so the user will like
+## it more. However, still avoid relative notations.
+
+sub normalize_directory
+{
+ return '~' if $_[0] eq $ENV{'HOME'};
+
+ $_ = $_[0];
+ s|^$ENV{'HOME'}/|~/|;
+ chop ($_ = `cd $_; pwd`) if ! /^[~\/]/;
+ $_;
+}
+
+## Ensure intermediate directories exist by creating them as needed,
+## and that the appropriate permissions are set for the FILE to be
+## created or replaced.
+
+sub prepare_filename
+{
+ local ($filename) = @_;
+ local (@filename, $counter);
+
+ if (-e $filename)
+ {
+ &interrupt ("Cannot modify read-only file \`$filename\'")
+ if ! -w $filename;
+ return;
+ }
+
+ @filename = split (/\//, $filename);
+ pop @filename;
+
+ for ($counter = $filename[0] ? 0 : 1; $counter < @filename; $counter++)
+ {
+ $filename = join ('/', @filename[0 .. $counter]);
+ next if -d $filename;
+ &warn (" Creating new directory \`$filename\'");
+ if (! mkdir ($filename, 0755))
+ {
+ &interrupt ("Cannot create directory \`$filename\'");
+ return;
+ }
+ }
+}
+
+# Various services.
+
+## Says whether if FILE should be ignored.
+
+sub ignorable_file
+{
+ local ($file) = @_;
+
+ foreach (keys %ignore)
+ {
+ if (/^!(.*)/)
+ {
+ return 1 if $file !~ /^$1$/;
+ }
+ else
+ {
+ return 1 if $file =~ /^$_$/;
+ }
+ }
+ 0;
+}
+
+## Initialize @site_set according to the given SET.
+
+sub decode_site_set
+{
+ local ($set) = @_;
+ local ($index, $counter);
+
+ if ($set eq '')
+ {
+ @site_set = 0 .. @remote - 1;
+ }
+ elsif ($set eq '!')
+ {
+ @site_set = ();
+ }
+ elsif ($set =~ /!(.*)/)
+ {
+ @site_set = 0 .. @remote - 1;
+ foreach (split (' ', $1))
+ {
+ $site_set[&validated_remote_index ($_)] = '';
+ }
+ @site_set = grep (/./, @site_set);
+ }
+ else
+ {
+ @site_set = ();
+ @copy_list = (); # used to parallel "from" and "check" lines
+ $counter = 0;
+ foreach (split (' ', $set))
+ {
+ $index = &validated_remote_index ($_);
+ $copy_list[$counter++] = $index;
+ $site_set[$index] = $index;
+ }
+ @site_set = grep (/./, @site_set);
+ }
+}
+
+## Create a new REMOTE address with its related DIRECTORY.
+
+sub create_remote
+{
+ local ($remote, $directory) = @_;
+
+ push (@remote, $remote);
+ $remote{$remote} = $directory;
+ foreach (keys %signature)
+ {
+ $signature{$_} .= ' -';
+ }
+ $save_config = 1;
+}
+
+## Alter a REMOTE address to a NEW_REMOTE address, known to be equivalent.
+
+sub change_remote
+{
+ local ($remote, $new_remote) = @_;
+
+ return if $remote eq $new_remote;
+ $remote[&validated_remote_index ($remote)] = $new_remote;
+ $remote{$new_remote} = $remote{$remote};
+ delete $remote{$remote};
+ $save_config = 1;
+}
+
+## Destroy information related to a REMOTE address.
+
+sub delete_remote
+{
+ local ($remote) = @_;
+ local (@signature, $index);
+
+ $index = &validated_remote_index ($remote);
+ @remote = @remote[0 .. $index - 1, $index + 1 .. @remote - 1];
+ delete $remote{$remote};
+
+ foreach (keys %signature)
+ {
+ @signature = split (/ /, $signature{$_});
+ $signature{$_}
+ = join (' ',
+ @signature[0 .. $index - 1, $index + 1 .. @signature - 1]);
+ }
+ $save_config = 1;
+}
+
+## Return the index of a given REMOTE, interrupting the command if not found.
+
+sub validated_remote_index
+{
+ local ($remote) = @_;
+ local ($index);
+
+ $index = &remote_index ($remote);
+ return $index if $index >= 0;
+ &interrupt ("Specification \`$remote\' invalid for remote address");
+}
+
+## Return the index of a given REMOTE, or a negative value if not found.
+
+sub remote_index
+{
+ local ($remote) = @_;
+ local ($index);
+
+ $remote = $remote[$remote - 1] if ($remote > 0 && $remote <= @remote);
+ $index = 0;
+ foreach (@remote)
+ {
+ return $index if $remote eq $_;
+ $index++;
+ }
+ -1;
+}
+
+# Interactive dialog and error processing.
+
+## Query the user interactively with QUESTION, return the reply
+## in $_. An empty reply means the default signature from the QUESTION
+## if any, written as "...? [DEFAULT]". Echo the input if used
+## in process.
+
+sub query
+{
+ local ($query) = @_;
+
+ while (1)
+ {
+ print STDERR "\a$query ";
+ $_ = <>;
+ if ($_)
+ {
+ print STDERR if ! -t;
+ chop;
+ if (/^\?$/)
+ {
+ print STDERR $NORMAL_HELP;
+ next;
+ }
+ if (/^! *(.*)$/)
+ {
+ if ($1)
+ {
+ system $1;
+ }
+ elsif (defined $ENV{$SHELL})
+ {
+ system $ENV{$SHELL};
+ }
+ else
+ {
+ system $SH;
+ }
+ next;
+ }
+ if (/^abort$/)
+ {
+ if ($save_config)
+ {
+ &diagnose
+ ("Modifications to file \`$CONFIG\' are unsaved");
+ &query ('Should I stop without saving them (y/n)? [n]');
+ if (/^(y|yes)$/i)
+ {
+ $command_loop = 0;
+ $process_loop = 0;
+ &interrupt ('Program aborted!');
+ }
+ }
+ &interrupt ('Command aborted!');
+ }
+ $_ = $1 if (! $_ && $query =~ /\? \[(.+)\]$/);
+ return;
+ }
+ else
+ {
+ print STDERR "quit\n";
+ $_ = 'quit';
+ return;
+ }
+ }
+}
+
+## Issue a message for the (possibly interactive) user.
+
+sub warn
+{
+ warn " $_[0]\n";
+}
+
+## Issue an error message for the (possibly interactive) user.
+
+sub diagnose
+{
+ warn "* $_[0]\n";
+}
+
+## Issue an error message for the (possibly interactive) user, while
+## interrupting the command being currently executed. Abort if none.
+
+sub interrupt
+{
+ if ($process_loop)
+ {
+ $workdir_to_unlink = '';
+ $invoice_to_unlink = '';
+ %signature_received = ();
+
+ warn "* $_[0]\n";
+ last PROCESS_LOOP;
+ }
+ elsif ($command_loop)
+ {
+ warn "* $_[0]\n";
+ next COMMAND_LOOP;
+ }
+ else
+ {
+ die "** $_[0]\n";
+ }
+}
+
+# Local Variables:
+# mode: perl
+# End:
diff --git a/src/scripts.def b/src/scripts.def
new file mode 100644
index 0000000..50c4e67
--- /dev/null
+++ b/src/scripts.def
@@ -0,0 +1,281 @@
+/*
+
+ This file defines the shell script strings in normal shell script format.
+ The template will reformat them so that after they pass through the C
+ compiler, they will be restored to the form you see here (with leading
+ tabs stripped, per shell "heredoc" conventions).
+
+ */
+
+AutoGen Definitions scripts.tpl;
+
+#ifdef EMIT_TEMPLATE
+text = {
+ name = ;
+ body = <<- _EOBody_
+
+ _EOBody_;
+};
+#endif
+
+
+text = {
+ name = contents;
+ body = <<- _EOBody_
+ #
+ # This shar contains:
+ # length mode name
+ # ------ ---------- ------------------------------------------
+ _EOBody_;
+};
+
+
+text = {
+ name = noisy_mkdir;
+ body = <<- _EOBody_
+ ${echo} $echo_n 'x - %s: '$echo_c
+ mkdir '%s'
+ _EOBody_;
+};
+
+
+text = {
+ name = continue_archive;
+ body = <<- _EOBody_
+ #!/bin/sh
+ # This is `%s' (part %d of %s).
+ # Do not concatenate these parts, unpack them in order with `/bin/sh'.
+ # File `%s' is being continued...
+ #
+ lock_dir=_sh%05d
+ _EOBody_;
+};
+
+
+text = {
+ name = dev_tty_check;
+ body = <<- _EOBody_
+ if test -n "`ls /dev/tty 2>/dev/null`"
+ then shar_tty=/dev/tty
+ else shar_tty= ; fi
+ _EOBody_;
+};
+
+
+text = {
+ name = echo_checks;
+ body = <<- _EOBody_
+ if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null
+ then if (echo -n test; echo 1,2,3) | grep n >/dev/null
+ then shar_n= shar_c='
+ '
+ else shar_n=-n shar_c= ; fi
+ else shar_n= shar_c='\c' ; fi
+ _EOBody_;
+};
+
+
+text = {
+ name = echo_string;
+ body = <<- _EOBody_
+ ${echo} '%s'
+ _EOBody_;
+};
+
+
+text = {
+ name = file_leader;
+ body = <<- _EOBody_
+ #!/bin/sh
+ # This is %s%s archive (produced by GNU %s %s).
+ # To extract the files from this archive, save it to some FILE, remove
+ # everything before the `#!/bin/sh' line above, then type `sh FILE'.
+ #
+ lock_dir=_sh%05d
+ _EOBody_;
+};
+
+
+text = {
+ name = i18n;
+ body = <<- _EOBody_
+ save_IFS="${IFS}"
+ IFS="${IFS}:"
+ gettext_dir=FAILED
+ locale_dir=FAILED
+ first_param="$1"
+ for dir in $PATH
+ do
+ if test "$gettext_dir" = FAILED && test -f $dir/gettext \
+ && ($dir/gettext --version >/dev/null 2>&1)
+ then
+ case `$dir/gettext --version 2>&1 | sed 1q` in
+ *GNU*) gettext_dir=$dir ;;
+ esac
+ fi
+ if test "$locale_dir" = FAILED && test -f $dir/shar \
+ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
+ then
+ locale_dir=`$dir/shar --print-text-domain-dir`
+ fi
+ done
+ IFS="$save_IFS"
+ if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
+ then
+ echo=echo
+ else
+ TEXTDOMAINDIR=$locale_dir
+ export TEXTDOMAINDIR
+ TEXTDOMAIN=sharutils
+ export TEXTDOMAIN
+ echo="$gettext_dir/gettext -s"
+ fi
+ _EOBody_;
+};
+
+
+text = {
+ name = lock_dir;
+ body = <<- _EOBody_
+ ${echo} $shar_n 'x - %s' "\`${lock_dir}': "$shar_c
+ _EOBody_;
+};
+
+
+text = {
+ name = md5check;
+ body = <<- _EOBody_
+ MD5SUM=${MD5SUM-md5sum}
+ f=`${MD5SUM} --version | egrep '^md5sum .*(core|text)utils'`
+ test -n "${f}" && md5check=true || md5check=false
+ ${md5check} || \
+ echo '%s'
+ _EOBody_;
+};
+
+
+text = {
+ name = md5test;
+ body = <<- _EOBody_
+ if ${md5check}
+ then (
+ ${MD5SUM} -c >/dev/null 2>&1 || ${echo} '%s: %s'
+ ) << \%s
+ _EOBody_;
+};
+
+
+text = {
+ name = query_answers;
+ body = <<- _EOBody_
+ ans_yes='%s' yes_means='%s'
+ ans_no='%s' no_means='%s'
+ ans_all='%s' all_means='%s'
+ ans_none='%s' none_means='%s'
+ ans_help='%s' help_means='%s'
+ ans_quit='%s' quit_means='%s'
+ user_answers='no yes all none help quit'
+ shar_wish='no'
+ ans_list="
+[<${ans_no}>, ${ans_yes}, ${ans_all}, ${ans_none}, ${ans_help}, ${ans_quit}] ? "
+
+ eval_ans='
+ if test -z "${shar_wish}" ; then answer=no ; else
+ answer='help'
+ case "${ans_yes}" in "${shar_wish}"* ) answer=yes ; break ;; esac
+ case "${ans_no}" in "${shar_wish}"* ) answer=no ; break ;; esac
+ case "${ans_all}" in "${shar_wish}"* ) answer=all ; break ;; esac
+ case "${ans_none}" in "${shar_wish}"* ) answer=none ; break ;; esac
+ case "${ans_quit}" in "${shar_wish}"* ) answer=quit ; break ;; esac
+ fi'
+ _EOBody_;
+};
+
+text = {
+ name = query_check;
+ body = <<- _EOBody_
+ case "${shar_wish}" in
+ quit) ${echo} '%s'; exit 1 ;;
+ none) ${echo} 'x - %s' ; shar_skip=yes ;;
+ no) shar_skip=yes ;;
+ yes | all) shar_skip=no ;;
+ esac
+ else
+ shar_skip=no
+ fi
+ if test $shar_skip = yes; then
+ ${echo} 'x - %s'
+ _EOBody_;
+};
+
+
+text = {
+ name = query_user;
+ body = <<- _EOBody_
+ while : ; do
+ answer=${shar_wish}
+ case $shar_wish in
+ all) ${echo} 'x - %s' ; break ;;
+ none) break ;;
+ *) ${echo} $shar_n "? - %s${ans_list}"$shar_c
+ if test -n "$shar_tty"
+ then read shar_wish < $shar_tty
+ else read shar_wish
+ fi
+ eval "${eval_ans}" ;;
+ esac
+ shar_wish=help
+ for f in ${user_answers}
+ do eval printf "'%%-9s %%s\n'" \"\${ans_${f}}\" \"\${${f}_means}\"
+ done
+ done
+ shar_wish=${answer}
+ _EOBody_;
+};
+
+
+text = {
+ name = seq_check;
+ body = <<- _EOBody_
+ if test ! -r ${lock_dir}/seq; then
+ ${echo} '%s'
+ exit 1
+ fi
+ shar_sequence=`cat ${lock_dir}/seq`
+ test "$shar_sequence" = %d
+ _EOBody_;
+};
+
+
+text = {
+ name = timestamp;
+ body = <<- _EOBody_
+ f=shar-touch.$$
+ st1=200112312359.59
+ st2=123123592001.59
+ st2tr=123123592001.5 # old SysV 14-char limit
+ st3=1231235901
+
+ if touch -am -t ${st1} ${f} >/dev/null 2>&1 && \
+ test ! -f ${st1} && test -f ${f}; then
+ shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
+
+ elif touch -am ${st2} ${f} >/dev/null 2>&1 && \
+ test ! -f ${st2} && test ! -f ${st2tr} && test -f ${f}; then
+ shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
+
+ elif touch -am ${st3} ${f} >/dev/null 2>&1 && \
+ test ! -f ${st3} && test -f ${f}; then
+ shar_touch='touch -am $3$4$5$6$2 "$8"'
+
+ else
+ shar_touch=:
+ echo
+ ${echo} '%s'
+ ${echo} '%s'
+ echo
+ fi
+ rm -f ${st1} ${st2} ${st2tr} ${st3} ${f}
+ #
+ _EOBody_;
+};
diff --git a/src/scripts.tpl b/src/scripts.tpl
new file mode 100644
index 0000000..3af9521
--- /dev/null
+++ b/src/scripts.tpl
@@ -0,0 +1,34 @@
+[= autogen5 template x =]
+[= (dne " * " "/* ")
+=]
+ *
+[= (gpl "shar" " * ")
+;; /* =]
+ *
+ * This file defines the shell script strings in C format.
+ * The compiler will reconstruct the original string found in scripts.def.
+ * shar.c will emit these strings into the constructed shar archive.
+ * See "scripts.def" for rationale.
+ */
+[=
+
+ (define body-text "")
+ (make-header-guard "shar") =][=
+
+FOR text =][=
+
+ (set! body-text (string-append (get "body") "\n"))
+
+ (string-append
+ (sprintf "\n\nstatic const char %s_z[%d] = \n"
+ (get "name") (+ 1 (string-length body-text)) )
+
+ (def-file-line "body" c-file-line-fmt)
+ (kr-string body-text) ";" ) =][=
+
+ENDFOR text
+
+=]
+
+#endif /* [= (. header-guard) =] */
+/* end of [= (out-name) =] */
diff --git a/src/scripts.x b/src/scripts.x
new file mode 100644
index 0000000..91f7546
--- /dev/null
+++ b/src/scripts.x
@@ -0,0 +1,230 @@
+/* -*- buffer-read-only: t -*- vi: set ro:
+ *
+ * DO NOT EDIT THIS FILE (scripts.x)
+ *
+ * It has been AutoGen-ed Sunday July 1, 2007 at 04:54:14 AM PDT
+ * From the definitions scripts.def
+ * and the template file scripts.tpl
+ *
+ * shar is free software.
+ *
+ * You may 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.
+ *
+ * shar 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 shar. If not, write to:
+ * The Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301, USA.
+ *
+ * This file defines the shell script strings in C format.
+ * The compiler will reconstruct the original string found in scripts.def.
+ * shar.c will emit these strings into the constructed shar archive.
+ * See "scripts.def" for rationale.
+ */
+#ifndef SHAR_SCRIPTS_X_GUARD
+#define SHAR_SCRIPTS_X_GUARD 1
+
+static const char contents_z[113] =
+#line 25 "scripts.def"
+"#\n\
+# This shar contains:\n\
+# length mode name\n\
+# ------ ---------- ------------------------------------------\n";
+
+static const char noisy_mkdir_z[46] =
+#line 36 "scripts.def"
+"${echo} $echo_n 'x - %s: '$echo_c\n\
+mkdir '%s'\n";
+
+static const char continue_archive_z[167] =
+#line 45 "scripts.def"
+"#!/bin/sh\n\
+# This is `%s' (part %d of %s).\n\
+# Do not concatenate these parts, unpack them in order with `/bin/sh'.\n\
+# File `%s' is being continued...\n\
+#\n\
+lock_dir=_sh%05d\n";
+
+static const char dev_tty_check_z[83] =
+#line 58 "scripts.def"
+"if test -n \"`ls /dev/tty 2>/dev/null`\"\n\
+then shar_tty=/dev/tty\n\
+else shar_tty= ; fi\n";
+
+static const char echo_checks_z[202] =
+#line 68 "scripts.def"
+"if (echo \"testing\\c\"; echo 1,2,3) | grep c >/dev/null\n\
+then if (echo -n test; echo 1,2,3) | grep n >/dev/null\n\
+ then shar_n= shar_c='\n\
+'\n\
+ else shar_n=-n shar_c= ; fi\n\
+else shar_n= shar_c='\\c' ; fi\n";
+
+static const char echo_string_z[14] =
+#line 81 "scripts.def"
+"${echo} '%s'\n";
+
+static const char file_leader_z[218] =
+#line 89 "scripts.def"
+"#!/bin/sh\n\
+# This is %s%s archive (produced by GNU %s %s).\n\
+# To extract the files from this archive, save it to some FILE, remove\n\
+# everything before the `#!/bin/sh' line above, then type `sh FILE'.\n\
+#\n\
+lock_dir=_sh%05d\n";
+
+static const char i18n_z[736] =
+#line 102 "scripts.def"
+"save_IFS=\"${IFS}\"\n\
+IFS=\"${IFS}:\"\n\
+gettext_dir=FAILED\n\
+locale_dir=FAILED\n\
+first_param=\"$1\"\n\
+for dir in $PATH\n\
+do\n\
+ if test \"$gettext_dir\" = FAILED && test -f $dir/gettext \\\n\
+ && ($dir/gettext --version >/dev/null 2>&1)\n\
+ then\n\
+ case `$dir/gettext --version 2>&1 | sed 1q` in\n\
+ *GNU*) gettext_dir=$dir ;;\n\
+ esac\n\
+ fi\n\
+ if test \"$locale_dir\" = FAILED && test -f $dir/shar \\\n\
+ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)\n\
+ then\n\
+ locale_dir=`$dir/shar --print-text-domain-dir`\n\
+ fi\n\
+done\n\
+IFS=\"$save_IFS\"\n\
+if test \"$locale_dir\" = FAILED || test \"$gettext_dir\" = FAILED\n\
+then\n\
+ echo=echo\n\
+else\n\
+ TEXTDOMAINDIR=$locale_dir\n\
+ export TEXTDOMAINDIR\n\
+ TEXTDOMAIN=sharutils\n\
+ export TEXTDOMAIN\n\
+ echo=\"$gettext_dir/gettext -s\"\n\
+fi\n";
+
+static const char lock_dir_z[52] =
+#line 140 "scripts.def"
+"${echo} $shar_n 'x - %s' \"\\`${lock_dir}': \"$shar_c\n";
+
+static const char md5check_z[165] =
+#line 148 "scripts.def"
+"MD5SUM=${MD5SUM-md5sum}\n\
+f=`${MD5SUM} --version | egrep '^md5sum .*(core|text)utils'`\n\
+test -n \"${f}\" && md5check=true || md5check=false\n\
+${md5check} || \\\n\
+ echo '%s'\n";
+
+static const char md5test_z[99] =
+#line 160 "scripts.def"
+" if ${md5check}\n\
+ then (\n\
+ ${MD5SUM} -c >/dev/null 2>&1 || ${echo} '%s: %s'\n\
+ ) << \\%s\n";
+
+static const char query_answers_z[769] =
+#line 171 "scripts.def"
+"ans_yes='%s' yes_means='%s'\n\
+ans_no='%s' no_means='%s'\n\
+ans_all='%s' all_means='%s'\n\
+ans_none='%s' none_means='%s'\n\
+ans_help='%s' help_means='%s'\n\
+ans_quit='%s' quit_means='%s'\n\
+user_answers='no yes all none help quit'\n\
+shar_wish='no'\n\
+ans_list=\"\n\
+[<${ans_no}>, ${ans_yes}, ${ans_all}, ${ans_none}, ${ans_help}, ${ans_quit}] ? \"\n\n\
+eval_ans='\n\
+if test -z \"${shar_wish}\" ; then answer=no ; else\n\
+ answer='help'\n\
+ case \"${ans_yes}\" in \"${shar_wish}\"* ) answer=yes ; break ;; esac\n\
+ case \"${ans_no}\" in \"${shar_wish}\"* ) answer=no ; break ;; esac\n\
+ case \"${ans_all}\" in \"${shar_wish}\"* ) answer=all ; break ;; esac\n\
+ case \"${ans_none}\" in \"${shar_wish}\"* ) answer=none ; break ;; esac\n\
+ case \"${ans_quit}\" in \"${shar_wish}\"* ) answer=quit ; break ;; esac\n\
+fi'\n";
+
+static const char query_check_z[246] =
+#line 197 "scripts.def"
+" case \"${shar_wish}\" in\n\
+ quit) ${echo} '%s'; exit 1 ;;\n\
+ none) ${echo} 'x - %s' ; shar_skip=yes ;;\n\
+ no) shar_skip=yes ;;\n\
+ yes | all) shar_skip=no ;;\n\
+ esac\n\
+else\n\
+ shar_skip=no\n\
+fi\n\
+if test $shar_skip = yes; then\n\
+ ${echo} 'x - %s'\n";
+
+static const char query_user_z[486] =
+#line 215 "scripts.def"
+" while : ; do\n\
+ answer=${shar_wish}\n\
+ case $shar_wish in\n\
+ all) ${echo} 'x - %s' ; break ;;\n\
+ none) break ;;\n\
+ *) ${echo} $shar_n \"? - %s${ans_list}\"$shar_c\n\
+ if test -n \"$shar_tty\"\n\
+ then read shar_wish < $shar_tty\n\
+ else read shar_wish\n\
+ fi\n\
+ eval \"${eval_ans}\" ;;\n\
+ esac\n\
+ shar_wish=help\n\
+ for f in ${user_answers}\n\
+ do eval printf \"'%%-9s %%s\\n'\" \\\"\\${ans_${f}}\\\" \\\"\\${${f}_means}\\\"\n\
+ done\n\
+ done\n\
+ shar_wish=${answer}\n";
+
+static const char seq_check_z[125] =
+#line 240 "scripts.def"
+"if test ! -r ${lock_dir}/seq; then\n\
+ ${echo} '%s'\n\
+ exit 1\n\
+fi\n\
+shar_sequence=`cat ${lock_dir}/seq`\n\
+test \"$shar_sequence\" = %d\n";
+
+static const char timestamp_z[661] =
+#line 253 "scripts.def"
+"f=shar-touch.$$\n\
+st1=200112312359.59\n\
+st2=123123592001.59\n\
+st2tr=123123592001.5 # old SysV 14-char limit\n\
+st3=1231235901\n\n\
+if touch -am -t ${st1} ${f} >/dev/null 2>&1 && \\\n\
+ test ! -f ${st1} && test -f ${f}; then\n\
+ shar_touch='touch -am -t $1$2$3$4$5$6.$7 \"$8\"'\n\n\
+elif touch -am ${st2} ${f} >/dev/null 2>&1 && \\\n\
+ test ! -f ${st2} && test ! -f ${st2tr} && test -f ${f}; then\n\
+ shar_touch='touch -am $3$4$5$6$1$2.$7 \"$8\"'\n\n\
+elif touch -am ${st3} ${f} >/dev/null 2>&1 && \\\n\
+ test ! -f ${st3} && test -f ${f}; then\n\
+ shar_touch='touch -am $3$4$5$6$2 \"$8\"'\n\n\
+else\n\
+ shar_touch=:\n\
+ echo\n\
+ ${echo} '%s'\n\
+ ${echo} '%s'\n\
+ echo\n\
+fi\n\
+rm -f ${st1} ${st2} ${st2tr} ${st3} ${f}\n\
+#\n";
+
+#endif /* SHAR_SCRIPTS_X_GUARD */
+/* end of scripts.x */
diff --git a/src/shar.c b/src/shar.c
new file mode 100644
index 0000000..186c66c
--- /dev/null
+++ b/src/shar.c
@@ -0,0 +1,2325 @@
+/* Handle so called `shell archives'.
+
+ Copyright (C) 1994, 1995, 1996, 2002, 2005,
+ 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "liballoca.h"
+
+#include "system.h"
+#include "basename.h"
+#include "error.h"
+#include "exit.h"
+#include "xalloc.h"
+#include "xgetcwd.h"
+
+#include "scripts.x"
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#else
+# define setlocale(Category, Locale)
+#endif
+#include "gettext.h"
+
+/*
+ * _() and N_() strings are both extracted into the .pot file.
+ */
+#define _(str) gettext (str)
+#define N_(str) gettext_maybe (str)
+
+#ifndef NUL
+# define NUL '\0'
+#endif
+
+static const char *cut_mark_line
+ = "---- Cut Here and feed the following to sh ----\n";
+
+/* Delimiter to put after each file. */
+#define DEFAULT_HERE_DELIMITER "SHAR_EOF"
+
+/* Character which goes in front of each line. */
+#define DEFAULT_LINE_PREFIX_1 'X'
+
+/* Character which goes in front of each line if here_delimiter[0] ==
+ DEFAULT_LINE_PREFIX_1. */
+#define DEFAULT_LINE_PREFIX_2 'Y'
+
+/* Shell command able to count characters from its standard input. We
+ have to take care for the locale setting because wc in multi-byte
+ character environments get different results. */
+#define CHARACTER_COUNT_COMMAND "LC_ALL=C wc -c <"
+
+/* Maximum length for a text line before it is considered binary. */
+#define MAXIMUM_NON_BINARY_LINE 200
+
+/* System related declarations. */
+
+#include <ctype.h>
+
+#if STDC_HEADERS
+# define ISASCII(Char) 1
+#else
+# ifdef isascii
+# define ISASCII(Char) isascii (Char)
+# else
+# if HAVE_ISASCII
+# define ISASCII(Char) isascii (Char)
+# else
+# define ISASCII(Char) ((Char) & 0x7f == (unsigned char) (Char))
+# endif
+# endif
+#endif
+
+#include <time.h>
+
+struct tm *localtime ();
+
+#ifdef HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+/* Determine whether an integer type is signed, and its bounds.
+ This code assumes two's (or one's!) complement with no holes. */
+
+/* The extra casts work around common compiler bugs,
+ e.g. Cray C 5.0.3.0 when t == time_t. */
+#ifndef TYPE_SIGNED
+# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+#endif
+#ifndef TYPE_MINIMUM
+# define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
+ ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
+ : (t) 0))
+#endif
+#ifndef TYPE_MAXIMUM
+# define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
+#endif
+
+#if !NO_WALKTREE
+
+/* Declare directory reading routines and structures. */
+
+#ifdef __MSDOS__
+# include "msd_dir.h"
+#else
+# include DIRENT_HEADER
+#endif
+
+#if HAVE_DIRENT_H
+# define NAMLEN(dirent) (strlen((dirent)->d_name))
+#else
+# define NAMLEN(dirent) ((dirent)->d_namlen)
+# ifndef __MSDOS__
+# define dirent direct
+# endif
+#endif
+
+#endif /* !NO_WALKTREE */
+
+/* Option variables. */
+
+#include "getopt.h"
+#include "inttostr.h"
+#include "md5.h"
+
+/* No Brown-Shirt mode. */
+static int vanilla_operation_mode = 0;
+
+/* Mixed text and binary files. */
+static int mixed_uuencoded_file_mode = -1;
+
+/* Flag for binary files. */
+static int uuencoded_file_mode = -1;
+
+/* Run input files through gzip (requires uuencoded_file_mode). */
+static int gzipped_file_mode = -1;
+
+/* -N option to gzip. */
+static int gzip_compression_level = 9;
+
+/* Run input files through bzip2 (requires uuencoded_file_mode). */
+static int bzipped_file_mode = -1;
+
+/* Run input files through compress (requires uuencoded_file_mode). */
+static int compressed_file_mode = -1;
+
+/* -bN option to compress */
+static int bits_per_compressed_byte = 12;
+
+/* Generate $shar_touch commands. */
+static int timestamp_mode = 1;
+
+/* Option to provide wc checking. */
+static int character_count_mode = 1;
+
+/* Option to provide MD5 sum checking. */
+static int md5_count_mode = 1;
+
+/* Use temp file instead of pipe to feed uudecode. This gives better
+ error detection, at expense of disk space. This is also necessary for
+ those versions of uudecode unwilling to read their standard input. */
+static int inhibit_piping_mode = 0;
+
+/* --no-i18n option to prevent internationalized shell archives. */
+static int no_i18n = 0;
+
+/* Character to get at the beginning of each line. */
+static int line_prefix = '\0';
+
+/* Option to generate "Archive-name:" headers. */
+static int net_headers_mode = 0;
+
+/* Documentation name for archive. */
+static char *archive_name = NULL;
+
+/* Option to provide append feedback at shar time. */
+static int quiet_mode = 0;
+
+/* Option to provide extract feedback at unshar time. */
+static int quiet_unshar_mode = 0;
+
+/* Pointer to delimiter string. */
+static const char *here_delimiter = DEFAULT_HERE_DELIMITER;
+
+/* Value of strlen (here_delimiter). */
+static size_t here_delimiter_length = 0;
+
+/* Use line_prefix even when first char does not force it. */
+static int mandatory_prefix_mode = 0;
+
+/* Option to provide cut mark. */
+static int cut_mark_mode = 0;
+
+/* Check if file exists. */
+static int check_existing_mode = 1;
+
+/* Interactive overwrite. */
+static int query_user_mode = 0;
+
+/* Allow positional parameters. */
+static int intermixed_parameter_mode = 0;
+
+/* Strip directories from filenames. */
+static int basename_mode;
+
+/* Switch for debugging on. */
+#if DEBUG
+static int debugging_mode = 0;
+#endif
+
+/* Split files in the middle. */
+static int split_file_mode = 0;
+
+/* File size limit in bytes. */
+static off_t file_size_limit = 0;
+
+/* Other global variables. */
+
+/* The name this program was run with. */
+const char *program_name;
+
+/* If non-zero, display usage information and exit. */
+static int show_help = 0;
+
+/* If non-zero, print the version on standard output and exit. */
+static int show_version = 0;
+
+/* File onto which the shar script is being written. */
+static FILE *output = NULL;
+
+/* Position for archive type message. */
+static off_t archive_type_position = 0;
+
+/* Position for first file in the shar file. */
+static off_t first_file_position = 0;
+
+/* Base for output filename. */
+static char *output_base_name = NULL;
+
+/* Actual output filename. */
+static char *output_filename = NULL;
+
+static char *submitter_address = NULL;
+
+/* Output file ordinal. FIXME: also flag for -o. */
+static int part_number = 0;
+
+/* Table saying whether each character is binary or not. */
+static unsigned char byte_is_binary[256];
+
+/* For checking file type and access modes. */
+static struct stat struct_stat;
+
+/* Nonzero if special NLS option (--print-text-domain-dir) is selected. */
+static int print_text_dom_dir = 0;
+
+/* The number used to make the intermediate files unique. */
+static int sharpid = 0;
+
+/* scribble space. */
+static size_t scribble_size = 1024 + (BUFSIZ * 2);
+static char* scribble = NULL;
+
+static int translate_script = 0;
+
+static char*
+gettext_maybe( char* pz )
+{
+ if (translate_script)
+ return gettext (pz);
+ return pz;
+}
+
+#if DEBUG
+# define DEBUG_PRINT(Format, Value) \
+ if (debugging_mode) \
+ { \
+ char buf[INT_BUFSIZE_BOUND (off_t)]; \
+ printf (Format, offtostr (Value, buf)); \
+ }
+#else
+# define DEBUG_PRINT(Format, Value)
+#endif
+
+static void open_output __P ((void));
+static void close_output __P ((void));
+static void usage __P ((int))
+#if defined __GNUC__ && ((__GNUC__ == 2 && __GNUC_MINOR__ >= 5) || __GNUC__ > 2)
+ __attribute__ ((noreturn))
+#endif
+;
+
+/* Walking tree routines. */
+
+/* Define a type just for easing ansi2knr's life. */
+typedef int (*walker_t) __P ((const char *, const char *));
+
+static void
+echo_status( const char* test_pz,
+ const char* ok_format_pz,
+ const char* bad_format_pz,
+ const char* what_pz,
+ int die_on_failure )
+{
+ static const char test_okay_z[] = "if %s\nthen ${echo} '";
+ static const char test_else_z[] = "'\nelse ${echo} '";
+ static const char test_fail_z[] = "if %s\nthen : ; else ${echo} '";
+ static const char test_exit_z[] = "'\n exit 1\nfi\n";
+ static const char test_fi_z[] = "'\nfi\n";
+
+ if (ok_format_pz != NULL)
+ {
+ fprintf (output, test_okay_z, test_pz);
+ fprintf (output, ok_format_pz, what_pz);
+
+ if (bad_format_pz != NULL)
+ {
+ fputs (test_else_z, output);
+ fprintf (output, bad_format_pz, what_pz);
+ }
+ }
+ else
+ {
+ fprintf (output, test_fail_z, test_pz);
+ fprintf (output, bad_format_pz, what_pz);
+ }
+
+ if (die_on_failure)
+ fputs (test_exit_z, output);
+ else
+ fputs (test_fi_z, output);
+}
+
+static void
+echo_text( const char* format_pz, const char* arg_pz, int cascade )
+{
+ fputs (" ${echo} 'x -", output);
+ fprintf (output, format_pz, arg_pz);
+ fputs (cascade ? "' &&\n" : "'\n", output);
+}
+
+#if !NO_WALKTREE
+
+/*--------------------------------------------------------------------------.
+| Recursively call ROUTINE on each entry, down the directory tree. NAME |
+| is the path to explore. RESTORE_NAME is the name that will be later |
+| relative to the unsharing directory. ROUTINE may also assume |
+| struct_stat is set, it accepts updated values for NAME and RESTORE_NAME. |
+`--------------------------------------------------------------------------*/
+
+static int
+walkdown (routine, local_name, restore_name)
+ walker_t routine;
+ const char *local_name;
+ const char *restore_name;
+{
+ DIR *directory; /* directory being scanned */
+ int status; /* status to return */
+
+ char *local_name_copy; /* writeable copy of local_name */
+ size_t local_name_length; /* number of characters in local_name_copy */
+ size_t sizeof_local_name; /* allocated size of local_name_copy */
+
+ char *restore_name_copy; /* writeable copy of restore_name */
+ int restore_offset; /* passdown copy of restore_name */
+ size_t restore_name_length; /* number of characters in restore_name_copy */
+ size_t sizeof_restore_name; /* allocated size of restore_name_copy */
+
+ if (stat (local_name, &struct_stat))
+ {
+ error (0, errno, local_name);
+ return 1;
+ }
+
+ if (!S_ISDIR (struct_stat.st_mode & S_IFMT))
+ return (*routine) (local_name, restore_name);
+
+ if (directory = opendir (local_name), !directory)
+ {
+ error (0, errno, local_name);
+ return 1;
+ }
+
+ status = 0;
+
+ /* include trailing '/' in length */
+
+ local_name_length = strlen (local_name) + 1;
+ sizeof_local_name = local_name_length + 32;
+ local_name_copy = xmalloc (sizeof_local_name);
+ memcpy (local_name_copy, local_name, local_name_length-1);
+ local_name_copy[ local_name_length-1 ] = '/';
+ local_name_copy[ local_name_length ] = NUL;
+
+ restore_name_length = strlen (restore_name) + 1;
+ sizeof_restore_name = restore_name_length + 32;
+ restore_name_copy = xmalloc (sizeof_restore_name);
+ memcpy (restore_name_copy, restore_name, restore_name_length-1);
+ restore_name_copy[ restore_name_length-1 ] = '/';
+ restore_name_copy[ restore_name_length ] = NUL;
+
+ {
+ size_t sz = (sizeof_local_name < sizeof_restore_name)
+ ? sizeof_restore_name : sizeof_local_name;
+ sz = 1024 + (sz * 2);
+ if (scribble_size < sz)
+ {
+ scribble_size = (sz + 4096) & 0x0FFF;
+ scribble = xrealloc (scribble, scribble_size);
+ }
+ }
+
+ if ((restore_name_copy[0] == '.') && (restore_name_copy[1] == '/'))
+ restore_offset = 2;
+ else
+ restore_offset = 0;
+
+ for (;;)
+ {
+ struct dirent *entry = readdir (directory);
+ const char* pzN;
+ int space_need;
+
+ if (entry == NULL)
+ break;
+
+ /* append the new file name after the trailing '/' char.
+ If we need more space, add in a buffer so we needn't
+ allocate over and over. */
+
+ pzN = entry->d_name;
+ if (*pzN == '.')
+ {
+ if (pzN[1] == NUL)
+ continue;
+ if ((pzN[1] == '.') && (pzN[2] == NUL))
+ continue;
+ }
+
+ space_need = 1 + NAMLEN (entry);
+ if (local_name_length + space_need > sizeof_local_name)
+ {
+ sizeof_local_name = local_name_length + space_need + 16;
+ local_name_copy = (char *)
+ xrealloc (local_name_copy, sizeof_local_name);
+ }
+ strcpy (local_name_copy + local_name_length, pzN);
+
+ if (restore_name_length + space_need > sizeof_restore_name)
+ {
+ sizeof_restore_name = restore_name_length + space_need + 16;
+ restore_name_copy = (char *)
+ xrealloc (restore_name_copy, sizeof_restore_name);
+ }
+ strcpy (restore_name_copy + restore_name_length, pzN);
+
+ status = walkdown (routine, local_name_copy,
+ restore_name_copy + restore_offset);
+ if (status != 0)
+ break;
+ }
+
+ /* Clean up. */
+
+ free (local_name_copy);
+ free (restore_name_copy);
+
+#if CLOSEDIR_VOID
+ closedir (directory);
+#else
+ if (closedir (directory))
+ {
+ error (0, errno, local_name);
+ return 1;
+ }
+#endif
+
+ return status;
+}
+
+#endif /* !NO_WALKTREE */
+
+/*------------------------------------------------------------------.
+| Walk through the directory tree, calling ROUTINE for each entry. |
+| ROUTINE may also assume struct_stat is set. |
+`------------------------------------------------------------------*/
+
+static int
+walktree (routine, local_name)
+ walker_t routine;
+ const char *local_name;
+{
+ const char *restore_name;
+ char *local_name_copy;
+
+ /* Remove crumb at end. */
+ {
+ int len = strlen (local_name);
+ char *cursor;
+
+ local_name_copy = (char *) alloca (len + 1);
+ memcpy (local_name_copy, local_name, len + 1);
+ cursor = local_name_copy + len - 1;
+
+ while (*cursor == '/' && cursor > local_name_copy)
+ *(cursor--) = NUL;
+ }
+
+ /* Remove crumb at beginning. */
+
+ if (basename_mode)
+ restore_name = basename (local_name_copy);
+ else if (!strncmp (local_name_copy, "./", 2))
+ restore_name = local_name_copy + 2;
+ else
+ restore_name = local_name_copy;
+
+#if NO_WALKTREE
+
+ /* Just act on current entry. */
+
+ {
+ int status = stat (local_name_copy, &struct_stat);
+
+ if (status != 0)
+ error (0, errno, local_name_copy);
+ else
+ status = (*routine) (local_name_copy, restore_name);
+
+ return status;
+ }
+
+#else
+
+ /* Walk recursively. */
+
+ return walkdown (routine, local_name_copy, restore_name);
+
+#endif
+}
+
+/* Generating parts of shar file. */
+
+/*---------------------------------------------------------------------.
+| Build a `drwxrwxrwx' string corresponding to MODE into MODE_STRING. |
+`---------------------------------------------------------------------*/
+
+static char *
+mode_string (mode)
+ unsigned mode;
+{
+ static char result[12];
+
+ strcpy (result, "----------");
+
+ if (mode & 00400)
+ result[1] = 'r';
+ if (mode & 00200)
+ result[2] = 'w';
+ if (mode & 00100)
+ result[3] = 'x';
+ if (mode & 04000)
+ result[3] = 's';
+ if (mode & 00040)
+ result[4] = 'r';
+ if (mode & 00020)
+ result[5] = 'w';
+ if (mode & 00010)
+ result[6] = 'x';
+ if (mode & 02000)
+ result[6] = 's';
+ if (mode & 00004)
+ result[7] = 'r';
+ if (mode & 00002)
+ result[8] = 'w';
+ if (mode & 00001)
+ result[9] = 'x';
+
+ return result;
+}
+
+/*-----------------------------------------------------------------------.
+| Generate shell code which, at *unshar* time, will study the properties |
+| of the unpacking system and set some variables accordingly. |
+`-----------------------------------------------------------------------*/
+
+static void
+generate_configure ()
+{
+ if (md5_count_mode)
+ fprintf (output, md5check_z, N_("\
+Note: not verifying md5sums. Consider installing GNU coreutils."));
+
+ if (no_i18n)
+ fputs ("echo=echo\n", output);
+ else
+ {
+ fputs (i18n_z, output);
+ /* Above the name of the program of the package which supports the
+ --print-text-domain-dir option has to be given. */
+ }
+
+ if (!quiet_unshar_mode)
+ {
+ if (vanilla_operation_mode)
+ fputs ("shar_tty= shar_n= shar_c='\n'\n",
+ output);
+ else
+ {
+ if (query_user_mode)
+ /* Check if /dev/tty exists. If yes, define shar_tty to
+ `/dev/tty', else, leave it empty. */
+
+ fputs (dev_tty_check_z, output);
+
+ /* Try to find a way to echo a message without newline. Set
+ shar_n to `-n' or nothing for an echo option, and shar_c
+ to `\c' or nothing for a string terminator. */
+
+ fputs (echo_checks_z, output);
+ }
+ }
+
+ if (timestamp_mode)
+ {
+ fprintf (output, timestamp_z, N_("\
+WARNING: not restoring timestamps. Consider getting and"),
+ N_("\
+installing GNU `touch'\\'', distributed in GNU coreutils..."));
+ }
+
+ if (file_size_limit == 0 || part_number == 1)
+ {
+ echo_status ("test ! -d ${lock_dir}", NULL,
+ N_("lock directory '${lock_dir}' exists"), NULL, 1);
+
+ /* Create locking directory. */
+ if (vanilla_operation_mode)
+ echo_status ("mkdir ${lock_dir}", NULL,
+ N_("failed to create lock directory"), NULL, 1);
+ else
+ {
+ const char* did_pz =
+ N_("x - created lock directory `'%s\\''.");
+ const char* not_pz =
+ N_("x - failed to create lock directory `'%s\\''.");
+ echo_status ("mkdir ${lock_dir}", did_pz, not_pz, "${lock_dir}", 1);
+ }
+ }
+
+ if (query_user_mode)
+ {
+ fprintf (output, query_answers_z,
+ N_("yes"), N_("overwrite this file"),
+ N_("no"), N_("skip this file"),
+ N_("all"), N_("overwrite all files"),
+ N_("none"), N_("overwrite no files"),
+ N_("help"), N_("explain choices"),
+ N_("quit"), N_("exit immediately"));
+ }
+}
+
+/*----------------------------------------------.
+| generate_mkdir |
+| Make sure it is done only once for each dir |
+`----------------------------------------------*/
+
+static int mkdir_alloc_ct = 0;
+static int mkdir_already_ct = 0;
+static char** mkdir_already;
+
+static void
+generate_mkdir (path)
+ const char *path;
+{
+ /* If already generated code for this dir creation, don't do again. */
+
+ {
+ int ct = mkdir_already_ct;
+ char** pp = mkdir_already;
+
+ while (--ct > 0)
+ {
+ if (strcmp (*(pp++), path) == 0)
+ return;
+ }
+ }
+
+ /* Haven't done this one. */
+
+ if (++mkdir_already_ct > mkdir_alloc_ct)
+ {
+ /*
+ * We need more name space. Get larger and larger chunks of space.
+ * The bound is when integers go negative. Too many directories. :)
+ *
+ * 16, 40, 76, 130, 211, 332, 514, 787, 1196, 1810, 2731, 4112, ...
+ */
+ mkdir_alloc_ct += 16 + (mkdir_alloc_ct/2);
+ if (mkdir_alloc_ct < 0)
+ error (EXIT_FAILURE, 0, _("Too many directories for mkdir generation"));
+
+ if (mkdir_already != NULL)
+ mkdir_already =
+ xrealloc (mkdir_already, mkdir_alloc_ct * sizeof (char*));
+ else
+ mkdir_already = xmalloc (mkdir_alloc_ct * sizeof (char*));
+ }
+
+ /* Add the directory into our "we've done this already" table */
+
+ mkdir_already[ mkdir_already_ct-1 ] = xstrdup (path);
+
+ /* Generate the text. */
+
+ fprintf (output, "if test ! -d '%s'; then\n", path);
+ if (!quiet_unshar_mode)
+ {
+ const char* did_pz =
+ N_("x - created directory `%s'\\''.");
+ const char* not_pz =
+ N_("x - failed to create directory `%s'\\''.");
+ fprintf (output, " mkdir '%s'\n", path);
+ echo_status ("test $? -eq 0", did_pz, not_pz, path, 1);
+ }
+ else
+ fprintf (output, " mkdir '%s' || exit 1\n", path);
+ fputs ("fi\n", output);
+}
+
+static void
+clear_mkdir_already (void)
+{
+ char** pp = mkdir_already;
+ int ct = mkdir_already_ct;
+
+ mkdir_already_ct = 0;
+ while (--ct >= 0)
+ {
+ free (*pp);
+ *(pp++) = NULL;
+ }
+}
+
+/*---.
+| ? |
+`---*/
+
+static void
+generate_mkdir_script (path)
+ const char *path;
+{
+ char *cursor;
+
+ for (cursor = strchr (path, '/'); cursor; cursor = strchr (cursor + 1, '/'))
+ {
+
+ /* Avoid empty string if leading or double '/'. */
+
+ if (cursor == path || *(cursor - 1) == '/')
+ continue;
+
+ /* Omit '.'. */
+
+ if (cursor[-1] == '.' && (cursor == path + 1 || cursor[-2] == '/'))
+ continue;
+
+ /* Temporarily terminate string. FIXME! */
+
+ *cursor = 0;
+ generate_mkdir (path);
+ *cursor = '/';
+ }
+}
+
+/* Walking routines. */
+
+/*---.
+| ? |
+`---*/
+
+static int
+check_accessibility (local_name, restore_name)
+ const char *local_name;
+ const char *restore_name;
+{
+ if (access (local_name, 4))
+ {
+ error (0, 0, _("Cannot access %s"), local_name);
+ return 1;
+ }
+
+ return 0;
+}
+
+/*---.
+| ? |
+`---*/
+
+static int
+generate_one_header_line (local_name, restore_name)
+ const char *local_name;
+ const char *restore_name;
+{
+ char buf[INT_BUFSIZE_BOUND (off_t)];
+ fprintf (output, "# %6s %s %s\n", offtostr (struct_stat.st_size, buf),
+ mode_string (struct_stat.st_mode), restore_name);
+ return 0;
+}
+
+/*---.
+| ? |
+`---*/
+
+static void
+generate_full_header (argc, argv)
+ int argc;
+ char *const *argv;
+{
+ char *current_directory;
+ time_t now;
+ struct tm *local_time;
+ char buffer[80]; /* FIXME: No fix limit in GNU... */
+ int warned_once;
+ int counter;
+
+ warned_once = 0;
+ for (counter = 0; counter < argc; counter++)
+ {
+
+ /* Skip positional parameters. */
+
+ if (intermixed_parameter_mode &&
+ (strcmp (argv[counter], "-B") == 0 ||
+ strcmp (argv[counter], "-T") == 0 ||
+ strcmp (argv[counter], "-M") == 0 ||
+ strcmp (argv[counter], "-z") == 0 ||
+ strcmp (argv[counter], "-Z") == 0 ||
+ strcmp (argv[counter], "-C") == 0))
+ {
+ if (!warned_once && strcmp (argv[counter], "-C") == 0)
+ {
+ error (0, 0, _("-C is being deprecated, use -Z instead"));
+ warned_once = 1;
+ }
+ continue;
+ }
+
+ if (walktree (check_accessibility, argv[counter]))
+ exit (EXIT_FAILURE);
+ }
+
+ if (net_headers_mode)
+ {
+ fprintf (output, "Submitted-by: %s\n", submitter_address);
+ fprintf (output, "Archive-name: %s%s%02d\n\n",
+ archive_name, (strchr (archive_name, '/')) ? "" : "/part",
+ part_number ? part_number : 1);
+ }
+
+ if (cut_mark_mode)
+ fputs (cut_mark_line, output);
+ {
+ char* pz = archive_name ? archive_name : "";
+ char* ch = archive_name ? ", a shell" : "a shell";
+
+ fprintf (output, file_leader_z, pz, ch, PACKAGE, VERSION, sharpid);
+ }
+
+ time (&now);
+ local_time = localtime (&now);
+ strftime (buffer, 79, "%Y-%m-%d %H:%M %Z", local_time);
+ fprintf (output, "# Made on %s by <%s>.\n",
+ buffer, submitter_address);
+
+ current_directory = xgetcwd ();
+ if (current_directory)
+ {
+ fprintf (output, "# Source directory was `%s'.\n",
+ current_directory);
+ free (current_directory);
+ }
+ else
+ error (0, errno, _("Cannot get current directory name"));
+
+ fputs ("#\n# Existing files ", output);
+ if (check_existing_mode)
+ fputs ("will *not* be overwritten, unless `-c' is specified.\n",
+ output);
+ else if (query_user_mode)
+ fputs ("MAY be overwritten.\n", output);
+ else
+ fputs ("WILL be overwritten.\n", output);
+
+ if (query_user_mode)
+ fputs ("# The unsharer will be INTERACTIVELY queried.\n",
+ output);
+
+ if (vanilla_operation_mode)
+ {
+ fputs (
+ "# This format requires very little intelligence at unshar time.\n# ",
+ output);
+ if (check_existing_mode || split_file_mode)
+ fputs ("\"if test\", ", output);
+ if (split_file_mode)
+ fputs ("\"cat\", \"rm\", ", output);
+ fputs ("\"echo\", \"mkdir\", and \"sed\" may be needed.\n", output);
+ }
+
+ if (split_file_mode)
+ {
+
+ /* May be split, explain. */
+
+ fputs ("#\n", output);
+ archive_type_position = ftello (output);
+ fprintf (output, "%-75s\n%-75s\n", "#", "#");
+ }
+
+ fputs (contents_z, output);
+
+ for (counter = 0; counter < argc; counter++)
+ {
+
+ /* Output names of files but not parameters. */
+
+ if (intermixed_parameter_mode &&
+ (strcmp (argv[counter], "-B") == 0 ||
+ strcmp (argv[counter], "-T") == 0 ||
+ strcmp (argv[counter], "-M") == 0 ||
+ strcmp (argv[counter], "-z") == 0 ||
+ strcmp (argv[counter], "-Z") == 0 ||
+ strcmp (argv[counter], "-C") == 0))
+ continue;
+
+ if (walktree (generate_one_header_line, argv[counter]))
+ exit (EXIT_FAILURE);
+ }
+ fputs ("#\n", output);
+
+ generate_configure ();
+
+ if (split_file_mode)
+ {
+ /* Now check the sequence. */
+ echo_status ("test ! -r ${lock_dir}/seq", NULL,
+ N_("Archives must be unpacked in sequence!\n"
+ "Please unpack part '`cat ${lock_dir}/seq`' next."),
+ NULL, 1);
+ }
+}
+
+void
+change_files (const char *restore_name, off_t remaining_size)
+{
+ /* Change to another file. */
+
+ DEBUG_PRINT (_("New file, remaining %s, "), remaining_size);
+ DEBUG_PRINT (_("Limit still %s\n"), file_size_limit);
+
+ /* Close the "&&" and report an error if any of the above
+ failed. */
+
+ fputs (" :\n", output);
+ echo_status ("test $? -ne 0", N_("restore of %s failed"), NULL,
+ restore_name, 0);
+
+ fputs ("'\n${echo} '", output);
+ fprintf (output, N_("End of part %d, continue with part %d"),
+ part_number, part_number+1);
+ fputs ("'\nexit 0\n", output);
+
+ close_output ();
+
+ /* Clear mkdir_already in case the user unshars out of order. */
+
+ clear_mkdir_already ();
+
+ /* Form the next filename. */
+
+ open_output ();
+ if (!quiet_mode)
+ fprintf (stderr, _("Starting file %s\n"), output_filename);
+
+ if (net_headers_mode)
+ {
+ fprintf (output, "Submitted-by: %s\n", submitter_address);
+ fprintf (output, "Archive-name: %s%s%02d\n\n", archive_name,
+ strchr (archive_name, '/') ? "" : "/part",
+ part_number ? part_number : 1);
+ }
+
+ if (cut_mark_mode)
+ fputs (cut_mark_line, output);
+
+ {
+ static const char part_z[] =
+ "part %02d of %s ";
+ char *nm = archive_name ? archive_name : "a multipart";
+ char *pz = xmalloc (sizeof(part_z) + strlen(nm) + 16);
+ sprintf (pz, part_z, part_number, nm);
+ fprintf (output, file_leader_z, pz, "", PACKAGE, VERSION, sharpid);
+ free (pz);
+ }
+
+ generate_configure ();
+
+ first_file_position = ftello (output);
+}
+
+/* Prepare a shar script. */
+
+/*---.
+| ? |
+`---*/
+
+static int
+shar (local_name, restore_name)
+ const char *local_name;
+ const char *restore_name;
+{
+ char buffer[BUFSIZ];
+ FILE *input;
+ off_t remaining_size;
+ int split_flag = 0; /* file split flag */
+ const char *file_type; /* text of binary */
+ const char *file_type_remote; /* text or binary, avoiding locale */
+ struct tm *restore_time;
+
+ /* Check to see that this is still a regular file and readable. */
+
+ if (!S_ISREG (struct_stat.st_mode & S_IFMT))
+ {
+ error (0, 0, _("%s: Not a regular file"), local_name);
+ return 1;
+ }
+ if (access (local_name, 4))
+ {
+ error (0, 0, _("Cannot access %s"), local_name);
+ return 1;
+ }
+
+ /* If file_size_limit set, get the current output length. */
+
+ if (file_size_limit)
+ {
+ off_t current_size = ftello (output);
+ remaining_size = file_size_limit - current_size - 1024;
+ DEBUG_PRINT (_("In shar: remaining size %s\n"), remaining_size);
+
+ if (!split_file_mode && current_size > first_file_position
+ && ((uuencoded_file_mode
+ ? struct_stat.st_size + struct_stat.st_size / 3
+ : struct_stat.st_size)
+ > remaining_size))
+ change_files (restore_name, remaining_size);
+ }
+ else
+ remaining_size = 0; /* give some value to the variable */
+
+ fprintf (output, "# ============= %s ==============\n",
+ restore_name);
+
+ generate_mkdir_script (restore_name);
+
+ if (struct_stat.st_size == 0)
+ {
+ file_type = _("empty");
+ file_type_remote = N_("(empty)");
+ input = NULL; /* give some value to the variable */
+ }
+ else
+ {
+
+ /* If mixed, determine the file type. */
+
+ if (mixed_uuencoded_file_mode)
+ {
+
+ /* Uuencoded was once decided through calling the `file'
+ program and studying its output: the method was slow and
+ error prone. There is only one way of doing it correctly,
+ and this is to read the input file, seeking for one binary
+ character. Considering the average file size, even reading
+ the whole file (if it is text) would be usually faster than
+ calling `file'. */
+
+ int character;
+ int line_length;
+
+ if (input = fopen (local_name, "rb"), input == NULL)
+ {
+ error (0, errno, _("Cannot open file %s"), local_name);
+ return 1;
+ }
+
+ /* Assume initially that the input file is text. Then try to prove
+ it is binary by looking for binary characters or long lines. */
+
+ uuencoded_file_mode = 0;
+ line_length = 0;
+ while (character = getc (input), character != EOF)
+ if (character == '\n')
+ line_length = 0;
+ else if (
+#ifdef __CHAR_UNSIGNED__
+ byte_is_binary[character]
+#else
+ byte_is_binary[character & 0xFF]
+#endif
+ || line_length == MAXIMUM_NON_BINARY_LINE)
+ {
+ uuencoded_file_mode = 1;
+ break;
+ }
+ else
+ line_length++;
+ fclose (input);
+
+ /* Text files should terminate by an end of line. */
+
+ if (line_length > 0)
+ uuencoded_file_mode = 1;
+ }
+
+ if (uuencoded_file_mode)
+ {
+ static int pid, pipex[2];
+
+ file_type = (compressed_file_mode ? _("compressed")
+ : gzipped_file_mode ? _("gzipped")
+ : bzipped_file_mode ? _("bzipped")
+ : _("binary"));
+ file_type_remote = (compressed_file_mode ? N_("(compressed)")
+ : gzipped_file_mode ? N_("(gzipped)")
+ : bzipped_file_mode ? N_("(bzipped)")
+ : N_("(binary)"));
+
+ /* Fork a uuencode process. */
+
+ pipe (pipex);
+ fflush (output);
+
+ if (pid = fork (), pid != 0)
+ {
+
+ /* Parent, create a file to read. */
+
+ if (pid < 0)
+ error (EXIT_FAILURE, errno, _("Could not fork"));
+ close (pipex[1]);
+ input = fdopen (pipex[0], "r");
+ if (!input)
+ {
+ error (0, errno, _("File %s (%s)"), local_name, file_type);
+ return 1;
+ }
+ }
+ else
+ {
+
+ /* Start writing the pipe with encodes. */
+
+ FILE *outptr;
+
+ if (compressed_file_mode)
+ {
+ sprintf (buffer, "compress -b%d < '%s'",
+ bits_per_compressed_byte, local_name);
+ input = popen (buffer, "r");
+ }
+ else if (gzipped_file_mode)
+ {
+ sprintf (buffer, "gzip -%d < '%s'",
+ gzip_compression_level, local_name);
+ input = popen (buffer, "r");
+ }
+ else if (bzipped_file_mode)
+ {
+ sprintf (buffer, "bzip2 < '%s'", local_name);
+ input = popen (buffer, "r");
+ }
+ else
+ input = fopen (local_name, "rb");
+
+ outptr = fdopen (pipex[1], "w");
+ fputs ("begin 600 ", outptr);
+ if (compressed_file_mode)
+ fprintf (outptr, "_sh%05d/cmp\n", sharpid);
+ else if (gzipped_file_mode)
+ fprintf (outptr, "_sh%05d/gzi\n", sharpid);
+ else if (bzipped_file_mode)
+ fprintf (outptr, "_sh%05d/bzi\n", sharpid);
+ else
+ fprintf (outptr, "%s\n", restore_name);
+ copy_file_encoded (input, outptr);
+ fprintf (outptr, "end\n");
+ if (compressed_file_mode || gzipped_file_mode
+ || bzipped_file_mode)
+ pclose (input);
+ else
+ fclose (input);
+
+ exit (EXIT_SUCCESS);
+ }
+ }
+ else
+ {
+ file_type = _("text");
+ file_type_remote = N_("(text)");
+
+ input = fopen (local_name, "r");
+ if (!input)
+ {
+ error (0, errno, _("File %s (%s)"), local_name, file_type);
+ return 1;
+ }
+ }
+ }
+
+ /* Protect existing files. */
+
+ if (check_existing_mode)
+ {
+ fprintf (output, "if test -f '%s' && test \"$first_param\" != -c; then\n",
+ restore_name);
+
+ if (query_user_mode)
+ {
+ char* pzOverwriting = scribble;
+ char* pzOverwrite;
+
+ sprintf (pzOverwriting, N_("overwriting %s"), restore_name);
+ pzOverwrite = scribble + strlen(pzOverwriting) + 2;
+ sprintf (pzOverwrite, N_("overwrite %s"), restore_name);
+
+ fprintf (output, query_user_z, pzOverwriting, pzOverwrite);
+
+ sprintf (pzOverwriting, N_("SKIPPING %s"), restore_name);
+ fprintf (output, query_check_z, N_("extraction aborted"),
+ pzOverwriting, pzOverwriting);
+ }
+ else
+ echo_text (N_("SKIPPING %s (file already exists)"),
+ restore_name, 0);
+
+ if (split_file_mode)
+ fputs (" rm -f ${lock_dir}/new\nelse\n > ${lock_dir}/new\n", output);
+ else
+ fputs ("else\n", output);
+ }
+
+ if (!quiet_mode)
+ error (0, 0, _("Saving %s (%s)"), local_name, file_type);
+
+ if (!quiet_unshar_mode)
+ {
+ sprintf (scribble, N_("x - extracting %s %s"),
+ restore_name, file_type_remote);
+ fprintf (output, echo_string_z, scribble);
+ }
+
+ if (struct_stat.st_size == 0)
+ {
+
+ /* Just touch the file, or empty it if it exists. */
+
+ fprintf (output, " > '%s' &&\n",
+ restore_name);
+ }
+ else
+ {
+ /* Run sed for non-empty files. */
+
+ if (uuencoded_file_mode)
+ {
+
+ /* Run sed through uudecode (via temp file if might get split). */
+
+ fprintf (output, " sed 's/^%c//' << '%s' ",
+ line_prefix, here_delimiter);
+ if (inhibit_piping_mode)
+ fprintf (output, "> ${lock_dir}/uue &&\n");
+ else
+ fputs ("| uudecode &&\n", output);
+ }
+ else
+ {
+
+ /* Just run it into the file. */
+
+ fprintf (output, " sed 's/^%c//' << '%s' > '%s' &&\n",
+ line_prefix, here_delimiter, restore_name);
+ }
+
+ while (fgets (buffer, BUFSIZ, input))
+ {
+
+ /* Output a line and test the length. */
+
+ if (!mandatory_prefix_mode
+ && ISASCII (buffer[0])
+#ifdef isgraph
+ && isgraph (buffer[0])
+#else
+ && isprint (buffer[0]) && !isspace (buffer[0])
+#endif
+ /* Protect lines already starting with the prefix. */
+ && buffer[0] != line_prefix
+
+ /* Old mail programs interpret ~ directives. */
+ && buffer[0] != '~'
+
+ /* Avoid mailing lines which are just `.'. */
+ && buffer[0] != '.'
+
+#if STRNCMP_IS_FAST
+ && strncmp (buffer, here_delimiter, here_delimiter_length)
+
+ /* unshar -e: avoid `exit 0'. */
+ && strncmp (buffer, "exit 0", 6)
+
+ /* Don't let mail prepend a `>'. */
+ && strncmp (buffer, "From", 4)
+#else
+ && (buffer[0] != here_delimiter[0]
+ || strncmp (buffer, here_delimiter, here_delimiter_length))
+
+ /* unshar -e: avoid `exit 0'. */
+ && (buffer[0] != 'e' || strncmp (buffer, "exit 0", 6))
+
+ /* Don't let mail prepend a `>'. */
+ && (buffer[0] != 'F' || strncmp (buffer, "From", 4))
+#endif
+ )
+ fputs (buffer, output);
+ else
+ {
+ fprintf (output, "%c%s", line_prefix, buffer);
+ remaining_size--;
+ }
+
+ /* Try completing an incomplete line, but not if the incomplete
+ line contains no character. This might occur with -T for
+ incomplete files, or sometimes when switching to a new file. */
+
+ if (*buffer && buffer[strlen (buffer) - 1] != '\n')
+ {
+ putc ('\n', output);
+ remaining_size--;
+ }
+
+ if (split_file_mode
+#if MSDOS
+ /* 1 extra for CR. */
+ && (remaining_size -= strlen (buffer) + 1) < 0
+#else
+ && (remaining_size -= strlen (buffer)) < 0
+#endif
+ )
+ {
+
+ /* Change to another file. */
+
+ DEBUG_PRINT (_("New file, remaining %s, "), remaining_size);
+ DEBUG_PRINT (_("Limit still %s\n"), file_size_limit);
+
+ fprintf (output, "%s\n", here_delimiter);
+
+ /* Close the "&&" and report an error if any of the above
+ failed. */
+
+ fputs (" :\n", output);
+ echo_status ("test $? -ne 0", N_("restore of %s failed\n"), NULL,
+ restore_name, 0);
+
+ if (check_existing_mode)
+ fputs ("fi\n", output);
+
+ if (quiet_unshar_mode)
+ {
+ sprintf (scribble,
+ N_("End of part %ld, continue with part %ld"),
+ (long)part_number, (long)part_number + 1);
+ fprintf (output, echo_string_z, scribble);
+ }
+ else
+ {
+ sprintf (scribble, N_("End of %s part %d"),
+ archive_name ? archive_name : N_("archive"),
+ part_number);
+ fprintf (output, echo_string_z, scribble);
+
+ sprintf (scribble, N_("File %s is continued in part %d"),
+ restore_name, (long)part_number + 1);
+ fprintf (output, echo_string_z, scribble);
+ }
+
+ fprintf (output, "echo %d > ${lock_dir}/seq\nexit 0\n",
+ part_number + 1);
+
+ if (part_number == 1)
+ {
+
+ /* Rewrite the info lines on the first header. */
+
+ fseeko (output, archive_type_position, SEEK_SET);
+ fprintf (output, "%-75s\n%-75s\n",
+ "# This is part 1 of a multipart archive.",
+ "# Do not concatenate these parts, unpack them in order with `/bin/sh'.");
+ }
+ close_output ();
+
+ /* Next! */
+
+ open_output ();
+
+ if (net_headers_mode)
+ {
+ fprintf (output, "Submitted-by: %s\n", submitter_address);
+ fprintf (output, "Archive-name: %s%s%02d\n\n",
+ archive_name,
+ strchr (archive_name, '/') ? "" : "/part",
+ part_number ? part_number : 1);
+ }
+
+ if (cut_mark_mode)
+ fputs (cut_mark_line, output);
+
+ fprintf (output, continue_archive_z,
+ basename (output_filename), part_number,
+ archive_name ? archive_name : "a multipart archive",
+ restore_name, sharpid);
+
+ generate_configure ();
+
+ fprintf (output, seq_check_z,
+ N_("Please unpack part 1 first!"),
+ part_number);
+
+ echo_status ("test $? -eq 0", NULL,
+ N_("Please unpack part '${shar_sequence}' next!"),
+ NULL, 1);
+
+ if (check_existing_mode)
+ {
+ if (quiet_unshar_mode)
+ fprintf (output, "if test -f ${lock_dir}/new; then\n");
+ else
+ {
+ fputs ("if test ! -f ${lock_dir}/new\nthen echo 'x - ",
+ output);
+ fprintf (output, N_("STILL SKIPPING %s"), restore_name);
+ fputs ("'\nelse\n", output);
+ }
+ }
+
+ if (!quiet_mode)
+ fprintf (stderr, _("Starting file %s\n"), output_filename);
+ if (!quiet_unshar_mode)
+ echo_text (N_("continuing file %s"), restore_name, 0);
+ fprintf (output, " sed 's/^%c//' << '%s' >> ",
+ line_prefix, here_delimiter);
+ if (uuencoded_file_mode)
+ fprintf (output, "${lock_dir}/uue &&\n");
+ else
+ fprintf (output, "%s &&\n", restore_name);
+ remaining_size = file_size_limit;
+ split_flag = 1;
+ }
+ }
+
+ fclose (input);
+ while (wait (NULL) >= 0)
+ ;
+
+ fprintf (output, "%s\n", here_delimiter);
+ if (split_flag && !quiet_unshar_mode)
+ echo_text (N_("File %s is complete"), restore_name, 1);
+
+ /* If this file was uuencoded w/Split, decode it and drop the temp. */
+
+ if (uuencoded_file_mode && inhibit_piping_mode)
+ {
+ if (!quiet_unshar_mode)
+ echo_text (N_("uudecoding file %s"), restore_name, 1);
+
+ fprintf (output, " uudecode ${lock_dir}/uue < ${lock_dir}/uue &&\n");
+ }
+
+ /* If this file was compressed, uncompress it and drop the temp. */
+
+ if (compressed_file_mode)
+ {
+ if (!quiet_unshar_mode)
+ echo_text (N_("uncompressing file %s"), restore_name, 1);
+
+ fprintf (output, " compress -d < ${lock_dir}/cmp > '%s' &&\n",
+ restore_name);
+ }
+ else if (gzipped_file_mode)
+ {
+ if (!quiet_unshar_mode)
+ echo_text (N_("gunzipping file %s"), restore_name, 1);
+
+ fprintf (output, " gzip -d < ${lock_dir}/gzi > '%s' &&\n",
+ restore_name);
+ }
+ else if (bzipped_file_mode)
+ {
+ if (!quiet_unshar_mode)
+ echo_text (N_("bunzipping file %s"), restore_name, 1);
+
+ fprintf (output, " bzip2 -d < ${lock_dir}/bzi > '%s' &&\n",
+ restore_name);
+ }
+ }
+
+ if (timestamp_mode)
+ {
+
+ /* Set the dates as they were. */
+
+ restore_time = localtime (&struct_stat.st_mtime);
+ fprintf (output, "\
+ (set %02d %02d %02d %02d %02d %02d %02d '%s'; eval \"$shar_touch\") &&\n",
+ (restore_time->tm_year + 1900) / 100,
+ (restore_time->tm_year + 1900) % 100,
+ restore_time->tm_mon + 1, restore_time->tm_mday,
+ restore_time->tm_hour, restore_time->tm_min,
+ restore_time->tm_sec, restore_name);
+ }
+
+ if (vanilla_operation_mode)
+ {
+
+ /* Close the "&&" and report an error if any of the above
+ failed. */
+ fputs (":\n", output);
+ echo_status ("test $? -ne 0", N_("restore of %s failed"), NULL,
+ restore_name, 0);
+ }
+ else
+ {
+ unsigned char md5buffer[16];
+ FILE *fp = NULL;
+ int did_md5 = 0;
+
+ /* Set the permissions as they were. */
+
+ fprintf (output, " chmod %04o '%s'\n",
+ (unsigned) (struct_stat.st_mode & 0777), restore_name);
+
+ /* Report an error if any of the above failed. */
+
+ echo_status ("test $? -ne 0", N_("restore of %s failed"), NULL,
+ restore_name, 0);
+
+ if (md5_count_mode && (fp = fopen (local_name, "r")) != NULL
+ && md5_stream (fp, md5buffer) == 0)
+ {
+ /* Validate the transferred file using `md5sum' command. */
+ size_t cnt;
+ did_md5 = 1;
+
+ fprintf (output, md5test_z, restore_name,
+ N_("MD5 check failed"), here_delimiter);
+
+ for (cnt = 0; cnt < 16; ++cnt)
+ fprintf (output, "%02x", md5buffer[cnt]);
+
+ fprintf (output, " %c%s\n%s\n",
+ ' ', restore_name, here_delimiter);
+ /* This ^^^ space is not necessarily a parameter now. But it
+ is a flag for binary/text mode and will perhaps be used later. */
+ }
+
+ if (fp != NULL)
+ fclose (fp);
+
+ if (character_count_mode)
+ {
+ /* Validate the transferred file using simple `wc' command. */
+
+ FILE *pfp;
+ char command[BUFSIZ];
+
+ sprintf (command, "LC_ALL=C wc -c < '%s'", local_name);
+ if (pfp = popen (command, "r"), pfp)
+ {
+ char wc[BUFSIZ];
+
+ if (did_md5)
+ {
+ fputs (" else\n", output);
+ }
+
+ {
+ char* pz = wc;
+ for (;;)
+ {
+ int ch = (unsigned int)fgetc (pfp);
+ if (! isspace (ch))
+ {
+ *(pz++) = ch;
+ break;
+ }
+ }
+ if (pz[-1] != NUL) do
+ {
+ int ch = (unsigned int)fgetc (pfp);
+ if ((ch < 0) || isspace (ch))
+ break;
+ *pz = ch;
+ } while (++pz < wc+BUFSIZ-1);
+ *pz = NUL;
+ }
+
+ fprintf (output,
+ "test `LC_ALL=C wc -c < '%s'` -ne %s && \\\n ${echo} ",
+ restore_name, wc);
+ fprintf (output,
+ N_("'restoration warning: size of %s is not %s'\n"),
+ restore_name, wc);
+ pclose (pfp);
+ }
+ }
+ if (did_md5)
+ fputs (" fi\n", output);
+ }
+
+ /* If the exists option is in place close the if. */
+
+ if (check_existing_mode)
+ fputs ("fi\n", output);
+
+ return 0;
+}
+
+/* Main control. */
+
+/*-----------------------------------------------------------------------.
+| Set file mode, accepting a parameter 'M' for mixed uuencoded mode, 'B' |
+| for uuencoded mode, 'z' for gzipped mode, 'j' for bzipped mode, or 'Z' |
+| for compressed mode. |
+| Any other value yields text mode. |
+`-----------------------------------------------------------------------*/
+
+static void
+set_file_mode (mode)
+ int mode;
+{
+ if (mode == 'B' && uuencoded_file_mode)
+ /* Selecting uuencode mode should not contradict compression. */
+ return;
+
+ mixed_uuencoded_file_mode = mode == 'M';
+ uuencoded_file_mode = mode == 'B';
+ gzipped_file_mode = mode == 'z';
+ bzipped_file_mode = mode == 'j';
+ compressed_file_mode = mode == 'Z';
+
+ if (gzipped_file_mode || bzipped_file_mode || compressed_file_mode)
+ uuencoded_file_mode = 1;
+}
+
+/*-------------------------------------------.
+| Open the next output file, or die trying. |
+`-------------------------------------------*/
+
+static void
+open_output ()
+{
+ if (output_filename == NULL)
+ error (EXIT_FAILURE, ENXIO, _("allocating output file name"));
+
+ sprintf(output_filename, output_base_name, ++part_number);
+ output = fopen (output_filename, "w");
+
+ if (!output)
+ error (EXIT_FAILURE, errno, _("Opening `%s'"), output_filename);
+}
+
+/*-----------------------------------------------.
+| Close the current output file, or die trying. |
+`-----------------------------------------------*/
+
+static void
+close_output ()
+{
+ if (fclose (output) != 0)
+ error (EXIT_FAILURE, errno, _("Closing `%s'"), output_filename);
+}
+
+/*----------------------------------.
+| Output a command format message. |
+`----------------------------------*/
+
+static void
+usage (status)
+ int status;
+{
+ if (status != EXIT_SUCCESS)
+ fprintf (stderr, _("Try `%s --help' for more information.\n"),
+ program_name);
+ else
+ {
+ printf (_("Usage: %s [OPTION]... [FILE]...\n"), program_name);
+ fputs (_("\
+Mandatory arguments to long options are mandatory for short options too.\n"),
+ stdout);
+ fputs (_("\
+\n\
+Giving feedback:\n\
+ --help display this help and exit\n\
+ --version output version information and exit\n\
+ -q, --quiet, --silent do not output verbose messages locally\n"),
+ stdout);
+#if HAVE_COMPRESS
+ fputs (_("\
+\n\
+Selecting files:\n\
+ -p, --intermix-type allow -[BTzZ] in file lists to change mode\n\
+ -S, --stdin-file-list read file list from standard input\n"),
+ stdout);
+#else
+ fputs (_("\
+\n\
+Selecting files:\n\
+ -p, --intermix-type allow -[BTz] in file lists to change mode\n\
+ -S, --stdin-file-list read file list from standard input\n"),
+ stdout);
+#endif
+ fputs (_("\
+\n\
+Splitting output:\n\
+ -o, --output-prefix=PREFIX output to file PREFIX.01 through PREFIX.NN\n\
+ -l, --whole-size-limit=SIZE split archive, not files, to SIZE kilobytes\n\
+ -L, --split-size-limit=SIZE split archive, or files, to SIZE kilobytes\n"),
+ stdout);
+ fputs (_("\
+\n\
+Controlling the shar headers:\n\
+ -n, --archive-name=NAME use NAME to document the archive\n\
+ -s, --submitter=ADDRESS override the submitter name\n\
+ -a, --net-headers output Submitted-by: & Archive-name: headers\n\
+ -c, --cut-mark start the shar with a cut line\n\
+ -t, --translate translate messages in the script\n\
+\n\
+Selecting how files are stocked:\n\
+ -M, --mixed-uuencode dynamically decide uuencoding (default)\n\
+ -T, --text-files treat all files as text\n\
+ -B, --uuencode treat all files as binary, use uuencode\n\
+ -z, --gzip gzip and uuencode all files\n\
+ -g, --level-for-gzip=LEVEL pass -LEVEL (default 9) to gzip\n\
+ -j, --bzip2 bzip2 and uuencode all files\n"),
+ stdout);
+#if HAVE_COMPRESS
+ fputs (_("\
+ -Z, --compress compress and uuencode all files\n\
+ -b, --bits-per-code=BITS pass -bBITS (default 12) to compress\n"),
+ stdout);
+#endif
+ fputs (_("\
+\n\
+Protecting against transmission:\n\
+ -w, --no-character-count do not use `wc -c' to check size\n\
+ -D, --no-md5-digest do not use `md5sum' digest to verify\n\
+ -F, --force-prefix force the prefix character on every line\n\
+ -d, --here-delimiter=STRING use STRING to delimit the files in the shar\n\
+\n\
+Producing different kinds of shars:\n\
+ -V, --vanilla-operation produce very simple and undemanding shars\n\
+ -P, --no-piping exclusively use temporary files at unshar time\n\
+ -x, --no-check-existing blindly overwrite existing files\n\
+ -X, --query-user ask user before overwriting files (not for Net)\n\
+ -m, --no-timestamp do not restore file modification dates & times\n\
+ -Q, --quiet-unshar avoid verbose messages at unshar time\n\
+ -f, --basename restore in one directory, despite hierarchy\n\
+ --no-i18n do not produce internationalized shell script\n"),
+ stdout);
+ fputs (_("\n\
+Option -o is required with -l or -L, option -n is required with -a.\n"),
+ stdout);
+#if HAVE_COMPRESS
+ fputs (_("Option -g implies -z, option -b implies -Z.\n"),
+ stdout);
+#else
+ fputs (_("Option -g implies -z.\n"),
+ stdout);
+#endif
+ /* TRANSLATORS: add the contact address for your translation team! */
+ printf (_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ }
+ exit (status);
+}
+
+/*--------------------------------------.
+| Decode options and launch execution. |
+`--------------------------------------*/
+
+static const struct option long_options[] =
+{
+ {"archive-name", required_argument, NULL, 'n'},
+ {"basename", no_argument, NULL, 'f'},
+ {"bits-per-code", required_argument, NULL, 'b'},
+ {"bzip2", no_argument, NULL, 'j'},
+ {"compress", no_argument, NULL, 'Z'},
+ {"cut-mark", no_argument, NULL, 'c'},
+ {"force-prefix", no_argument, NULL, 'F'},
+ {"gzip", no_argument, NULL, 'z'},
+ {"here-delimiter", required_argument, NULL, 'd'},
+ {"intermix-type", no_argument, NULL, 'p'},
+ {"level-for-gzip", required_argument, NULL, 'g'},
+ {"mixed-uuencode", no_argument, NULL, 'M'},
+ {"net-headers", no_argument, NULL, 'a'},
+ {"no-character-count", no_argument, &character_count_mode, 0},
+ {"no-check-existing", no_argument, NULL, 'x'},
+ {"no-i18n", no_argument, &no_i18n, 1},
+ {"no-md5-digest", no_argument, &md5_count_mode, 0},
+ {"no-piping", no_argument, NULL, 'P'},
+ {"no-timestamp", no_argument, NULL, 'm'},
+ {"output-prefix", required_argument, NULL, 'o'},
+ {"print-text-domain-dir", no_argument, &print_text_dom_dir, 1},
+ {"query-user", no_argument, NULL, 'X'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"quiet-unshar", no_argument, NULL, 'Q'},
+ {"split-size-limit", required_argument, NULL, 'L'},
+ {"stdin-file-list", no_argument, NULL, 'S'},
+ {"submitter", required_argument, NULL, 's'},
+ {"text-files", no_argument, NULL, 'T'},
+ {"translate", no_argument, NULL, 't'},
+ {"uuencode", no_argument, NULL, 'B'},
+ {"vanilla-operation", no_argument, NULL, 'V'},
+ {"whole-size-limit", required_argument, NULL, 'l'},
+
+ {"help", no_argument, &show_help, 1},
+ {"version", no_argument, &show_version, 1},
+
+ { NULL, 0, NULL, 0 },
+};
+
+/* Limit file sizes to LIMIT KiB. */
+
+static void
+set_file_size_limit (char const *limit)
+{
+ char *numend;
+ intmax_t lim = strtoimax (limit, &numend, 10);
+ if (*numend || ! (0 < lim && lim <= TYPE_MAXIMUM (off_t) / 1024))
+ error (EXIT_FAILURE, 0, _("invalid file size limit `%s'"), limit);
+ lim *= 1024;
+ if (! file_size_limit || lim < file_size_limit)
+ file_size_limit = lim;
+}
+
+
+char *
+parse_output_base_name(char *arg)
+{
+ int c;
+ int hadarg = 0;
+ char *fmt, *p;
+ int base_name_len = 128;
+
+ for (p = arg ; (c = *p++) != 0; )
+ {
+ base_name_len++;
+ if (c != '%')
+ continue;
+ c = *p++;
+ if (c == '%')
+ continue;
+ if (hadarg)
+ return NULL;
+ while (c != 0 && strchr("#0+- 'I", c) != 0)
+ c = *p++;
+ if (c == 0)
+ return NULL;
+ if (c >= '0' && c <= '9')
+ {
+ long v;
+ errno = 0;
+ v = strtol(p-1, &fmt, 10);
+ if ((v == 0) || (v > 16) || (errno != 0))
+ {
+ fprintf(stderr, _("invalid format (count field too wide): '%s'\n"),
+ arg);
+ return NULL;
+ }
+ p = fmt;
+ c = *p++;
+ base_name_len += v;
+ }
+ if (c == '.')
+ {
+ c = *p++;
+ while (c != 0 && c >= '0' && c <= '9')
+ c = *p++;
+ }
+ if (c == 0 || strchr("diouxX", c) == 0)
+ return NULL;
+ hadarg = 1;
+ }
+ fmt = xmalloc(strlen(arg) + (hadarg ? 1 : 6));
+ strcpy(fmt, arg);
+ if (!hadarg)
+ strcat(fmt, ".%02d");
+ output_filename = xmalloc(base_name_len);
+ return fmt;
+}
+
+
+/*---.
+| ? |
+`---*/
+
+int
+main (argc, argv)
+ int argc;
+ char *const *argv;
+{
+ int status = EXIT_SUCCESS;
+ int stdin_file_list = 0;
+ int optchar;
+
+ program_name = argv[0];
+ sharpid = (int) getpid ();
+ setlocale (LC_ALL, "");
+
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ while (optchar = getopt_long (argc, argv,
+ "+$BDFL:MPQSTVXZab:cd:fg:hjl:mn:o:pqs:wxz",
+ long_options, NULL),
+ optchar != EOF)
+ switch (optchar)
+ {
+ case 0: case 1: /* handled by getopt_long() */
+ break;
+
+ case '$':
+#if DEBUG
+ debugging_mode = 1;
+#else
+ error (0, 0, _("DEBUG was not selected at compile time"));
+#endif
+ break;
+
+ case 'B':
+ set_file_mode ('B');
+ break;
+
+ case 'D':
+ md5_count_mode = 0;
+ break;
+
+ case 'F':
+ mandatory_prefix_mode = 1;
+ break;
+
+ case 'L':
+ set_file_size_limit (optarg);
+ split_file_mode = 1;
+ inhibit_piping_mode = 1;
+ DEBUG_PRINT (_("Hard limit %s\n"), file_size_limit);
+ break;
+
+ case 'M':
+ set_file_mode ('M');
+ break;
+
+ case 'P':
+ inhibit_piping_mode = 1;
+ break;
+
+ case 'Q':
+ quiet_unshar_mode = 1;
+ break;
+
+ case 'S':
+ stdin_file_list = 1;
+ break;
+
+ case 'V':
+ vanilla_operation_mode = 1;
+ break;
+
+ case 't':
+ translate_script = 1;
+ break;
+
+ case 'T':
+ set_file_mode ('T');
+ break;
+
+ case 'X':
+ query_user_mode = 1;
+ check_existing_mode = 1;
+ break;
+
+ case 'b':
+ bits_per_compressed_byte = atoi (optarg);
+ /* Fall through. */
+
+ case 'Z':
+#ifndef HAVE_COMPRESS
+ error (EXIT_FAILURE, 0, _("\
+This system doesn't support -Z ('compress'), use -z instead"));
+#endif
+ set_file_mode ('Z');
+ break;
+
+ case 'a':
+ net_headers_mode = 1;
+ break;
+
+ case 'c':
+ cut_mark_mode = 1;
+ break;
+
+ case 'd':
+ here_delimiter = optarg;
+ break;
+
+ case 'f':
+ basename_mode = 1;
+ break;
+
+ case 'h':
+ usage (EXIT_SUCCESS);
+ break;
+
+ case 'j':
+ set_file_mode ('j');
+ break;
+
+ case 'l':
+ set_file_size_limit (optarg);
+ split_file_mode = 0;
+ DEBUG_PRINT (_("Soft limit %s\n"), file_size_limit);
+ break;
+
+ case 'm':
+ timestamp_mode = 0;
+ break;
+
+ case 'n':
+ archive_name = optarg;
+ break;
+
+ case 'o':
+ output_base_name = parse_output_base_name(optarg);
+ if (!output_base_name)
+ {
+ fprintf (stderr, _("illegal output prefix\n"));
+ exit (EXIT_FAILURE);
+ }
+ part_number = 0;
+ open_output ();
+ break;
+
+ case 'p':
+ intermixed_parameter_mode = 1;
+ break;
+
+ case 'q':
+ quiet_mode = 1;
+ break;
+
+ case 's':
+ submitter_address = optarg;
+ break;
+
+ case 'w':
+ character_count_mode = 0;
+ break;
+
+ case 'x':
+ check_existing_mode = 0;
+ break;
+
+ case 'g':
+ gzip_compression_level = atoi (optarg);
+ /* Fall through. */
+
+ case 'z':
+ set_file_mode ('z');
+ break;
+
+ default:
+ usage (EXIT_FAILURE);
+ }
+
+ /* Internationalized shell scripts are not vanilla. */
+ if (vanilla_operation_mode)
+ no_i18n = 1;
+
+ if (show_version)
+ {
+ printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION);
+ /* xgettext: no-wrap */
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+This is free software; see the source for copying conditions. There is NO\n\
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
+"),
+ "1994, 1995, 1996, 2004, 2005");
+ exit (EXIT_SUCCESS);
+ }
+
+ if (show_help)
+ usage (EXIT_SUCCESS);
+
+ if (print_text_dom_dir != 0)
+ {
+ /* Support for internationalized shell scripts is only usable with
+ GNU gettext. If we don't use it simply mark it as not available. */
+#if !defined ENABLE_NLS || defined HAVE_CATGETS \
+ || (defined HAVE_GETTEXT && !defined __USE_GNU_GETTEXT)
+ exit (EXIT_FAILURE);
+#else
+ puts (LOCALEDIR);
+ exit (EXIT_SUCCESS);
+#endif
+ }
+
+ line_prefix = (here_delimiter[0] == DEFAULT_LINE_PREFIX_1
+ ? DEFAULT_LINE_PREFIX_2
+ : DEFAULT_LINE_PREFIX_1);
+
+ here_delimiter_length = strlen (here_delimiter);
+
+ if (vanilla_operation_mode)
+ {
+ if (mixed_uuencoded_file_mode < 0)
+ set_file_mode ('T');
+
+ /* Implies -m, -w, -D, -F and -P. */
+
+ timestamp_mode = 0;
+ character_count_mode = 0;
+ md5_count_mode = 0;
+ mandatory_prefix_mode = 1;
+ inhibit_piping_mode = 1;
+
+ /* Forbids -X. */
+
+ if (query_user_mode)
+ {
+ error (0, 0, _("WARNING: No user interaction in vanilla mode"));
+ query_user_mode = 0;
+ }
+
+ /* Diagnose if not in -T state. */
+
+ if (mixed_uuencoded_file_mode
+ || uuencoded_file_mode
+ || gzipped_file_mode
+ || bzipped_file_mode
+ || compressed_file_mode
+ || intermixed_parameter_mode)
+ error (0, 0, _("WARNING: Non-text storage options overridden"));
+ }
+
+ /* Set defaults for unset options. */
+
+ if (mixed_uuencoded_file_mode < 0)
+ set_file_mode ('M');
+
+ if (!submitter_address)
+ submitter_address = get_submitter (NULL);
+
+ if (!output)
+ output = stdout;
+
+ /* Maybe prepare to decide dynamically about file type. */
+
+ if (mixed_uuencoded_file_mode || intermixed_parameter_mode)
+ {
+ memset ((char *) byte_is_binary, 1, 256);
+ byte_is_binary['\b'] = 0;
+ byte_is_binary['\t'] = 0;
+ byte_is_binary['\f'] = 0;
+ memset ((char *) byte_is_binary + 32, 0, 127 - 32);
+ }
+
+ /* Maybe read file list from standard input. */
+
+ if (stdin_file_list)
+ {
+ char stdin_buf[258]; /* FIXME: No fix limit in GNU... */
+ char **list;
+ int max_argc;
+
+ argc = 0;
+ max_argc = 32;
+ list = (char **) xmalloc (max_argc * sizeof (char *));
+ stdin_buf[0] = 0;
+ while (fgets (stdin_buf, sizeof (stdin_buf), stdin))
+ {
+ if (argc == max_argc)
+ list = (char **) xrealloc (list,
+ (max_argc *= 2) * sizeof (char *));
+ if (stdin_buf[0] != NUL)
+ stdin_buf[strlen (stdin_buf) - 1] = 0;
+ list[argc] = xstrdup (stdin_buf);
+ ++argc;
+ stdin_buf[0] = 0;
+ }
+ argv = list;
+ optind = 0;
+ }
+
+ /* Diagnose various usage errors. */
+
+ if (optind >= argc)
+ {
+ error (0, 0, _("No input files"));
+ usage (EXIT_FAILURE);
+ }
+
+ if (net_headers_mode && !archive_name)
+ {
+ error (0, 0, _("Cannot use -a option without -n"));
+ usage (EXIT_FAILURE);
+ }
+
+ if (file_size_limit && !part_number)
+ {
+ error (0, 0, _("Cannot use -l or -L option without -o"));
+ usage (EXIT_FAILURE);
+ }
+
+ /* Start making the archive file. */
+
+ generate_full_header (argc - optind, &argv[optind]);
+
+ if (query_user_mode)
+ {
+ quiet_unshar_mode = 0;
+ if (net_headers_mode)
+ error (0, 0, _("PLEASE avoid -X shars on Usenet or public networks"));
+
+ fputs ("shar_wish=\n", output);
+ }
+
+ first_file_position = ftello (output);
+
+ /* Process positional parameters and files. */
+
+ scribble = xmalloc (scribble_size);
+
+ for (; optind < argc; optind++)
+ {
+ char* arg = argv[optind];
+
+ if (intermixed_parameter_mode && (arg[0] == '-') && (arg[2] == NUL))
+ {
+ switch (arg[1]) {
+ case 'B':
+ case 'T':
+ case 'M':
+ case 'z':
+ case 'Z':
+ set_file_mode (arg[1]);
+ continue;
+
+ case 'C':
+ set_file_mode ('Z');
+ continue;
+ }
+ }
+
+ if (walktree (shar, arg))
+ status = EXIT_FAILURE;
+ }
+
+ /* Delete the sequence file, if any. */
+
+ if (split_file_mode && part_number > 1)
+ {
+ fprintf (output, "$echo '%s'\n",
+ N_("You have unpacked the last part"));
+ if (quiet_mode)
+ fprintf (stderr, _("Created %d files\n"), part_number);
+ }
+
+ {
+ const char* did_pz =
+ N_("x - removed lock directory `'%s\\''.");
+ const char* not_pz =
+ N_("x - failed to remove lock directory `'%s\\''.");
+
+ echo_status ("rm -fr ${lock_dir}", did_pz, not_pz, "${lock_dir}", 1);
+ }
+ fputs ("exit 0\n", output);
+ exit (status);
+}
+/*
+ * Local Variables:
+ * mode: C
+ * c-file-style: "gnu"
+ * indent-tabs-mode: nil
+ * End:
+ * end of agen5/autogen.c */
diff --git a/src/unshar.c b/src/unshar.c
new file mode 100644
index 0000000..cb4f492
--- /dev/null
+++ b/src/unshar.c
@@ -0,0 +1,552 @@
+/* Handle so called `shell archives'.
+
+ Copyright (C) 1994, 1995, 1996, 2002, 2005,
+ 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+/* Unpackage one or more shell archive files. The `unshar' program is a
+ filter which removes the front part of a file and passes the rest to
+ the `sh' command. It understands phrases like "cut here", and also
+ knows about shell comment characters and the Unix commands `echo',
+ `cat', and `sed'. */
+
+#include "system.h"
+#include "getopt.h"
+#include "basename.h"
+#include "error.h"
+#include "exit.h"
+#include "stpcpy.h"
+#include "xgetcwd.h"
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#else
+# define setlocale(Category, Locale)
+#endif
+#include "gettext.h"
+#define _(str) gettext (str)
+
+/* Buffer size for shell process input. */
+#define SHELL_BUFFER_SIZE 8196
+
+#define EOL '\n'
+
+/* The name this program was run with. */
+const char *program_name;
+
+/* If non-zero, display usage information and exit. */
+static int show_help = 0;
+
+/* If non-zero, print the version on standard output and exit. */
+static int show_version = 0;
+
+static int pass_c_flag = 0;
+static int continue_reading = 0;
+static const char *exit_string = "exit 0";
+static size_t exit_string_length;
+static char *current_directory;
+
+/*-------------------------------------------------------------------.
+| Match the leftmost part of a string. Returns 1 if initial |
+| characters of DATA match PATTERN exactly; else 0. This was |
+| formerly a function. But because we always have a constant string |
+| as the seconf argument and the length of the second argument is a |
+| lot of shorter than the buffer the first argument is pointing at, |
+| we simply use `memcmp'. And one more point: even if the `memcmp' |
+| function does not work correct for 8 bit characters it does not |
+| matter here. We are only interested in equal or not equal |
+| information. |
+`-------------------------------------------------------------------*/
+
+#define starting_with(data, pattern) \
+ (memcmp (data, pattern, sizeof (pattern) - 1) == 0)
+
+static FILE* load_stdin (char **p_name_buf);
+
+/*-------------------------------------------------------------------------.
+| For a DATA string and a PATTERN containing one or more embedded |
+| asterisks (matching any number of characters), return non-zero if the |
+| match succeeds, and set RESULT_ARRAY[I] to the characters matched by the |
+| I'th *. |
+`-------------------------------------------------------------------------*/
+
+static int
+matched_by (data, pattern, result_array)
+ const char *data;
+ const char *pattern;
+ char **result_array;
+{
+ const char *pattern_cursor = NULL;
+ const char *data_cursor = NULL;
+ char *result_cursor = NULL;
+ int number_of_results = 0;
+
+ while (1)
+ if (*pattern == '*')
+ {
+ pattern_cursor = ++pattern;
+ data_cursor = data;
+ result_cursor = result_array[number_of_results++];
+ *result_cursor = '\0';
+ }
+ else if (*data == *pattern)
+ {
+ if (*pattern == '\0')
+ /* The pattern matches. */
+ return 1;
+
+ pattern++;
+ data++;
+ }
+ else
+ {
+ if (*data == '\0')
+ /* The pattern fails: no more data. */
+ return 0;
+
+ if (pattern_cursor == NULL)
+ /* The pattern fails: no star to adjust. */
+ return 0;
+
+ /* Restart pattern after star. */
+
+ pattern = pattern_cursor;
+ *result_cursor++ = *data_cursor;
+ *result_cursor = '\0';
+
+ /* Rescan after copied char. */
+
+ data = ++data_cursor;
+ }
+}
+
+/*------------------------------------------------------------------------.
+| Associated with a given file NAME, position FILE at the start of the |
+| shell command portion of a shell archive file. Scan file from position |
+| START. |
+`------------------------------------------------------------------------*/
+
+static int
+find_archive (name, file, start)
+ const char *name;
+ FILE *file;
+ off_t start;
+{
+ char buffer[BUFSIZ];
+ off_t position;
+
+ /* Results from star matcher. */
+
+ static char res1[BUFSIZ], res2[BUFSIZ], res3[BUFSIZ], res4[BUFSIZ];
+ static char *result[] = {res1, res2, res3, res4};
+
+ fseeko (file, start, SEEK_SET);
+
+ while (1)
+ {
+
+ /* Record position of the start of this line. */
+
+ position = ftello (file);
+
+ /* Read next line, fail if no more and no previous process. */
+
+ if (!fgets (buffer, BUFSIZ, file))
+ {
+ if (!start)
+ error (0, 0, _("Found no shell commands in %s"), name);
+ return 0;
+ }
+
+ /* Bail out if we see C preprocessor commands or C comments. */
+
+ if (starting_with (buffer, "#include")
+ || starting_with (buffer, "# include")
+ || starting_with (buffer, "#define")
+ || starting_with (buffer, "# define")
+ || starting_with (buffer, "#ifdef")
+ || starting_with (buffer, "# ifdef")
+ || starting_with (buffer, "#ifndef")
+ || starting_with (buffer, "# ifndef")
+ || starting_with (buffer, "/*"))
+ {
+ error (0, 0, _("%s looks like raw C code, not a shell archive"),
+ name);
+ return 0;
+ }
+
+ /* Does this line start with a shell command or comment. */
+
+ if (starting_with (buffer, "#")
+ || starting_with (buffer, ":")
+ || starting_with (buffer, "echo ")
+ || starting_with (buffer, "sed ")
+ || starting_with (buffer, "cat ")
+ || starting_with (buffer, "if "))
+ {
+ fseeko (file, position, SEEK_SET);
+ return 1;
+ }
+
+ /* Does this line say "Cut here". */
+
+ if (matched_by (buffer, "*CUT*HERE*", result) ||
+ matched_by (buffer, "*cut*here*", result) ||
+ matched_by (buffer, "*TEAR*HERE*", result) ||
+ matched_by (buffer, "*tear*here*", result) ||
+ matched_by (buffer, "*CUT*CUT*", result) ||
+ matched_by (buffer, "*cut*cut*", result))
+ {
+
+ /* Read next line after "cut here", skipping blank lines. */
+
+ while (1)
+ {
+ position = ftello (file);
+
+ if (!fgets (buffer, BUFSIZ, file))
+ {
+ error (0, 0, _("Found no shell commands after `cut' in %s"),
+ name);
+ return 0;
+ }
+
+ if (*buffer != '\n')
+ break;
+ }
+
+ /* Win if line starts with a comment character of lower case
+ letter. */
+
+ if (*buffer == '#' || *buffer == ':'
+ || (('a' <= *buffer) && ('z' >= *buffer)))
+ {
+ fseeko (file, position, SEEK_SET);
+ return 1;
+ }
+
+ /* Cut here message lied to us. */
+
+ error (0, 0, _("%s is probably not a shell archive"), name);
+ error (0, 0, _("The `cut' line was followed by: %s"), buffer);
+ return 0;
+ }
+ }
+}
+
+/*-----------------------------------------------------------------.
+| Unarchive a shar file provided on file NAME. The file itself is |
+| provided on the already opened FILE. |
+`-----------------------------------------------------------------*/
+
+static void
+unarchive_shar_file (name, file)
+ const char *name;
+ FILE *file;
+{
+ char buffer[SHELL_BUFFER_SIZE];
+ FILE *shell_process;
+ off_t current_position = 0;
+ char *more_to_read;
+
+ while (find_archive (name, file, current_position))
+ {
+ printf ("%s:\n", name);
+ shell_process = popen (pass_c_flag ? "sh -s - -c" : "sh", "w");
+ if (!shell_process)
+ error (EXIT_FAILURE, errno, _("Starting `sh' process"));
+
+ if (!continue_reading)
+ {
+ size_t len;
+
+ while ((len = fread (buffer, 1, SHELL_BUFFER_SIZE, file)) != 0)
+ fwrite (buffer, 1, len, shell_process);
+#if 0
+ /* Don't know whether a test is appropriate here. */
+ if (ferror (shell_process) != 0)
+ fwrite (buffer, length, 1, shell_process);
+#endif
+ pclose (shell_process);
+ break;
+ }
+ else
+ {
+ while (more_to_read = fgets (buffer, SHELL_BUFFER_SIZE, file),
+ more_to_read != NULL)
+ {
+ fputs (buffer, shell_process);
+ if (!strncmp (exit_string, buffer, exit_string_length))
+ break;
+ }
+ pclose (shell_process);
+
+ if (more_to_read)
+ current_position = ftello (file);
+ else
+ break;
+ }
+ }
+}
+
+/*-----------------------------.
+| Explain how to use program. |
+`-----------------------------*/
+
+static void
+usage (status)
+ int status;
+{
+ if (status != EXIT_SUCCESS)
+ fprintf (stderr, _("Try `%s --help' for more information.\n"),
+ program_name);
+ else
+ {
+ printf (_("Usage: %s [OPTION]... [FILE]...\n"), program_name);
+ fputs (_("\
+Mandatory arguments to long options are mandatory for short options too.\n\
+\n\
+ -d, --directory=DIRECTORY change to DIRECTORY before unpacking\n\
+ -c, --overwrite pass -c to shar script for overwriting files\n\
+ -e, --exit-0 same as `--split-at=\"exit 0\"'\n\
+ -E, --split-at=STRING split concatenated shars after STRING\n\
+ -f, --force same as `-c'\n\
+ --help display this help and exit\n\
+ --version output version information and exit\n\
+\n\
+If no FILE, standard input is read.\n"),
+ stdout);
+ /* TRANSLATORS: add the contact address for your translation team! */
+ printf (_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ }
+ exit (status);
+}
+
+/*--------------------------------------.
+| Decode options and launch execution. |
+`--------------------------------------*/
+
+static const struct option long_options[] =
+{
+ {"directory", required_argument, NULL, 'd'},
+ {"exit-0", no_argument, NULL, 'e'},
+ {"force", no_argument, NULL, 'f'},
+ {"overwrite", no_argument, NULL, 'c'},
+ {"split-at", required_argument, NULL, 'E'},
+
+ {"help", no_argument, &show_help, 1},
+ {"version", no_argument, &show_version, 1},
+
+ { NULL, 0, NULL, 0 },
+};
+
+int
+main (argc, argv)
+ int argc;
+ char *const *argv;
+{
+ FILE *file;
+ char* name_buffer = NULL;
+ int optchar;
+
+ program_name = argv[0];
+ setlocale (LC_ALL, "");
+
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+#ifdef __MSDOS__
+ setbuf (stdout, NULL);
+ setbuf (stderr, NULL);
+#endif
+
+ if (current_directory = xgetcwd (), !current_directory)
+ error (EXIT_FAILURE, errno, _("Cannot get current directory name"));
+
+ /* Process options. */
+
+ while (optchar = getopt_long (argc, argv, "E:cd:ef", long_options, NULL),
+ optchar != EOF)
+ switch (optchar)
+ {
+ case '\0':
+ break;
+
+ case 'c':
+ case 'f':
+ pass_c_flag = 1;
+ break;
+
+ case 'd':
+ if (chdir (optarg) == -1)
+ error (2, 0, _("Cannot chdir to `%s'"), optarg);
+ break;
+
+ case 'E':
+ exit_string = optarg;
+ /* Fall through. */
+
+ case 'e':
+ continue_reading = 1;
+ exit_string_length = strlen (exit_string);
+ break;
+
+ default:
+ usage (EXIT_FAILURE);
+ }
+
+ if (show_version)
+ {
+ printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION);
+ /* xgettext: no-wrap */
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+This is free software; see the source for copying conditions. There is NO\n\
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
+"),
+ "1994, 1995, 1996, 2005");
+ exit (EXIT_SUCCESS);
+ }
+
+ if (show_help)
+ usage (EXIT_SUCCESS);
+
+ if (optind < argc)
+ {
+ size_t buflen = 0;
+ argv += optind;
+
+ for (;;)
+ {
+ char* arg = *(argv++);
+ size_t sz;
+ if (arg == NULL)
+ break;
+
+ sz = strlen (current_directory) + strlen (arg) + 2;
+ if (sz > buflen)
+ {
+ buflen = sz + 32;
+ name_buffer = (name_buffer == NULL)
+ ? malloc (buflen)
+ : realloc (name_buffer, buflen);
+ if (name_buffer == NULL)
+ error (EXIT_FAILURE, ENOMEM, _("allocate file name buffer"));
+ }
+
+ if (*arg == '/')
+ strcpy (name_buffer, arg);
+ else
+ {
+ char *cp = stpcpy (name_buffer, current_directory);
+ *cp++ = '/';
+ strcpy (cp, arg);
+ }
+ if (file = fopen (name_buffer, "r"), !file)
+ error (EXIT_FAILURE, errno, name_buffer);
+ unarchive_shar_file (name_buffer, file);
+ fclose (file);
+ }
+ }
+ else
+ {
+ file = load_stdin (&name_buffer);
+
+ unarchive_shar_file (_("standard input"), file);
+
+ fclose (file);
+ unlink (name_buffer);
+ }
+
+ exit (EXIT_SUCCESS);
+}
+
+
+static FILE*
+load_stdin (char **p_name_buf)
+{
+ static const char z_tmpfile[] = "unsh.XXXXXX";
+ char *pz_fname;
+ FILE *fp;
+
+ /*
+ * FIXME: actually configure this stuff:
+ */
+#if defined(_SC_PAGESIZE)
+ long pg_sz = sysconf (_SC_PAGESIZE);
+#elif defined(_SC_PAGE_SIZE)
+ long pg_sz = sysconf (_SC_PAGE_SIZE);
+#elif defined(HAVE_GETPAGESIZE)
+ long pg_sz = getpagesize();
+#else
+# define pg_sz 8192
+#endif
+
+ {
+ size_t name_size;
+ char *pz_tmp = getenv ("TMPDIR");
+
+ if (pz_tmp == NULL)
+ pz_tmp = "/tmp";
+
+ name_size = strlen (pz_tmp) + sizeof (z_tmpfile) + 1;
+ *p_name_buf = pz_fname = malloc (name_size);
+
+ if (pz_fname == NULL)
+ error (EXIT_FAILURE, ENOMEM, _("allocate file name buffer"));
+
+ sprintf (pz_fname, "%s/%s", pz_tmp, z_tmpfile);
+ }
+
+ {
+ int fd = mkstemp (pz_fname);
+ if (fd < 0)
+ error (EXIT_FAILURE, errno, pz_fname);
+
+ fp = fdopen (fd, "w+");
+ }
+
+ if (fp == NULL)
+ error (EXIT_FAILURE, errno, pz_fname);
+
+ {
+ char *buf = malloc (pg_sz);
+ size_t size_read;
+
+ if (buf == NULL)
+ error (EXIT_FAILURE, ENOMEM, _("allocate file buffer"));
+
+ while (size_read = fread (buf, 1, pg_sz, stdin),
+ size_read != 0)
+ fwrite (buf, size_read, 1, fp);
+
+ free (buf);
+ }
+
+ rewind (fp);
+
+ return fp;
+}
+
+/*
+ * Local Variables:
+ * mode: C
+ * c-file-style: "gnu"
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ * end of agen5/autogen.c */
diff --git a/src/uudecode.c b/src/uudecode.c
new file mode 100644
index 0000000..a3ae722
--- /dev/null
+++ b/src/uudecode.c
@@ -0,0 +1,537 @@
+
+static const char cright_years_z[] =
+
+/* uudecode utility. Copyright (C) */
+
+ "1994, 1995, 1996, 2002, 2005, 2006, 2007";
+
+ /* Free Software Foundation, Inc.
+
+ Copyright (C) 1994, 1995, 1996, 2002, 2005, 2006,
+ 2007 Free Software Foundation, Inc.
+
+ This product 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 3, or (at your option)
+ any later version.
+
+ This product 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 product; see the file COPYING. If not, write to
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* Copyright (c) 1983 Regents of the University of California.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by the University of
+ California, Berkeley and its contributors.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE. */
+
+/* Reworked to GNU style by Ian Lance Taylor, ian@airs.com, August 93. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "liballoca.h"
+
+#include "system.h"
+#include "basename.h"
+#include "error.h"
+#include "exit.h"
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#else
+# define setlocale(Category, Locale)
+#endif
+#include "gettext.h"
+#define _(str) gettext (str)
+
+/*=====================================================================\
+| uudecode [FILE ...] |
+| |
+| Create the specified FILE, decoding as you go. Used with uuencode. |
+\=====================================================================*/
+
+#include <pwd.h>
+#include "getopt.h"
+
+#define UU_MODE_BITS(_M) ((_M) & (S_IRWXU | S_IRWXG | S_IRWXO))
+#if HAVE_FCHMOD
+#define UU_CHMOD(_n, _fd, _m) fchmod ((_fd), UU_MODE_BITS(_m))
+#else
+#define UU_CHMOD(_n, _fd, _m) chmod ((_n), UU_MODE_BITS(_m))
+#endif
+
+struct passwd *getpwnam ();
+
+static struct option longopts[] =
+{
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { "output-file", required_argument, NULL, 'o' },
+ { NULL, 0, NULL, 0 }
+};
+
+static int read_stduu __P ((const char *inname, const char *outname));
+static int read_base64 __P ((const char *inname, const char *outname));
+static int decode __P ((const char *, const char *));
+static void usage __P ((int))
+#if defined __GNUC__ && ((__GNUC__ == 2 && __GNUC_MINOR__ >= 5) || __GNUC__ > 2)
+ __attribute__ ((noreturn))
+#endif
+;
+
+/* The name this program was run with. */
+const char *program_name;
+
+/* Single character decode. */
+#define DEC(Char) (((Char) - ' ') & 077)
+
+#if !defined S_ISLNK && defined S_IFLNK
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif
+
+#define TRY_PUTCHAR(c) do { \
+ if (putchar (c) == EOF) { \
+ error (0, 0, _("%s: Write error"), outname); \
+ return 1; \
+ } \
+ } while (0)
+
+static int
+read_stduu (inname, outname)
+ const char *inname, *outname;
+{
+ char buf[2 * BUFSIZ];
+
+ while (1)
+ {
+ int n;
+ char *p;
+
+ if (fgets ((char *) buf, sizeof(buf), stdin) == NULL)
+ {
+ error (0, 0, _("%s: Short file"), inname);
+ return 1;
+ }
+ p = buf;
+
+ /* N is used to avoid writing out all the characters at the end of
+ the file. */
+
+ n = DEC (*p);
+ if (n <= 0)
+ break;
+ for (++p; n >= 3; p += 4, n -= 3)
+ {
+ TRY_PUTCHAR (DEC (p[0]) << 2 | DEC (p[1]) >> 4);
+ TRY_PUTCHAR (DEC (p[1]) << 4 | DEC (p[2]) >> 2);
+ TRY_PUTCHAR (DEC (p[2]) << 6 | DEC (p[3]));
+ }
+ if (n > 0)
+ {
+ TRY_PUTCHAR (DEC (p[0]) << 2 | DEC (p[1]) >> 4);
+ if (n >= 2)
+ TRY_PUTCHAR (DEC (p[1]) << 4 | DEC (p[2]) >> 2);
+ }
+ }
+
+ do {
+ if (fgets (buf, sizeof(buf), stdin) == NULL)
+ break;
+
+ if (strcmp (buf, "end\n") == 0)
+ return 0;
+
+ if (strcmp (buf, "end\r\n") == 0)
+ return 0;
+ } while (0);
+
+ error (0, 0, _("%s: No `end' line"), inname);
+ return 1;
+}
+
+static int
+read_base64 (inname, outname)
+ const char *inname, *outname;
+{
+ static const char b64_tab[256] =
+ {
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*000-007*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*010-017*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*020-027*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*030-037*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*040-047*/
+ '\177', '\177', '\177', '\76', '\177', '\177', '\177', '\77', /*050-057*/
+ '\64', '\65', '\66', '\67', '\70', '\71', '\72', '\73', /*060-067*/
+ '\74', '\75', '\177', '\177', '\177', '\100', '\177', '\177', /*070-077*/
+ '\177', '\0', '\1', '\2', '\3', '\4', '\5', '\6', /*100-107*/
+ '\7', '\10', '\11', '\12', '\13', '\14', '\15', '\16', /*110-117*/
+ '\17', '\20', '\21', '\22', '\23', '\24', '\25', '\26', /*120-127*/
+ '\27', '\30', '\31', '\177', '\177', '\177', '\177', '\177', /*130-137*/
+ '\177', '\32', '\33', '\34', '\35', '\36', '\37', '\40', /*140-147*/
+ '\41', '\42', '\43', '\44', '\45', '\46', '\47', '\50', /*150-157*/
+ '\51', '\52', '\53', '\54', '\55', '\56', '\57', '\60', /*160-167*/
+ '\61', '\62', '\63', '\177', '\177', '\177', '\177', '\177', /*170-177*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*200-207*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*210-217*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*220-227*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*230-237*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*240-247*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*250-257*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*260-267*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*270-277*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*300-307*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*310-317*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*320-327*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*330-337*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*340-347*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*350-357*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*360-367*/
+ '\177', '\177', '\177', '\177', '\177', '\177', '\177', '\177', /*370-377*/
+ };
+ char buf[2 * BUFSIZ];
+
+ while (1)
+ {
+ int last_data = 0;
+ unsigned char *p;
+
+ if (fgets (buf, sizeof(buf), stdin) == NULL)
+ {
+ error (0, 0, _("%s: Short file"), inname);
+ return 1;
+ }
+ p = (unsigned char *) buf;
+
+ if (memcmp (buf, "====", 4) == 0)
+ break;
+ if (last_data != 0)
+ {
+ error (0, 0, _("%s: data following `=' padding character"), inname);
+ return 1;
+ }
+
+ /* The following implementation of the base64 decoding might look
+ a bit clumsy but I only try to follow the POSIX standard:
+ ``All line breaks or other characters not found in the table
+ [with base64 characters] shall be ignored by decoding
+ software.'' */
+ while (*p != '\n')
+ {
+ char c1, c2, c3;
+
+ while ((b64_tab[*p] & '\100') != 0)
+ if (*p == '\n' || *p++ == '=')
+ break;
+ if (*p == '\n')
+ /* This leaves the loop. */
+ continue;
+ c1 = b64_tab[*p++];
+
+ while ((b64_tab[*p] & '\100') != 0)
+ if (*p == '\n' || *p++ == '=')
+ {
+ error (0, 0, _("%s: illegal line"), inname);
+ return 1;
+ }
+ c2 = b64_tab[*p++];
+
+ while (b64_tab[*p] == '\177')
+ if (*p++ == '\n')
+ {
+ error (0, 0, _("%s: illegal line"), inname);
+ return 1;
+ }
+ if (*p == '=')
+ {
+ TRY_PUTCHAR (c1 << 2 | c2 >> 4);
+ last_data = 1;
+ break;
+ }
+ c3 = b64_tab[*p++];
+
+ while (b64_tab[*p] == '\177')
+ if (*p++ == '\n')
+ {
+ error (0, 0, _("%s: illegal line"), inname);
+ return 1;
+ }
+ TRY_PUTCHAR (c1 << 2 | c2 >> 4);
+ TRY_PUTCHAR (c2 << 4 | c3 >> 2);
+ if (*p == '=')
+ {
+ last_data = 1;
+ break;
+ }
+ else
+ TRY_PUTCHAR (c3 << 6 | b64_tab[*p++]);
+ }
+ }
+
+ return 0;
+}
+
+
+static int
+decode (inname, forced_outname)
+ const char *inname;
+ const char *forced_outname;
+{
+ struct passwd *pw;
+ register int n;
+ register char *p;
+ int mode, n1;
+ char buf[2 * BUFSIZ];
+ char *outname;
+ int do_base64 = 0;
+ struct stat attr;
+ int rval;
+
+ /* Search for header line. */
+
+ while (1)
+ {
+ if (fgets (buf, sizeof (buf), stdin) == NULL)
+ {
+ error (0, 0, _("%s: No `begin' line"), inname);
+ return 1;
+ }
+
+ if (strncmp (buf, "begin", 5) == 0)
+ {
+ if (sscanf (buf, "begin-base64 %o %[^\n]", &mode, buf) == 2)
+ {
+ do_base64 = 1;
+ break;
+ }
+ else if (sscanf (buf, "begin %o %[^\n]", &mode, buf) == 2)
+ break;
+ }
+ }
+
+ /* If the output file name is given on the command line this rules. */
+ if (forced_outname != NULL)
+ outname = (char *) forced_outname;
+ else
+ {
+ /* Handle ~user/file format. */
+
+ if (buf[0] != '~')
+ outname = buf;
+ else
+ {
+ p = buf + 1;
+ while (*p != '/')
+ ++p;
+ if (*p == '\0')
+ {
+ error (0, 0, _("%s: Illegal ~user"), inname);
+ return 1;
+ }
+ *p++ = '\0';
+ pw = getpwnam (buf + 1);
+ if (pw == NULL)
+ {
+ error (0, 0, _("%s: No user `%s'"), inname, buf + 1);
+ return 1;
+ }
+ n = strlen (pw->pw_dir);
+ n1 = strlen (p);
+ outname = (char *) alloca ((size_t) (n + n1 + 2));
+ memcpy (outname + n + 1, p, (size_t) (n1 + 1));
+ memcpy (outname, pw->pw_dir, (size_t) n);
+ outname[n] = '/';
+ }
+ }
+
+ /* Create output file and set mode. */
+
+ if ( (strcmp (outname, "/dev/stdout") != 0)
+ && (strcmp (outname, "-") != 0) )
+ {
+ FILE* fp;
+
+ /* Check out file if it exists */
+ if (!access(outname, F_OK))
+ {
+ if (lstat(outname, &attr) == -1)
+ {
+ error (0, errno, _("cannot access %s"), outname);
+ return 1;
+ }
+ if (S_ISFIFO(attr.st_mode))
+ {
+ error (0, errno, _("denied writing FIFO (%s)"), outname);
+ return 1;
+ }
+ if (S_ISLNK(attr.st_mode))
+ {
+ error (0, errno, _("not following symlink (%s)"), outname);
+ return 1;
+ }
+ }
+
+ fp = freopen (outname, FOPEN_WRITE_BINARY, stdout);
+ if (fp != stdout)
+ {
+ error (0, errno, _("freopen of %s"), outname);
+ return 1;
+ }
+
+ if (UU_CHMOD(outname, fileno (fp), mode) != 0)
+ {
+ error (0, errno, _("chmod of %s"), outname);
+ return 1;
+ }
+ }
+
+ /* We differenciate decoding standard UU encoding and base64. A
+ common function would only slow down the program. */
+
+ /* For each input line: */
+ if (do_base64)
+ rval = read_base64 (inname, outname);
+ else
+ rval = read_stduu (inname, outname);
+
+ if (rval == 0 && (ferror(stdout) || fflush(stdout) != 0))
+ {
+ error (0, 0, _("%s: Write error"), outname);
+ return 1;
+ }
+
+ return rval;
+}
+
+static void
+usage (status)
+ int status;
+{
+ if (status != 0)
+ fprintf (stderr, _("Try `%s --help' for more information.\n"),
+ program_name);
+ else
+ {
+ printf (_("Usage: %s [FILE]...\n"), program_name);
+ fputs (_("\
+Mandatory arguments to long options are mandatory to short options too.\n\
+ -o, --output-file=FILE direct output to FILE\n\
+ --help display this help and exit\n\
+ --version output version information and exit\n"), stdout);
+ /* TRANSLATORS: add the contact address for your translation team! */
+ printf (_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ }
+ exit (status);
+}
+
+int
+main (argc, argv)
+ int argc;
+ char *const *argv;
+{
+ int opt;
+ int exit_status;
+ const char *outname;
+
+ program_name = argv[0];
+ outname = NULL;
+ setlocale (LC_ALL, "");
+
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ while (opt = getopt_long (argc, argv, "o:", longopts, (int *) NULL),
+ opt != EOF)
+ {
+ switch (opt)
+ {
+ case 'h':
+ usage (EXIT_SUCCESS);
+
+ case 'o':
+ outname = optarg;
+ break;
+
+ case 'v':
+ printf ("%s (GNU %s) %s\n", basename (program_name),
+ PACKAGE, VERSION);
+ /* xgettext: no-wrap */
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+This is free software; see the source for copying conditions. There is NO\n\
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
+"),
+ cright_years_z);
+ exit (EXIT_SUCCESS);
+
+ case 0:
+ break;
+
+ default:
+ usage (EXIT_FAILURE);
+ }
+ }
+
+ if (optind == argc)
+ exit_status = decode ("stdin", outname) == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+ else
+ {
+ exit_status = EXIT_SUCCESS;
+ do
+ {
+ if (freopen (argv[optind], "r", stdin) != NULL)
+ {
+ if (decode (argv[optind], outname) != 0)
+ exit_status = EXIT_FAILURE;
+ }
+ else
+ {
+ error (0, errno, "%s", argv[optind]);
+ exit_status = EXIT_FAILURE;
+ }
+ optind++;
+ }
+ while (optind < argc);
+ }
+
+ exit (exit_status);
+}
+
+/*
+ * Local Variables:
+ * mode: C
+ * c-file-style: "gnu"
+ * indent-tabs-mode: nil
+ * End:
+ * end of agen5/autogen.c */
diff --git a/src/uuencode.c b/src/uuencode.c
new file mode 100644
index 0000000..415196d
--- /dev/null
+++ b/src/uuencode.c
@@ -0,0 +1,314 @@
+
+static const char cright_years_z[] =
+ "1994, 1995, 1996, 2002, 2005, 2007";
+
+/* uuencode utility.
+ Copyright (C) 1994, 1995, 1996, 2002, 2005,
+ 2007 Free Software Foundation, Inc.
+
+ This product 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 3, or (at your option)
+ any later version.
+
+ This product 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 product; see the file COPYING. If not, write to
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* Copyright (c) 1983 Regents of the University of California.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by the University of
+ California, Berkeley and its contributors.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE. */
+
+/* Reworked to GNU style by Ian Lance Taylor, ian@airs.com, August 93. */
+
+#include "system.h"
+#include "basename.h"
+#include "error.h"
+#include "exit.h"
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#else
+# define setlocale(Category, Locale)
+#endif
+#include "gettext.h"
+#define _(str) gettext (str)
+
+/*=======================================================\
+| uuencode [INPUT] OUTPUT |
+| |
+| Encode a file so it can be mailed to a remote system. |
+\=======================================================*/
+
+#include "getopt.h"
+
+#define RW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
+
+static struct option longopts[] =
+{
+ { "base64", 0, 0, 'm' },
+ { "version", 0, 0, 'v' },
+ { "help", 0, 0, 'h' },
+ { NULL, 0, 0, 0 }
+};
+
+static inline void try_putchar __P ((int));
+static void encode __P ((void));
+static void usage __P ((int))
+#if defined __GNUC__ && ((__GNUC__ == 2 && __GNUC_MINOR__ >= 5) || __GNUC__ > 2)
+ __attribute__ ((noreturn))
+#endif
+;
+
+/* The name this program was run with. */
+const char *program_name;
+
+/* Pointer to the translation table we currently use. */
+const char *trans_ptr;
+
+/* The two currently defined translation tables. The first is the
+ standard uuencoding, the second is base64 encoding. */
+const char uu_std[64] =
+{
+ '`', '!', '"', '#', '$', '%', '&', '\'',
+ '(', ')', '*', '+', ',', '-', '.', '/',
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', ':', ';', '<', '=', '>', '?',
+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+ 'X', 'Y', 'Z', '[', '\\', ']', '^', '_'
+};
+
+const char uu_base64[64] =
+{
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+ 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+ 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+ 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+ 'w', 'x', 'y', 'z', '0', '1', '2', '3',
+ '4', '5', '6', '7', '8', '9', '+', '/'
+};
+
+/* ENC is the basic 1 character encoding function to make a char printing. */
+#define ENC(Char) (trans_ptr[(Char) & 077])
+
+static inline void
+try_putchar (c)
+ int c;
+{
+ if (putchar (c) == EOF)
+ error (EXIT_FAILURE, 0, _("Write error"));
+}
+
+/*------------------------------------------------.
+| Copy from IN to OUT, encoding as you go along. |
+`------------------------------------------------*/
+
+static void
+encode ()
+{
+ register int n;
+ int finishing = 0;
+ register char *p;
+ char buf[46]; /* 45 should be enough, but one never knows... */
+
+ while ( !finishing && (n = fread (buf, 1, 45, stdin)) > 0 )
+ {
+ if (n < 45)
+ {
+ if (feof (stdin))
+ finishing = 1;
+ else
+ error (EXIT_FAILURE, 0, _("Read error"));
+ }
+
+ if (trans_ptr == uu_std)
+ putchar (ENC (n));
+
+ for (p = buf; n > 2; n -= 3, p += 3)
+ {
+ try_putchar (ENC (*p >> 2));
+ try_putchar (ENC (((*p << 4) & 060) | ((p[1] >> 4) & 017)));
+ try_putchar (ENC (((p[1] << 2) & 074) | ((p[2] >> 6) & 03)));
+ try_putchar (ENC (p[2] & 077));
+ }
+
+ if (n > 0) /* encode the last one or two chars */
+ {
+ char tail = trans_ptr == uu_std ? ENC ('\0') : '=';
+
+ if (n == 1)
+ p[1] = '\0';
+
+ try_putchar (ENC (*p >> 2));
+ try_putchar (ENC (((*p << 4) & 060) | ((p[1] >> 4) & 017)));
+ try_putchar (n == 1 ? tail : ENC ((p[1] << 2) & 074));
+ try_putchar (tail);
+ }
+
+ try_putchar ('\n');
+ }
+
+ if (ferror (stdin))
+ error (EXIT_FAILURE, 0, _("Read error"));
+ if (fclose (stdin) != 0)
+ error (EXIT_FAILURE, errno, _("Read error"));
+
+ if (trans_ptr == uu_std)
+ {
+ try_putchar (ENC ('\0'));
+ try_putchar ('\n');
+ }
+}
+
+static void
+usage (status)
+ int status;
+{
+ if (status != 0)
+ fprintf (stderr, _("Try `%s --help' for more information.\n"),
+ program_name);
+ else
+ {
+ printf (_("Usage: %s [INFILE] REMOTEFILE\n"), program_name);
+ fputs (_("\n\
+ -m, --base64 use base64 encoding as of RFC1521\n\
+ --help display this help and exit\n\
+ --version output version information and exit\n"), stdout);
+ /* TRANSLATORS: add the contact address for your translation team! */
+ printf (_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ }
+ exit (status);
+}
+
+int
+main (argc, argv)
+ int argc;
+ char *const *argv;
+{
+ int opt;
+ struct stat sb;
+ int mode;
+
+ /* Set global variables. */
+ trans_ptr = uu_std; /* Standard encoding is old uu format. */
+
+ program_name = argv[0];
+ setlocale (LC_ALL, "");
+
+ /* Set the text message domain. */
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ while (opt = getopt_long (argc, argv, "hm", longopts, (int *) NULL),
+ opt != EOF)
+ {
+ switch (opt)
+ {
+ case 'h':
+ usage (EXIT_SUCCESS);
+
+ case 'm':
+ trans_ptr = uu_base64;
+ break;
+
+ case 'v':
+ printf ("%s (GNU %s) %s\n", basename (program_name),
+ PACKAGE, VERSION);
+ /* xgettext: no-wrap */
+ printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\
+This is free software; see the source for copying conditions. There is NO\n\
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"),
+ cright_years_z);
+ exit (EXIT_SUCCESS);
+
+ case 0:
+ break;
+
+ default:
+ usage (EXIT_FAILURE);
+ }
+ }
+
+ switch (argc - optind)
+ {
+ case 2:
+ /* Optional first argument is input file. */
+ {
+ FILE *fp = freopen (argv[optind], FOPEN_READ_BINARY, stdin);
+ if (fp != stdin)
+ error (EXIT_FAILURE, errno, _("fopen-ing %s"), argv[optind]);
+ if (fstat (fileno (stdin), &sb) != 0)
+ error (EXIT_FAILURE, errno, _("fstat-ing %s"), argv[optind]);
+ mode = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
+ optind++;
+ break;
+ }
+
+ case 1:
+#if __CYGWIN
+ if (! isatty (STDIN_FILENO))
+ setmode (STDIN_FILENO, O_BINARY);
+#endif
+
+ mode = RW & ~umask (RW);
+ break;
+
+ case 0:
+ default:
+ usage (EXIT_FAILURE);
+ }
+
+#if S_IRWXU != 0700
+choke me - Must translate mode argument
+#endif
+
+ if (printf ("begin%s %o %s\n", trans_ptr == uu_std ? "" : "-base64",
+ mode, argv[optind]) < 0)
+ error (EXIT_FAILURE, errno, _("Write error"));
+
+ encode ();
+
+ if (ferror (stdout) ||
+ printf (trans_ptr == uu_std ? "end\n" : "====\n") < 0 ||
+ fclose (stdout) != 0)
+ error (EXIT_FAILURE, errno, _("Write error"));
+
+ exit (EXIT_SUCCESS);
+}
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..b2a5143
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,32 @@
+## Makefile for the checks subdirectory of the GNU Shar utilities.
+##
+## Copyright (C) 1995, 1996, 2005, 2006, 2007 Free Software Foundation, Inc.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+## Process this file with automake to produce Makefile.in.
+
+TESTS = uutest-1 uude-1 shar-1 shar-2 shar-3
+TESTS_ENVIRONMENT = \
+ top_srcdir=$(top_srcdir) \
+ PATH=`cd ../src && pwd`:"$$PATH" \
+ PACKAGE_STRING='$(PACKAGE_STRING)' top_builddir=$(top_builddir)
+
+EXTRA_DIST = $(TESTS) testdata shar-1.ok
+
+clean : local-clean
+
+local-clean :
+ rm -rf shar-1-* shar-1.in shar-2*.* $${TMPDIR=/tmp}/shar-3*.d
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..b4772f8
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,441 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/realloc.m4 \
+ $(top_srcdir)/m4/sharutils.m4 $(top_srcdir)/m4/signed.m4 \
+ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrtoimax.m4 \
+ $(top_srcdir)/version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_SCRIPT = @ADD_SCRIPT@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMPRESS = @COMPRESS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DIFF = @DIFF@
+DIRENT_HEADER = @DIRENT_HEADER@
+DIST_ALPHA = @DIST_ALPHA@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+INSTALL = @INSTALL@
+INSTALL_COMPRESS_LINK = @INSTALL_COMPRESS_LINK@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAILER = @MAILER@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SH = @SH@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TAR = @TAR@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = uutest-1 uude-1 shar-1 shar-2 shar-3
+TESTS_ENVIRONMENT = \
+ top_srcdir=$(top_srcdir) \
+ PATH=`cd ../src && pwd`:"$$PATH" \
+ PACKAGE_STRING='$(PACKAGE_STRING)' top_builddir=$(top_builddir)
+
+EXTRA_DIST = $(TESTS) testdata shar-1.ok
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnits tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *$$ws$$tst$$ws*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *$$ws$$tst$$ws*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+ distclean distclean-generic distdir dvi dvi-am html html-am \
+ info info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
+ uninstall-am
+
+
+clean : local-clean
+
+local-clean :
+ rm -rf shar-1-* shar-1.in shar-2*.* $${TMPDIR=/tmp}/shar-3*.d
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/shar-1 b/tests/shar-1
new file mode 100755
index 0000000..6f48879
--- /dev/null
+++ b/tests/shar-1
@@ -0,0 +1,58 @@
+#! /bin/sh
+
+current_dir=`pwd`
+
+tmpfile=shar-1-$$
+inf=shar-1.in
+sharf=${tmpfile}.shar
+outf=${tmpfile}.outf
+
+# Test whether -f/--basename option removes all references to the old
+# file name.
+
+trap "rm -fr shar-1.in ${tmpfile}.*" 1 2 3 15
+
+echo "This is a test" > ${inf}
+chmod 0644 ${inf} 2> /dev/null >&2
+SHAR=../src/shar
+
+${SHAR} -f $current_dir/${inf} > ${sharf} 2> /dev/null || exit 1
+
+sed -e "s/__PACKAGE_STRING__/${PACKAGE_STRING}/" \
+ $top_srcdir/tests/shar-1.ok > ${tmpfile}.sample
+
+# Remove variations based on PID and the current date
+#
+sed -e 's/^# Made on.*/# Made on .../' \
+ -e 's/^# Source directory was.*/# Source directory was .../' \
+ -e 's/=_sh[0-9][0-9]*/=_sh<PID>/' \
+ -e 's/(set .. .. .. .. .. .. ../(set <date>/' \
+${sharf} > ${outf} 2> /dev/null
+
+: ${DIFF=diff}
+${DIFF} -c ${tmpfile}.sample ${outf} || exit 1
+
+# test basic functioning of unshar
+#
+: ${UNSHAR=../src/unshar}
+mv -f ${inf} ${outf}
+
+res=`${UNSHAR} ${sharf} 2>&1` || {
+ echo "${res}" >&2
+ exit 1
+}
+
+${DIFF} ${inf} ${outf} || exit 1
+
+rm -f shar-1.in ${tmpfile}.*
+exit 0
+
+## Local Variables:
+## mode: shell-script
+## tab-width: 8
+## indent-tabs-mode: nil
+## sh-indentation: 2
+## sh-basic-offset: 2
+## End:
+
+## end of shar-1
diff --git a/tests/shar-1.ok b/tests/shar-1.ok
new file mode 100644
index 0000000..1ef6510
--- /dev/null
+++ b/tests/shar-1.ok
@@ -0,0 +1,124 @@
+#!/bin/sh
+# This is a shell archive (produced by GNU __PACKAGE_STRING__).
+# To extract the files from this archive, save it to some FILE, remove
+# everything before the `#!/bin/sh' line above, then type `sh FILE'.
+#
+lock_dir=_sh<PID>
+# Made on ...
+# Source directory was ...
+#
+# Existing files will *not* be overwritten, unless `-c' is specified.
+#
+# This shar contains:
+# length mode name
+# ------ ---------- ------------------------------------------
+# 15 -rw-r--r-- shar-1.in
+#
+MD5SUM=${MD5SUM-md5sum}
+f=`${MD5SUM} --version | egrep '^md5sum .*(core|text)utils'`
+test -n "${f}" && md5check=true || md5check=false
+${md5check} || \
+ echo 'Note: not verifying md5sums. Consider installing GNU coreutils.'
+save_IFS="${IFS}"
+IFS="${IFS}:"
+gettext_dir=FAILED
+locale_dir=FAILED
+first_param="$1"
+for dir in $PATH
+do
+ if test "$gettext_dir" = FAILED && test -f $dir/gettext \
+ && ($dir/gettext --version >/dev/null 2>&1)
+ then
+ case `$dir/gettext --version 2>&1 | sed 1q` in
+ *GNU*) gettext_dir=$dir ;;
+ esac
+ fi
+ if test "$locale_dir" = FAILED && test -f $dir/shar \
+ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
+ then
+ locale_dir=`$dir/shar --print-text-domain-dir`
+ fi
+done
+IFS="$save_IFS"
+if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
+then
+ echo=echo
+else
+ TEXTDOMAINDIR=$locale_dir
+ export TEXTDOMAINDIR
+ TEXTDOMAIN=sharutils
+ export TEXTDOMAIN
+ echo="$gettext_dir/gettext -s"
+fi
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null
+then if (echo -n test; echo 1,2,3) | grep n >/dev/null
+ then shar_n= shar_c='
+'
+ else shar_n=-n shar_c= ; fi
+else shar_n= shar_c='\c' ; fi
+f=shar-touch.$$
+st1=200112312359.59
+st2=123123592001.59
+st2tr=123123592001.5 # old SysV 14-char limit
+st3=1231235901
+
+if touch -am -t ${st1} ${f} >/dev/null 2>&1 && \
+ test ! -f ${st1} && test -f ${f}; then
+ shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
+
+elif touch -am ${st2} ${f} >/dev/null 2>&1 && \
+ test ! -f ${st2} && test ! -f ${st2tr} && test -f ${f}; then
+ shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
+
+elif touch -am ${st3} ${f} >/dev/null 2>&1 && \
+ test ! -f ${st3} && test -f ${f}; then
+ shar_touch='touch -am $3$4$5$6$2 "$8"'
+
+else
+ shar_touch=:
+ echo
+ ${echo} 'WARNING: not restoring timestamps. Consider getting and'
+ ${echo} 'installing GNU `touch'\'', distributed in GNU coreutils...'
+ echo
+fi
+rm -f ${st1} ${st2} ${st2tr} ${st3} ${f}
+#
+if test ! -d ${lock_dir}
+then : ; else ${echo} 'lock directory '${lock_dir}' exists'
+ exit 1
+fi
+if mkdir ${lock_dir}
+then ${echo} 'x - created lock directory `'${lock_dir}\''.'
+else ${echo} 'x - failed to create lock directory `'${lock_dir}\''.'
+ exit 1
+fi
+# ============= shar-1.in ==============
+if test -f 'shar-1.in' && test "$first_param" != -c; then
+ ${echo} 'x -SKIPPING shar-1.in (file already exists)'
+else
+${echo} 'x - extracting shar-1.in (text)'
+ sed 's/^X//' << 'SHAR_EOF' > 'shar-1.in' &&
+This is a test
+SHAR_EOF
+ (set <date> 'shar-1.in'; eval "$shar_touch") &&
+ chmod 0644 'shar-1.in'
+if test $? -ne 0
+then ${echo} 'restore of shar-1.in failed'
+fi
+ if ${md5check}
+ then (
+ ${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'shar-1.in: MD5 check failed'
+ ) << \SHAR_EOF
+ff22941336956098ae9a564289d1bf1b shar-1.in
+SHAR_EOF
+ else
+test `LC_ALL=C wc -c < 'shar-1.in'` -ne 15 && \
+ ${echo} 'restoration warning: size of shar-1.in is not 15'
+ fi
+fi
+if rm -fr ${lock_dir}
+then ${echo} 'x - removed lock directory `'${lock_dir}\''.'
+else ${echo} 'x - failed to remove lock directory `'${lock_dir}\''.'
+ exit 1
+fi
+exit 0
diff --git a/tests/shar-2 b/tests/shar-2
new file mode 100755
index 0000000..526add1
--- /dev/null
+++ b/tests/shar-2
@@ -0,0 +1,45 @@
+#! /bin/sh
+
+tmppfx=shar-2-$$
+
+mkdir ${tmppfx}.dir ${tmppfx}.d ${tmppfx}.d/one ${tmppfx}.d/two
+for d in "" /one /two
+do
+ dir=${tmppfx}.d${d}
+ echo This file is shar-2${d}/first > ${dir}/first
+ exec 3> ${dir}/second
+ echo This file is shar-2${d}/second >&3
+ f=0
+ while test $f -lt 32
+ do g=\\`printf %0d $f`
+ printf "$g"
+ f=`expr $f + 1`
+ done >&3
+ echo >&3
+ echo This file is shar-2${d}/second >&3
+ exec 3>&-
+done
+
+: ${SHAR=`cd ../src ; pwd`/shar}
+: ${UNSHAR=`cd ../src ; pwd`/unshar}
+(cd ${tmppfx}.d ; ${SHAR} -m . 2>/dev/null) > ${tmppfx}.shar
+
+: ${DIFF=diff}
+
+( cd ${tmppfx}.dir
+ ${UNSHAR} ../${tmppfx}.shar )
+
+${DIFF} -r ${tmppfx}.d ${tmppfx}.dir || exit 1
+
+rm -rf ${tmppfx}.*
+exit 0
+
+## Local Variables:
+## mode: shell-script
+## tab-width: 8
+## indent-tabs-mode: nil
+## sh-indentation: 2
+## sh-basic-offset: 2
+## End:
+
+## end of shar-2
diff --git a/tests/shar-3 b/tests/shar-3
new file mode 100755
index 0000000..1f0a159
--- /dev/null
+++ b/tests/shar-3
@@ -0,0 +1,48 @@
+#! /bin/sh
+
+current_dir=`pwd`
+TMPDIR=${TMPDIR=/tmp}
+export TMPDIR
+testname=shar-3
+testdir=${TMPDIR}/${testname}-$$.d
+rm -rf ${testdir}
+(umask 077 ; mkdir ${testdir}) || exit 1
+opts="-S -o ${testdir}/${testname}-%04d.shar"
+opts="${opts} -L32 -n ${testname}-test -s ${testname} -z"
+
+shar=`cd ../src ; pwd`/shar
+unshar=`cd ../src ; pwd`/unshar
+top_builddir=`cd ${top_builddir} ; pwd`
+
+cd ${top_builddir}
+find . -type f | \
+ sed 's,^./,,' | \
+ ${shar} -q ${opts}
+
+cd ${testdir}
+mkdir ${testname}.d
+opts=-d${testname}.d
+
+for f in ${testname}-*.shar
+do
+ ${unshar} ${opts} ${f}
+done >/dev/null
+
+if diff -r ${top_builddir} ${testname}.d
+then :
+else echo ${top_builddir} and ${testname}.d differ ; exit 1
+fi
+
+cd ${current_dir}
+rm -rf ${testdir}
+exit 0
+
+## Local Variables:
+## mode: shell-script
+## tab-width: 8
+## indent-tabs-mode: nil
+## sh-indentation: 2
+## sh-basic-offset: 2
+## End:
+
+## end of shar-3
diff --git a/tests/testdata b/tests/testdata
new file mode 100644
index 0000000..2db6ca7
--- /dev/null
+++ b/tests/testdata
@@ -0,0 +1,9 @@
+begin 664 test.bin
+M``$"`P0%!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL
+M+2XO,#$R,S0U-C<X.3H[/#T^/T!!0D-$149'2$E*2TQ-3D]045)35%565UA9
+M6EM<75Y?8&%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ>WQ]?G^`@8*#A(6&
+MAXB)BHN,C8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*S
+MM+6VM[BYNKN\O;Z_P,'"P\3%QL?(R<K+S,W.S]#1TM/4U=;7V-G:V]S=WM_@
+?X>+CY.7FY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_P``
+`
+end
diff --git a/tests/uude-1 b/tests/uude-1
new file mode 100755
index 0000000..2aa5f32
--- /dev/null
+++ b/tests/uude-1
@@ -0,0 +1,39 @@
+#! /bin/sh
+# uudecode output file handling; cf. ../src/ChangeLog 2002-07-06
+
+trap 'rm -fr $tmpfiles' 1 2 3 15
+
+tno=1
+
+tmpfiles="test.bin uudata${tno} uude-test${tno}.err"
+rm -fr $tmpfiles
+
+echo "Was schlimm ist" > uudata${tno}
+: ${LN=ln}
+${LN} -sf uudata${tno} test.bin
+
+: ${UUDECODE=uudecode}
+# : ${top_srcdir=..}
+LC_MESSAGES=C LC_ALL= \
+${UUDECODE} ${top_srcdir}/tests/testdata 2>&1 \
+ | sed 's/.*\(not following symlink (test.bin)\).*/\1/' > uude-test${tno}.err
+
+rm -f test.bin
+mkfifo test.bin
+LC_MESSAGES=C LC_ALL= \
+${UUDECODE} ${top_srcdir}/tests/testdata 2>&1 \
+ | sed 's/.*\(denied writing FIFO (test.bin)\).*/\1/' >>uude-test${tno}.err
+
+tmpfiles="$tmpfiles uude-test${tno}.ok"
+cat << EOF > uude-test${tno}.ok
+not following symlink (test.bin)
+denied writing FIFO (test.bin)
+EOF
+
+: ${DIFF=diff}
+${DIFF} uude-test${tno}.ok uude-test${tno}.err
+result=$?
+
+rm -fr $tmpfiles
+
+exit $result
diff --git a/tests/uutest-1 b/tests/uutest-1
new file mode 100755
index 0000000..59cc216
--- /dev/null
+++ b/tests/uutest-1
@@ -0,0 +1,27 @@
+#! /bin/sh
+
+trap 'rm -fr $tmpfiles' 1 2 3 15
+
+tmpfiles="test.bin test.out"
+# Make sure no files are left over.
+rm -fr $tmpfiles
+
+: ${UUDECODE=uudecode}
+${UUDECODE} $top_srcdir/tests/testdata
+result=$?
+
+if test $result -eq 0; then
+ : ${UUENCODE=uuencode}
+ ${UUENCODE} test.bin test.bin > test.out
+ result=$?
+
+ if test $result -eq 0; then
+ : ${DIFF=diff}
+ ${DIFF} $top_srcdir/tests/testdata test.out > /dev/null
+ result=$?
+ fi
+fi
+
+rm -fr $tmpfiles
+
+exit $result
diff --git a/version.m4 b/version.m4
new file mode 100644
index 0000000..d1dc387
--- /dev/null
+++ b/version.m4
@@ -0,0 +1,5 @@
+m4_define([sharutils_version], [4.7])
+m4_define([sharutils_eaddr], [bug-gnu-utils@gnu.org])
+m4_define([gettext_version], [0.14.5])
+AC_PREREQ([2.61])
+[DIST_ALPHA=]