mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 15:41:09 +08:00
Initial revision
From-SVN: r18770
This commit is contained in:
parent
34b6478b59
commit
1eb3e8442f
226
texinfo/ABOUT-NLS
Normal file
226
texinfo/ABOUT-NLS
Normal file
@ -0,0 +1,226 @@
|
||||
Notes on the GNU Translation Project
|
||||
************************************
|
||||
|
||||
GNU is going international! The GNU Translation Project is a way to
|
||||
get maintainers, translators, and users all together, so that GNU 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 GNU distribution, you
|
||||
may assume that the distributed package does use GNU `gettext'
|
||||
internally, itself available at your nearest GNU archive site. But you
|
||||
do *not* need to install GNU `gettext' prior to configuring, installing
|
||||
or using this package with messages translated.
|
||||
|
||||
Installers will find here some useful hints. These notes also
|
||||
explain how users should proceed for getting the programs to use the
|
||||
available translations. They tell how people wanting to contribute and
|
||||
work at translations should contact the appropriate team.
|
||||
|
||||
When reporting bugs in the `intl/' directory or bugs which may be
|
||||
related to internationalization, you should tell about the version of
|
||||
`gettext' which is used. The information can be found in the
|
||||
`intl/VERSION' file, in internationalized packages.
|
||||
|
||||
One advise in advance
|
||||
=====================
|
||||
|
||||
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, no
|
||||
prior implementation provides as many useful features (such as locale
|
||||
alias or message inheritance). 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.
|
||||
|
||||
INSTALL Matters
|
||||
===============
|
||||
|
||||
Some GNU 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 provides
|
||||
usable `catgets' (if using this is selected by the installer) or
|
||||
`gettext' functions. If neither is available, the GNU `gettext' own
|
||||
library will be used. This library is wholly contained within this
|
||||
package, usually in the `intl/' subdirectory, so prior installation of
|
||||
the GNU `gettext' package is *not* required. Installers may use
|
||||
special options at configuration time for changing the default
|
||||
behaviour. The commands:
|
||||
|
||||
./configure --with-included-gettext
|
||||
./configure --with-catgets
|
||||
./configure --disable-nls
|
||||
|
||||
will respectively bypass any pre-existing `catgets' or `gettext' to use
|
||||
the internationalizing routines provided within this package, enable
|
||||
the use of the `catgets' functions (if found on the locale system), or
|
||||
else, *totally* disable translation of messages.
|
||||
|
||||
When you already have GNU `gettext' installed on your system and run
|
||||
configure without an option for your new package, `configure' will
|
||||
probably detect the previously built and installed `libintl.a' file and
|
||||
will decide to use this. This might be not what is desirable. You
|
||||
should use the more recent version of the GNU `gettext' library. I.e.
|
||||
if the file `intl/VERSION' shows that the library which comes with this
|
||||
package is more recent, you should use
|
||||
|
||||
./configure --with-included-gettext
|
||||
|
||||
to prevent auto-detection.
|
||||
|
||||
By default the configuration process will not test for the `catgets'
|
||||
function and therefore they will not be used. The reasons are already
|
||||
given above: the emulation on top of `catgets' cannot provide all the
|
||||
extensions provided by the GNU `gettext' library. If you nevertheless
|
||||
want to use the `catgets' functions use
|
||||
|
||||
./configure --with-catgets
|
||||
|
||||
to enable the test for `catgets' (this causes no harm if `catgets' is
|
||||
not available on your system). If you really select this option we
|
||||
would like to hear about the reasons because we cannot think of any
|
||||
good one ourself.
|
||||
|
||||
Internationalized packages have usually many `po/LL.po' files, where
|
||||
LL gives an ISO 639 two-letter code identifying the language. Unless
|
||||
translations have been forbidden at `configure' time by using the
|
||||
`--disable-nls' switch, all available translations are installed
|
||||
together with the package. However, the environment variable `LINGUAS'
|
||||
may be set, prior to configuration, to limit the installed set.
|
||||
`LINGUAS' should then contain a space separated list of two-letter
|
||||
codes, stating which languages are allowed.
|
||||
|
||||
Using This Package
|
||||
==================
|
||||
|
||||
As a user, if your language has been installed for this package, you
|
||||
only have to set the `LANG' environment variable to the appropriate
|
||||
ISO 639 `LL' two-letter code prior to using the programs in the
|
||||
package. For example, let's suppose that you speak German. At the
|
||||
shell prompt, merely execute `setenv LANG de' (in `csh'),
|
||||
`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This
|
||||
can be done from your `.login' or `.profile' file, once and for all.
|
||||
|
||||
An operating system might already offer message localization for
|
||||
many of its programs, while other programs (whether GNU or not) have
|
||||
been installed locally with the full capabilities of GNU `gettext'.
|
||||
Just using `gettext' extended syntax for `LANG' would break proper
|
||||
localization of already available operating system programs. In this
|
||||
case, users should set both `LANGUAGE' and `LANG' variables in their
|
||||
environment, as programs using GNU `gettext' give preference to
|
||||
`LANGUAGE'. For example, some Swedish users would rather read
|
||||
translations in German than English for when Swedish is not available.
|
||||
This is easily accomplished by setting `LANGUAGE' to `sv:de' while
|
||||
leaving `LANG' to `sv'.
|
||||
|
||||
Translating Teams
|
||||
=================
|
||||
|
||||
For the GNU 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, courtesy of Linux
|
||||
International. You may reach your translation team at the address
|
||||
`LL@li.org', replacing LL by the two-letter ISO 639 code for your
|
||||
language. Language codes are *not* the same as the country codes given
|
||||
in ISO 3166. The following translation teams exist, as of February
|
||||
1997:
|
||||
|
||||
Arabic `ar', Chinese `zh', Czech `cs', Danish `da', Dutch `nl',
|
||||
English `en', Esperanto `eo', Finnish `fi', French `fr', German
|
||||
`de', Greek `el', Hebrew `he', Hungarian `hu', Irish `ga', Italian
|
||||
`it', Indonesian `id', Japanese `ja', Korean `ko', Latin `la',
|
||||
Norwegian `no', Persian `fa', Polish `pl', Portuguese `pt',
|
||||
Russian `ru', Slovenian `sl', Spanish `es', Swedish `sv', Telugu
|
||||
`te', Turkish `tr' and Ukrainian `uk'.
|
||||
|
||||
For example, you may reach the Chinese translation team by writing to
|
||||
`zh@li.org'.
|
||||
|
||||
If you'd like to volunteer to *work* at translating messages, you
|
||||
should become a member of the translating team for your own language.
|
||||
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 `gnu-translation@gnu.ai.mit.edu' to reach
|
||||
the GNU coordinator for all translator teams.
|
||||
|
||||
The English team is special. It works at improving and uniformizing
|
||||
the terminology used in GNU. Proven linguistic skill are praised more
|
||||
than programming skill, here. For the time being, please avoid
|
||||
subscribing to the English team unless explicitly invited to do so.
|
||||
|
||||
Available Packages
|
||||
==================
|
||||
|
||||
Languages are not equally supported in all GNU packages. The
|
||||
following matrix shows the current state of GNU internationalization,
|
||||
as of February 1997. The matrix shows, in regard of each package, for
|
||||
which languages PO files have been submitted to translation
|
||||
coordination.
|
||||
|
||||
Ready PO files cs de en es fi fr ja ko nl no pl pt sl sv
|
||||
.-------------------------------------------.
|
||||
bash | [] [] [] | 3
|
||||
bison | [] [] [] | 3
|
||||
clisp | [] [] [] | 3
|
||||
cpio | [] [] [] [] [] | 5
|
||||
diffutils | [] [] [] [] | 4
|
||||
enscript | [] [] [] [] [] | 5
|
||||
fileutils | [] [] [] [] [] [] [] [] | 8
|
||||
findutils | [] [] [] [] [] [] [] | 7
|
||||
flex | [] [] [] | 3
|
||||
gcal | [] [] [] | 3
|
||||
gettext | [] [] [] [] [] [] [] [] [] [] | 11
|
||||
grep | [] [] [] [] [] [] [] [] | 8
|
||||
hello | [] [] [] [] [] [] [] [] [] [] | 10
|
||||
id-utils | [] [] | 2
|
||||
indent | [] [] | 2
|
||||
libc | [] [] [] [] [] [] [] | 7
|
||||
m4 | [] [] [] [] [] | 5
|
||||
make | [] [] [] [] [] [] | 6
|
||||
music | [] | 1
|
||||
ptx | [] [] [] [] [] [] [] [] | 8
|
||||
recode | [] [] [] [] [] [] [] [] | 8
|
||||
sh-utils | [] [] [] [] [] | 5
|
||||
sharutils | [] [] [] [] [] | 5
|
||||
tar | [] [] [] [] [] [] [] [] [] | 9
|
||||
texinfo | | 0
|
||||
textutils | [] [] [] [] [] [] | 6
|
||||
wdiff | [] [] [] [] [] [] [] [] | 8
|
||||
`-------------------------------------------'
|
||||
14 languages cs de en es fi fr ja ko nl no pl pt sl sv
|
||||
27 packages 1 22 1 14 1 25 1 10 20 7 14 7 7 15 145
|
||||
|
||||
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
|
||||
GNU distribution.
|
||||
|
||||
If February 1997 seems to be old, you may fetch a more recent copy
|
||||
of this `ABOUT-NLS' file on most GNU archive sites.
|
||||
|
3
texinfo/AUTHORS
Normal file
3
texinfo/AUTHORS
Normal file
@ -0,0 +1,3 @@
|
||||
Richard Stallman, Brian Fox, Bob Chassell, Noah Friedman, Paul Rubin,
|
||||
Karl Berry, and no doubt many others.
|
||||
|
15
texinfo/Makefile.am
Normal file
15
texinfo/Makefile.am
Normal file
@ -0,0 +1,15 @@
|
||||
## Makefile.am for texinfo.
|
||||
## $Id: Makefile.am,v 1.1 1998/03/23 04:42:02 law Exp $
|
||||
## Process this file with automake to produce Makefile.in in all directories.
|
||||
|
||||
## Be sure we're using the right version of Automake.
|
||||
AUTOMAKE_OPTIONS = 1.1p
|
||||
|
||||
# Additional files to distribute.
|
||||
EXTRA_DIST = INTRODUCTION dir-example README-alpha
|
||||
|
||||
# All subdirectories.
|
||||
# Do intl/ and lib/ first since the C programs depend on them.
|
||||
# Do doc/ last so makeinfo will be built when we get there.
|
||||
# Others are alphabetical.
|
||||
SUBDIRS = intl lib emacs info makeinfo po util doc
|
11
texinfo/README-alpha
Normal file
11
texinfo/README-alpha
Normal file
@ -0,0 +1,11 @@
|
||||
Please report bugs in this alpha distribution to
|
||||
texinfo-pretest@cs.umb.edu
|
||||
rather than bug-texinfo@prep. Thanks.
|
||||
|
||||
You can get on texinfo-pretest, if you're not already,
|
||||
by sending a message whose body is
|
||||
subscribe you@your.preferred.email.address
|
||||
|
||||
to texinfo-pretest-request@cs.umb.edu.
|
||||
And you can get off the list by sending an unsubscribe message.
|
||||
(I use majordomo to maintain the list.)
|
9
texinfo/THANKS
Normal file
9
texinfo/THANKS
Normal file
@ -0,0 +1,9 @@
|
||||
Thanks to these contributors and many more ...
|
||||
|
||||
Dave Love
|
||||
Donald Knuth
|
||||
Erick Branderhorst
|
||||
Karl Eichwalder
|
||||
Laurent Bourbeau
|
||||
Stephen Gildea
|
||||
William Bader
|
51
texinfo/acconfig.h
Normal file
51
texinfo/acconfig.h
Normal file
@ -0,0 +1,51 @@
|
||||
/* acconfig.h
|
||||
This file is in the public domain.
|
||||
|
||||
Descriptive text for the C preprocessor macros that
|
||||
the distributed Autoconf macros can define.
|
||||
No software package will use all of them; autoheader copies the ones
|
||||
your configure.in uses into your configuration header file templates.
|
||||
|
||||
The entries are in sort -df order: alphabetical, case insensitive,
|
||||
ignoring punctuation (such as underscores). Although this order
|
||||
can split up related entries, it makes it easier to check whether
|
||||
a given entry is in the file.
|
||||
|
||||
Leave the following blank line there!! Autoheader needs it. */
|
||||
|
||||
|
||||
@TOP@
|
||||
|
||||
/* Define to 1 if NLS is requested. */
|
||||
#undef ENABLE_NLS
|
||||
|
||||
/* Define as 1 if you have catgets and don't want to use GNU gettext. */
|
||||
#undef HAVE_CATGETS
|
||||
|
||||
/* Define as 1 if you have gettext and don't want to use GNU gettext. */
|
||||
#undef HAVE_GETTEXT
|
||||
|
||||
/* Define if your locale.h file contains LC_MESSAGES. */
|
||||
#undef HAVE_LC_MESSAGES
|
||||
|
||||
/* Define as 1 if you have the stpcpy function. */
|
||||
#undef HAVE_STPCPY
|
||||
|
||||
/* Define to the name of the distribution. */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the version of the distribution. */
|
||||
#undef VERSION
|
||||
|
||||
@BOTTOM@
|
||||
|
||||
/* For gettext (NLS) */
|
||||
#include <libintl.h>
|
||||
#define _(String) gettext (String)
|
||||
#define N_(String) (String)
|
||||
|
||||
|
||||
/* Leave that blank line there!! Autoheader needs it.
|
||||
If you're adding to this file, keep in mind:
|
||||
The entries are in sort -df order: alphabetical, case insensitive,
|
||||
ignoring punctuation (such as underscores). */
|
349
texinfo/acinclude.m4
Normal file
349
texinfo/acinclude.m4
Normal file
@ -0,0 +1,349 @@
|
||||
# Macro to add for using GNU gettext.
|
||||
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||
|
||||
# serial 2
|
||||
|
||||
AC_DEFUN(AM_WITH_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)
|
||||
|
||||
USE_INCLUDED_LIBINTL=no
|
||||
|
||||
dnl If we use NLS figure out what method
|
||||
if test "$USE_NLS" = "yes"; then
|
||||
AC_DEFINE(ENABLE_NLS)
|
||||
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 gettext or catgets are available (in this order) we
|
||||
dnl use this. Else we have to fall back to GNU NLS library.
|
||||
dnl catgets is only used if permitted by option --with-catgets.
|
||||
nls_cv_header_intl=
|
||||
nls_cv_header_libgt=
|
||||
CATOBJEXT=NONE
|
||||
|
||||
AC_CHECK_HEADER(libintl.h,
|
||||
[AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
|
||||
[AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
|
||||
gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
|
||||
|
||||
if test "$gt_cv_func_gettext_libc" != "yes"; then
|
||||
AC_CHECK_LIB(intl, bindtextdomain,
|
||||
[AC_CACHE_CHECK([for gettext in libintl],
|
||||
gt_cv_func_gettext_libintl,
|
||||
[AC_TRY_LINK([], [return (int) gettext ("")],
|
||||
gt_cv_func_gettext_libintl=yes,
|
||||
gt_cv_func_gettext_libintl=no)])])
|
||||
fi
|
||||
|
||||
if test "$gt_cv_func_gettext_libc" = "yes" \
|
||||
|| test "$gt_cv_func_gettext_libintl" = "yes"; then
|
||||
AC_DEFINE(HAVE_GETTEXT)
|
||||
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
||||
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
|
||||
if test "$MSGFMT" != "no"; then
|
||||
AC_CHECK_FUNCS(dcgettext)
|
||||
AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
|
||||
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
|
||||
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
|
||||
AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
|
||||
return _nl_msg_cat_cntr],
|
||||
[CATOBJEXT=.gmo
|
||||
DATADIRNAME=share],
|
||||
[CATOBJEXT=.mo
|
||||
DATADIRNAME=lib])
|
||||
INSTOBJEXT=.mo
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
if test "$CATOBJEXT" = "NONE"; then
|
||||
AC_MSG_CHECKING([whether catgets can be used])
|
||||
AC_ARG_WITH(catgets,
|
||||
[ --with-catgets use catgets functions if available],
|
||||
nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
|
||||
AC_MSG_RESULT($nls_cv_use_catgets)
|
||||
|
||||
if test "$nls_cv_use_catgets" = "yes"; then
|
||||
dnl No gettext in C library. Try catgets next.
|
||||
AC_CHECK_LIB(i, main)
|
||||
AC_CHECK_FUNC(catgets,
|
||||
[AC_DEFINE(HAVE_CATGETS)
|
||||
INTLOBJS="\$(CATOBJS)"
|
||||
AC_PATH_PROG(GENCAT, gencat, no)dnl
|
||||
if test "$GENCAT" != "no"; then
|
||||
AC_PATH_PROG(GMSGFMT, gmsgfmt, no)
|
||||
if test "$GMSGFMT" = "no"; then
|
||||
AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
|
||||
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)
|
||||
fi
|
||||
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
|
||||
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
|
||||
USE_INCLUDED_LIBINTL=yes
|
||||
CATOBJEXT=.cat
|
||||
INSTOBJEXT=.cat
|
||||
DATADIRNAME=lib
|
||||
INTLDEPS="../intl/libintl.a"
|
||||
INTLLIBS=$INTLDEPS
|
||||
LIBS=`echo $LIBS | sed -e 's/-lintl//'`
|
||||
nls_cv_header_intl=intl/libintl.h
|
||||
nls_cv_header_libgt=intl/libgettext.h
|
||||
fi])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$CATOBJEXT" = "NONE"; then
|
||||
dnl Neither gettext nor catgets in included in the C library.
|
||||
dnl Fall back on GNU gettext library.
|
||||
nls_cv_use_gnu_gettext=yes
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$nls_cv_use_gnu_gettext" = "yes"; then
|
||||
dnl Mark actions used to generate GNU NLS library.
|
||||
INTLOBJS="\$(GETTOBJS)"
|
||||
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
||||
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
|
||||
AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
|
||||
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
|
||||
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
|
||||
AC_SUBST(MSGFMT)
|
||||
USE_INCLUDED_LIBINTL=yes
|
||||
CATOBJEXT=.gmo
|
||||
INSTOBJEXT=.mo
|
||||
DATADIRNAME=share
|
||||
INTLDEPS="../intl/libintl.a"
|
||||
INTLLIBS=$INTLDEPS
|
||||
LIBS=`echo $LIBS | sed -e 's/-lintl//'`
|
||||
nls_cv_header_intl=intl/libintl.h
|
||||
nls_cv_header_libgt=intl/libgettext.h
|
||||
fi
|
||||
|
||||
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 /dev/null 2> /dev/null; then
|
||||
: ;
|
||||
else
|
||||
AC_MSG_RESULT(
|
||||
[found xgettext programs is not GNU xgettext; ignore it])
|
||||
XGETTEXT=":"
|
||||
fi
|
||||
fi
|
||||
|
||||
# We need to process the po/ directory.
|
||||
POSUB=po
|
||||
else
|
||||
DATADIRNAME=share
|
||||
nls_cv_header_intl=intl/libintl.h
|
||||
nls_cv_header_libgt=intl/libgettext.h
|
||||
fi
|
||||
|
||||
# If this is used in GNU gettext we have to set USE_NLS to `yes'
|
||||
# because some of the sources are only built for this goal.
|
||||
if test "$PACKAGE" = gettext; then
|
||||
USE_NLS=yes
|
||||
USE_INCLUDED_LIBINTL=yes
|
||||
fi
|
||||
|
||||
dnl These rules are solely for the distribution goal. While doing this
|
||||
dnl we only have to keep exactly one list of the available catalogs
|
||||
dnl in configure.in.
|
||||
for lang in $ALL_LINGUAS; do
|
||||
GMOFILES="$GMOFILES $lang.gmo"
|
||||
POFILES="$POFILES $lang.po"
|
||||
done
|
||||
|
||||
dnl Make all variables we use known to autoconf.
|
||||
AC_SUBST(USE_INCLUDED_LIBINTL)
|
||||
AC_SUBST(CATALOGS)
|
||||
AC_SUBST(CATOBJEXT)
|
||||
AC_SUBST(DATADIRNAME)
|
||||
AC_SUBST(GMOFILES)
|
||||
AC_SUBST(INSTOBJEXT)
|
||||
AC_SUBST(INTLDEPS)
|
||||
AC_SUBST(INTLLIBS)
|
||||
AC_SUBST(INTLOBJS)
|
||||
AC_SUBST(POFILES)
|
||||
AC_SUBST(POSUB)
|
||||
])
|
||||
|
||||
AC_DEFUN(AM_GNU_GETTEXT,
|
||||
[AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||
AC_REQUIRE([AC_PROG_CC])dnl
|
||||
AC_REQUIRE([AC_ISC_POSIX])dnl
|
||||
AC_REQUIRE([AC_HEADER_STDC])dnl
|
||||
AC_REQUIRE([AC_C_CONST])dnl
|
||||
AC_REQUIRE([AC_C_INLINE])dnl
|
||||
AC_REQUIRE([AC_TYPE_OFF_T])dnl
|
||||
AC_REQUIRE([AC_TYPE_SIZE_T])dnl
|
||||
AC_REQUIRE([AC_FUNC_ALLOCA])dnl
|
||||
AC_REQUIRE([AC_FUNC_MMAP])dnl
|
||||
|
||||
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
|
||||
unistd.h values.h])
|
||||
AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
|
||||
__argz_count __argz_stringify __argz_next])
|
||||
|
||||
if test "${ac_cv_func_stpcpy+set}" != "set"; then
|
||||
AC_CHECK_FUNCS(stpcpy)
|
||||
fi
|
||||
if test "${ac_cv_func_stpcpy}" = "yes"; then
|
||||
AC_DEFINE(HAVE_STPCPY)
|
||||
fi
|
||||
|
||||
AM_LC_MESSAGES
|
||||
AM_WITH_NLS
|
||||
|
||||
if test "x$CATOBJEXT" != "x"; then
|
||||
if test "x$ALL_LINGUAS" = "x"; then
|
||||
LINGUAS=
|
||||
else
|
||||
AC_MSG_CHECKING(for catalogs to be installed)
|
||||
NEW_LINGUAS=
|
||||
for lang in ${LINGUAS=$ALL_LINGUAS}; do
|
||||
case "$ALL_LINGUAS" in
|
||||
*$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
|
||||
esac
|
||||
done
|
||||
LINGUAS=$NEW_LINGUAS
|
||||
AC_MSG_RESULT($LINGUAS)
|
||||
fi
|
||||
|
||||
dnl Construct list of names of catalog files to be constructed.
|
||||
if test -n "$LINGUAS"; then
|
||||
for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Determine which catalog format we have (if any is needed)
|
||||
dnl For now we know about two different formats:
|
||||
dnl Linux libc-5 and the normal X/Open format
|
||||
test -d intl || mkdir intl
|
||||
if test "$CATOBJEXT" = ".cat"; then
|
||||
AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
|
||||
|
||||
dnl Transform the SED scripts while copying because some dumb SEDs
|
||||
dnl cannot handle comments.
|
||||
sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
|
||||
fi
|
||||
dnl po2tbl.sed is always needed.
|
||||
sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
|
||||
$srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
|
||||
|
||||
dnl In the intl/Makefile.in we have a special dependency which makes
|
||||
dnl only sense for gettext. We comment this out for non-gettext
|
||||
dnl packages.
|
||||
if test "$PACKAGE" = "gettext"; then
|
||||
GT_NO="#NO#"
|
||||
GT_YES=
|
||||
else
|
||||
GT_NO=
|
||||
GT_YES="#YES#"
|
||||
fi
|
||||
AC_SUBST(GT_NO)
|
||||
AC_SUBST(GT_YES)
|
||||
|
||||
dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
|
||||
dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
|
||||
dnl Try to locate is.
|
||||
MKINSTALLDIRS=
|
||||
if test $ac_aux_dir; then
|
||||
MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
|
||||
fi
|
||||
if test -z $MKINSTALLDIRS; then
|
||||
MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
|
||||
fi
|
||||
AC_SUBST(MKINSTALLDIRS)
|
||||
|
||||
dnl *** For now the libtool support in intl/Makefile is not for real.
|
||||
l=
|
||||
AC_SUBST(l)
|
||||
|
||||
dnl Generate list of files to be processed by xgettext which will
|
||||
dnl be included in po/Makefile.
|
||||
test -d po || mkdir po
|
||||
if test "x$srcdir" != "x."; then
|
||||
if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
|
||||
posrcprefix="$srcdir/"
|
||||
else
|
||||
posrcprefix="../$srcdir/"
|
||||
fi
|
||||
else
|
||||
posrcprefix="../"
|
||||
fi
|
||||
sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
|
||||
< $srcdir/po/POTFILES.in > po/POTFILES
|
||||
])
|
||||
|
||||
# Search path for a program which passes the given test.
|
||||
# Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
# serial 1
|
||||
|
||||
dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
|
||||
dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
|
||||
AC_DEFUN(AM_PATH_PROG_WITH_TEST,
|
||||
[# Extract the first word of "$2", so it can be a program name with args.
|
||||
set dummy $2; ac_word=[$]2
|
||||
AC_MSG_CHECKING([for $ac_word])
|
||||
AC_CACHE_VAL(ac_cv_path_$1,
|
||||
[case "[$]$1" in
|
||||
/*)
|
||||
ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
|
||||
;;
|
||||
*)
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in ifelse([$5], , $PATH, [$5]); do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/$ac_word; then
|
||||
if [$3]; then
|
||||
ac_cv_path_$1="$ac_dir/$ac_word"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
dnl If no 4th arg is given, leave the cache variable unset,
|
||||
dnl so AC_PATH_PROGS will keep looking.
|
||||
ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
|
||||
])dnl
|
||||
;;
|
||||
esac])dnl
|
||||
$1="$ac_cv_path_$1"
|
||||
if test -n "[$]$1"; then
|
||||
AC_MSG_RESULT([$]$1)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
AC_SUBST($1)dnl
|
||||
])
|
||||
|
||||
# Check whether LC_MESSAGES is available in <locale.h>.
|
||||
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||
|
||||
# serial 1
|
||||
|
||||
AC_DEFUN(AM_LC_MESSAGES,
|
||||
[if test $ac_cv_header_locale_h = yes; then
|
||||
AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
|
||||
[AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
|
||||
am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
|
||||
if test $am_cv_val_LC_MESSAGES = yes; then
|
||||
AC_DEFINE(HAVE_LC_MESSAGES)
|
||||
fi
|
||||
fi])
|
||||
|
713
texinfo/config.guess
vendored
Executable file
713
texinfo/config.guess
vendored
Executable file
@ -0,0 +1,713 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Written by Per Bothner <bothner@cygnus.com>.
|
||||
# The master version of this file is at the FSF in /home/gd/gnu/lib.
|
||||
#
|
||||
# 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 system type (host/target name).
|
||||
#
|
||||
# Only a few systems have been added to this list; please add others
|
||||
# (but try to keep the structure clean).
|
||||
#
|
||||
|
||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||
# (ghazi@noc.rutgers.edu 8/24/94.)
|
||||
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
|
||||
|
||||
trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
|
||||
|
||||
# Note: order is significant - the case branches are not exclusive.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
alpha:OSF1:*:*)
|
||||
# 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 alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
|
||||
exit 0 ;;
|
||||
21064:Windows_NT:50:3)
|
||||
echo alpha-dec-winnt3.5
|
||||
exit 0 ;;
|
||||
Amiga*:UNIX_System_V:4.0:*)
|
||||
echo m68k-cbm-sysv4
|
||||
exit 0;;
|
||||
amiga:NetBSD:*:*)
|
||||
echo m68k-cbm-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
amiga:OpenBSD:*:*)
|
||||
echo m68k-cbm-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit 0;;
|
||||
SR2?01:HI-UX/MPP:*:*)
|
||||
echo hppa1.1-hitachi-hiuxmpp
|
||||
exit 0;;
|
||||
Pyramid*:OSx*:*:*|MIS*: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 0 ;;
|
||||
NILE:*:*:dcosx)
|
||||
echo pyramid-pyramid-svr4
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
||||
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
i86pc:SunOS:5.*:*)
|
||||
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:6*:*)
|
||||
# According to config.sub, this is the proper way to canonicalize
|
||||
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
|
||||
# it's likely to be more like Solaris than SunOS4.
|
||||
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:*:*)
|
||||
case "`/usr/bin/arch -k`" in
|
||||
Series*|S4*)
|
||||
UNAME_RELEASE=`uname -v`
|
||||
;;
|
||||
esac
|
||||
# Japanese Language versions have a version number like `4.1.3-JL'.
|
||||
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
|
||||
exit 0 ;;
|
||||
sun3*:SunOS:*:*)
|
||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
aushp:SunOS:*:*)
|
||||
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
atari*:NetBSD:*:*)
|
||||
echo m68k-atari-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
atari*:OpenBSD:*:*)
|
||||
echo m68k-atari-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun3*:NetBSD:*:*)
|
||||
echo m68k-sun-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun3*:OpenBSD:*:*)
|
||||
echo m68k-sun-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mac68k:NetBSD:*:*)
|
||||
echo m68k-apple-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mac68k:OpenBSD:*:*)
|
||||
echo m68k-apple-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
powerpc:machten:*:*)
|
||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
RISC*:Mach:*:*)
|
||||
echo mips-dec-mach_bsd4.3
|
||||
exit 0 ;;
|
||||
RISC*:ULTRIX:*:*)
|
||||
echo mips-dec-ultrix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
VAX*:ULTRIX*:*:*)
|
||||
echo vax-dec-ultrix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||
sed 's/^ //' << EOF >dummy.c
|
||||
int main (argc, argv) int argc; char **argv; {
|
||||
#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-cc} dummy.c -o dummy \
|
||||
&& ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
echo mips-mips-riscos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Night_Hawk:Power_UNIX:*:*)
|
||||
echo powerpc-harris-powerunix
|
||||
exit 0 ;;
|
||||
m88k:CX/UX:7*:*)
|
||||
echo m88k-harris-cxux7
|
||||
exit 0 ;;
|
||||
m88k:*:4*:R4*)
|
||||
echo m88k-motorola-sysv4
|
||||
exit 0 ;;
|
||||
m88k:*:3*:R3*)
|
||||
echo m88k-motorola-sysv3
|
||||
exit 0 ;;
|
||||
AViiON:dgux:*:*)
|
||||
# DG/UX returns AViiON for all architectures
|
||||
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
||||
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
||||
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
||||
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||
else
|
||||
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||
fi
|
||||
else echo i586-dg-dgux${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||
echo m88k-dolphin-sysv3
|
||||
exit 0 ;;
|
||||
M88*:*:R3*:*)
|
||||
# Delta 88k system running SVR3
|
||||
echo m88k-motorola-sysv3
|
||||
exit 0 ;;
|
||||
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
|
||||
echo m88k-tektronix-sysv3
|
||||
exit 0 ;;
|
||||
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
|
||||
echo m68k-tektronix-bsd
|
||||
exit 0 ;;
|
||||
*:IRIX*:*:*)
|
||||
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
|
||||
exit 0 ;;
|
||||
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
||||
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
||||
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
||||
i?86:AIX:*:*)
|
||||
echo i386-ibm-aix
|
||||
exit 0 ;;
|
||||
*:AIX:2:3)
|
||||
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
sed 's/^ //' << EOF >dummy.c
|
||||
#include <sys/systemcfg.h>
|
||||
|
||||
main()
|
||||
{
|
||||
if (!__power_pc())
|
||||
exit(1);
|
||||
puts("powerpc-ibm-aix3.2.5");
|
||||
exit(0);
|
||||
}
|
||||
EOF
|
||||
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
echo rs6000-ibm-aix3.2.5
|
||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
echo rs6000-ibm-aix3.2.4
|
||||
else
|
||||
echo rs6000-ibm-aix3.2
|
||||
fi
|
||||
exit 0 ;;
|
||||
*:AIX:*:4)
|
||||
if /usr/sbin/lsattr -EHl proc0 | 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=4.${UNAME_RELEASE}
|
||||
fi
|
||||
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
||||
exit 0 ;;
|
||||
*:AIX:*:*)
|
||||
echo rs6000-ibm-aix
|
||||
exit 0 ;;
|
||||
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
||||
echo romp-ibm-bsd4.4
|
||||
exit 0 ;;
|
||||
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
|
||||
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
||||
exit 0 ;; # report: romp-ibm BSD 4.3
|
||||
*:BOSX:*:*)
|
||||
echo rs6000-bull-bosx
|
||||
exit 0 ;;
|
||||
DPX/2?00:B.O.S.:*:*)
|
||||
echo m68k-bull-sysv3
|
||||
exit 0 ;;
|
||||
9000/[34]??:4.3bsd:1.*:*)
|
||||
echo m68k-hp-bsd
|
||||
exit 0 ;;
|
||||
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
|
||||
echo m68k-hp-bsd4.4
|
||||
exit 0 ;;
|
||||
9000/[3478]??:HP-UX:*:*)
|
||||
case "${UNAME_MACHINE}" in
|
||||
9000/31? ) HP_ARCH=m68000 ;;
|
||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||
9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
|
||||
9000/8?? ) HP_ARCH=hppa1.0 ;;
|
||||
esac
|
||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||
exit 0 ;;
|
||||
3050*:HI-UX:*:*)
|
||||
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-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
echo unknown-hitachi-hiuxwe2
|
||||
exit 0 ;;
|
||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||
echo hppa1.1-hp-bsd
|
||||
exit 0 ;;
|
||||
9000/8??:4.3bsd:*:*)
|
||||
echo hppa1.0-hp-bsd
|
||||
exit 0 ;;
|
||||
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||
echo hppa1.1-hp-osf
|
||||
exit 0 ;;
|
||||
hp8??:OSF1:*:*)
|
||||
echo hppa1.0-hp-osf
|
||||
exit 0 ;;
|
||||
i?86:OSF1:*:*)
|
||||
if [ -x /usr/sbin/sysversion ] ; then
|
||||
echo ${UNAME_MACHINE}-unknown-osf1mk
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-osf1
|
||||
fi
|
||||
exit 0 ;;
|
||||
parisc*:Lites*:*:*)
|
||||
echo hppa1.1-hp-lites
|
||||
exit 0 ;;
|
||||
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||
echo c1-convex-bsd
|
||||
exit 0 ;;
|
||||
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
|
||||
if getsysinfo -f scalar_acc
|
||||
then echo c32-convex-bsd
|
||||
else echo c2-convex-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
|
||||
echo c34-convex-bsd
|
||||
exit 0 ;;
|
||||
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
|
||||
echo c38-convex-bsd
|
||||
exit 0 ;;
|
||||
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
||||
echo c4-convex-bsd
|
||||
exit 0 ;;
|
||||
CRAY*X-MP:*:*:*)
|
||||
echo xmp-cray-unicos
|
||||
exit 0 ;;
|
||||
CRAY*Y-MP:*:*:*)
|
||||
echo ymp-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY*[A-Z]90:*:*:*)
|
||||
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
||||
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
||||
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||
exit 0 ;;
|
||||
CRAY*TS:*:*:*)
|
||||
echo t90-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY-2:*:*:*)
|
||||
echo cray2-cray-unicos
|
||||
exit 0 ;;
|
||||
F300:UNIX_System_V:*:*)
|
||||
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
|
||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||
exit 0 ;;
|
||||
F301:UNIX_System_V:*:*)
|
||||
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
|
||||
exit 0 ;;
|
||||
hp3[0-9][05]:NetBSD:*:*)
|
||||
echo m68k-hp-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
hp3[0-9][05]:OpenBSD:*:*)
|
||||
echo m68k-hp-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
i?86:BSD/386:*:* | *:BSD/OS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:FreeBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||
exit 0 ;;
|
||||
*:NetBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
*:OpenBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo i386-pc-cygwin32
|
||||
exit 0 ;;
|
||||
p*:CYGWIN*:*)
|
||||
echo powerpcle-unknown-cygwin32
|
||||
exit 0 ;;
|
||||
prep*:SunOS:5.*:*)
|
||||
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
*:GNU:*:*)
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,-.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit 0 ;;
|
||||
*:Linux:*:*)
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
# first see if it will tell us.
|
||||
ld_help_string=`ld --help 2>&1`
|
||||
if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
|
||||
echo "powerpc-unknown-linux-gnu" ; exit 0
|
||||
elif test "${UNAME_MACHINE}" = "alpha" ; then
|
||||
echo alpha-unknown-linux-gnu ; exit 0
|
||||
elif test "${UNAME_MACHINE}" = "sparc" ; then
|
||||
echo sparc-unknown-linux-gnu ; exit 0
|
||||
elif test "${UNAME_MACHINE}" = "mips" ; then
|
||||
cat >dummy.c <<EOF
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
#ifdef __MIPSEB__
|
||||
printf ("%s-unknown-linux-gnu\n", argv[1]);
|
||||
#endif
|
||||
#ifdef __MIPSEL__
|
||||
printf ("%sel-unknown-linux-gnu\n", argv[1]);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
else
|
||||
# Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
|
||||
# useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
|
||||
test ! -d /usr/lib/ldscripts/. \
|
||||
&& echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
cat >dummy.c <<EOF
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
#ifdef __ELF__
|
||||
printf ("%s-pc-linux-gnu\n", argv[1]);
|
||||
#else
|
||||
printf ("%s-pc-linux-gnuaout\n", argv[1]);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
fi ;;
|
||||
# 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.
|
||||
i?86:DYNIX/ptx:4*:*)
|
||||
echo i386-sequent-sysv4
|
||||
exit 0 ;;
|
||||
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:*:3.2:*)
|
||||
if test -f /usr/options/cb.name; then
|
||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||
&& UNAME_MACHINE=i586
|
||||
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv32
|
||||
fi
|
||||
exit 0 ;;
|
||||
Intel:Mach:3*:*)
|
||||
echo i386-pc-mach3
|
||||
exit 0 ;;
|
||||
paragon:*:*:*)
|
||||
echo i860-intel-osf1
|
||||
exit 0 ;;
|
||||
i860:*:4.*:*) # i860-SVR4
|
||||
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
|
||||
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
|
||||
else # Add other i860-SVR4 vendors below as they are discovered.
|
||||
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
|
||||
fi
|
||||
exit 0 ;;
|
||||
mini*:CTIX:SYS*5:*)
|
||||
# "miniframe"
|
||||
echo m68010-convergent-sysv
|
||||
exit 0 ;;
|
||||
M68*:*:R3V[567]*:*)
|
||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
||||
OS_REL=''
|
||||
test -r /etc/.relid \
|
||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4.3${OS_REL} && exit 0
|
||||
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
|
||||
&& echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
|
||||
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4 && exit 0 ;;
|
||||
m68*:LynxOS:2.*:*)
|
||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mc68030:UNIX_System_V:4.*:*)
|
||||
echo m68k-atari-sysv4
|
||||
exit 0 ;;
|
||||
i?86:LynxOS:2.*:*)
|
||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
TSUNAMI:LynxOS:2.*:*)
|
||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
|
||||
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
SM[BE]S:UNIX_SV:*:*)
|
||||
echo mips-dde-sysv${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
RM*:SINIX-*:*:*)
|
||||
echo mips-sni-sysv4
|
||||
exit 0 ;;
|
||||
*:SINIX-*:*:*)
|
||||
if uname -p 2>/dev/null >/dev/null ; then
|
||||
UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
||||
echo ${UNAME_MACHINE}-sni-sysv4
|
||||
else
|
||||
echo ns32k-sni-sysv
|
||||
fi
|
||||
exit 0 ;;
|
||||
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
||||
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
||||
echo i586-unisys-sysv4
|
||||
exit 0 ;;
|
||||
*:UNIX_System_V:4*:FTX*)
|
||||
# From Gerald Hewes <hewes@openmarket.com>.
|
||||
# How about differentiating between stratus architectures? -djm
|
||||
echo hppa1.1-stratus-sysv4
|
||||
exit 0 ;;
|
||||
*:*:*:FTX*)
|
||||
# From seanf@swdc.stratus.com.
|
||||
echo i860-stratus-sysv4
|
||||
exit 0 ;;
|
||||
mc68*:A/UX:*:*)
|
||||
echo m68k-apple-aux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
|
||||
if [ -d /usr/nec ]; then
|
||||
echo mips-nec-sysv${UNAME_RELEASE}
|
||||
else
|
||||
echo mips-unknown-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||
|
||||
cat >dummy.c <<EOF
|
||||
#ifdef _SEQUENT_
|
||||
# include <sys/types.h>
|
||||
# include <sys/utsname.h>
|
||||
#endif
|
||||
main ()
|
||||
{
|
||||
#if defined (sony)
|
||||
#if defined (MIPSEB)
|
||||
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
|
||||
I don't know.... */
|
||||
printf ("mips-sony-bsd\n"); exit (0);
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
printf ("m68k-sony-newsos%s\n",
|
||||
#ifdef NEWSOS4
|
||||
"4"
|
||||
#else
|
||||
""
|
||||
#endif
|
||||
); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__arm) && defined (__acorn) && defined (__unix)
|
||||
printf ("arm-acorn-riscix"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (hp300) && !defined (hpux)
|
||||
printf ("m68k-hp-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (NeXT)
|
||||
#if !defined (__ARCHITECTURE__)
|
||||
#define __ARCHITECTURE__ "m68k"
|
||||
#endif
|
||||
int version;
|
||||
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
||||
printf ("%s-next-nextstep%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)
|
||||
printf ("vax-dec-bsd\n"); exit (0);
|
||||
#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-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
|
||||
# Apollos put the system type in the environment.
|
||||
|
||||
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
|
||||
|
||||
# Convex versions that predate uname can use getsysinfo(1)
|
||||
|
||||
if [ -x /usr/convex/getsysinfo ]
|
||||
then
|
||||
case `getsysinfo -f cpu_type` in
|
||||
c1*)
|
||||
echo c1-convex-bsd
|
||||
exit 0 ;;
|
||||
c2*)
|
||||
if getsysinfo -f scalar_acc
|
||||
then echo c32-convex-bsd
|
||||
else echo c2-convex-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
c34*)
|
||||
echo c34-convex-bsd
|
||||
exit 0 ;;
|
||||
c38*)
|
||||
echo c38-convex-bsd
|
||||
exit 0 ;;
|
||||
c4*)
|
||||
echo c4-convex-bsd
|
||||
exit 0 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
#echo '(Unable to guess system type)' 1>&2
|
||||
|
||||
exit 1
|
248
texinfo/config.h.in
Normal file
248
texinfo/config.h.in
Normal file
@ -0,0 +1,248 @@
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
/* acconfig.h
|
||||
This file is in the public domain.
|
||||
|
||||
Descriptive text for the C preprocessor macros that
|
||||
the distributed Autoconf macros can define.
|
||||
No software package will use all of them; autoheader copies the ones
|
||||
your configure.in uses into your configuration header file templates.
|
||||
|
||||
The entries are in sort -df order: alphabetical, case insensitive,
|
||||
ignoring punctuation (such as underscores). Although this order
|
||||
can split up related entries, it makes it easier to check whether
|
||||
a given entry is in the file.
|
||||
|
||||
Leave the following blank line there!! Autoheader needs it. */
|
||||
|
||||
|
||||
|
||||
/* Define if using alloca.c. */
|
||||
#undef C_ALLOCA
|
||||
|
||||
/* Define to empty if the keyword does not work. */
|
||||
#undef const
|
||||
|
||||
/* 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 if you have alloca, as a function or macro. */
|
||||
#undef HAVE_ALLOCA
|
||||
|
||||
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define if you don't have vprintf but do have _doprnt. */
|
||||
#undef HAVE_DOPRNT
|
||||
|
||||
/* Define if you have a working `mmap' system call. */
|
||||
#undef HAVE_MMAP
|
||||
|
||||
/* Define if you have the vprintf function. */
|
||||
#undef HAVE_VPRINTF
|
||||
|
||||
/* Define as __inline if that's what the C compiler calls it. */
|
||||
#undef inline
|
||||
|
||||
/* Define if on MINIX. */
|
||||
#undef _MINIX
|
||||
|
||||
/* Define to `long' if <sys/types.h> doesn't define. */
|
||||
#undef off_t
|
||||
|
||||
/* Define if the system does not provide POSIX.1 features except
|
||||
with this defined. */
|
||||
#undef _POSIX_1_SOURCE
|
||||
|
||||
/* Define if you need to in order for stat and other things to work. */
|
||||
#undef _POSIX_SOURCE
|
||||
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* Define if the setvbuf function takes the buffering type as its second
|
||||
argument and the buffer pointer as the third, as on System V
|
||||
before release 3. */
|
||||
#undef SETVBUF_REVERSED
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||
#undef size_t
|
||||
|
||||
/* If using the C implementation of alloca, define if you know the
|
||||
direction of stack growth for your system; otherwise it will be
|
||||
automatically deduced at run-time.
|
||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||
STACK_DIRECTION = 0 => direction of growth unknown
|
||||
*/
|
||||
#undef STACK_DIRECTION
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if your <sys/time.h> declares struct tm. */
|
||||
#undef TM_IN_SYS_TIME
|
||||
|
||||
/* Define to 1 if NLS is requested. */
|
||||
#undef ENABLE_NLS
|
||||
|
||||
/* Define as 1 if you have catgets and don't want to use GNU gettext. */
|
||||
#undef HAVE_CATGETS
|
||||
|
||||
/* Define as 1 if you have gettext and don't want to use GNU gettext. */
|
||||
#undef HAVE_GETTEXT
|
||||
|
||||
/* Define if your locale.h file contains LC_MESSAGES. */
|
||||
#undef HAVE_LC_MESSAGES
|
||||
|
||||
/* Define as 1 if you have the stpcpy function. */
|
||||
#undef HAVE_STPCPY
|
||||
|
||||
/* Define to the name of the distribution. */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the version of the distribution. */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if you have the __argz_count function. */
|
||||
#undef HAVE___ARGZ_COUNT
|
||||
|
||||
/* Define if you have the __argz_next function. */
|
||||
#undef HAVE___ARGZ_NEXT
|
||||
|
||||
/* Define if you have the __argz_stringify function. */
|
||||
#undef HAVE___ARGZ_STRINGIFY
|
||||
|
||||
/* Define if you have the bzero function. */
|
||||
#undef HAVE_BZERO
|
||||
|
||||
/* Define if you have the dcgettext function. */
|
||||
#undef HAVE_DCGETTEXT
|
||||
|
||||
/* Define if you have the getcwd function. */
|
||||
#undef HAVE_GETCWD
|
||||
|
||||
/* Define if you have the getpagesize function. */
|
||||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define if you have the memcpy function. */
|
||||
#undef HAVE_MEMCPY
|
||||
|
||||
/* Define if you have the memmove function. */
|
||||
#undef HAVE_MEMMOVE
|
||||
|
||||
/* Define if you have the memset function. */
|
||||
#undef HAVE_MEMSET
|
||||
|
||||
/* Define if you have the munmap function. */
|
||||
#undef HAVE_MUNMAP
|
||||
|
||||
/* Define if you have the putenv function. */
|
||||
#undef HAVE_PUTENV
|
||||
|
||||
/* Define if you have the setenv function. */
|
||||
#undef HAVE_SETENV
|
||||
|
||||
/* Define if you have the setlocale function. */
|
||||
#undef HAVE_SETLOCALE
|
||||
|
||||
/* Define if you have the setvbuf function. */
|
||||
#undef HAVE_SETVBUF
|
||||
|
||||
/* Define if you have the sigprocmask function. */
|
||||
#undef HAVE_SIGPROCMASK
|
||||
|
||||
/* Define if you have the sigsetmask function. */
|
||||
#undef HAVE_SIGSETMASK
|
||||
|
||||
/* Define if you have the stpcpy function. */
|
||||
#undef HAVE_STPCPY
|
||||
|
||||
/* Define if you have the strcasecmp function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define if you have the strchr function. */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define if you have the strdup function. */
|
||||
#undef HAVE_STRDUP
|
||||
|
||||
/* Define if you have the strerror function. */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
/* Define if you have the <argz.h> header file. */
|
||||
#undef HAVE_ARGZ_H
|
||||
|
||||
/* Define if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
/* Define if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* Define if you have the <locale.h> header file. */
|
||||
#undef HAVE_LOCALE_H
|
||||
|
||||
/* Define if you have the <malloc.h> header file. */
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
/* Define if you have the <nl_types.h> header file. */
|
||||
#undef HAVE_NL_TYPES_H
|
||||
|
||||
/* Define if you have the <pwd.h> header file. */
|
||||
#undef HAVE_PWD_H
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define if you have the <sys/fcntl.h> header file. */
|
||||
#undef HAVE_SYS_FCNTL_H
|
||||
|
||||
/* Define if you have the <sys/file.h> header file. */
|
||||
#undef HAVE_SYS_FILE_H
|
||||
|
||||
/* Define if you have the <sys/ptem.h> header file. */
|
||||
#undef HAVE_SYS_PTEM_H
|
||||
|
||||
/* Define if you have the <sys/time.h> header file. */
|
||||
#undef HAVE_SYS_TIME_H
|
||||
|
||||
/* Define if you have the <sys/ttold.h> header file. */
|
||||
#undef HAVE_SYS_TTOLD_H
|
||||
|
||||
/* Define if you have the <sys/wait.h> header file. */
|
||||
#undef HAVE_SYS_WAIT_H
|
||||
|
||||
/* Define if you have the <termcap.h> header file. */
|
||||
#undef HAVE_TERMCAP_H
|
||||
|
||||
/* Define if you have the <termio.h> header file. */
|
||||
#undef HAVE_TERMIO_H
|
||||
|
||||
/* Define if you have the <termios.h> header file. */
|
||||
#undef HAVE_TERMIOS_H
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define if you have the <values.h> header file. */
|
||||
#undef HAVE_VALUES_H
|
||||
|
||||
/* Define if you have the bsd library (-lbsd). */
|
||||
#undef HAVE_LIBBSD
|
||||
|
||||
/* Define if you have the i library (-li). */
|
||||
#undef HAVE_LIBI
|
||||
|
||||
/* For gettext (NLS) */
|
||||
#include <libintl.h>
|
||||
#define _(String) gettext (String)
|
||||
#define N_(String) (String)
|
||||
|
||||
|
||||
/* Leave that blank line there!! Autoheader needs it.
|
||||
If you're adding to this file, keep in mind:
|
||||
The entries are in sort -df order: alphabetical, case insensitive,
|
||||
ignoring punctuation (such as underscores). */
|
939
texinfo/config.sub
vendored
Executable file
939
texinfo/config.sub
vendored
Executable file
@ -0,0 +1,939 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script, version 1.1.
|
||||
# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# 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.
|
||||
|
||||
if [ x$1 = x ]
|
||||
then
|
||||
echo Configuration name missing. 1>&2
|
||||
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
|
||||
echo "or $0 ALIAS" 1>&2
|
||||
echo where ALIAS is a recognized configuration type. 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# First pass through any local machine types.
|
||||
case $1 in
|
||||
*local*)
|
||||
echo $1
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
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
|
||||
linux-gnu*)
|
||||
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)
|
||||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
-hiux*)
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
-sco5)
|
||||
os=sco3.2v5
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco4)
|
||||
os=-sco3.2v4
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco3.2.[4-9]*)
|
||||
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco3.2v[4-9]*)
|
||||
# Don't forget version if it is 3.2v4 or newer.
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco*)
|
||||
os=-sco3.2v2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-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
|
||||
;;
|
||||
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.
|
||||
tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
|
||||
| arme[lb] | pyramid \
|
||||
| tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
|
||||
| alpha | we32k | ns16k | clipper | i370 | sh \
|
||||
| powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
|
||||
| pdp11 | mips64el | mips64orion | mips64orionel \
|
||||
| sparc | sparclet | sparclite | sparc64)
|
||||
basic_machine=$basic_machine-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[3456]86)
|
||||
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.
|
||||
vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
|
||||
| sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
|
||||
| none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
|
||||
| hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
|
||||
| pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
|
||||
| pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
|
||||
| mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
|
||||
;;
|
||||
# Recognize the various machine names and aliases which stand
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
||||
basic_machine=m68000-att
|
||||
;;
|
||||
3b*)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
alliant | fx80)
|
||||
basic_machine=fx80-alliant
|
||||
;;
|
||||
altos | altos3068)
|
||||
basic_machine=m68k-altos
|
||||
;;
|
||||
am29k)
|
||||
basic_machine=a29k-none
|
||||
os=-bsd
|
||||
;;
|
||||
amdahl)
|
||||
basic_machine=580-amdahl
|
||||
os=-sysv
|
||||
;;
|
||||
amiga | amiga-*)
|
||||
basic_machine=m68k-cbm
|
||||
;;
|
||||
amigados)
|
||||
basic_machine=m68k-cbm
|
||||
os=-amigados
|
||||
;;
|
||||
amigaunix | amix)
|
||||
basic_machine=m68k-cbm
|
||||
os=-sysv4
|
||||
;;
|
||||
apollo68)
|
||||
basic_machine=m68k-apollo
|
||||
os=-sysv
|
||||
;;
|
||||
aux)
|
||||
basic_machine=m68k-apple
|
||||
os=-aux
|
||||
;;
|
||||
balance)
|
||||
basic_machine=ns32k-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
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 | ymp)
|
||||
basic_machine=ymp-cray
|
||||
os=-unicos
|
||||
;;
|
||||
cray2)
|
||||
basic_machine=cray2-cray
|
||||
os=-unicos
|
||||
;;
|
||||
[ctj]90-cray)
|
||||
basic_machine=c90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
crds | unos)
|
||||
basic_machine=m68k-crds
|
||||
;;
|
||||
da30 | da30-*)
|
||||
basic_machine=m68k-da30
|
||||
;;
|
||||
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
||||
basic_machine=mips-dec
|
||||
;;
|
||||
delta | 3300 | motorola-3300 | motorola-delta \
|
||||
| 3300-motorola | delta-motorola)
|
||||
basic_machine=m68k-motorola
|
||||
;;
|
||||
delta88)
|
||||
basic_machine=m88k-motorola
|
||||
os=-sysv3
|
||||
;;
|
||||
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
|
||||
;;
|
||||
fx2800)
|
||||
basic_machine=i860-alliant
|
||||
;;
|
||||
genix)
|
||||
basic_machine=ns32k-ns
|
||||
;;
|
||||
gmicro)
|
||||
basic_machine=tron-gmicro
|
||||
os=-sysv
|
||||
;;
|
||||
h3050r* | hiux*)
|
||||
basic_machine=hppa1.1-hitachi
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
h8300hms)
|
||||
basic_machine=h8300-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
|
||||
;;
|
||||
hp9k2[0-9][0-9] | hp9k31[0-9])
|
||||
basic_machine=m68000-hp
|
||||
;;
|
||||
hp9k3[2-9][0-9])
|
||||
basic_machine=m68k-hp
|
||||
;;
|
||||
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
|
||||
basic_machine=hppa1.1-hp
|
||||
;;
|
||||
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
||||
basic_machine=hppa1.0-hp
|
||||
;;
|
||||
hppa-next)
|
||||
os=-nextstep3
|
||||
;;
|
||||
i370-ibm* | ibm*)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
;;
|
||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||
i[3456]86v32)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv32
|
||||
;;
|
||||
i[3456]86v4*)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv4
|
||||
;;
|
||||
i[3456]86v)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv
|
||||
;;
|
||||
i[3456]86sol2)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-solaris2
|
||||
;;
|
||||
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
|
||||
;;
|
||||
miniframe)
|
||||
basic_machine=m68000-convergent
|
||||
;;
|
||||
mipsel*-linux*)
|
||||
basic_machine=mipsel-unknown
|
||||
os=-linux
|
||||
;;
|
||||
mips*-linux*)
|
||||
basic_machine=mips-unknown
|
||||
os=-linux
|
||||
;;
|
||||
mips3*-*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||
;;
|
||||
mips3*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||
;;
|
||||
ncr3000)
|
||||
basic_machine=i486-ncr
|
||||
os=-sysv4
|
||||
;;
|
||||
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
|
||||
;;
|
||||
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
|
||||
;;
|
||||
np1)
|
||||
basic_machine=np1-gould
|
||||
;;
|
||||
pa-hitachi)
|
||||
basic_machine=hppa1.1-hitachi
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
paragon)
|
||||
basic_machine=i860-intel
|
||||
os=-osf
|
||||
;;
|
||||
pbd)
|
||||
basic_machine=sparc-tti
|
||||
;;
|
||||
pbb)
|
||||
basic_machine=m68k-tti
|
||||
;;
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pentium | p5)
|
||||
basic_machine=i586-intel
|
||||
;;
|
||||
pentiumpro | p6)
|
||||
basic_machine=i686-intel
|
||||
;;
|
||||
pentium-* | p5-*)
|
||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumpro-* | p6-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
k5)
|
||||
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
|
||||
basic_machine=i586-amd
|
||||
;;
|
||||
nexen)
|
||||
# We don't have specific support for Nexgen yet, so just call it a Pentium
|
||||
basic_machine=i586-nexgen
|
||||
;;
|
||||
pn)
|
||||
basic_machine=pn-gould
|
||||
;;
|
||||
power) basic_machine=rs6000-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/^[^-]*-//'`
|
||||
;;
|
||||
ps2)
|
||||
basic_machine=i386-ibm
|
||||
;;
|
||||
rm[46]00)
|
||||
basic_machine=mips-siemens
|
||||
;;
|
||||
rtpc | rtpc-*)
|
||||
basic_machine=romp-ibm
|
||||
;;
|
||||
sequent)
|
||||
basic_machine=i386-sequent
|
||||
;;
|
||||
sh)
|
||||
basic_machine=sh-hitachi
|
||||
os=-hms
|
||||
;;
|
||||
sps7)
|
||||
basic_machine=m68k-bull
|
||||
os=-sysv2
|
||||
;;
|
||||
spur)
|
||||
basic_machine=spur-unknown
|
||||
;;
|
||||
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
|
||||
;;
|
||||
symmetry)
|
||||
basic_machine=i386-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
tower | tower-32)
|
||||
basic_machine=m68k-ncr
|
||||
;;
|
||||
udi29k)
|
||||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
;;
|
||||
ultra3)
|
||||
basic_machine=a29k-nyu
|
||||
os=-sym1
|
||||
;;
|
||||
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
|
||||
;;
|
||||
xmp)
|
||||
basic_machine=xmp-cray
|
||||
os=-unicos
|
||||
;;
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
;;
|
||||
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.
|
||||
mips)
|
||||
if [ x$os = x-linux ]; then
|
||||
basic_machine=mips-unknown
|
||||
else
|
||||
basic_machine=mips-mips
|
||||
fi
|
||||
;;
|
||||
romp)
|
||||
basic_machine=romp-ibm
|
||||
;;
|
||||
rs6000)
|
||||
basic_machine=rs6000-ibm
|
||||
;;
|
||||
vax)
|
||||
basic_machine=vax-dec
|
||||
;;
|
||||
pdp11)
|
||||
basic_machine=pdp11-dec
|
||||
;;
|
||||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sparc)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
cydra)
|
||||
basic_machine=cydra-cydrome
|
||||
;;
|
||||
orion)
|
||||
basic_machine=orion-highlevel
|
||||
;;
|
||||
orion105)
|
||||
basic_machine=clipper-highlevel
|
||||
;;
|
||||
*)
|
||||
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
|
||||
;;
|
||||
-unixware* | svr4*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-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* \
|
||||
| -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -linux-gnu* | -uxpv*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-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|'`
|
||||
;;
|
||||
-osfrose*)
|
||||
os=-osfrose
|
||||
;;
|
||||
-osf*)
|
||||
os=-osf
|
||||
;;
|
||||
-utek*)
|
||||
os=-bsd
|
||||
;;
|
||||
-dynix*)
|
||||
os=-bsd
|
||||
;;
|
||||
-acis*)
|
||||
os=-aos
|
||||
;;
|
||||
-ctix* | -uts*)
|
||||
os=-sysv
|
||||
;;
|
||||
-ns2 )
|
||||
os=-nextstep2
|
||||
;;
|
||||
# Preserve the version number of sinix5.
|
||||
-sinix5.*)
|
||||
os=`echo $os | sed -e 's|sinix|sysv|'`
|
||||
;;
|
||||
-sinix*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-triton*)
|
||||
os=-sysv3
|
||||
;;
|
||||
-oss*)
|
||||
os=-sysv3
|
||||
;;
|
||||
-svr4)
|
||||
os=-sysv4
|
||||
;;
|
||||
-svr3)
|
||||
os=-sysv3
|
||||
;;
|
||||
-sysvr4)
|
||||
os=-sysv4
|
||||
;;
|
||||
# This must come after -sysvr4.
|
||||
-sysv*)
|
||||
;;
|
||||
-xenix)
|
||||
os=-xenix
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
*)
|
||||
# Get rid of the `-' at the beginning of $os.
|
||||
os=`echo $os | sed 's/[^-]*-//'`
|
||||
echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
||||
# Here we handle the default operating systems that come with various machines.
|
||||
# The value should be what the vendor currently ships out the door with their
|
||||
# machine or put another way, the most popular os provided with the machine.
|
||||
|
||||
# Note that if you're going to try to match "-MANUFACTURER" here (say,
|
||||
# "-sun"), then you have to tell the case statement up towards the top
|
||||
# that MANUFACTURER isn't an operating system. Otherwise, code above
|
||||
# will signal an error saying that MANUFACTURER isn't an operating
|
||||
# system, and we'll never get to this point.
|
||||
|
||||
case $basic_machine in
|
||||
*-acorn)
|
||||
os=-riscix1.2
|
||||
;;
|
||||
arm*-semi)
|
||||
os=-aout
|
||||
;;
|
||||
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
|
||||
;;
|
||||
*-tti) # must be before sparc entry or we get the wrong os.
|
||||
os=-sysv3
|
||||
;;
|
||||
sparc-* | *-sun)
|
||||
os=-sunos4.1.1
|
||||
;;
|
||||
*-ibm)
|
||||
os=-aix
|
||||
;;
|
||||
*-hp)
|
||||
os=-hpux
|
||||
;;
|
||||
*-hitachi)
|
||||
os=-hiux
|
||||
;;
|
||||
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
|
||||
os=-sysv
|
||||
;;
|
||||
*-cbm)
|
||||
os=-amigados
|
||||
;;
|
||||
*-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
|
||||
;;
|
||||
f301-fujitsu)
|
||||
os=-uxpv
|
||||
;;
|
||||
*)
|
||||
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
|
||||
;;
|
||||
-hpux*)
|
||||
vendor=hp
|
||||
;;
|
||||
-hiux*)
|
||||
vendor=hitachi
|
||||
;;
|
||||
-unos*)
|
||||
vendor=crds
|
||||
;;
|
||||
-dgux*)
|
||||
vendor=dg
|
||||
;;
|
||||
-luna*)
|
||||
vendor=omron
|
||||
;;
|
||||
-genix*)
|
||||
vendor=ns
|
||||
;;
|
||||
-mvs*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-ptx*)
|
||||
vendor=sequent
|
||||
;;
|
||||
-vxsim* | -vxworks*)
|
||||
vendor=wrs
|
||||
;;
|
||||
-aux*)
|
||||
vendor=apple
|
||||
;;
|
||||
esac
|
||||
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||
;;
|
||||
esac
|
||||
|
||||
echo $basic_machine$os
|
69
texinfo/cygnus/Makefile.in
Normal file
69
texinfo/cygnus/Makefile.in
Normal file
@ -0,0 +1,69 @@
|
||||
# Makefile for Cygnus overrides to Texinfo distribution. -*- Indented-Text -*-
|
||||
# Copyright (C) 1993 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.
|
||||
|
||||
#### Start of system configuration section. ####
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
LN = ln
|
||||
RM = rm -f
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
# We do not use texi2dvi because (a) we need no index, and
|
||||
# (b) texi2dvi monkeys with TEXINPUTS
|
||||
TEX = tex
|
||||
|
||||
#### End of system configuration section. ####
|
||||
|
||||
all: dvi
|
||||
|
||||
sub-all:
|
||||
check:
|
||||
installcheck:
|
||||
info:
|
||||
install-info:
|
||||
|
||||
TAGS:
|
||||
|
||||
dvi: license.dvi lgpl.dvi
|
||||
|
||||
install:
|
||||
|
||||
uninstall:
|
||||
|
||||
Makefile: Makefile.in ../config.status
|
||||
cd ..; $(SHELL) ./config.status
|
||||
|
||||
clean mostlyclean:
|
||||
$(RM) license.?? license.??? liblic.?? liblic.??? lgpl.?? lgpl.???
|
||||
|
||||
distclean realclean: clean
|
||||
$(RM) Makefile config.status fsf-texi.tex
|
||||
|
||||
license.dvi: texiplus.tex texinfo.tex $(srcdir)/../license.texi $(srcdir)/../gpl.texinfo fsf-texi.tex
|
||||
TEXINPUTS=$(srcdir):.:$(srcdir)/.. $(TEX) $(srcdir)/../license.texi
|
||||
|
||||
lgpl.dvi: texiplus.tex texinfo.tex $(srcdir)/../liblic.texi $(srcdir)/../lgpl.texinfo fsf-texi.tex
|
||||
TEXINPUTS=$(srcdir):.:$(srcdir)/.. $(TEX) $(srcdir)/../liblic.texi
|
||||
mv liblic.dvi lgpl.dvi
|
||||
|
||||
fsf-texi.tex: $(srcdir)/../texinfo.tex
|
||||
cp $(srcdir)/../texinfo.tex fsf-texi.tex
|
||||
|
||||
force:
|
7
texinfo/cygnus/texinfo.tex
Normal file
7
texinfo/cygnus/texinfo.tex
Normal file
@ -0,0 +1,7 @@
|
||||
%$Id: texinfo.tex,v 1.1 1998/03/23 04:42:12 law Exp $
|
||||
% Cover file to permit easy management of FSF texinfo.tex and use of
|
||||
% Cygnus local revisions.
|
||||
% First we get the official FSF one:
|
||||
\input fsf-texi.tex
|
||||
@c Now we get the Cygnus mods to override things we like to do differently:
|
||||
@input texiplus.tex
|
325
texinfo/cygnus/texiplus.tex
Normal file
325
texinfo/cygnus/texiplus.tex
Normal file
@ -0,0 +1,325 @@
|
||||
@tex
|
||||
%% Cygnus revisions to texinfo.tex, TeX macros to handle texinfo files
|
||||
% Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
%% Maintained at Cygnus Support as:
|
||||
%%$Id: texiplus.tex,v 1.1 1998/03/23 04:42:12 law Exp $
|
||||
|
||||
%This texi+.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 1, or (at
|
||||
|
||||
{\let\fsfvn=\texinfoversion
|
||||
\xdef\texinfoversion{\fsfvn\ (Cygnus)}}
|
||||
\message{Loading Cygnus texinfo revisions [\texinfoversion]:}
|
||||
|
||||
% Print the version number if in a .fmt file.
|
||||
\everyjob{\message{[Cygnus Texinfo \texinfoversion]}}
|
||||
|
||||
\globaldefs=1 % Escape the bounds of @tex/@end tex surrounding us
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CROPMARKS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% These differ only slightly from FSF defaults; all crop dimens are
|
||||
% defined here (whether different or not) for ease in revising.
|
||||
\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
|
||||
\outerhsize=7in
|
||||
\outervsize=9in
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
\newif\ifdraft\drafttrue % Extra markings; turn off with @finalout
|
||||
|
||||
% There are only two small changes to standard \title from texinfo
|
||||
% (1) to include DRAFT marking on title page unless @finalout
|
||||
% (2) to include a title-sized \tt font
|
||||
% However, since \title is local to \titlepage, we have to redefine
|
||||
% *that* whole damned thing.
|
||||
%%%%%%%%%%This is sensitive to conflict w/FSF changes!****************
|
||||
\def\titlepage{\begingroup \parindent=0pt \textfonts
|
||||
\let\subtitlerm=\tenrm
|
||||
% I deinstalled the following change because \cmr12 is undefined.
|
||||
% This change was not in the ChangeLog anyway. --rms.
|
||||
% \let\subtitlerm=\cmr12
|
||||
\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
|
||||
%
|
||||
\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
|
||||
%
|
||||
% Leave some space at the very top of the page.
|
||||
\vglue\titlepagetopglue
|
||||
%
|
||||
% Now you can print the title using @title.
|
||||
\def\title{\parsearg\titlezzz}%
|
||||
%changes from FSF only in following line:
|
||||
\def\titlezzz##1{{\let\tentt=\titlett
|
||||
\leftline{\titlefont{##1\ifdraft\hfill DRAFT\fi }}}
|
||||
%end real changes from FSF version
|
||||
% print a rule at the page bottom also.
|
||||
\finishedtitlepagefalse
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% The ``width \hsize'' below should be unnecessary, since the rule is
|
||||
% supposed to default to the smallest enclosing box...but *something*
|
||||
% in texiplus breaks that default, so we force it to hsize.
|
||||
\vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% No rule at page bottom unless we print one at the top with @title.
|
||||
\finishedtitlepagetrue
|
||||
%
|
||||
% Now you can put text using @subtitle.
|
||||
\def\subtitle{\parsearg\subtitlezzz}%
|
||||
\def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
|
||||
%
|
||||
% @author should come last, but may come many times.
|
||||
\def\author{\parsearg\authorzzz}%
|
||||
\def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
|
||||
{\authorfont \leftline{##1}}}%
|
||||
%
|
||||
% 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
|
||||
\oldpage
|
||||
\let\page = \oldpage
|
||||
\hbox{}}%
|
||||
% \def\page{\oldpage \hbox{}}
|
||||
}
|
||||
\def\finishtitlepage{%
|
||||
% same comment re ``width \hsize'' as on last hrule...
|
||||
\vskip4pt \hrule width \hsize height 2pt
|
||||
\vskip\titlepagebottomglue
|
||||
\finishedtitlepagetrue
|
||||
}
|
||||
%%%%%%%%%%end sensitive to conflict w/FSF changes!********************
|
||||
|
||||
% Cygnus uses different default page headings and footers
|
||||
\def\leadline{\ \leaders\hrule height 2.5pt depth -2pt\hfil\ }
|
||||
\def\manvers{}% Empty default version in case manual doesn't supply
|
||||
% This is for _explicitly_ turning headers off. Note that we're more
|
||||
% literal-minded than the FSF: we don't turn off _footers_! This
|
||||
% means that, unlike with the FSF macros, our ``@headings off'' do not
|
||||
% return to the default Texinfo heading-state of the document.
|
||||
% Reconsider if this gives trouble...
|
||||
\def\HEADINGSoff{
|
||||
\global\evenheadline={\hfil}
|
||||
\global\evenfootline={\line{\let\,=\thinspace\ftfnt c\,y\,g\,n\,u\,s\quad s\,u\,p\,p\,o\,r\,t\leadline\manvers}}
|
||||
\global\oddheadline={\hfil}
|
||||
\global\oddfootline={\line {\let\,=\thinspace\ftfnt c\,y\,g\,n\,u\,s\quad s\,u\,p\,p\,o\,r\,t\leadline\manvers}}}
|
||||
% SINGLEPAGE:
|
||||
\def\HEADINGSsingle{
|
||||
\global\pageno=1\HEADINGSsinglex}
|
||||
\def\HEADINGSsinglex{
|
||||
\global\evenfootline={%
|
||||
{\let\,=\thinspace\ftfnt c\,y\,g\,n\,u\,s\quad s\,u\,p\,p\,o\,r\,t}%
|
||||
\leadline\manvers}
|
||||
\global\oddfootline={%
|
||||
{\let\,=\thinspace\ftfnt c\,y\,g\,n\,u\,s\quad s\,u\,p\,p\,o\,r\,t}%
|
||||
\leadline\manvers}
|
||||
\global\evenheadline={\ftfnt\thischapter\leadline
|
||||
\ifdraft DRAFT\leadline\fi
|
||||
\bf\folio}
|
||||
\global\oddheadline={\ftfnt\thischapter\leadline
|
||||
\ifdraft DRAFT\leadline\fi
|
||||
\bf\folio}
|
||||
}
|
||||
%
|
||||
% DOUBLEPAGE:
|
||||
% use hrule leaders to delimit headings, footings from
|
||||
% body; timestamp footer; pagenos outside *bottom* to
|
||||
% permit moving chaptername to outside *top* (for easier
|
||||
% skimming). 1990 dec 31, pesch@cygnus.com
|
||||
\def\HEADINGSdouble{
|
||||
\global\pageno=1\HEADINGSdoublex}
|
||||
\def\HEADINGSdoublex{
|
||||
\global\evenfootline={%
|
||||
{\bf\folio}\ftfnt\leadline\ifdraft DRAFT\quad\fi
|
||||
\ftfnt\manvers\qquad\today
|
||||
}
|
||||
\global\oddfootline={%
|
||||
{\let\,=\thinspace\ftfnt c\,y\,g\,n\,u\,s\quad s\,u\,p\,p\,o\,r\,t}%
|
||||
\leadline{\bf\folio}%
|
||||
}
|
||||
\global\evenheadline={\ftfnt\thistitle\leadline\ifdraft DRAFT\fi}
|
||||
\global\oddheadline={\rm\leadline\thischapter}
|
||||
}
|
||||
|
||||
% CHANGE to @finalout ---also use it to remove DRAFT markings from
|
||||
% title, footers
|
||||
%% 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
|
||||
%% Also take out ``DRAFT'' markings
|
||||
\global\draftfalse
|
||||
}
|
||||
|
||||
%Font overrides; we use PostScript when possible.
|
||||
\font\textrm=pncr scaled \magstephalf
|
||||
\font\texttt=pcrr
|
||||
\font\textbf=pncb scaled \magstephalf
|
||||
\font\textit=pncri scaled \magstephalf
|
||||
\font\textsl=pcrro
|
||||
\font\textsf=slcrst at 9.5pt
|
||||
% FIXME: figure out, test dvips smallcaps kluge
|
||||
%\font\textsc=Times-SmallCaps scaled \magstephalf
|
||||
\font\ftfnt=phvr at 8pt % Cygnus Support footer-font
|
||||
|
||||
\font\defbf=pncb scaled \magstep1 %was 1314
|
||||
|
||||
\font\ninett=pcrr at 9pt
|
||||
\let\indtt=\ninett
|
||||
\font\indrm=pncr at 9pt
|
||||
\font\indit=pncri at 9pt
|
||||
\font\indsl=pcrro at 9pt
|
||||
\let\indsf=\indrm
|
||||
\let\indbf=\indrm
|
||||
\let\indsc=\indrm
|
||||
|
||||
\font\chaprm=pncb at 17pt
|
||||
\font\chapit=pncbi at 17pt
|
||||
\font\chapsl=pcrbo at 16pt
|
||||
\font\chaptt=pcrb at 16pt
|
||||
\font\chapsf=slcrst at 16pt
|
||||
\let\chapbf=\chaprm
|
||||
% \chapfonts mod from FSF vn is to include baselineskip, for the few
|
||||
% cases where a title chapter overflows its line.
|
||||
\def\chapfonts{\baselineskip=19pt%
|
||||
\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
|
||||
\resetmathfonts}
|
||||
|
||||
|
||||
\font\secrm=pncb at 14pt
|
||||
\font\secit=pncbi at 14pt
|
||||
\font\secsl=pcrbo at 13pt
|
||||
\font\sectt=pcrb at 13pt
|
||||
\font\secsf=slcrst at 13pt
|
||||
\font\secbf=pncb at 14pt
|
||||
|
||||
\font\ssecrm=pncr at 13pt
|
||||
\font\ssecit=pncri at 13pt
|
||||
\font\ssecsl=pcrro at 12pt
|
||||
\font\ssectt=pcrr at 12pt
|
||||
\font\ssecsf=slcrst at 12pt
|
||||
\font\ssecbf=pncb at 13pt
|
||||
|
||||
\font\titlerm=pncb at 21pt
|
||||
\font\titlett=pcrr at 20pt
|
||||
\font\authorrm=pncr scaled \magstep2
|
||||
|
||||
\font\truesecrm=pncr at 12pt
|
||||
|
||||
% Fonts for short table of contents
|
||||
\font\shortcontrm=pncr at 12pt
|
||||
\font\shortcontbf=pncb at 12pt
|
||||
\font\shortcontsl=pncri at 12pt
|
||||
|
||||
% \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\/\fi\fi\fi}
|
||||
\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
|
||||
% \smartitalic is used for @emph; FSF keeps trying to make it match
|
||||
% @var.
|
||||
%
|
||||
% \smartslant{ARG} outputs arg in a slanted font, followed by an
|
||||
% italic correction unless the following character is such as not to need one.
|
||||
\def\smartslantx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
|
||||
\def\smartslant#1{{\sl #1}\futurelet\next\smartslantx}
|
||||
|
||||
\let\i=\smartitalic
|
||||
\let\var=\smartslant
|
||||
\let\dfn=\smartitalic
|
||||
\let\emph=\smartitalic
|
||||
\let\cite=\smartitalic
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% @altref, if called explicitly (inside @iftex), switches the @ref
|
||||
% printed output so it lacks the square brackets used by default.
|
||||
% While we're at it, we use double quotes instead of square brackets
|
||||
% (or no decorator at all, depending on state of @altref toggle).
|
||||
% Unfortunately this requires reproducing the entire damn xrefX
|
||||
% definition. WARNING: may need to track texinfo.tex changes to xrefX...
|
||||
\newif\ifbra\bratrue
|
||||
\def\altref{\ifbra\brafalse\else\bratrue\fi}% Toggle.
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Begin duplicate xrefX:
|
||||
\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup%
|
||||
\def\printedmanual{\ignorespaces #5}%
|
||||
\def\printednodename{\ignorespaces #3}%
|
||||
%
|
||||
\setbox1=\hbox{\printedmanual}%
|
||||
\setbox0=\hbox{\printednodename}%
|
||||
\ifdim \wd0=0pt%
|
||||
\def\printednodename{\ignorespaces #1}%
|
||||
%%% Uncommment the following line to make the actual chapter or section title
|
||||
%%% appear inside the square brackets.
|
||||
%\def\printednodename{#1-title}%
|
||||
\fi%
|
||||
%
|
||||
%
|
||||
% 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 simply give the text of
|
||||
% the node name again, so it is as if TeX is seeing it for the first
|
||||
% time.
|
||||
\ifdim \wd1>0pt
|
||||
section ``\printednodename'' in \cite{\printedmanual}%
|
||||
\else%
|
||||
\turnoffactive%
|
||||
%%%%%%%%%%%%%%%Here's the change for @altref:
|
||||
\ifbra
|
||||
\refx{#1-snt}{} ``\printednodename,'' page\tie\refx{#1-pg}{}%
|
||||
\else
|
||||
\refx{#1-snt}{} \printednodename, page\tie\refx{#1-pg}{}%
|
||||
\fi
|
||||
%%%%%%%%%%%%%%%end change for @altref
|
||||
\fi
|
||||
\endgroup}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%:End duplicate xrefX
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% \widen: let examples (or whatever) fall into margins. Symmetric. Cancel
|
||||
% ``@widen{N}'' with ``@widen{-N}''.
|
||||
\newdimen\extra\extra=0pt % for ``widen''
|
||||
\global\def\widen#1{\advance\extra by #1%
|
||||
\advance\leftskip by -#1\advance\rightskip by -#1}
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% ONLY INTENDED CHANGES from FSF smallbook: tolerance and page centering
|
||||
% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
|
||||
\def\smallbook{
|
||||
|
||||
% These values for secheadingskip and subsecheadingskip are
|
||||
% experiments. RJC 7 Aug 1992
|
||||
\global\secheadingskip = 17pt plus 6pt minus 3pt
|
||||
\global\subsecheadingskip = 14pt plus 6pt minus 3pt
|
||||
|
||||
\global\lispnarrowing = 0.3in
|
||||
\setleading{12pt}
|
||||
\advance\topskip by -1cm
|
||||
\global\parskip 3pt plus 1pt
|
||||
\global\hsize = 5in
|
||||
\advance\normaloffset by .75in % half of difference from 6.5in default hsize
|
||||
\global\vsize=7.5in
|
||||
\advance\voffset by .7in % half of difference from 8.9in default vsize
|
||||
\global\tolerance=1400
|
||||
\global\hfuzz=1pt
|
||||
\global\contentsrightmargin=0pt
|
||||
|
||||
\global\pagewidth=\hsize
|
||||
\global\pageheight=\vsize
|
||||
|
||||
\global\let\smalllisp=\smalllispx
|
||||
\global\let\smallexample=\smalllispx
|
||||
\global\def\Esmallexample{\Esmalllisp}
|
||||
}\textfonts
|
||||
|
||||
\globaldefs=0 % this is NOT redundant; the \endgroup done by@end tex
|
||||
% would restore the value, but before doing that would
|
||||
% screw up if globaldefs=1 were allowed to remain here.
|
||||
@end tex
|
||||
@rm
|
||||
@smallbook
|
||||
@c some manuals (notably as) contain stuff that only looks good in
|
||||
@c smallbook; this switch controls its appearance, by local convention
|
||||
@set SMALL
|
37
texinfo/cygnus/tocfix
Executable file
37
texinfo/cygnus/tocfix
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
# tocfix - move a DVI file table of contents to its proper position
|
||||
|
||||
# TeX puts the table of contents at the end of the DVI file.
|
||||
# If you're printing multiple pages per sheet, you can't fix it
|
||||
# on the printout. This program moves the TOC to be right after
|
||||
# the titlepage and copyright page.
|
||||
# It's a safe no-op to run this program on a DVI file more than once.
|
||||
|
||||
# Some explanation: the TOC has negative page numbers, represented
|
||||
# to dviselect by an underscore. The titlepage and copyright page
|
||||
# have TeX page numbers 1 and 2, but so do the first two pages of the
|
||||
# first chapter. So we have to use absolute, as opposed to TeX,
|
||||
# page numbers to get them right, represented to dviselect by an
|
||||
# equals sign.
|
||||
|
||||
# This program assumes that the DVI file has the standard Texinfo
|
||||
# format -- a titlepage, a copyright page, then the real text.
|
||||
|
||||
# djm@cygnus.com (David MacKenzie)
|
||||
|
||||
trap 'rm -f new-*.dvi title.dvi toc.dvi body_plus_toc.dvi body.dvi; exit 1' 1 3 15
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage; tocfix dvifile..." >&2; exit 1
|
||||
fi
|
||||
|
||||
for dvi
|
||||
do
|
||||
dviselect -i $dvi -o title.dvi =1:2
|
||||
dviselect -i $dvi -o toc.dvi :_1
|
||||
dviselect -i $dvi -o body_plus_toc.dvi =3:
|
||||
dviselect -i body_plus_toc.dvi -o body.dvi 1:
|
||||
dviconcat -o new-$dvi title.dvi toc.dvi body.dvi
|
||||
mv new-$dvi $dvi
|
||||
rm -f title.dvi toc.dvi body_plus_toc.dvi body.dvi
|
||||
done
|
56
texinfo/doc/Makefile.am
Normal file
56
texinfo/doc/Makefile.am
Normal file
@ -0,0 +1,56 @@
|
||||
## Makefile.am for texinfo/emacs.
|
||||
## $Id: Makefile.am,v 1.1 1998/03/23 04:42:12 law Exp $
|
||||
## Run automake in .. to produce Makefile.in from this.
|
||||
|
||||
info_TEXINFOS = info-stnd.texi info.texi texinfo.texi
|
||||
|
||||
# Use the makeinfo built in our distribution.
|
||||
MAKEINFO = ../makeinfo/makeinfo
|
||||
|
||||
# Include our texinfo.tex, not Automake's.
|
||||
EXTRA_DIST = macro.texi userdoc.texi epsf.tex texinfo.tex
|
||||
|
||||
# We try to discover this via configure just to give a better help message.
|
||||
TEXMF = @TEXMF@
|
||||
|
||||
install-data-local:
|
||||
@echo "WARNING: You must install texinfo.tex and epsf.tex manually,"
|
||||
@echo "WARNING: perhaps in $(TEXMF)/tex/texinfo/"
|
||||
@echo "WARNING: and $(TEXMF)/tex/generic/dvips/ respectively."
|
||||
@echo "WARNING: See doc/README for some considerations."
|
||||
|
||||
# Do not create info files for distribution.
|
||||
dist-info:
|
||||
|
||||
# Do not try to build the info files in $(srcdir),
|
||||
# since we don't distribute them.
|
||||
.texi.info:
|
||||
$(MAKEINFO) -I$(srcdir) `echo $< | sed 's,.*/,,'`
|
||||
texinfo: $(srcdir)/texinfo.texi
|
||||
$(MAKEINFO) -I$(srcdir) texinfo.texi
|
||||
|
||||
# Do not try to install them from $(srcdir).
|
||||
install-info-am: $(INFO_DEPS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(infodir)
|
||||
@for file in $(INFO_DEPS); do \
|
||||
d=.; \
|
||||
for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
||||
if test -f $$d/$$ifile; then \
|
||||
echo " $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile"; \
|
||||
$(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile; \
|
||||
else : ; fi; \
|
||||
done; \
|
||||
done
|
||||
@$(POST_INSTALL)
|
||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||
for file in $(INFO_DEPS); do \
|
||||
echo " install-info --info-dir=$(infodir) $(infodir)/$$file";\
|
||||
install-info --info-dir=$(infodir) $(infodir)/$$file || :;\
|
||||
done; \
|
||||
else : ; fi
|
||||
|
||||
|
||||
# Remove them at make distclean.
|
||||
distclean-aminfo:
|
||||
rm -f texinfo texinfo-* info*.info*
|
304
texinfo/doc/Makefile.in
Normal file
304
texinfo/doc/Makefile.in
Normal file
@ -0,0 +1,304 @@
|
||||
# Makefile.in generated automatically by automake 1.2 from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy, distribute and modify it.
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
|
||||
top_builddir = ..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
transform = @program_transform_name@
|
||||
|
||||
NORMAL_INSTALL = true
|
||||
PRE_INSTALL = true
|
||||
POST_INSTALL = true
|
||||
NORMAL_UNINSTALL = true
|
||||
PRE_UNINSTALL = true
|
||||
POST_UNINSTALL = true
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
EXEEXT = @EXEEXT@
|
||||
GENCAT = @GENCAT@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GT_NO = @GT_NO@
|
||||
GT_YES = @GT_YES@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLDEPS = @INTLDEPS@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
MAINT = @MAINT@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
TERMLIBS = @TERMLIBS@
|
||||
TEXCONFIG = @TEXCONFIG@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
l = @l@
|
||||
|
||||
info_TEXINFOS = info-stnd.texi info.texi texinfo.texi
|
||||
|
||||
# Use the makeinfo built in our distribution.
|
||||
MAKEINFO = ../makeinfo/makeinfo
|
||||
|
||||
# Include our texinfo.tex, not Automake's.
|
||||
EXTRA_DIST = macro.texi userdoc.texi epsf.tex texinfo.tex
|
||||
|
||||
# We try to discover this via configure just to give a better help message.
|
||||
TEXMF = @TEXMF@
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
TEXI2DVI = `if test -f $(top_srcdir)/../texinfo/util/texi2dvi; then echo $(top_srcdir)/../texinfo/util/texi2dvi; else echo texi2dvi; fi`
|
||||
TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
|
||||
INFO_DEPS = info-stnd.info info.info texinfo
|
||||
DVIS = info-stnd.dvi info.dvi texinfo.dvi
|
||||
TEXINFOS = info-stnd.texi info.texi texinfo.texi
|
||||
DIST_COMMON = README $(info_TEXINFOS) Makefile.am Makefile.in \
|
||||
texinfo.tex
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
GZIP = --best
|
||||
default: all
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .dvi .info .ps .texi .texinfo
|
||||
$(srcdir)/Makefile.in: @MAINT@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --cygnus doc/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
|
||||
info-stnd.info: info-stnd.texi
|
||||
info-stnd.dvi: info-stnd.texi
|
||||
|
||||
|
||||
info.info: info.texi $(info_TEXINFOS)
|
||||
info.dvi: info.texi $(info_TEXINFOS)
|
||||
|
||||
|
||||
texinfo: texinfo.texi
|
||||
texinfo.dvi: texinfo.texi
|
||||
|
||||
|
||||
DVIPS = dvips
|
||||
|
||||
.texi.dvi:
|
||||
TEXINPUTS=$(top_srcdir)/../texinfo:$$TEXINPUTS \
|
||||
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
||||
|
||||
.texi:
|
||||
@rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
$(MAKEINFO) -I $(srcdir) $<
|
||||
|
||||
.texinfo.info:
|
||||
@rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
$(MAKEINFO) -I $(srcdir) $<
|
||||
|
||||
.texinfo:
|
||||
@rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
$(MAKEINFO) -I $(srcdir) $<
|
||||
|
||||
.texinfo.dvi:
|
||||
TEXINPUTS=$(top_srcdir)/../texinfo:$$TEXINPUTS \
|
||||
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
||||
.dvi.ps:
|
||||
$(DVIPS) $< -o $@
|
||||
|
||||
uninstall-info:
|
||||
$(PRE_UNINSTALL)
|
||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||
ii=yes; \
|
||||
else ii=; fi; \
|
||||
for file in $(INFO_DEPS); do \
|
||||
test -z $ii || install-info --info-dir=$(infodir) --remove $$file; \
|
||||
done
|
||||
$(NORMAL_UNINSTALL)
|
||||
for file in $(INFO_DEPS); do \
|
||||
(cd $(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \
|
||||
done
|
||||
|
||||
mostlyclean-aminfo:
|
||||
rm -f info-stnd.aux info-stnd.cp info-stnd.cps info-stnd.dvi \
|
||||
info-stnd.fn info-stnd.fns info-stnd.ky info-stnd.log \
|
||||
info-stnd.pg info-stnd.toc info-stnd.tp info-stnd.tps \
|
||||
info-stnd.vr info-stnd.vrs info-stnd.op info-stnd.tr \
|
||||
info-stnd.cv info.aux info.cp info.cps info.dvi info.fn \
|
||||
info.fns info.ky info.log info.pg info.toc info.tp info.tps \
|
||||
info.vr info.vrs info.op info.tr info.cv texinfo.aux \
|
||||
texinfo.cp texinfo.cps texinfo.dvi texinfo.fn texinfo.fns \
|
||||
texinfo.ky texinfo.log texinfo.pg texinfo.toc texinfo.tp \
|
||||
texinfo.tps texinfo.vr texinfo.vrs texinfo.op texinfo.tr \
|
||||
texinfo.cv
|
||||
|
||||
clean-aminfo:
|
||||
|
||||
distclean-aminfo:
|
||||
|
||||
maintainer-clean-aminfo:
|
||||
for i in $(INFO_DEPS); do rm -f `eval echo $$i*`; done
|
||||
clean-info: mostlyclean-aminfo
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
|
||||
subdir = doc
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
done
|
||||
$(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
|
||||
info: $(INFO_DEPS)
|
||||
dvi: $(DVIS)
|
||||
check: all
|
||||
$(MAKE)
|
||||
installcheck:
|
||||
install-info: install-info-am
|
||||
install-exec:
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install-data: install-data-local
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall:
|
||||
|
||||
all: Makefile
|
||||
|
||||
install-strip:
|
||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||
installdirs:
|
||||
|
||||
|
||||
mostlyclean-generic:
|
||||
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||
|
||||
clean-generic:
|
||||
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
rm -f Makefile $(DISTCLEANFILES)
|
||||
rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
mostlyclean: mostlyclean-aminfo mostlyclean-generic
|
||||
|
||||
clean: clean-aminfo clean-generic mostlyclean
|
||||
|
||||
distclean: distclean-aminfo distclean-generic clean
|
||||
rm -f config.status
|
||||
|
||||
maintainer-clean: maintainer-clean-aminfo maintainer-clean-generic \
|
||||
distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
.PHONY: default install-info-am uninstall-info mostlyclean-aminfo \
|
||||
distclean-aminfo clean-aminfo maintainer-clean-aminfo tags distdir info \
|
||||
dvi installcheck install-info install-exec install-data install \
|
||||
uninstall all installdirs mostlyclean-generic distclean-generic \
|
||||
clean-generic maintainer-clean-generic clean mostlyclean distclean \
|
||||
maintainer-clean
|
||||
|
||||
|
||||
install-data-local:
|
||||
@echo "WARNING: You must install texinfo.tex and epsf.tex manually,"
|
||||
@echo "WARNING: perhaps in $(TEXMF)/tex/texinfo/"
|
||||
@echo "WARNING: and $(TEXMF)/tex/generic/dvips/ respectively."
|
||||
@echo "WARNING: See doc/README for some considerations."
|
||||
|
||||
# Do not create info files for distribution.
|
||||
dist-info:
|
||||
|
||||
# Do not try to build the info files in $(srcdir),
|
||||
# since we don't distribute them.
|
||||
.texi.info:
|
||||
$(MAKEINFO) -I$(srcdir) `echo $< | sed 's,.*/,,'`
|
||||
texinfo: $(srcdir)/texinfo.texi
|
||||
$(MAKEINFO) -I$(srcdir) texinfo.texi
|
||||
|
||||
# Do not try to install them from $(srcdir).
|
||||
install-info-am: $(INFO_DEPS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(infodir)
|
||||
@for file in $(INFO_DEPS); do \
|
||||
d=.; \
|
||||
for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
||||
if test -f $$d/$$ifile; then \
|
||||
echo " $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile"; \
|
||||
$(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile; \
|
||||
else : ; fi; \
|
||||
done; \
|
||||
done
|
||||
@$(POST_INSTALL)
|
||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||
for file in $(INFO_DEPS); do \
|
||||
echo " install-info --info-dir=$(infodir) $(infodir)/$$file";\
|
||||
install-info --info-dir=$(infodir) $(infodir)/$$file || :;\
|
||||
done; \
|
||||
else : ; fi
|
||||
|
||||
# Remove them at make distclean.
|
||||
distclean-aminfo:
|
||||
rm -f texinfo texinfo-* info*.info*
|
||||
|
||||
# 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:
|
26
texinfo/doc/README
Normal file
26
texinfo/doc/README
Normal file
@ -0,0 +1,26 @@
|
||||
This directory contains documentation on the Texinfo system and the TeX
|
||||
sources needed to process Texinfo sources.
|
||||
|
||||
The .tex files are not installed automatically because TeX installations
|
||||
vary so widely. Installing them in the wrong place would give a false
|
||||
sense of security. So, you should simply cp *.tex to the appropriate
|
||||
place. If your installation follows the TeX Directory Structure
|
||||
standard (http://www.tug.org/tds/), this will be the directory
|
||||
<texmf>/tex/texinfo/ for texinfo.tex and <texmf>/tex/plain/dvips/ for
|
||||
epsf.tex. If you use the default installation paths, <texmf> will be
|
||||
/usr/local/share/texmf. If you have teTeX, you can find <texmf> by
|
||||
running:
|
||||
texconfig confall | grep \^TEXMF=
|
||||
(The configure script tries to do this for you.)
|
||||
|
||||
You can get the latest texinfo.tex from
|
||||
ftp://ftp.tug.org/tex/texinfo.tex
|
||||
ftp://ftp.cs.umb.edu/pub/tex/texinfo.tex
|
||||
or on the FSF machines in /home/gd/gnu/doc/texinfo.tex.
|
||||
If you have problems with the version in this distribution, please check
|
||||
for a newer version.
|
||||
|
||||
epsf.tex comes with dvips distributions, and you may already have it
|
||||
installed. The version here is functionally identical but slightly
|
||||
nicer than the one in dvips574. The changes have been sent to the
|
||||
epsf.tex maintainer.
|
546
texinfo/doc/epsf.tex
Normal file
546
texinfo/doc/epsf.tex
Normal file
@ -0,0 +1,546 @@
|
||||
%%% ====================================================================
|
||||
%%% This file is freely redistributable and placed into the
|
||||
%%% public domain by Tomas Rokicki.
|
||||
%%% @TeX-file{
|
||||
%%% author = "Tom Rokicki",
|
||||
%%% version = "2.7k",
|
||||
%%% date = "19 July 1997",
|
||||
%%% time = "10:00:05 MDT",
|
||||
%%% filename = "epsf.tex",
|
||||
%%% address = "Tom Rokicki
|
||||
%%% Box 2081
|
||||
%%% Stanford, CA 94309
|
||||
%%% USA",
|
||||
%%% telephone = "+1 415 855 9989",
|
||||
%%% email = "rokicki@cs.stanford.edu (Internet)",
|
||||
%%% codetable = "ISO/ASCII",
|
||||
%%% keywords = "PostScript, TeX",
|
||||
%%% supported = "yes",
|
||||
%%% abstract = "This file contains macros to support the inclusion
|
||||
%%% of Encapsulated PostScript files in TeX documents.",
|
||||
%%% docstring = "This file contains TeX macros to include an
|
||||
%%% Encapsulated PostScript graphic. It works
|
||||
%%% by finding the bounding box comment,
|
||||
%%% calculating the correct scale values, and
|
||||
%%% inserting a vbox of the appropriate size at
|
||||
%%% the current position in the TeX document.
|
||||
%%%
|
||||
%%% To use, simply say
|
||||
%%%
|
||||
%%% \input epsf % somewhere early on in your TeX file
|
||||
%%%
|
||||
%%% % then where you want to insert a vbox for a figure:
|
||||
%%% \epsfbox{filename.ps}
|
||||
%%%
|
||||
%%% Alternatively, you can supply your own
|
||||
%%% bounding box by
|
||||
%%%
|
||||
%%% \epsfbox[0 0 30 50]{filename.ps}
|
||||
%%%
|
||||
%%% This will not read in the file, and will
|
||||
%%% instead use the bounding box you specify.
|
||||
%%%
|
||||
%%% The effect will be to typeset the figure as
|
||||
%%% a TeX box, at the point of your \epsfbox
|
||||
%%% command. By default, the graphic will have
|
||||
%%% its `natural' width (namely the width of
|
||||
%%% its bounding box, as described in
|
||||
%%% filename.ps). The TeX box will have depth
|
||||
%%% zero.
|
||||
%%%
|
||||
%%% You can enlarge or reduce the figure by
|
||||
%%% saying
|
||||
%%%
|
||||
%%% \epsfxsize=<dimen> \epsfbox{filename.ps}
|
||||
%%% or
|
||||
%%% \epsfysize=<dimen> \epsfbox{filename.ps}
|
||||
%%%
|
||||
%%% instead. Then the width of the TeX box will
|
||||
%%% be \epsfxsize and its height will be scaled
|
||||
%%% proportionately (or the height will be
|
||||
%%% \epsfysize and its width will be scaled
|
||||
%%% proportionately).
|
||||
%%%
|
||||
%%% The width (and height) is restored to zero
|
||||
%%% after each use, so \epsfxsize or \epsfysize
|
||||
%%% must be specified before EACH use of
|
||||
%%% \epsfbox.
|
||||
%%%
|
||||
%%% A more general facility for sizing is
|
||||
%%% available by defining the \epsfsize macro.
|
||||
%%% Normally you can redefine this macro to do
|
||||
%%% almost anything. The first parameter is
|
||||
%%% the natural x size of the PostScript
|
||||
%%% graphic, the second parameter is the
|
||||
%%% natural y size of the PostScript graphic.
|
||||
%%% It must return the xsize to use, or 0 if
|
||||
%%% natural scaling is to be used. Common uses
|
||||
%%% include:
|
||||
%%%
|
||||
%%% \epsfxsize % just leave the old value alone
|
||||
%%% 0pt % use the natural sizes
|
||||
%%% #1 % use the natural sizes
|
||||
%%% \hsize % scale to full width
|
||||
%%% 0.5#1 % scale to 50% of natural size
|
||||
%%% \ifnum #1>\hsize\hsize\else#1\fi
|
||||
%%% % smaller of natural, hsize
|
||||
%%%
|
||||
%%% If you want TeX to report the size of the
|
||||
%%% figure (as a message on your terminal when
|
||||
%%% it processes each figure), say
|
||||
%%% `\epsfverbosetrue'.
|
||||
%%%
|
||||
%%% If you only want to get the bounding box
|
||||
%%% extents, without producing any output boxes
|
||||
%%% or \special{}, then say
|
||||
%%% \epsfgetbb{filename}. The extents will be
|
||||
%%% saved in the macros \epsfllx \epsflly
|
||||
%%% \epsfurx \epsfury in PostScript units of
|
||||
%%% big points.
|
||||
%%%
|
||||
%%% Revision history:
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% epsf.tex macro file:
|
||||
%%% Originally written by Tomas Rokicki of
|
||||
%%% Radical Eye Software, 29 Mar 1989.
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Don Knuth, 3 Jan 1990.
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Tomas Rokicki, 18 Jul 1990.
|
||||
%%% Accept bounding boxes with no space after
|
||||
%%% the colon.
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Nelson H. F. Beebe
|
||||
%%% <beebe@math.utah.edu>, 03 Dec 1991 [2.0].
|
||||
%%% Add version number and date typeout.
|
||||
%%%
|
||||
%%% Use \immediate\write16 instead of \message
|
||||
%%% to ensure output on new line.
|
||||
%%%
|
||||
%%% Handle nested EPS files.
|
||||
%%%
|
||||
%%% Handle %%BoundingBox: (atend) lines.
|
||||
%%%
|
||||
%%% Do not quit when blank lines are found.
|
||||
%%%
|
||||
%%% Add a few percents to remove generation of
|
||||
%%% spurious blank space.
|
||||
%%%
|
||||
%%% Move \special output to
|
||||
%%% \epsfspecial{filename} so that other macro
|
||||
%%% packages can input this one, then change
|
||||
%%% the definition of \epsfspecial to match
|
||||
%%% another DVI driver.
|
||||
%%%
|
||||
%%% Move size computation to \epsfsetsize which
|
||||
%%% can be called by the user; the verbose
|
||||
%%% output of the bounding box and scaled width
|
||||
%%% and height happens here.
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Nelson H. F. Beebe
|
||||
%%% <beebe@math.utah.edu>, 05 May 1992 [2.1].
|
||||
%%% Wrap \leavevmode\hbox{} around \vbox{} with
|
||||
%%% the \special so that \epsffile{} can be
|
||||
%%% used inside \begin{center}...\end{center}
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Nelson H. F. Beebe
|
||||
%%% <beebe@math.utah.edu>, 09 Dec 1992 [2.2].
|
||||
%%% Introduce \epsfshow{true,false} and
|
||||
%%% \epsfframe{true,false} macros; the latter
|
||||
%%% suppresses the insertion of the PostScript,
|
||||
%%% and instead just creates an empty box,
|
||||
%%% which may be handy for rapid prototyping.
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Nelson H. F. Beebe
|
||||
%%% <beebe@math.utah.edu>, 14 Dec 1992 [2.3].
|
||||
%%% Add \epsfshowfilename{true,false}. When
|
||||
%%% true, and \epsfshowfalse is specified, the
|
||||
%%% PostScript file name will be displayed
|
||||
%%% centered in the figure box.
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Nelson H. F. Beebe
|
||||
%%% <beebe@math.utah.edu>, 20 June 1993 [2.4].
|
||||
%%% Remove non-zero debug setting of \epsfframemargin,
|
||||
%%% and change margin handling to preserve EPS image
|
||||
%%% size and aspect ratio, so that the actual
|
||||
%%% box is \epsfxsize+\epsfframemargin wide by
|
||||
%%% \epsfysize+\epsfframemargin high.
|
||||
%%% Reduce output of \epsfshowfilenametrue to
|
||||
%%% just the bare file name.
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Nelson H. F. Beebe
|
||||
%%% <beebe@math.utah.edu>, 13 July 1993 [2.5].
|
||||
%%% Add \epsfframethickness for control of
|
||||
%%% \epsfframe frame lines.
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Nelson H. F. Beebe
|
||||
%%% <beebe@math.utah.edu>, 02 July 1996 [2.6]
|
||||
%%% Add missing initialization \epsfatendfalse;
|
||||
%%% the lack of this resulted in the wrong
|
||||
%%% BoundingBox being picked up, mea culpa, sigh...
|
||||
%%% ---------------------------------------------
|
||||
%%%
|
||||
%%% ---------------------------------------------
|
||||
%%% Revised by Nelson H. F. Beebe
|
||||
%%% <beebe@math.utah.edu>, 25 October 1996 [2.7]
|
||||
%%% Update to match changes in from dvips 5-600
|
||||
%%% distribution: new user-accessible macros:
|
||||
%%% \epsfclipon, \epsfclipoff, \epsfdrafton,
|
||||
%%% \epsfdraftoff, change \empty to \epsfempty.
|
||||
%%% ---------------------------------------------
|
||||
%%%
|
||||
%%% Modified to avoid verbosity, give help.
|
||||
%%% --kb@cs.umb.edu, for Texinfo.
|
||||
%%% }
|
||||
%%% ====================================================================
|
||||
%
|
||||
\ifx\epsfannounce\undefined \def\epsfannounce{\immediate\write16}\fi
|
||||
\epsfannounce{This is `epsf.tex' v2.7k <10 July 1997>}%
|
||||
%
|
||||
\newread\epsffilein % file to \read
|
||||
\newif\ifepsfatend % need to scan to LAST %%BoundingBox comment?
|
||||
\newif\ifepsfbbfound % success?
|
||||
\newif\ifepsfdraft % use draft mode?
|
||||
\newif\ifepsffileok % continue looking for the bounding box?
|
||||
\newif\ifepsfframe % frame the bounding box?
|
||||
\newif\ifepsfshow % show PostScript file, or just bounding box?
|
||||
\epsfshowtrue % default is to display PostScript file
|
||||
\newif\ifepsfshowfilename % show the file name if \epsfshowfalse specified?
|
||||
\newif\ifepsfverbose % report what you're making?
|
||||
\newdimen\epsfframemargin % margin between box and frame
|
||||
\newdimen\epsfframethickness % thickness of frame rules
|
||||
\newdimen\epsfrsize % vertical size before scaling
|
||||
\newdimen\epsftmp % register for arithmetic manipulation
|
||||
\newdimen\epsftsize % horizontal size before scaling
|
||||
\newdimen\epsfxsize % horizontal size after scaling
|
||||
\newdimen\epsfysize % vertical size after scaling
|
||||
\newdimen\pspoints % conversion factor
|
||||
%
|
||||
\pspoints = 1bp % Adobe points are `big'
|
||||
\epsfxsize = 0pt % default value, means `use natural size'
|
||||
\epsfysize = 0pt % ditto
|
||||
\epsfframemargin = 0pt % default value: frame box flush around picture
|
||||
\epsfframethickness = 0.4pt % TeX's default rule thickness
|
||||
%
|
||||
\def\epsfbox#1{\global\def\epsfllx{72}\global\def\epsflly{72}%
|
||||
\global\def\epsfurx{540}\global\def\epsfury{720}%
|
||||
\def\lbracket{[}\def\testit{#1}\ifx\testit\lbracket
|
||||
\let\next=\epsfgetlitbb\else\let\next=\epsfnormal\fi\next{#1}}%
|
||||
%
|
||||
% We use \epsfgetlitbb if the user specified an explicit bounding box,
|
||||
% and \epsfnormal otherwise. Because \epsfgetbb can be called
|
||||
% separately to retrieve the bounding box, we move the verbose
|
||||
% printing the bounding box extents and size on the terminal to
|
||||
% \epsfstatus. Therefore, when the user provided the bounding box,
|
||||
% \epsfgetbb will not be called, so we must call \epsfsetsize and
|
||||
% \epsfstatus ourselves.
|
||||
%
|
||||
\def\epsfgetlitbb#1#2 #3 #4 #5]#6{%
|
||||
\epsfgrab #2 #3 #4 #5 .\\%
|
||||
\epsfsetsize
|
||||
\epsfstatus{#6}%
|
||||
\epsfsetgraph{#6}%
|
||||
}%
|
||||
%
|
||||
\def\epsfnormal#1{%
|
||||
\epsfgetbb{#1}%
|
||||
\epsfsetgraph{#1}%
|
||||
}%
|
||||
%
|
||||
\newhelp\epsfnoopenhelp{The PostScript image file must be findable by
|
||||
TeX, i.e., somewhere in the TEXINPUTS (or equivalent) path.}%
|
||||
%
|
||||
\def\epsfgetbb#1{%
|
||||
%
|
||||
% The first thing we need to do is to open the
|
||||
% PostScript file, if possible.
|
||||
%
|
||||
\openin\epsffilein=#1
|
||||
\ifeof\epsffilein
|
||||
\errhelp = \epsfnoopenhelp
|
||||
\errmessage{Could not open file #1, ignoring it}%
|
||||
\else %process the file
|
||||
{% %start a group to contain catcode changes
|
||||
% Make all special characters, except space, to be of type
|
||||
% `other' so we process the file in almost verbatim mode
|
||||
% (TeXbook, p. 344).
|
||||
\chardef\other=12
|
||||
\def\do##1{\catcode`##1=\other}%
|
||||
\dospecials
|
||||
\catcode`\ =10
|
||||
\epsffileoktrue %true while we are looping
|
||||
\epsfatendfalse %[02-Jul-1996]: add forgotten initialization
|
||||
\loop %reading lines from the EPS file
|
||||
\read\epsffilein to \epsffileline
|
||||
\ifeof\epsffilein %then no more input
|
||||
\epsffileokfalse %so set completion flag
|
||||
\else %otherwise process one line
|
||||
\expandafter\epsfaux\epsffileline:. \\%
|
||||
\fi
|
||||
\ifepsffileok
|
||||
\repeat
|
||||
\ifepsfbbfound
|
||||
\else
|
||||
\ifepsfverbose
|
||||
\immediate\write16{No BoundingBox comment found in %
|
||||
file #1; using defaults}%
|
||||
\fi
|
||||
\fi
|
||||
}% %end catcode changes
|
||||
\closein\epsffilein
|
||||
\fi %end of file processing
|
||||
\epsfsetsize %compute size parameters
|
||||
\epsfstatus{#1}%
|
||||
}%
|
||||
%
|
||||
% Clipping control:
|
||||
\def\epsfclipon{\def\epsfclipstring{ clip}}%
|
||||
\def\epsfclipoff{\def\epsfclipstring{\ifepsfdraft\space clip\fi}}%
|
||||
\epsfclipoff % default for dvips is OFF
|
||||
%
|
||||
% The special that is emitted by \epsfsetgraph comes from this macro.
|
||||
% It is defined separately to allow easy customization by other
|
||||
% packages that first \input epsf.tex, then redefine \epsfspecial.
|
||||
% This macro is invoked in the lower-left corner of a box of the
|
||||
% width and height determined from the arguments to \epsffile, or
|
||||
% from the %%BoundingBox in the EPS file itself.
|
||||
%
|
||||
% This version is for dvips:
|
||||
\def\epsfspecial#1{%
|
||||
\epsftmp=10\epsfxsize
|
||||
\divide\epsftmp\pspoints
|
||||
\ifnum\epsfrsize=0\relax
|
||||
\special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
|
||||
llx=\epsfllx\space
|
||||
lly=\epsflly\space
|
||||
urx=\epsfurx\space
|
||||
ury=\epsfury\space
|
||||
rwi=\number\epsftmp
|
||||
\epsfclipstring
|
||||
}%
|
||||
\else
|
||||
\epsfrsize=10\epsfysize
|
||||
\divide\epsfrsize\pspoints
|
||||
\special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
|
||||
llx=\epsfllx\space
|
||||
lly=\epsflly\space
|
||||
urx=\epsfurx\space
|
||||
ury=\epsfury\space
|
||||
rwi=\number\epsftmp
|
||||
rhi=\number\epsfrsize
|
||||
\epsfclipstring
|
||||
}%
|
||||
\fi
|
||||
}%
|
||||
%
|
||||
% \epsfframe macro adapted from the TeXbook, exercise 21.3, p. 223, 331.
|
||||
% but modified to set the box width to the natural width, rather
|
||||
% than the line width, and to include space for margins and rules
|
||||
\def\epsfframe#1%
|
||||
{%
|
||||
\leavevmode % so we can put this inside
|
||||
% a centered environment
|
||||
\setbox0 = \hbox{#1}%
|
||||
\dimen0 = \wd0 % natural width of argument
|
||||
\advance \dimen0 by 2\epsfframemargin % plus width of 2 margins
|
||||
\advance \dimen0 by 2\epsfframethickness % plus width of 2 rule lines
|
||||
\vbox
|
||||
{%
|
||||
\hrule height \epsfframethickness depth 0pt
|
||||
\hbox to \dimen0
|
||||
{%
|
||||
\hss
|
||||
\vrule width \epsfframethickness
|
||||
\kern \epsfframemargin
|
||||
\vbox {\kern \epsfframemargin \box0 \kern \epsfframemargin }%
|
||||
\kern \epsfframemargin
|
||||
\vrule width \epsfframethickness
|
||||
\hss
|
||||
}% end hbox
|
||||
\hrule height 0pt depth \epsfframethickness
|
||||
}% end vbox
|
||||
}%
|
||||
%
|
||||
\def\epsfsetgraph#1%
|
||||
{%
|
||||
%
|
||||
% Make the vbox and stick in a \special that the DVI driver can
|
||||
% parse. \vfil and \hfil are used to place the \special origin at
|
||||
% the lower-left corner of the vbox. \epsfspecial can be redefined
|
||||
% to produce alternate \special syntaxes.
|
||||
%
|
||||
\leavevmode
|
||||
\hbox{% so we can put this in \begin{center}...\end{center}
|
||||
\ifepsfframe\expandafter\epsfframe\fi
|
||||
{\vbox to\epsfysize
|
||||
{%
|
||||
\ifepsfshow
|
||||
% output \special{} at lower-left corner of figure box
|
||||
\vfil
|
||||
\hbox to \epsfxsize{\epsfspecial{#1}\hfil}%
|
||||
\else
|
||||
\vfil
|
||||
\hbox to\epsfxsize{%
|
||||
\hss
|
||||
\ifepsfshowfilename
|
||||
{%
|
||||
\epsfframemargin=3pt % local change of margin
|
||||
\epsfframe{{\tt #1}}%
|
||||
}%
|
||||
\fi
|
||||
\hss
|
||||
}%
|
||||
\vfil
|
||||
\fi
|
||||
}%
|
||||
}}%
|
||||
%
|
||||
% Reset \epsfxsize and \epsfysize, as documented above.
|
||||
%
|
||||
\global\epsfxsize=0pt
|
||||
\global\epsfysize=0pt
|
||||
}%
|
||||
%
|
||||
% Now we have to calculate the scale and offset values to use.
|
||||
% First we compute the natural sizes.
|
||||
%
|
||||
\def\epsfsetsize
|
||||
{%
|
||||
\epsfrsize=\epsfury\pspoints
|
||||
\advance\epsfrsize by-\epsflly\pspoints
|
||||
\epsftsize=\epsfurx\pspoints
|
||||
\advance\epsftsize by-\epsfllx\pspoints
|
||||
%
|
||||
% If `epsfxsize' is 0, we default to the natural size of the picture.
|
||||
% Otherwise we scale the graph to be \epsfxsize wide.
|
||||
%
|
||||
\epsfxsize=\epsfsize{\epsftsize}{\epsfrsize}%
|
||||
\ifnum \epsfxsize=0
|
||||
\ifnum \epsfysize=0
|
||||
\epsfxsize=\epsftsize
|
||||
\epsfysize=\epsfrsize
|
||||
\epsfrsize=0pt
|
||||
%
|
||||
% We have a sticky problem here: TeX doesn't do floating point arithmetic!
|
||||
% Our goal is to compute y = rx/t. The following loop does this reasonably
|
||||
% fast, with an error of at most about 16 sp (about 1/4000 pt).
|
||||
%
|
||||
\else
|
||||
\epsftmp=\epsftsize \divide\epsftmp\epsfrsize
|
||||
\epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
|
||||
\multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
|
||||
\epsftmp=\epsfysize
|
||||
\loop \advance\epsftsize\epsftsize \divide\epsftmp 2
|
||||
\ifnum \epsftmp>0
|
||||
\ifnum \epsftsize<\epsfrsize
|
||||
\else
|
||||
\advance\epsftsize-\epsfrsize \advance\epsfxsize\epsftmp
|
||||
\fi
|
||||
\repeat
|
||||
\epsfrsize=0pt
|
||||
\fi
|
||||
\else
|
||||
\ifnum \epsfysize=0
|
||||
\epsftmp=\epsfrsize \divide\epsftmp\epsftsize
|
||||
\epsfysize=\epsfxsize \multiply\epsfysize\epsftmp
|
||||
\multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
|
||||
\epsftmp=\epsfxsize
|
||||
\loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
|
||||
\ifnum \epsftmp>0
|
||||
\ifnum \epsfrsize<\epsftsize
|
||||
\else
|
||||
\advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp
|
||||
\fi
|
||||
\repeat
|
||||
\epsfrsize=0pt
|
||||
\else
|
||||
\epsfrsize=\epsfysize
|
||||
\fi
|
||||
\fi
|
||||
}%
|
||||
%
|
||||
% Issue some status messages if the user requested them
|
||||
%
|
||||
\def\epsfstatus#1{% arg = filename
|
||||
\ifepsfverbose
|
||||
\immediate\write16{#1: BoundingBox:
|
||||
llx = \epsfllx\space lly = \epsflly\space
|
||||
urx = \epsfurx\space ury = \epsfury\space}%
|
||||
\immediate\write16{#1: scaled width = \the\epsfxsize\space
|
||||
scaled height = \the\epsfysize}%
|
||||
\fi
|
||||
}%
|
||||
%
|
||||
% We still need to define the tricky \epsfaux macro. This requires
|
||||
% a couple of magic constants for comparison purposes.
|
||||
%
|
||||
{\catcode`\%=12 \global\let\epsfpercent=%\global\def\epsfbblit{%BoundingBox}}%
|
||||
\global\def\epsfatend{(atend)}%
|
||||
%
|
||||
% So we're ready to check for `%BoundingBox:' and to grab the
|
||||
% values if they are found.
|
||||
%
|
||||
% If we find a line
|
||||
%
|
||||
% %%BoundingBox: (atend)
|
||||
%
|
||||
% then we ignore it, but set a flag to force parsing all of the
|
||||
% file, so the last %%BoundingBox parsed will be the one used. This
|
||||
% is necessary, because EPS files can themselves contain other EPS
|
||||
% files with their own %%BoundingBox comments.
|
||||
%
|
||||
% If we find a line
|
||||
%
|
||||
% %%BoundingBox: llx lly urx ury
|
||||
%
|
||||
% then we save the 4 values in \epsfllx, \epsflly, \epsfurx, \epsfury.
|
||||
% Then, if we have not previously parsed an (atend), we flag completion
|
||||
% and can stop reading the file. Otherwise, we must keep on reading
|
||||
% to end of file so that we find the values on the LAST %%BoundingBox.
|
||||
\long\def\epsfaux#1#2:#3\\%
|
||||
{%
|
||||
\def\testit{#2}% % save second character up to just before colon
|
||||
\ifx#1\epsfpercent % then first char is percent (quick test)
|
||||
\ifx\testit\epsfbblit % then (slow test) we have %%BoundingBox
|
||||
\epsfgrab #3 . . . \\%
|
||||
\ifx\epsfllx\epsfatend % then ignore %%BoundingBox: (atend)
|
||||
\global\epsfatendtrue
|
||||
\else % else found %%BoundingBox: llx lly urx ury
|
||||
\ifepsfatend % then keep parsing ALL %%BoundingBox lines
|
||||
\else % else stop after first one parsed
|
||||
\epsffileokfalse
|
||||
\fi
|
||||
\global\epsfbbfoundtrue
|
||||
\fi
|
||||
\fi
|
||||
\fi
|
||||
}%
|
||||
%
|
||||
% Here we grab the values and stuff them in the appropriate definitions.
|
||||
%
|
||||
\def\epsfempty{}%
|
||||
\def\epsfgrab #1 #2 #3 #4 #5\\{%
|
||||
\global\def\epsfllx{#1}\ifx\epsfllx\epsfempty
|
||||
\epsfgrab #2 #3 #4 #5 .\\\else
|
||||
\global\def\epsflly{#2}%
|
||||
\global\def\epsfurx{#3}\global\def\epsfury{#4}\fi
|
||||
}%
|
||||
%
|
||||
% We default the epsfsize macro.
|
||||
%
|
||||
\def\epsfsize#1#2{\epsfxsize}%
|
||||
%
|
||||
% Finally, another definition for compatibility with older macros.
|
||||
%
|
||||
\let\epsffile=\epsfbox
|
||||
\endinput
|
1373
texinfo/doc/info-stnd.texi
Normal file
1373
texinfo/doc/info-stnd.texi
Normal file
File diff suppressed because it is too large
Load Diff
911
texinfo/doc/info.texi
Normal file
911
texinfo/doc/info.texi
Normal file
@ -0,0 +1,911 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@comment %**start of header
|
||||
@setfilename info.info
|
||||
@settitle Info 1.0
|
||||
@comment %**end of header
|
||||
@comment $Id: info.texi,v 1.1 1998/03/23 04:42:12 law Exp $
|
||||
|
||||
@dircategory Texinfo documentation system
|
||||
@direntry
|
||||
* Info: (info). Documentation browsing system.
|
||||
@end direntry
|
||||
|
||||
@ifinfo
|
||||
This file describes how to use Info,
|
||||
the on-line, menu-driven GNU documentation system.
|
||||
|
||||
Copyright (C) 1989, 92, 96, 97 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
@ignore
|
||||
Permission is granted to process this file through TeX and print the
|
||||
results, provided the printed document carries copying permission
|
||||
notice identical to this one except for the removal of this paragraph
|
||||
(this paragraph not being relevant to the printed manual).
|
||||
|
||||
@end ignore
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the entire
|
||||
resulting derived work is distributed under the terms of a permission
|
||||
notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation approved
|
||||
by the Free Software Foundation.
|
||||
@end ifinfo
|
||||
|
||||
@titlepage
|
||||
@title Info
|
||||
@subtitle The online, menu-driven GNU documentation system
|
||||
@author Brian Fox
|
||||
@page
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 1989, 1992, 1993, 1996, 1997 Free Software
|
||||
Foundation, Inc.
|
||||
@sp 2
|
||||
|
||||
Published by the Free Software Foundation @*
|
||||
59 Temple Place - Suite 330 @*
|
||||
Boston, MA 02111-1307, USA.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the entire
|
||||
resulting derived work is distributed under the terms of a permission
|
||||
notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation approved
|
||||
by the Free Software Foundation.
|
||||
@end titlepage
|
||||
|
||||
@ifinfo
|
||||
@node Top, Getting Started, , (dir)
|
||||
@top Info: An Introduction
|
||||
|
||||
Info is a program for reading documentation, which you are using now.
|
||||
|
||||
To learn how to use Info, type the command @kbd{h}. It brings you
|
||||
to a programmed instruction sequence.
|
||||
|
||||
@c Need to make sure that `Info-help' goes to the right node,
|
||||
@c which is the first node of the first chapter. (It should.)
|
||||
@c (Info-find-node "info"
|
||||
@c (if (< (window-height) 23)
|
||||
@c "Help-Small-Screen"
|
||||
@c "Help")))
|
||||
|
||||
To learn advanced Info commands, type @kbd{n} twice. This brings you to
|
||||
@cite{Info for Experts}, skipping over the `Getting Started' chapter.
|
||||
@end ifinfo
|
||||
|
||||
@menu
|
||||
* Getting Started:: Getting started using an Info reader.
|
||||
* Advanced Info:: Advanced commands within Info.
|
||||
* Create an Info File:: How to make your own Info file.
|
||||
* The Standalone Info Program: (info-stnd.info).
|
||||
@end menu
|
||||
|
||||
@node Getting Started, Advanced Info, Top, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Getting Started
|
||||
|
||||
This first part of the Info manual describes how to get around inside
|
||||
of Info. The second part of the manual describes various advanced
|
||||
Info commands, and how to write an Info as distinct from a Texinfo
|
||||
file. The third part is about how to generate Info files from
|
||||
Texinfo files.
|
||||
|
||||
@iftex
|
||||
This manual is primarily designed for use on a computer, so that you can
|
||||
try Info commands while reading about them. Reading it on paper is less
|
||||
effective, since you must take it on faith that the commands described
|
||||
really do what the manual says. By all means go through this manual now
|
||||
that you have it; but please try going through the on-line version as
|
||||
well.
|
||||
|
||||
There are two ways of looking at the online version of this manual:
|
||||
|
||||
@enumerate
|
||||
@item
|
||||
Type @code{info} at your shell's command line. This approach uses a
|
||||
small stand-alone program designed just to read Info files.
|
||||
|
||||
@item
|
||||
Type @code{emacs} at the command line; then type @kbd{C-h i} (Control
|
||||
@kbd{h}, followed by @kbd{i}). This approach uses the Info mode of the
|
||||
Emacs program, an editor with many other capabilities.
|
||||
@end enumerate
|
||||
|
||||
In either case, then type @kbd{mInfo} (just the letters), followed by
|
||||
@key{RET}---the ``Return'' or ``Enter'' key. At this point, you should
|
||||
be ready to follow the instructions in this manual as you read them on
|
||||
the screen.
|
||||
@c FIXME! (pesch@cygnus.com, 14 dec 1992)
|
||||
@c Is it worth worrying about what-if the beginner goes to somebody
|
||||
@c else's Emacs session, which already has an Info running in the middle
|
||||
@c of something---in which case these simple instructions won't work?
|
||||
@end iftex
|
||||
|
||||
@menu
|
||||
* Help-Small-Screen:: Starting Info on a Small Screen
|
||||
* Help:: How to use Info
|
||||
* Help-P:: Returning to the Previous node
|
||||
* Help-^L:: The Space, Rubout, B and ^L commands.
|
||||
* Help-M:: Menus
|
||||
* Help-Adv:: Some advanced Info commands
|
||||
* Help-Q:: Quitting Info
|
||||
@end menu
|
||||
|
||||
@node Help-Small-Screen, Help, , Getting Started
|
||||
@comment node-name, next, previous, up
|
||||
@section Starting Info on a Small Screen
|
||||
|
||||
@iftex
|
||||
(In Info, you only see this section if your terminal has a small
|
||||
number of lines; most readers pass by it without seeing it.)
|
||||
@end iftex
|
||||
|
||||
Since your terminal has an unusually small number of lines on its
|
||||
screen, it is necessary to give you special advice at the beginning.
|
||||
|
||||
If you see the text @samp{--All----} at near the bottom right corner
|
||||
of the screen, it means the entire text you are looking at fits on the
|
||||
screen. If you see @samp{--Top----} instead, it means that there is
|
||||
more text below that does not fit. To move forward through the text
|
||||
and see another screen full, press the Space bar, @key{SPC}. To move
|
||||
back up, press the key labeled @samp{Backspace} or @key{Delete}.
|
||||
|
||||
@ifinfo
|
||||
Here are 40 lines of junk, so you can try Spaces and Deletes and
|
||||
see what they do. At the end are instructions of what you should do
|
||||
next.
|
||||
|
||||
This is line 17 @*
|
||||
This is line 18 @*
|
||||
This is line 19 @*
|
||||
This is line 20 @*
|
||||
This is line 21 @*
|
||||
This is line 22 @*
|
||||
This is line 23 @*
|
||||
This is line 24 @*
|
||||
This is line 25 @*
|
||||
This is line 26 @*
|
||||
This is line 27 @*
|
||||
This is line 28 @*
|
||||
This is line 29 @*
|
||||
This is line 30 @*
|
||||
This is line 31 @*
|
||||
This is line 32 @*
|
||||
This is line 33 @*
|
||||
This is line 34 @*
|
||||
This is line 35 @*
|
||||
This is line 36 @*
|
||||
This is line 37 @*
|
||||
This is line 38 @*
|
||||
This is line 39 @*
|
||||
This is line 40 @*
|
||||
This is line 41 @*
|
||||
This is line 42 @*
|
||||
This is line 43 @*
|
||||
This is line 44 @*
|
||||
This is line 45 @*
|
||||
This is line 46 @*
|
||||
This is line 47 @*
|
||||
This is line 48 @*
|
||||
This is line 49 @*
|
||||
This is line 50 @*
|
||||
This is line 51 @*
|
||||
This is line 52 @*
|
||||
This is line 53 @*
|
||||
This is line 54 @*
|
||||
This is line 55 @*
|
||||
This is line 56 @*
|
||||
|
||||
If you have managed to get here, go back to the beginning with
|
||||
Delete, and come back here again, then you understand Space and
|
||||
Delete. So now type an @kbd{n} ---just one character; don't type
|
||||
the quotes and don't type the Return key afterward--- to
|
||||
get to the normal start of the course.
|
||||
@end ifinfo
|
||||
|
||||
@node Help, Help-P, Help-Small-Screen, Getting Started
|
||||
@comment node-name, next, previous, up
|
||||
@section How to use Info
|
||||
|
||||
You are talking to the program Info, for reading documentation.
|
||||
|
||||
Right now you are looking at one @dfn{Node} of Information.
|
||||
A node contains text describing a specific topic at a specific
|
||||
level of detail. This node's topic is ``how to use Info''.
|
||||
|
||||
The top line of a node is its @dfn{header}. This node's header (look at
|
||||
it now) says that it is the node named @samp{Help} in the file
|
||||
@file{info}. It says that the @samp{Next} node after this one is the node
|
||||
called @samp{Help-P}. An advanced Info command lets you go to any node
|
||||
whose name you know.
|
||||
|
||||
Besides a @samp{Next}, a node can have a @samp{Previous} or an @samp{Up}.
|
||||
This node has a @samp{Previous} but no @samp{Up}, as you can see.
|
||||
|
||||
Now it is time to move on to the @samp{Next} node, named @samp{Help-P}.
|
||||
|
||||
>> Type @samp{n} to move there. Type just one character;
|
||||
do not type the quotes and do not type a @key{RET} afterward.
|
||||
|
||||
@samp{>>} in the margin means it is really time to try a command.
|
||||
|
||||
@node Help-P, Help-^L, Help, Getting Started
|
||||
@comment node-name, next, previous, up
|
||||
@section Returning to the Previous node
|
||||
|
||||
This node is called @samp{Help-P}. The @samp{Previous} node, as you see,
|
||||
is @samp{Help}, which is the one you just came from using the @kbd{n}
|
||||
command. Another @kbd{n} command now would take you to the next
|
||||
node, @samp{Help-^L}.
|
||||
|
||||
>> But do not do that yet. First, try the @kbd{p} command, which takes
|
||||
you to the @samp{Previous} node. When you get there, you can do an
|
||||
@kbd{n} again to return here.
|
||||
|
||||
This all probably seems insultingly simple so far, but @emph{do not} be
|
||||
led into skimming. Things will get more complicated soon. Also,
|
||||
do not try a new command until you are told it is time to. Otherwise,
|
||||
you may make Info skip past an important warning that was coming up.
|
||||
|
||||
>> Now do an @kbd{n} to get to the node @samp{Help-^L} and learn more.
|
||||
|
||||
@node Help-^L, Help-M, Help-P, Getting Started
|
||||
@comment node-name, next, previous, up
|
||||
@section The Space, Delete, B and ^L commands.
|
||||
|
||||
This node's header tells you that you are now at node @samp{Help-^L}, and
|
||||
that @kbd{p} would get you back to @samp{Help-P}. The node's title is
|
||||
underlined; it says what the node is about (most nodes have titles).
|
||||
|
||||
This is a big node and it does not all fit on your display screen.
|
||||
You can tell that there is more that is not visible because you
|
||||
can see the string @samp{--Top-----} rather than @samp{--All----} near
|
||||
the bottom right corner of the screen.
|
||||
|
||||
The Space, Delete and @kbd{B} commands exist to allow you to ``move
|
||||
around'' in a node that does not all fit on the screen at once.
|
||||
Space moves forward, to show what was below the bottom of the screen.
|
||||
Delete moves backward, to show what was above the top of the screen
|
||||
(there is not anything above the top until you have typed some spaces).
|
||||
|
||||
>> Now try typing a Space (afterward, type a Delete to return here).
|
||||
|
||||
When you type the space, the two lines that were at the bottom of
|
||||
the screen appear at the top, followed by more lines. Delete takes
|
||||
the two lines from the top and moves them to the bottom,
|
||||
@emph{usually}, but if there are not a full screen's worth of lines
|
||||
above them they may not make it all the way to the bottom.
|
||||
|
||||
If you type Space when there is no more to see, it rings the
|
||||
bell and otherwise does nothing. The same goes for Delete when
|
||||
the header of the node is visible.
|
||||
|
||||
If your screen is ever garbaged, you can tell Info to print it out
|
||||
again by typing @kbd{C-l} (@kbd{Control-L}, that is---hold down ``Control'' and
|
||||
type an @key{L} or @kbd{l}).
|
||||
|
||||
>> Type @kbd{C-l} now.
|
||||
|
||||
To move back to the beginning of the node you are on, you can type
|
||||
a lot of Deletes. You can also type simply @kbd{b} for beginning.
|
||||
>> Try that now. (We have put in enough verbiage to push this past
|
||||
the first screenful, but screens are so big nowadays that perhaps it
|
||||
isn't enough. You may need to shrink your Emacs or Info window.)
|
||||
Then come back, with Spaces.
|
||||
|
||||
If your screen is very tall, all of this node might fit at once.
|
||||
In that case, "b" won't do anything. Sorry; what can we do?
|
||||
|
||||
You have just learned a considerable number of commands. If you
|
||||
want to use one but have trouble remembering which, you should type
|
||||
a @key{?} which prints out a brief list of commands. When you are
|
||||
finished looking at the list, make it go away by pressing @key{SPC}
|
||||
repeatedly.
|
||||
|
||||
>> Type a @key{?} now. Press @key{SPC} to see consecutive screenfuls of
|
||||
>> the list until finished.
|
||||
|
||||
From now on, you will encounter large nodes without warning, and
|
||||
will be expected to know how to use Space and Delete to move
|
||||
around in them without being told. Since not all terminals have
|
||||
the same size screen, it would be impossible to warn you anyway.
|
||||
|
||||
>> Now type @kbd{n} to see the description of the @kbd{m} command.
|
||||
|
||||
@node Help-M, Help-Adv, Help-^L, Getting Started
|
||||
@comment node-name, next, previous, up
|
||||
@section Menus
|
||||
|
||||
Menus and the @kbd{m} command
|
||||
|
||||
With only the @kbd{n} and @kbd{p} commands for moving between nodes, nodes
|
||||
are restricted to a linear sequence. Menus allow a branching
|
||||
structure. A menu is a list of other nodes you can move to. It is
|
||||
actually just part of the text of the node formatted specially so that
|
||||
Info can interpret it. The beginning of a menu is always identified
|
||||
by a line which starts with @samp{* Menu:}. A node contains a menu if and
|
||||
only if it has a line in it which starts that way. The only menu you
|
||||
can use at any moment is the one in the node you are in. To use a
|
||||
menu in any other node, you must move to that node first.
|
||||
|
||||
After the start of the menu, each line that starts with a @samp{*}
|
||||
identifies one subtopic. The line usually contains a brief name
|
||||
for the subtopic (followed by a @samp{:}), the name of the node that talks
|
||||
about that subtopic, and optionally some further description of the
|
||||
subtopic. Lines in the menu that do not start with a @samp{*} have no
|
||||
special meaning---they are only for the human reader's benefit and do
|
||||
not define additional subtopics. Here is an example:
|
||||
|
||||
@example
|
||||
* Foo: FOO's Node This tells about FOO
|
||||
@end example
|
||||
|
||||
The subtopic name is Foo, and the node describing it is @samp{FOO's Node}.
|
||||
The rest of the line is just for the reader's Information.
|
||||
[[ But this line is not a real menu item, simply because there is
|
||||
no line above it which starts with @samp{* Menu:}.]]
|
||||
|
||||
When you use a menu to go to another node (in a way that will be
|
||||
described soon), what you specify is the subtopic name, the first
|
||||
thing in the menu line. Info uses it to find the menu line, extracts
|
||||
the node name from it, and goes to that node. The reason that there
|
||||
is both a subtopic name and a node name is that the node name must be
|
||||
meaningful to the computer and may therefore have to be ugly looking.
|
||||
The subtopic name can be chosen just to be convenient for the user to
|
||||
specify. Often the node name is convenient for the user to specify
|
||||
and so both it and the subtopic name are the same. There is an
|
||||
abbreviation for this:
|
||||
|
||||
@example
|
||||
* Foo:: This tells about FOO
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
This means that the subtopic name and node name are the same; they are
|
||||
both @samp{Foo}.
|
||||
|
||||
>> Now use Spaces to find the menu in this node, then come back to
|
||||
the front with a @kbd{b} and some Spaces. As you see, a menu is
|
||||
actually visible in its node. If you cannot find a menu in a node
|
||||
by looking at it, then the node does not have a menu and the
|
||||
@kbd{m} command is not available.
|
||||
|
||||
The command to go to one of the subnodes is @kbd{m}---but @emph{do
|
||||
not do it yet!} Before you use @kbd{m}, you must understand the
|
||||
difference between commands and arguments. So far, you have learned
|
||||
several commands that do not need arguments. When you type one, Info
|
||||
processes it and is instantly ready for another command. The @kbd{m}
|
||||
command is different: it is incomplete without the @dfn{name of the
|
||||
subtopic}. Once you have typed @kbd{m}, Info tries to read the
|
||||
subtopic name.
|
||||
|
||||
Now look for the line containing many dashes near the bottom of the
|
||||
screen. There is one more line beneath that one, but usually it is
|
||||
blank. If it is empty, Info is ready for a command, such as @kbd{n}
|
||||
or @kbd{b} or Space or @kbd{m}. If that line contains text ending
|
||||
in a colon, it mean Info is trying to read the @dfn{argument} to a
|
||||
command. At such times, commands do not work, because Info tries to
|
||||
use them as the argument. You must either type the argument and
|
||||
finish the command you started, or type @kbd{Control-g} to cancel the
|
||||
command. When you have done one of those things, the line becomes
|
||||
blank again.
|
||||
|
||||
The command to go to a subnode via a menu is @kbd{m}. After you type
|
||||
the @kbd{m}, the line at the bottom of the screen says @samp{Menu item: }.
|
||||
You must then type the name of the subtopic you want, and end it with
|
||||
a @key{RET}.
|
||||
|
||||
You can abbreviate the subtopic name. If the abbreviation is not
|
||||
unique, the first matching subtopic is chosen. Some menus put
|
||||
the shortest possible abbreviation for each subtopic name in capital
|
||||
letters, so you can see how much you need to type. It does not
|
||||
matter whether you use upper case or lower case when you type the
|
||||
subtopic. You should not put any spaces at the end, or inside of the
|
||||
item name, except for one space where a space appears in the item in
|
||||
the menu.
|
||||
|
||||
You can also use the @dfn{completion} feature to help enter the subtopic
|
||||
name. If you type the Tab key after entering part of a name, it will
|
||||
magically fill in more of the name---as much as follows uniquely from
|
||||
what you have entered.
|
||||
|
||||
If you move the cursor to one of the menu subtopic lines, then you do
|
||||
not need to type the argument: you just type a Return, and it stands for
|
||||
the subtopic of the line you are on.
|
||||
|
||||
Here is a menu to give you a chance to practice.
|
||||
|
||||
* Menu: The menu starts here.
|
||||
|
||||
This menu gives you three ways of going to one place, Help-FOO.
|
||||
|
||||
* Foo: Help-FOO. A node you can visit for fun.@*
|
||||
* Bar: Help-FOO. Strange! two ways to get to the same place.@*
|
||||
* Help-FOO:: And yet another!@*
|
||||
|
||||
|
||||
>> Now type just an @kbd{m} and see what happens:
|
||||
|
||||
Now you are ``inside'' an @kbd{m} command. Commands cannot be used
|
||||
now; the next thing you will type must be the name of a subtopic.
|
||||
|
||||
You can change your mind about doing the @kbd{m} by typing Control-g.
|
||||
|
||||
>> Try that now; notice the bottom line clear.
|
||||
|
||||
>> Then type another @kbd{m}.
|
||||
|
||||
>> Now type @samp{BAR} item name. Do not type Return yet.
|
||||
|
||||
While you are typing the item name, you can use the Delete key to
|
||||
cancel one character at a time if you make a mistake.
|
||||
|
||||
>> Type one to cancel the @samp{R}. You could type another @samp{R} to
|
||||
replace it. You do not have to, since @samp{BA} is a valid abbreviation.
|
||||
|
||||
>> Now you are ready to go. Type a @key{RET}.
|
||||
|
||||
After visiting Help-FOO, you should return here.
|
||||
|
||||
>> Type @kbd{n} to see more commands.
|
||||
|
||||
@c If a menu appears at the end of this node, remove it.
|
||||
@c It is an accident of the menu updating command.
|
||||
|
||||
Here is another way to get to Help-FOO, a menu. You can ignore this
|
||||
if you want, or else try it (but then please come back to here).
|
||||
|
||||
@menu
|
||||
* Help-FOO::
|
||||
@end menu
|
||||
|
||||
@node Help-FOO, , , Help-M
|
||||
@comment node-name, next, previous, up
|
||||
@subsection The @kbd{u} command
|
||||
|
||||
Congratulations! This is the node @samp{Help-FOO}. Unlike the other
|
||||
nodes you have seen, this one has an @samp{Up}: @samp{Help-M}, the node you
|
||||
just came from via the @kbd{m} command. This is the usual
|
||||
convention---the nodes you reach from a menu have @samp{Up} nodes that lead
|
||||
back to the menu. Menus move Down in the tree, and @samp{Up} moves Up.
|
||||
@samp{Previous}, on the other hand, is usually used to ``stay on the same
|
||||
level but go backwards''
|
||||
|
||||
You can go back to the node @samp{Help-M} by typing the command
|
||||
@kbd{u} for ``Up''. That puts you at the @emph{front} of the
|
||||
node---to get back to where you were reading you have to type
|
||||
some @key{SPC}s.
|
||||
|
||||
>> Now type @kbd{u} to move back up to @samp{Help-M}.
|
||||
|
||||
@node Help-Adv, Help-Q, Help-M, Getting Started
|
||||
@comment node-name, next, previous, up
|
||||
@section Some advanced Info commands
|
||||
|
||||
The course is almost over, so please stick with it to the end.
|
||||
|
||||
If you have been moving around to different nodes and wish to
|
||||
retrace your steps, the @kbd{l} command (@kbd{l} for @dfn{last}) will
|
||||
do that, one node-step at a time. As you move from node to node, Info
|
||||
records the nodes where you have been in a special history list. The
|
||||
@kbd{l} command revisits nodes in the history list; each successive
|
||||
@kbd{l} command moves one step back through the history.
|
||||
|
||||
If you have been following directions, ad @kbd{l} command now will get
|
||||
you back to @samp{Help-M}. Another @kbd{l} command would undo the
|
||||
@kbd{u} and get you back to @samp{Help-FOO}. Another @kbd{l} would undo
|
||||
the @kbd{m} and get you back to @samp{Help-M}.
|
||||
|
||||
>> Try typing three @kbd{l}'s, pausing in between to see what each
|
||||
@kbd{l} does.
|
||||
|
||||
Then follow directions again and you will end up back here.
|
||||
|
||||
Note the difference between @kbd{l} and @kbd{p}: @kbd{l} moves to
|
||||
where @emph{you} last were, whereas @kbd{p} always moves to the node
|
||||
which the header says is the @samp{Previous} node (from this node, to
|
||||
@samp{Help-M}).
|
||||
|
||||
The @samp{d} command gets you instantly to the Directory node.
|
||||
This node, which is the first one you saw when you entered Info,
|
||||
has a menu which leads (directly, or indirectly through other menus),
|
||||
to all the nodes that exist.
|
||||
|
||||
>> Try doing a @samp{d}, then do an @kbd{l} to return here (yes,
|
||||
@emph{do} return).
|
||||
|
||||
Sometimes, in Info documentation, you will see a cross reference.
|
||||
Cross references look like this: @xref{Help-Cross, Cross}. That is a
|
||||
real, live cross reference which is named @samp{Cross} and points at
|
||||
the node named @samp{Help-Cross}.
|
||||
|
||||
If you wish to follow a cross reference, you must use the @samp{f}
|
||||
command. The @samp{f} must be followed by the cross reference name
|
||||
(in this case, @samp{Cross}). While you enter the name, you can use the
|
||||
Delete key to edit your input. If you change your mind about following
|
||||
any reference, you can use @kbd{Control-g} to cancel the command.
|
||||
|
||||
Completion is available in the @samp{f} command; you can complete among
|
||||
all the cross reference names in the current node by typing a Tab.
|
||||
|
||||
>> Type @samp{f}, followed by @samp{Cross}, and a @key{RET}.
|
||||
|
||||
To get a list of all the cross references in the current node, you can
|
||||
type @kbd{?} after an @samp{f}. The @samp{f} continues to await a
|
||||
cross reference name even after printing the list, so if you don't
|
||||
actually want to follow a reference, you should type a @kbd{Control-g}
|
||||
to cancel the @samp{f}.
|
||||
|
||||
>> Type "f?" to get a list of the cross references in this node. Then
|
||||
type a @kbd{Control-g} and see how the @samp{f} gives up.
|
||||
|
||||
>> Now type @kbd{n} to see the last node of the course.
|
||||
|
||||
@c If a menu appears at the end of this node, remove it.
|
||||
@c It is an accident of the menu updating command.
|
||||
|
||||
@node Help-Cross, , , Help-Adv
|
||||
@comment node-name, next, previous, up
|
||||
@unnumberedsubsec The node reached by the cross reference in Info
|
||||
|
||||
This is the node reached by the cross reference named @samp{Cross}.
|
||||
|
||||
While this node is specifically intended to be reached by a cross
|
||||
reference, most cross references lead to nodes that ``belong''
|
||||
someplace else far away in the structure of Info. So you cannot expect
|
||||
the footnote to have a @samp{Next}, @samp{Previous} or @samp{Up} pointing back to
|
||||
where you came from. In general, the @kbd{l} (el) command is the only
|
||||
way to get back there.
|
||||
|
||||
>> Type @kbd{l} to return to the node where the cross reference was.
|
||||
|
||||
@node Help-Q, , Help-Adv, Getting Started
|
||||
@comment node-name, next, previous, up
|
||||
@section Quitting Info
|
||||
|
||||
To get out of Info, back to what you were doing before, type @kbd{q}
|
||||
for @dfn{Quit}.
|
||||
|
||||
This is the end of the course on using Info. There are some other
|
||||
commands that are meant for experienced users; they are useful, and you
|
||||
can find them by looking in the directory node for documentation on
|
||||
Info. Finding them will be a good exercise in using Info in the usual
|
||||
manner.
|
||||
|
||||
>> Type @samp{d} to go to the Info directory node; then type
|
||||
@samp{mInfo} and Return, to get to the node about Info and
|
||||
see what other help is available.
|
||||
|
||||
@node Advanced Info, Create an Info File, Getting Started, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Info for Experts
|
||||
|
||||
This chapter describes various advanced Info commands, and how to write
|
||||
an Info as distinct from a Texinfo file. (However, in most cases, writing a
|
||||
Texinfo file is better, since you can use it @emph{both} to generate an
|
||||
Info file and to make a printed manual. @xref{Top,, Overview of
|
||||
Texinfo, texinfo, Texinfo: The GNU Documentation Format}.)
|
||||
|
||||
@menu
|
||||
* Expert:: Advanced Info commands: g, s, e, and 1 - 5.
|
||||
* Add:: Describes how to add new nodes to the hierarchy.
|
||||
Also tells what nodes look like.
|
||||
* Menus:: How to add to or create menus in Info nodes.
|
||||
* Cross-refs:: How to add cross-references to Info nodes.
|
||||
* Tags:: How to make tag tables for Info files.
|
||||
* Checking:: Checking an Info File
|
||||
* Emacs Info Variables:: Variables modifying the behavior of Emacs Info.
|
||||
@end menu
|
||||
|
||||
@node Expert, Add, , Advanced Info
|
||||
@comment node-name, next, previous, up
|
||||
@section Advanced Info Commands
|
||||
|
||||
@kbd{g}, @kbd{s}, @kbd{1}, -- @kbd{9}, and @kbd{e}
|
||||
|
||||
If you know a node's name, you can go there by typing @kbd{g}, the
|
||||
name, and @key{RET}. Thus, @kbd{gTop@key{RET}} would go to the node
|
||||
called @samp{Top} in this file (its directory node).
|
||||
@kbd{gExpert@key{RET}} would come back here.
|
||||
|
||||
Unlike @kbd{m}, @kbd{g} does not allow the use of abbreviations.
|
||||
|
||||
To go to a node in another file, you can include the filename in the
|
||||
node name by putting it at the front, in parentheses. Thus,
|
||||
@kbd{g(dir)Top@key{RET}} would go to the Info Directory node, which is
|
||||
node @samp{Top} in the file @file{dir}.
|
||||
|
||||
The node name @samp{*} specifies the whole file. So you can look at
|
||||
all of the current file by typing @kbd{g*@key{RET}} or all of any
|
||||
other file with @kbd{g(FILENAME)@key{RET}}.
|
||||
|
||||
The @kbd{s} command allows you to search a whole file for a string.
|
||||
It switches to the next node if and when that is necessary. You
|
||||
type @kbd{s} followed by the string to search for, terminated by
|
||||
@key{RET}. To search for the same string again, just @kbd{s} followed
|
||||
by @key{RET} will do. The file's nodes are scanned in the order
|
||||
they are in in the file, which has no necessary relationship to the
|
||||
order that they may be in in the tree structure of menus and @samp{next} pointers.
|
||||
But normally the two orders are not very different. In any case,
|
||||
you can always do a @kbd{b} to find out what node you have reached, if
|
||||
the header is not visible (this can happen, because @kbd{s} puts your
|
||||
cursor at the occurrence of the string, not at the beginning of the
|
||||
node).
|
||||
|
||||
If you grudge the system each character of type-in it requires, you
|
||||
might like to use the commands @kbd{1}, @kbd{2}, @kbd{3}, @kbd{4}, ...
|
||||
@kbd{9}. They are short for the @kbd{m} command together with an
|
||||
argument. @kbd{1} goes through the first item in the current node's
|
||||
menu; @kbd{2} goes through the second item, etc.
|
||||
|
||||
If you display supports multiple fonts, and you are using Emacs' Info
|
||||
mode to read Info files, the @samp{*} for the fifth menu item is
|
||||
underlines, and so is the @samp{*} for the ninth item; these underlines
|
||||
make it easy to see at a glance which number to use for an item.
|
||||
|
||||
On ordinary terminals, you won't have underlining. If you need to
|
||||
actually count items, it is better to use @kbd{m} instead, and specify
|
||||
the name.
|
||||
|
||||
The Info command @kbd{e} changes from Info mode to an ordinary
|
||||
Emacs editing mode, so that you can edit the text of the current node.
|
||||
Type @kbd{C-c C-c} to switch back to Info. The @kbd{e} command is allowed
|
||||
only if the variable @code{Info-enable-edit} is non-@code{nil}.
|
||||
|
||||
@node Add, Menus, Expert, Advanced Info
|
||||
@comment node-name, next, previous, up
|
||||
@section Adding a new node to Info
|
||||
|
||||
To add a new topic to the list in the Info directory, you must:
|
||||
@enumerate
|
||||
@item
|
||||
Create some nodes, in some file, to document that topic.
|
||||
@item
|
||||
Put that topic in the menu in the directory. @xref{Menus, Menu}.
|
||||
@end enumerate
|
||||
|
||||
Usually, the way to create the nodes is with Texinfo @pxref{Top,, Overview of
|
||||
Texinfo, texinfo, Texinfo: The GNU Documentation Format}); this has the
|
||||
advantage that you can also make a printed manual from them. However,
|
||||
if hyou want to edit an Info file, here is how.
|
||||
|
||||
The new node can live in an existing documentation file, or in a new
|
||||
one. It must have a @key{^_} character before it (invisible to the
|
||||
user; this node has one but you cannot see it), and it ends with either
|
||||
a @key{^_}, a @key{^L}, or the end of file. Note: If you put in a
|
||||
@key{^L} to end a new node, be sure that there is a @key{^_} after it
|
||||
to start the next one, since @key{^L} cannot @emph{start} a node.
|
||||
Also, a nicer way to make a node boundary be a page boundary as well
|
||||
is to put a @key{^L} @emph{right after} the @key{^_}.
|
||||
|
||||
The @key{^_} starting a node must be followed by a newline or a
|
||||
@key{^L} newline, after which comes the node's header line. The
|
||||
header line must give the node's name (by which Info finds it),
|
||||
and state the names of the @samp{Next}, @samp{Previous}, and @samp{Up} nodes (if
|
||||
there are any). As you can see, this node's @samp{Up} node is the node
|
||||
@samp{Top}, which points at all the documentation for Info. The @samp{Next}
|
||||
node is @samp{Menus}.
|
||||
|
||||
The keywords @dfn{Node}, @dfn{Previous}, @dfn{Up}, and @dfn{Next},
|
||||
may appear in any order, anywhere in the header line, but the
|
||||
recommended order is the one in this sentence. Each keyword must be
|
||||
followed by a colon, spaces and tabs, and then the appropriate name.
|
||||
The name may be terminated with a tab, a comma, or a newline. A space
|
||||
does not end it; node names may contain spaces. The case of letters
|
||||
in the names is insignificant.
|
||||
|
||||
A node name has two forms. A node in the current file is named by
|
||||
what appears after the @samp{Node: } in that node's first line. For
|
||||
example, this node's name is @samp{Add}. A node in another file is
|
||||
named by @samp{(@var{filename})@var{node-within-file}}, as in
|
||||
@samp{(info)Add} for this node. If the file name starts with ``./'',
|
||||
then it is relative to the current directory; otherwise, it is relative
|
||||
starting from the standard Info file directory of your site.
|
||||
The name @samp{(@var{filename})Top} can be abbreviated to just
|
||||
@samp{(@var{filename})}. By convention, the name @samp{Top} is used for
|
||||
the ``highest'' node in any single file---the node whose @samp{Up} points
|
||||
out of the file. The Directory node is @file{(dir)}. The @samp{Top} node
|
||||
of a document file listed in the Directory should have an @samp{Up:
|
||||
(dir)} in it.
|
||||
|
||||
The node name @kbd{*} is special: it refers to the entire file.
|
||||
Thus, @kbd{g*} shows you the whole current file. The use of the
|
||||
node @kbd{*} is to make it possible to make old-fashioned,
|
||||
unstructured files into nodes of the tree.
|
||||
|
||||
The @samp{Node:} name, in which a node states its own name, must not
|
||||
contain a filename, since Info when searching for a node does not
|
||||
expect one to be there. The @samp{Next}, @samp{Previous} and @samp{Up} names may
|
||||
contain them. In this node, since the @samp{Up} node is in the same file,
|
||||
it was not necessary to use one.
|
||||
|
||||
Note that the nodes in this file have a file name in the header
|
||||
line. The file names are ignored by Info, but they serve as comments
|
||||
to help identify the node for the user.
|
||||
|
||||
@node Menus, Cross-refs, Add, Advanced Info
|
||||
@comment node-name, next, previous, up
|
||||
@section How to Create Menus
|
||||
|
||||
Any node in the Info hierarchy may have a @dfn{menu}---a list of subnodes.
|
||||
The @kbd{m} command searches the current node's menu for the topic which it
|
||||
reads from the terminal.
|
||||
|
||||
A menu begins with a line starting with @samp{* Menu:}. The rest of the
|
||||
line is a comment. After the starting line, every line that begins
|
||||
with a @samp{* } lists a single topic. The name of the topic--the
|
||||
argument that the user must give to the @kbd{m} command to select this
|
||||
topic---comes right after the star and space, and is followed by a
|
||||
colon, spaces and tabs, and the name of the node which discusses that
|
||||
topic. The node name, like node names following @samp{Next}, @samp{Previous}
|
||||
and @samp{Up}, may be terminated with a tab, comma, or newline; it may also
|
||||
be terminated with a period.
|
||||
|
||||
If the node name and topic name are the same, then rather than
|
||||
giving the name twice, the abbreviation @samp{* NAME::} may be used
|
||||
(and should be used, whenever possible, as it reduces the visual
|
||||
clutter in the menu).
|
||||
|
||||
It is considerate to choose the topic names so that they differ
|
||||
from each other very near the beginning---this allows the user to type
|
||||
short abbreviations. In a long menu, it is a good idea to capitalize
|
||||
the beginning of each item name which is the minimum acceptable
|
||||
abbreviation for it (a long menu is more than 5 or so entries).
|
||||
|
||||
The nodes listed in a node's menu are called its ``subnodes'', and
|
||||
it is their ``superior''. They should each have an @samp{Up:} pointing at
|
||||
the superior. It is often useful to arrange all or most of the
|
||||
subnodes in a sequence of @samp{Next} and @samp{Previous} pointers so that someone who
|
||||
wants to see them all need not keep revisiting the Menu.
|
||||
|
||||
The Info Directory is simply the menu of the node @samp{(dir)Top}---that
|
||||
is, node @samp{Top} in file @file{.../info/dir}. You can put new entries
|
||||
in that menu just like any other menu. The Info Directory is @emph{not} the
|
||||
same as the file directory called @file{info}. It happens that many of
|
||||
Info's files live on that file directory, but they do not have to; and
|
||||
files on that directory are not automatically listed in the Info
|
||||
Directory node.
|
||||
|
||||
Also, although the Info node graph is claimed to be a ``hierarchy'',
|
||||
in fact it can be @emph{any} directed graph. Shared structures and
|
||||
pointer cycles are perfectly possible, and can be used if they are
|
||||
appropriate to the meaning to be expressed. There is no need for all
|
||||
the nodes in a file to form a connected structure. In fact, this file
|
||||
has two connected components. You are in one of them, which is under
|
||||
the node @samp{Top}; the other contains the node @samp{Help} which the
|
||||
@kbd{h} command goes to. In fact, since there is no garbage
|
||||
collector, nothing terrible happens if a substructure is not pointed
|
||||
to, but such a substructure is rather useless since nobody can
|
||||
ever find out that it exists.
|
||||
|
||||
@node Cross-refs, Tags, Menus, Advanced Info
|
||||
@comment node-name, next, previous, up
|
||||
@section Creating Cross References
|
||||
|
||||
A cross reference can be placed anywhere in the text, unlike a menu
|
||||
item which must go at the front of a line. A cross reference looks
|
||||
like a menu item except that it has @samp{*note} instead of @kbd{*}.
|
||||
It @emph{cannot} be terminated by a @samp{)}, because @samp{)}'s are
|
||||
so often part of node names. If you wish to enclose a cross reference
|
||||
in parentheses, terminate it with a period first. Here are two
|
||||
examples of cross references pointers:
|
||||
|
||||
@example
|
||||
*Note details: commands. (See *note 3: Full Proof.)
|
||||
@end example
|
||||
|
||||
They are just examples. The places they ``lead to'' do not really exist!
|
||||
|
||||
@node Tags, Checking, Cross-refs, Advanced Info
|
||||
@comment node-name, next, previous, up
|
||||
@section Tag Tables for Info Files
|
||||
|
||||
You can speed up the access to nodes of a large Info file by giving
|
||||
it a tag table. Unlike the tag table for a program, the tag table for
|
||||
an Info file lives inside the file itself and is used
|
||||
automatically whenever Info reads in the file.
|
||||
|
||||
To make a tag table, go to a node in the file using Emacs Info mode and type
|
||||
@kbd{M-x Info-tagify}. Then you must use @kbd{C-x C-s} to save the
|
||||
file.
|
||||
|
||||
Once the Info file has a tag table, you must make certain it is up
|
||||
to date. If, as a result of deletion of text, any node moves back
|
||||
more than a thousand characters in the file from the position
|
||||
recorded in the tag table, Info will no longer be able to find that
|
||||
node. To update the tag table, use the @code{Info-tagify} command again.
|
||||
|
||||
An Info file tag table appears at the end of the file and looks like
|
||||
this:
|
||||
|
||||
@example
|
||||
^_
|
||||
Tag Table:
|
||||
File: info, Node: Cross-refs^?21419
|
||||
File: info, Node: Tags^?22145
|
||||
^_
|
||||
End Tag Table
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Note that it contains one line per node, and this line contains
|
||||
the beginning of the node's header (ending just after the node name),
|
||||
a Delete character, and the character position in the file of the
|
||||
beginning of the node.
|
||||
|
||||
@node Checking, Emacs Info Variables, Tags, Advanced Info
|
||||
@comment node-name, next, previous, up
|
||||
@section Checking an Info File
|
||||
|
||||
When creating an Info file, it is easy to forget the name of a node
|
||||
when you are making a pointer to it from another node. If you put in
|
||||
the wrong name for a node, this is not detected until someone
|
||||
tries to go through the pointer using Info. Verification of the Info
|
||||
file is an automatic process which checks all pointers to nodes and
|
||||
reports any pointers which are invalid. Every @samp{Next}, @samp{Previous}, and
|
||||
@samp{Up} is checked, as is every menu item and every cross reference. In
|
||||
addition, any @samp{Next} which does not have a @samp{Previous} pointing back is
|
||||
reported. Only pointers within the file are checked, because checking
|
||||
pointers to other files would be terribly slow. But those are usually
|
||||
few.
|
||||
|
||||
To check an Info file, do @kbd{M-x Info-validate} while looking at
|
||||
any node of the file with Emacs Info mode.
|
||||
|
||||
@node Emacs Info Variables, , Checking, Advanced Info
|
||||
@section Emacs Info-mode Variables
|
||||
|
||||
The following variables may modify the behaviour of Info-mode in Emacs;
|
||||
you may wish to set one or several of these variables interactively, or
|
||||
in your @file{~/.emacs} init file. @xref{Examining, Examining and Setting
|
||||
Variables, Examining and Setting Variables, emacs, The GNU Emacs
|
||||
Manual}.
|
||||
|
||||
@vtable @code
|
||||
@item Info-enable-edit
|
||||
Set to @code{nil}, disables the @samp{e} (@code{Info-edit}) command. A
|
||||
non-@code{nil} value enables it. @xref{Add, Edit}.
|
||||
|
||||
@item Info-enable-active-nodes
|
||||
When set to a non-@code{nil} value, allows Info to execute Lisp code
|
||||
associated with nodes. The Lisp code is executed when the node is
|
||||
selected.
|
||||
|
||||
@item Info-directory-list
|
||||
The list of directories to search for Info files. Each element is a
|
||||
string (directory name) or @code{nil} (try default directory).
|
||||
|
||||
@item Info-directory
|
||||
The standard directory for Info documentation files. Only used when the
|
||||
function @code{Info-directory} is called.
|
||||
@end vtable
|
||||
|
||||
@node Create an Info File, , Advanced Info, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Creating an Info File from a Makeinfo file
|
||||
|
||||
@code{makeinfo} is a utility that converts a Texinfo file into an Info
|
||||
file; @code{texinfo-format-region} and @code{texinfo-format-buffer} are
|
||||
GNU Emacs functions that do the same.
|
||||
|
||||
@xref{Create an Info File, , Creating an Info File, texinfo, the Texinfo
|
||||
Manual}, to learn how to create an Info file from a Texinfo file.
|
||||
|
||||
@xref{Top,, Overview of Texinfo, texinfo, Texinfo: The GNU Documentation
|
||||
Format}, to learn how to write a Texinfo file.
|
||||
|
||||
@bye
|
177
texinfo/doc/macro.texi
Normal file
177
texinfo/doc/macro.texi
Normal file
@ -0,0 +1,177 @@
|
||||
@c This file is included in makeinfo.texi.
|
||||
@c
|
||||
@ifinfo
|
||||
@comment Here are some useful examples of the macro facility.
|
||||
|
||||
@c Simply insert the right version of the texinfo name.
|
||||
@macro texinfo{}
|
||||
TeXinfo
|
||||
@end macro
|
||||
|
||||
@macro dfn{text}
|
||||
@dfn{\text\}
|
||||
@cpindex \text\
|
||||
@end macro
|
||||
|
||||
@c Define a macro which expands to a pretty version of the name of the
|
||||
@c Makeinfo program.
|
||||
@macro makeinfo{}
|
||||
@code{Makeinfo}
|
||||
@end macro
|
||||
|
||||
@c Define a macro which is used to define other macros. This one makes
|
||||
@c a macro which creates a node and gives it a sectioning command. Note
|
||||
@c that the created macro uses the original definition within the
|
||||
@c expansion text. This takes advantage of the non-recursion feature of
|
||||
@c macro execution.
|
||||
@macro node_define{orig-name}
|
||||
@macro \orig-name\{title}
|
||||
@node \title\
|
||||
@\orig-name\ \title\
|
||||
@end macro
|
||||
@end macro
|
||||
|
||||
@c Now actually define a new set of sectioning commands.
|
||||
@node_define {chapter}
|
||||
@node_define {section}
|
||||
@node_define {subsection}
|
||||
@end ifinfo
|
||||
|
||||
@chapter The Macro Facility
|
||||
|
||||
This chapter describes the new macro facility.
|
||||
|
||||
A @dfn{macro} is a command that you define in terms of other commands.
|
||||
It doesn't exist as a @texinfo{} command until you define it as part of
|
||||
the input file to @makeinfo{}. Once the command exists, it behaves much
|
||||
as any other @texinfo{} command. Macros are a useful way to ease the
|
||||
details and tedium of writing a `correct' info file. The following
|
||||
sections explain how to write and invoke macros.
|
||||
|
||||
@menu
|
||||
* How to Use Macros in @texinfo{}::
|
||||
How to use the macro facility.
|
||||
|
||||
* Using Macros Recursively::
|
||||
How to write a macro which does (or doesn't) recurse.
|
||||
|
||||
* Using @texinfo{} Macros As Arguments::
|
||||
Passing a macro as an argument.
|
||||
@end menu
|
||||
|
||||
@section How to Use Macros in @texinfo{}
|
||||
|
||||
Using macros in @texinfo{} is easy. First you define the macro. After
|
||||
that, the macro command is available as a normal @texinfo{} command.
|
||||
Here is what a definition looks like:
|
||||
|
||||
@example
|
||||
@@macro @var{name}@{@var{arg1}, @var{@dots{}} @var{argn}@}
|
||||
@var{@texinfo{} commands@dots{}}
|
||||
@@end macro
|
||||
@end example
|
||||
|
||||
The arguments that you specify that the macro takes are expanded with
|
||||
the actual parameters used when calling the macro if they are seen
|
||||
surrounded by backslashes. For example, here is a definition of
|
||||
@code{@@codeitem}, a macro which can be used wherever @code{@@item} can
|
||||
be used, but which surrounds its argument with @code{@@code@{@dots{}@}}.
|
||||
|
||||
@example
|
||||
@@macro codeitem@{item@}
|
||||
@@item @@code@{\item\@}
|
||||
@@end macro
|
||||
@end example
|
||||
|
||||
When the macro is expanded, all of the text between the @code{@@macro}
|
||||
and @code{@@end macro} is inserted into the document at the expansion
|
||||
point, with the actual parameters substituted for the named parameters.
|
||||
So, a call to the above macro might look like:
|
||||
|
||||
@example
|
||||
@@codeitem@{Foo@}
|
||||
@end example
|
||||
|
||||
and @makeinfo{} would execute the following code:
|
||||
|
||||
@example
|
||||
@@item @@code@{Foo@}
|
||||
@end example
|
||||
|
||||
A special case is made for macros which only take a single argument, and
|
||||
which are invoked without any brace characters (i.e.,
|
||||
@samp{@{}@dots{}@samp{@}}) surrounding an argument; the rest of the line
|
||||
is supplied as is as the sole argument to the macro. This special case
|
||||
allows one to redefine some standard @texinfo{} commands without
|
||||
modifying the input file. Along with the non-recursive action of macro
|
||||
invocation, one can easily redefine the sectioning commands to also
|
||||
provide index entries:
|
||||
|
||||
@example
|
||||
@@macro chapter@{name@}
|
||||
@@chapter \name\
|
||||
@@findex \name\
|
||||
@@end macro
|
||||
@end example
|
||||
|
||||
Thus, the text:
|
||||
|
||||
@example
|
||||
@@chapter strlen
|
||||
@end example
|
||||
|
||||
will expand to:
|
||||
|
||||
@example
|
||||
@@chapter strlen
|
||||
@@findex strlen
|
||||
@end example
|
||||
|
||||
@section Using Macros Recursively
|
||||
|
||||
Normally, while a particular macro is executing, any call to that macro
|
||||
will be seen as a call to a builtin @texinfo{} command. This allows one
|
||||
to redefine a builtin @texinfo{} command as a macro, and then use that
|
||||
command within the definition of the macro itself. For example, one
|
||||
might wish to make sure that whereever a term was defined with
|
||||
@code{@@dfn@{@dots{}@}}, the location of the definition would appear
|
||||
in the concept index for the manual. Here is a macro which redefines
|
||||
@code{@@dfn} to do just that:
|
||||
|
||||
@example
|
||||
@@macro dfn@{text@}
|
||||
@@dfn@{\text\@}
|
||||
@@cpindex \text\
|
||||
@@end macro
|
||||
@end example
|
||||
|
||||
Note that we used the builtin @texinfo{} command @code{@@dfn} within our
|
||||
overriding macro definition.
|
||||
|
||||
This behaviour itself can be overridden for macro execution by writing a
|
||||
special @dfn{macro control command} in the definition of the macro. The
|
||||
command is considered special because it doesn't affect the output text
|
||||
directly, rather, it affects the way in which the macro is defined. One
|
||||
such special command is @code{@@allow-recursion}.
|
||||
|
||||
@example
|
||||
@@macro silly@{arg@}
|
||||
@@allow-recursion
|
||||
\arg\
|
||||
@@end macro
|
||||
@end example
|
||||
|
||||
Now @code{@@silly} is a macro that can be used within a call to itself:
|
||||
|
||||
@example
|
||||
This text @@silly@{@@silly@{some text@}@} is ``some text''.
|
||||
@end example
|
||||
|
||||
@section Using @texinfo{} Macros As Arguments
|
||||
|
||||
@printindex cp
|
||||
How to use @texinfo{} macros as arguments to other @texinfo{} macros.
|
||||
|
||||
@bye
|
||||
|
||||
|
4935
texinfo/doc/texinfo.tex
Normal file
4935
texinfo/doc/texinfo.tex
Normal file
File diff suppressed because it is too large
Load Diff
17289
texinfo/doc/texinfo.texi
Normal file
17289
texinfo/doc/texinfo.texi
Normal file
File diff suppressed because it is too large
Load Diff
1270
texinfo/doc/userdoc.texi
Normal file
1270
texinfo/doc/userdoc.texi
Normal file
File diff suppressed because it is too large
Load Diff
21
texinfo/emacs/Makefile.am
Normal file
21
texinfo/emacs/Makefile.am
Normal file
@ -0,0 +1,21 @@
|
||||
## Makefile.am for texinfo/emacs.
|
||||
## $Id: Makefile.am,v 1.1 1998/03/23 04:42:12 law Exp $
|
||||
## Run automake in .. to produce Makefile.in from this.
|
||||
|
||||
# Do not byte compile our Elisp files by default.
|
||||
ELCFILES =
|
||||
|
||||
# Do not install our Elisp files by default, either.
|
||||
noinst_LISP = info.el informat.el makeinfo.el \
|
||||
texinfmt.el texinfo.el texnfo-upd.el
|
||||
|
||||
EXTRA_DIST = README elisp-comp new-useful-setqs $(noinst_LISP)
|
||||
|
||||
install-data-local:
|
||||
@echo "WARNING: You must (compile and) install the Emacs Lisp files"
|
||||
@echo "WARNING: manually. See ./emacs/README for some considerations."
|
||||
|
||||
# For some reason these do not get defined.
|
||||
distclean-lisp:
|
||||
clean-lisp:
|
||||
mostlyclean-lisp:
|
17
texinfo/emacs/README
Normal file
17
texinfo/emacs/README
Normal file
@ -0,0 +1,17 @@
|
||||
This directory contains Emacs Lisp sources related to Texinfo.
|
||||
|
||||
M-x texinfo-format-buffer is no longer the standard way to make .info
|
||||
files, and may or may not work. Use makeinfo instead. See the
|
||||
`makeinfo advantages' in the manual for why.
|
||||
|
||||
The files here may or may not be newer than the versions in the latest
|
||||
Emacs distribution -- there is only one master source, so it simply
|
||||
depends on what was released later. Use whatever works better for you.
|
||||
|
||||
They are not compiled or installed by default, because of the above, and
|
||||
also due to the wide variations in sites' Emacs installations.
|
||||
|
||||
Even if you do install them, you may not want to compile them if your
|
||||
site is running multiple versions of Emacs, since .elc files are not
|
||||
portable between all Emacs releases. If you do want to compile them,
|
||||
just run the ./elisp-comp shell script.
|
44
texinfo/info/Makefile.am
Normal file
44
texinfo/info/Makefile.am
Normal file
@ -0,0 +1,44 @@
|
||||
## Makefile.am for texinfo/info.
|
||||
## $Id: Makefile.am,v 1.1 1998/03/23 04:42:20 law Exp $
|
||||
## Run automake in .. to produce Makefile.in from this.
|
||||
|
||||
noinst_PROGRAMS = makedoc
|
||||
|
||||
# Use `ginfo' for building to avoid confusion with the standard `info'
|
||||
# target. The install rule removes the `g' before applying any
|
||||
# user-specified name transformations.
|
||||
bin_PROGRAMS = ginfo
|
||||
transform = s/ginfo/info/; @program_transform_name@
|
||||
|
||||
localedir = $(datadir)/locale
|
||||
|
||||
# -I. for funs.h.
|
||||
INCLUDES = -I. -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
|
||||
LDADD = ../lib/libtxi.a @TERMLIBS@ @INTLLIBS@
|
||||
|
||||
makedoc_SOURCES = makedoc.c
|
||||
ginfo_SOURCES = dir.c display.c display.h doc.c doc.h dribble.c dribble.h \
|
||||
echo-area.c echo-area.h \
|
||||
filesys.c filesys.h footnotes.c footnotes.h funs.h gc.c gc.h \
|
||||
indices.c indices.h info-utils.c info-utils.h info.c info.h infodoc.c \
|
||||
infomap.c infomap.h m-x.c man.c man.h nodemenu.c nodes.c nodes.h \
|
||||
search.c search.h session.c session.h signals.c signals.h \
|
||||
termdep.h terminal.c terminal.h tilde.c tilde.h \
|
||||
variables.c variables.h window.c window.h
|
||||
|
||||
EXTRA_DIST = README
|
||||
|
||||
# The files `doc.c' and `funs.h' are created by ./makedoc run over the source
|
||||
# files which contain DECLARE_INFO_COMMAND. `funs.h' is a header file
|
||||
# listing the functions found. `doc.c' is a structure containing pointers
|
||||
# to those functions along with completable names and documentation strings.
|
||||
#
|
||||
# I do not know how to get this right.
|
||||
# BUILT_SOURCES = doc.c funs.h
|
||||
#
|
||||
#cmd_sources = $(srcdir)/session.c $(srcdir)/echo-area.c $(srcdir)/infodoc.c \
|
||||
# $(srcdir)/m-x.c $(srcdir)/indices.c $(srcdir)/nodemenu.c \
|
||||
# $(srcdir)/footnotes.c $(srcdir)/variables.c
|
||||
#
|
||||
#$(BUILTSOURCES): makedoc $(cmd_sources)
|
||||
# ./makedoc $(cmd_sources)
|
129
texinfo/info/doc.c
Normal file
129
texinfo/info/doc.c
Normal file
@ -0,0 +1,129 @@
|
||||
/* doc.c -- Generated structure containing function names and doc strings.
|
||||
|
||||
This file was automatically made from various source files with the
|
||||
command "./makedoc". DO NOT EDIT THIS FILE, only "./makedoc.c".
|
||||
Source files groveled to make this file include:
|
||||
|
||||
./session.c
|
||||
./echo-area.c
|
||||
./infodoc.c
|
||||
./m-x.c
|
||||
./indices.c
|
||||
./nodemenu.c
|
||||
./footnotes.c
|
||||
./variables.c
|
||||
|
||||
An entry in the array FUNCTION_DOC_ARRAY is made for each command
|
||||
found in the above files; each entry consists of a function pointer,
|
||||
a string which is the user-visible name of the function,
|
||||
and a string which documents its purpose. */
|
||||
|
||||
#include "doc.h"
|
||||
#include "funs.h"
|
||||
|
||||
FUNCTION_DOC function_doc_array[] = {
|
||||
|
||||
/* Commands found in "./session.c". */
|
||||
{ info_next_line, "next-line", N_("Move down to the next line") },
|
||||
{ info_prev_line, "prev-line", N_("Move up to the previous line") },
|
||||
{ info_end_of_line, "end-of-line", N_("Move to the end of the line") },
|
||||
{ info_beginning_of_line, "beginning-of-line", N_("Move to the start of the line") },
|
||||
{ info_forward_char, "forward-char", N_("Move forward a character") },
|
||||
{ info_backward_char, "backward-char", N_("Move backward a character") },
|
||||
{ info_forward_word, "forward-word", N_("Move forward a word") },
|
||||
{ info_backward_word, "backward-word", N_("Move backward a word") },
|
||||
{ info_global_next_node, "global-next-node", N_("Move forwards or down through node structure") },
|
||||
{ info_global_prev_node, "global-prev-node", N_("Move backwards or up through node structure") },
|
||||
{ info_scroll_forward, "scroll-forward", N_("Scroll forward in this window") },
|
||||
{ info_scroll_backward, "scroll-backward", N_("Scroll backward in this window") },
|
||||
{ info_beginning_of_node, "beginning-of-node", N_("Move to the start of this node") },
|
||||
{ info_end_of_node, "end-of-node", N_("Move to the end of this node") },
|
||||
{ info_next_window, "next-window", N_("Select the next window") },
|
||||
{ info_prev_window, "prev-window", N_("Select the previous window") },
|
||||
{ info_split_window, "split-window", N_("Split the current window") },
|
||||
{ info_delete_window, "delete-window", N_("Delete the current window") },
|
||||
{ info_keep_one_window, "keep-one-window", N_("Delete all other windows") },
|
||||
{ info_scroll_other_window, "scroll-other-window", N_("Scroll the other window") },
|
||||
{ info_grow_window, "grow-window", N_("Grow (or shrink) this window") },
|
||||
{ info_tile_windows, "tile-windows", N_("Divide the available screen space among the visible windows") },
|
||||
{ info_toggle_wrap, "toggle-wrap", N_("Toggle the state of line wrapping in the current window") },
|
||||
{ info_next_node, "next-node", N_("Select the `Next' node") },
|
||||
{ info_prev_node, "prev-node", N_("Select the `Prev' node") },
|
||||
{ info_up_node, "up-node", N_("Select the `Up' node") },
|
||||
{ info_last_node, "last-node", N_("Select the last node in this file") },
|
||||
{ info_first_node, "first-node", N_("Select the first node in this file") },
|
||||
{ info_history_node, "history-node", N_("Select the most recently selected node") },
|
||||
{ info_last_menu_item, "last-menu-item", N_("Select the last item in this node's menu") },
|
||||
{ info_menu_digit, "menu-digit", N_("Select this menu item") },
|
||||
{ info_menu_item, "menu-item", N_("Read a menu item and select its node") },
|
||||
{ info_xref_item, "xref-item", N_("Read a footnote or cross reference and select its node") },
|
||||
{ info_find_menu, "find-menu", N_("Move to the start of this node's menu") },
|
||||
{ info_visit_menu, "visit-menu", N_("Visit as many menu items at once as possible") },
|
||||
{ info_goto_node, "goto-node", N_("Read a node name and select it") },
|
||||
{ info_man, "man", N_("Read a manpage reference and select it") },
|
||||
{ info_top_node, "top-node", N_("Select the node `Top' in this file") },
|
||||
{ info_dir_node, "dir-node", N_("Select the node `(dir)'") },
|
||||
{ info_kill_node, "kill-node", N_("Kill this node") },
|
||||
{ info_view_file, "view-file", N_("Read the name of a file and select it") },
|
||||
{ info_print_node, "print-node", N_("Pipe the contents of this node through INFO_PRINT_COMMAND") },
|
||||
{ info_search, "search", N_("Read a string and search for it") },
|
||||
{ isearch_forward, "isearch-forward", N_("Search interactively for a string as you type it") },
|
||||
{ isearch_backward, "isearch-backward", N_("Search interactively for a string as you type it") },
|
||||
{ info_move_to_prev_xref, "move-to-prev-xref", N_("Move to the previous cross reference") },
|
||||
{ info_move_to_next_xref, "move-to-next-xref", N_("Move to the next cross reference") },
|
||||
{ info_select_reference_this_line, "select-reference-this-line", N_("Select reference or menu item appearing on this line") },
|
||||
{ info_abort_key, "abort-key", N_("Cancel current operation") },
|
||||
{ info_move_to_window_line, "move-to-window-line", N_("Move to the cursor to a specific line of the window") },
|
||||
{ info_redraw_display, "redraw-display", N_("Redraw the display") },
|
||||
{ info_quit, "quit", N_("Quit using Info") },
|
||||
{ info_do_lowercase_version, "do-lowercase-version", "" },
|
||||
{ info_add_digit_to_numeric_arg, "add-digit-to-numeric-arg", N_("Add this digit to the current numeric argument") },
|
||||
{ info_universal_argument, N_("universal-argument"), N_("Start (or multiply by 4) the current numeric argument") },
|
||||
{ info_numeric_arg_digit_loop, "numeric-arg-digit-loop", N_("Internally used by \\[universal-argument]") },
|
||||
/* Commands found in "./echo-area.c". */
|
||||
{ ea_forward, "echo-area-forward", N_("Move forward a character") },
|
||||
{ ea_backward, "echo-area-backward", N_("Move backward a character") },
|
||||
{ ea_beg_of_line, "echo-area-beg-of-line", N_("Move to the start of this line") },
|
||||
{ ea_end_of_line, "echo-area-end-of-line", N_("Move to the end of this line") },
|
||||
{ ea_forward_word, "echo-area-forward-word", N_("Move forward a word") },
|
||||
{ ea_backward_word, "echo-area-backward-word", N_("Move backward a word") },
|
||||
{ ea_delete, "echo-area-delete", N_("Delete the character under the cursor") },
|
||||
{ ea_rubout, "echo-area-rubout", N_("Delete the character behind the cursor") },
|
||||
{ ea_abort, "echo-area-abort", N_("Cancel or quit operation") },
|
||||
{ ea_newline, "echo-area-newline", N_("Accept (or force completion of) this line") },
|
||||
{ ea_quoted_insert, "echo-area-quoted-insert", N_("Insert next character verbatim") },
|
||||
{ ea_insert, "echo-area-insert", N_("Insert this character") },
|
||||
{ ea_tab_insert, "echo-area-tab-insert", N_("Insert a TAB character") },
|
||||
{ ea_transpose_chars, "echo-area-transpose-chars", N_("Transpose characters at point") },
|
||||
{ ea_yank, "echo-area-yank", N_("Yank back the contents of the last kill") },
|
||||
{ ea_yank_pop, "echo-area-yank-pop", N_("Yank back a previous kill") },
|
||||
{ ea_kill_line, "echo-area-kill-line", N_("Kill to the end of the line") },
|
||||
{ ea_backward_kill_line, "echo-area-backward-kill-line", N_("Kill to the beginning of the line") },
|
||||
{ ea_kill_word, "echo-area-kill-word", N_("Kill the word following the cursor") },
|
||||
{ ea_backward_kill_word, "echo-area-backward-kill-word", N_("Kill the word preceding the cursor") },
|
||||
{ ea_possible_completions, "echo-area-possible-completions", N_("List possible completions") },
|
||||
{ ea_complete, "echo-area-complete", N_("Insert completion") },
|
||||
{ ea_scroll_completions_window, "echo-area-scroll-completions-window", N_("Scroll the completions window") },
|
||||
/* Commands found in "./infodoc.c". */
|
||||
{ info_get_help_window, "get-help-window", N_("Display help message") },
|
||||
{ info_get_info_help_node, "get-info-help-node", N_("Visit Info node `(info)Help'") },
|
||||
{ describe_key, "describe-key", N_("Print documentation for KEY") },
|
||||
{ info_where_is, "where-is", N_("Show what to type to execute a given command") },
|
||||
/* Commands found in "./m-x.c". */
|
||||
{ describe_command, "describe-command", N_("Read the name of an Info command and describe it") },
|
||||
{ info_execute_command, "execute-command", N_("Read a command name in the echo area and execute it") },
|
||||
{ set_screen_height, "set-screen-height", N_("Set the height of the displayed window") },
|
||||
/* Commands found in "./indices.c". */
|
||||
{ info_index_search, "index-search", N_("Look up a string in the index for this file") },
|
||||
{ info_next_index_match, "next-index-match", N_("Go to the next matching index item from the last `\\[index-search]' command") },
|
||||
{ info_index_apropos, "index-apropos", N_("Grovel all known info file's indices for a string and build a menu") },
|
||||
/* Commands found in "./nodemenu.c". */
|
||||
{ list_visited_nodes, "list-visited-nodes", N_("Make a window containing a menu of all of the currently visited nodes") },
|
||||
{ select_visited_node, "select-visited-node", N_("Select a node which has been previously visited in a visible window") },
|
||||
/* Commands found in "./footnotes.c". */
|
||||
{ info_show_footnotes, "show-footnotes", N_("Show the footnotes associated with this node in another window") },
|
||||
/* Commands found in "./variables.c". */
|
||||
{ describe_variable, "describe-variable", N_("Explain the use of a variable") },
|
||||
{ set_variable, "set-variable", N_("Set the value of an Info variable") },
|
||||
{ (VFunction *)NULL, (char *)NULL, (char *)NULL }
|
||||
};
|
1505
texinfo/info/echo-area.c
Normal file
1505
texinfo/info/echo-area.c
Normal file
File diff suppressed because it is too large
Load Diff
64
texinfo/info/echo-area.h
Normal file
64
texinfo/info/echo-area.h
Normal file
@ -0,0 +1,64 @@
|
||||
/* echo-area.h -- Functions used in reading information from the echo area.
|
||||
$Id: echo-area.h,v 1.1 1998/03/23 04:42:27 law Exp $
|
||||
|
||||
This file is part of GNU Info, a program for reading online documentation
|
||||
stored in Info format.
|
||||
|
||||
Copyright (C) 1993, 97 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.
|
||||
|
||||
Written by Brian Fox (bfox@ai.mit.edu). */
|
||||
|
||||
#ifndef INFO_ECHO_AREA_H
|
||||
#define INFO_ECHO_AREA_H
|
||||
|
||||
#define EA_MAX_INPUT 256
|
||||
|
||||
extern int echo_area_is_active, info_aborted_echo_area;
|
||||
|
||||
/* Non-zero means that the last command executed while reading input
|
||||
killed some text. */
|
||||
extern int echo_area_last_command_was_kill;
|
||||
|
||||
extern void inform_in_echo_area (), echo_area_inform_of_deleted_window ();
|
||||
extern void echo_area_prep_read ();
|
||||
extern VFunction *ea_last_executed_command;
|
||||
|
||||
/* Read a line of text in the echo area. Return a malloc ()'ed string,
|
||||
or NULL if the user aborted out of this read. WINDOW is the currently
|
||||
active window, so that we can restore it when we need to. PROMPT, if
|
||||
non-null, is a prompt to print before reading the line. */
|
||||
extern char *info_read_in_echo_area ();
|
||||
|
||||
/* Read a line in the echo area with completion over COMPLETIONS.
|
||||
Takes arguments of WINDOW, PROMPT, and COMPLETIONS, a REFERENCE **. */
|
||||
char *info_read_completing_in_echo_area ();
|
||||
|
||||
/* Read a line in the echo area allowing completion over COMPLETIONS, but
|
||||
not requiring it. Takes arguments of WINDOW, PROMPT, and COMPLETIONS,
|
||||
a REFERENCE **. */
|
||||
extern char *info_read_maybe_completing ();
|
||||
|
||||
extern void ea_insert (), ea_quoted_insert ();
|
||||
extern void ea_beg_of_line (), ea_backward (), ea_delete (), ea_end_of_line ();
|
||||
extern void ea_forward (), ea_abort (), ea_rubout (), ea_complete ();
|
||||
extern void ea_newline (), ea_kill_line (), ea_transpose_chars ();
|
||||
extern void ea_yank (), ea_tab_insert (), ea_possible_completions ();
|
||||
extern void ea_backward_word (), ea_kill_word (), ea_forward_word ();
|
||||
extern void ea_yank_pop (), ea_backward_kill_word ();
|
||||
extern void ea_scroll_completions_window ();
|
||||
|
||||
#endif /* not INFO_ECHO_AREA_H */
|
111
texinfo/info/funs.h
Normal file
111
texinfo/info/funs.h
Normal file
@ -0,0 +1,111 @@
|
||||
/* funs.h -- Generated declarations for Info commands. */
|
||||
|
||||
/* Functions declared in "./session.c". */
|
||||
extern void info_next_line ();
|
||||
extern void info_prev_line ();
|
||||
extern void info_end_of_line ();
|
||||
extern void info_beginning_of_line ();
|
||||
extern void info_forward_char ();
|
||||
extern void info_backward_char ();
|
||||
extern void info_forward_word ();
|
||||
extern void info_backward_word ();
|
||||
extern void info_global_next_node ();
|
||||
extern void info_global_prev_node ();
|
||||
extern void info_scroll_forward ();
|
||||
extern void info_scroll_backward ();
|
||||
extern void info_beginning_of_node ();
|
||||
extern void info_end_of_node ();
|
||||
extern void info_next_window ();
|
||||
extern void info_prev_window ();
|
||||
extern void info_split_window ();
|
||||
extern void info_delete_window ();
|
||||
extern void info_keep_one_window ();
|
||||
extern void info_scroll_other_window ();
|
||||
extern void info_grow_window ();
|
||||
extern void info_tile_windows ();
|
||||
extern void info_toggle_wrap ();
|
||||
extern void info_next_node ();
|
||||
extern void info_prev_node ();
|
||||
extern void info_up_node ();
|
||||
extern void info_last_node ();
|
||||
extern void info_first_node ();
|
||||
extern void info_history_node ();
|
||||
extern void info_last_menu_item ();
|
||||
extern void info_menu_digit ();
|
||||
extern void info_menu_item ();
|
||||
extern void info_xref_item ();
|
||||
extern void info_find_menu ();
|
||||
extern void info_visit_menu ();
|
||||
extern void info_goto_node ();
|
||||
extern void info_man ();
|
||||
extern void info_top_node ();
|
||||
extern void info_dir_node ();
|
||||
extern void info_kill_node ();
|
||||
extern void info_view_file ();
|
||||
extern void info_print_node ();
|
||||
extern void info_search ();
|
||||
extern void isearch_forward ();
|
||||
extern void isearch_backward ();
|
||||
extern void info_move_to_prev_xref ();
|
||||
extern void info_move_to_next_xref ();
|
||||
extern void info_select_reference_this_line ();
|
||||
extern void info_abort_key ();
|
||||
extern void info_move_to_window_line ();
|
||||
extern void info_redraw_display ();
|
||||
extern void info_quit ();
|
||||
extern void info_do_lowercase_version ();
|
||||
extern void info_add_digit_to_numeric_arg ();
|
||||
extern void info_universal_argument ();
|
||||
extern void info_numeric_arg_digit_loop ();
|
||||
|
||||
/* Functions declared in "./echo-area.c". */
|
||||
extern void ea_forward ();
|
||||
extern void ea_backward ();
|
||||
extern void ea_beg_of_line ();
|
||||
extern void ea_end_of_line ();
|
||||
extern void ea_forward_word ();
|
||||
extern void ea_backward_word ();
|
||||
extern void ea_delete ();
|
||||
extern void ea_rubout ();
|
||||
extern void ea_abort ();
|
||||
extern void ea_newline ();
|
||||
extern void ea_quoted_insert ();
|
||||
extern void ea_insert ();
|
||||
extern void ea_tab_insert ();
|
||||
extern void ea_transpose_chars ();
|
||||
extern void ea_yank ();
|
||||
extern void ea_yank_pop ();
|
||||
extern void ea_kill_line ();
|
||||
extern void ea_backward_kill_line ();
|
||||
extern void ea_kill_word ();
|
||||
extern void ea_backward_kill_word ();
|
||||
extern void ea_possible_completions ();
|
||||
extern void ea_complete ();
|
||||
extern void ea_scroll_completions_window ();
|
||||
|
||||
/* Functions declared in "./infodoc.c". */
|
||||
extern void info_get_help_window ();
|
||||
extern void info_get_info_help_node ();
|
||||
extern void describe_key ();
|
||||
extern void info_where_is ();
|
||||
|
||||
/* Functions declared in "./m-x.c". */
|
||||
extern void describe_command ();
|
||||
extern void info_execute_command ();
|
||||
extern void set_screen_height ();
|
||||
|
||||
/* Functions declared in "./indices.c". */
|
||||
extern void info_index_search ();
|
||||
extern void info_next_index_match ();
|
||||
extern void info_index_apropos ();
|
||||
|
||||
/* Functions declared in "./nodemenu.c". */
|
||||
extern void list_visited_nodes ();
|
||||
extern void select_visited_node ();
|
||||
|
||||
/* Functions declared in "./footnotes.c". */
|
||||
extern void info_show_footnotes ();
|
||||
|
||||
/* Functions declared in "./variables.c". */
|
||||
extern void describe_variable ();
|
||||
extern void set_variable ();
|
971
texinfo/intl/ChangeLog
Normal file
971
texinfo/intl/ChangeLog
Normal file
@ -0,0 +1,971 @@
|
||||
Thu Sep 4 15:01:11 1997 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* Makefile.in (install-info): Add dummy target.
|
||||
|
||||
Mon Mar 10 06:51:17 1997 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile.in: Implement handling of libtool.
|
||||
|
||||
* gettextP.h: Change data structures for use of generic lowlevel
|
||||
i18n file handling.
|
||||
|
||||
Wed Dec 4 20:21:18 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* textdomain.c: Put parentheses around arguments of memcpy macro
|
||||
definition.
|
||||
* localealias.c: Likewise.
|
||||
* l10nflist.c: Likewise.
|
||||
* finddomain.c: Likewise.
|
||||
* bindtextdom.c: Likewise.
|
||||
Reported by Thomas Esken.
|
||||
|
||||
Mon Nov 25 22:57:51 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* textdomain.c: Move definition of `memcpy` macro to right
|
||||
position.
|
||||
|
||||
Fri Nov 22 04:01:58 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
|
||||
bcopy if not already defined. Reported by Thomas Esken.
|
||||
* bindtextdom.c: Likewise.
|
||||
* l10nflist.c: Likewise.
|
||||
* localealias.c: Likewise.
|
||||
* textdomain.c: Likewise.
|
||||
|
||||
Tue Oct 29 11:10:27 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile.in (libdir): Change to use exec_prefix instead of
|
||||
prefix. Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>.
|
||||
|
||||
Sat Aug 31 03:07:09 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* l10nflist.c (_nl_normalize_codeset): We convert to lower case,
|
||||
so don't prepend uppercase `ISO' for only numeric arg.
|
||||
|
||||
Fri Jul 19 00:15:46 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
|
||||
definition of _GNU_SOURCE. Patch by Roland McGrath.
|
||||
|
||||
* Makefile.in (uninstall): Fix another bug with `for' loop and
|
||||
empty arguments. Patch by Jim Meyering. Correct name os
|
||||
uninstalled files: no intl- prefix anymore.
|
||||
|
||||
* Makefile.in (install-data): Again work around shells which
|
||||
cannot handle mpty for list. Reported by Jim Meyering.
|
||||
|
||||
Sat Jul 13 18:11:35 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile.in (install): Split goal. Now depend on install-exec
|
||||
and install-data.
|
||||
(install-exec, install-data): New goals. Created from former
|
||||
install goal.
|
||||
Reported by Karl Berry.
|
||||
|
||||
Sat Jun 22 04:58:14 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile.in (MKINSTALLDIRS): New variable. Path to
|
||||
mkinstalldirs script.
|
||||
(install): use MKINSTALLDIRS variable or if the script is not present
|
||||
try to find it in the $top_scrdir).
|
||||
|
||||
Wed Jun 19 02:56:56 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* l10nflist.c: Linux libc *partly* includes the argz_* functions.
|
||||
Grr. Work around by renaming the static version and use macros
|
||||
for renaming.
|
||||
|
||||
Tue Jun 18 20:11:17 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* l10nflist.c: Correct presence test macros of __argz_* functions.
|
||||
|
||||
* l10nflist.c: Include <argz.h> based on test of it instead when
|
||||
__argz_* functions are available.
|
||||
Reported by Andreas Schwab.
|
||||
|
||||
Thu Jun 13 15:17:44 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* explodename.c, l10nflist.c: Define NULL for dumb systems.
|
||||
|
||||
Tue Jun 11 17:05:13 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* intlh.inst.in, libgettext.h (dcgettext): Rename local variable
|
||||
result to __result to prevent name clash.
|
||||
|
||||
* l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
|
||||
get prototype for stpcpy and strcasecmp.
|
||||
|
||||
* intlh.inst.in, libgettext.h: Move declaration of
|
||||
`_nl_msg_cat_cntr' outside __extension__ block to prevent warning
|
||||
from gcc's -Wnested-extern option.
|
||||
|
||||
Fri Jun 7 01:58:00 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile.in (install): Remove comment.
|
||||
|
||||
Thu Jun 6 17:28:17 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile.in (install): Work around for another Buglix stupidity.
|
||||
Always use an `else' close for `if's. Reported by Nelson Beebe.
|
||||
|
||||
* Makefile.in (intlh.inst): Correct typo in phony rule.
|
||||
Reported by Nelson Beebe.
|
||||
|
||||
Thu Jun 6 01:49:52 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* dcgettext.c (read_alias_file): Rename variable alloca_list to
|
||||
block_list as the macro calls assume.
|
||||
Patch by Eric Backus.
|
||||
|
||||
* localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
|
||||
malloc.
|
||||
(read_alias_file): Rename varriabe alloca_list to block_list as the
|
||||
macro calls assume.
|
||||
Patch by Eric Backus.
|
||||
|
||||
* l10nflist.c: Correct conditional for <argz.h> inclusion.
|
||||
Reported by Roland McGrath.
|
||||
|
||||
* Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
|
||||
all-@USE_NLS@.
|
||||
|
||||
* Makefile.in (install): intlh.inst comes from local dir, not
|
||||
$(srcdir).
|
||||
|
||||
* Makefile.in (intlh.inst): Special handling of this goal. If
|
||||
used in gettext, this is really a rul to construct this file. If
|
||||
used in any other package it is defined as a .PHONY rule with
|
||||
empty body.
|
||||
|
||||
* finddomain.c: Extract locale file information handling into
|
||||
l10nfile.c. Rename local stpcpy__ function to stpcpy.
|
||||
|
||||
* dcgettext.c (stpcpy): Add local definition.
|
||||
|
||||
* l10nflist.c: Solve some portability problems. Patches partly by
|
||||
Thomas Esken. Add local definition of stpcpy.
|
||||
|
||||
Tue Jun 4 02:47:49 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* intlh.inst.in: Don't depend including <locale.h> on
|
||||
HAVE_LOCALE_H. Instead configure must rewrite this fiile
|
||||
depending on the result of the configure run.
|
||||
|
||||
* Makefile.in (install): libintl.inst is now called intlh.inst.
|
||||
Add rules for updating intlh.inst from intlh.inst.in.
|
||||
|
||||
* libintl.inst: Renamed to intlh.inst.in.
|
||||
|
||||
* localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
|
||||
because gcc has __buitlin_alloca.
|
||||
Reported by Roland McGrath.
|
||||
|
||||
Mon Jun 3 00:32:16 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile.in (installcheck): New goal to fulfill needs of
|
||||
automake's distcheck.
|
||||
|
||||
* Makefile.in (install): Reorder commands so that VERSION is
|
||||
found.
|
||||
|
||||
* Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
|
||||
@datadir@/gettext.
|
||||
(COMSRCS): Add l10nfile.c.
|
||||
(OBJECTS): Add l10nfile.o.
|
||||
(DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common).
|
||||
(DISTFILE.gettext): Remove $(DISTFILES.common).
|
||||
(all-gettext): Remove goal.
|
||||
(install): If $(PACKAGE) = gettext install, otherwose do nothing. No
|
||||
package but gettext itself should install libintl.h + headers.
|
||||
(dist): Extend goal to work for gettext, too.
|
||||
(dist-gettext): Remove goal.
|
||||
|
||||
* dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
|
||||
|
||||
Sun Jun 2 17:33:06 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* loadmsgcat.c (_nl_load_domain): Parameter is now comes from
|
||||
find_l10nfile.
|
||||
|
||||
Sat Jun 1 02:23:03 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* l10nflist.c (__argz_next): Add definition.
|
||||
|
||||
* dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
|
||||
code. Use new l10nfile handling.
|
||||
|
||||
* localealias.c [!HAVE_ALLOCA]: Add code for handling missing
|
||||
alloca code.
|
||||
|
||||
* l10nflist.c: Initial revision.
|
||||
|
||||
Tue Apr 2 18:51:18 1996 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (all-gettext): New goal. Same as all-yes.
|
||||
|
||||
Thu Mar 28 23:01:22 1996 Karl Eichwalder <ke@ke.central.de>
|
||||
|
||||
* Makefile.in (gettextsrcdir): Define using @datadir@.
|
||||
|
||||
Tue Mar 26 12:39:14 1996 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c: Include <ctype.h>. Reported by Roland McGrath.
|
||||
|
||||
Sat Mar 23 02:00:35 1996 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
|
||||
with external declaration.
|
||||
|
||||
Sat Mar 2 00:47:09 1996 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (all-no): Rename from all_no.
|
||||
|
||||
Sat Feb 17 00:25:59 1996 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* gettextP.h [loaded_domain]: Array `successor' must now contain up
|
||||
to 63 elements (because of codeset name normalization).
|
||||
|
||||
* finddomain.c: Implement codeset name normalization.
|
||||
|
||||
Thu Feb 15 04:39:09 1996 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (all): Define to `all-@USE_NLS@'.
|
||||
(all-yes, all_no): New goals. `all-no' is noop, `all-yes'
|
||||
is former all.
|
||||
|
||||
Mon Jan 15 21:46:01 1996 Howard Gayle <howard@hal.com>
|
||||
|
||||
* localealias.c (alias_compare): Increment string pointers in loop
|
||||
of strcasecmp replacement.
|
||||
|
||||
Fri Dec 29 21:16:34 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (install-src): Who commented this goal out ? :-)
|
||||
|
||||
Fri Dec 29 15:08:16 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls
|
||||
should not effect it because a missing catalog is no error.
|
||||
Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
|
||||
|
||||
Tue Dec 19 22:09:13 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (Makefile): Explicitly use $(SHELL) for running
|
||||
shell scripts.
|
||||
|
||||
Fri Dec 15 17:34:59 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* Makefile.in (install-src): Only install library and header when
|
||||
we use the own implementation. Don't do it when using the
|
||||
system's gettext or catgets functions.
|
||||
|
||||
* dcgettext.c (find_msg): Must not swap domain->hash_size here.
|
||||
|
||||
Sat Dec 9 16:24:37 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* localealias.c, libintl.inst, libgettext.h, hash-string.h,
|
||||
gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
|
||||
Use PARAMS instead of __P. Suggested by Roland McGrath.
|
||||
|
||||
Tue Dec 5 11:39:14 1995 Larry Schwimmer <rosebud@cyclone.stanford.edu>
|
||||
|
||||
* libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
|
||||
!_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
|
||||
|
||||
Mon Dec 4 15:42:07 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (install-src):
|
||||
Install libintl.inst instead of libintl.h.install.
|
||||
|
||||
Sat Dec 2 22:51:38 1995 Marcus Daniels <marcus@sysc.pdx.edu>
|
||||
|
||||
* cat-compat.c (textdomain):
|
||||
Reverse order in which files are tried you load. First
|
||||
try local file, when this failed absolute path.
|
||||
|
||||
Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
|
||||
|
||||
* cat-compat.c (bindtextdomain): Add missing { }.
|
||||
|
||||
Sun Nov 26 18:21:41 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* libintl.inst: Add missing __P definition. Reported by Nelson Beebe.
|
||||
|
||||
* Makefile.in:
|
||||
Add dummy `all' and `dvi' goals. Reported by Tom Tromey.
|
||||
|
||||
Sat Nov 25 16:12:01 1995 Franc,ois Pinard <pinard@iro.umontreal.ca>
|
||||
|
||||
* hash-string.h: Capitalize arguments of macros.
|
||||
|
||||
Sat Nov 25 12:01:36 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (DISTFILES): Prevent files names longer than 13
|
||||
characters. libintl.h.glibc->libintl.glibc,
|
||||
libintl.h.install->libintl.inst. Reported by Joshua R. Poulson.
|
||||
|
||||
Sat Nov 25 11:31:12 1995 Eric Backus <ericb@lsid.hp.com>
|
||||
|
||||
* dcgettext.c: Fix bug in preprocessor conditionals.
|
||||
|
||||
Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
|
||||
|
||||
* libgettext.h: Solaris cc does not understand
|
||||
#if !SYMBOL1 && !SYMBOL2. Sad but true.
|
||||
|
||||
Thu Nov 23 16:22:14 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* hash-string.h (hash_string):
|
||||
Fix for machine with >32 bit `unsigned long's.
|
||||
|
||||
* dcgettext.c (DCGETTEXT):
|
||||
Fix horrible bug in loop for alternative translation.
|
||||
|
||||
Thu Nov 23 01:45:29 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
|
||||
Some further simplifications in message number generation.
|
||||
|
||||
Mon Nov 20 21:08:43 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* libintl.h.glibc: Use __const instead of const in prototypes.
|
||||
|
||||
* Makefile.in (install-src):
|
||||
Install libintl.h.install instead of libintl.h. This
|
||||
is a stripped-down version. Suggested by Peter Miller.
|
||||
|
||||
* libintl.h.install, libintl.h.glibc: Initial revision.
|
||||
|
||||
* localealias.c (_nl_expand_alias, read_alias_file):
|
||||
Protect prototypes in type casts by __P.
|
||||
|
||||
Tue Nov 14 16:43:58 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* hash-string.h: Correct prototype for hash_string.
|
||||
|
||||
Sun Nov 12 12:42:30 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* hash-string.h (hash_string): Add prototype.
|
||||
|
||||
* gettextP.h: Fix copyright.
|
||||
(SWAP): Add prototype.
|
||||
|
||||
Wed Nov 8 22:56:33 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* localealias.c (read_alias_file): Forgot sizeof.
|
||||
Avoid calling *printf function. This introduces a big overhead.
|
||||
Patch by Roland McGrath.
|
||||
|
||||
Tue Nov 7 14:21:08 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
|
||||
|
||||
* finddomain.c (stpcpy):
|
||||
Define substitution function local. The macro was to flaky.
|
||||
|
||||
* cat-compat.c: Fix typo.
|
||||
|
||||
* xopen-msg.sed, linux-msg.sed:
|
||||
While bringing message number to right place only accept digits.
|
||||
|
||||
* linux-msg.sed, xopen-msg.sed: Now that the counter does not have
|
||||
leading 0s we don't need to remove them. Reported by Marcus
|
||||
Daniels.
|
||||
|
||||
* Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
|
||||
dependency. Reported by Marcus Daniels.
|
||||
|
||||
* cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
|
||||
Generally cleanup using #if instead of #ifndef.
|
||||
|
||||
* Makefile.in: Correct typos in comment. By Franc,ois Pinard.
|
||||
|
||||
Mon Nov 6 00:27:02 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (install-src): Don't install libintl.h and libintl.a
|
||||
if we use an available gettext implementation.
|
||||
|
||||
Sun Nov 5 22:02:08 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported
|
||||
by Franc,ois Pinard.
|
||||
|
||||
* libgettext.h: Use #if instead of #ifdef/#ifndef.
|
||||
|
||||
* finddomain.c:
|
||||
Comments describing what has to be done should start with FIXME.
|
||||
|
||||
Sun Nov 5 19:38:01 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning.
|
||||
DISTFILES.common names the files common to both dist goals.
|
||||
DISTFILES.gettext are the files only distributed in GNU gettext.
|
||||
|
||||
Sun Nov 5 17:32:54 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* dcgettext.c (DCGETTEXT): Correct searching in derived locales.
|
||||
This was necessary since a change in _nl_find_msg several weeks
|
||||
ago. I really don't know this is still not fixed.
|
||||
|
||||
Sun Nov 5 12:43:12 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This
|
||||
might mark a special condition.
|
||||
|
||||
* finddomain.c (make_entry_rec): Don't make illegal entry as decided.
|
||||
|
||||
* Makefile.in (dist): Suppress error message when ln failed.
|
||||
Get files from $(srcdir) explicitly.
|
||||
|
||||
* libgettext.h (gettext_const): Rename to gettext_noop.
|
||||
|
||||
Fri Nov 3 07:36:50 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c (make_entry_rec):
|
||||
Protect against wrong locale names by testing mask.
|
||||
|
||||
* libgettext.h (gettext_const): Add macro definition.
|
||||
Capitalize macro arguments.
|
||||
|
||||
Thu Nov 2 23:15:51 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c (_nl_find_domain):
|
||||
Test for pointer != NULL before accessing value.
|
||||
Reported by Tom Tromey.
|
||||
|
||||
* gettext.c (NULL):
|
||||
Define as (void*)0 instad of 0. Reported by Franc,ois Pinard.
|
||||
|
||||
Mon Oct 30 21:28:52 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
|
||||
|
||||
Sat Oct 28 23:20:47 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* libgettext.h: Disable dcgettext optimization for Solaris 2.3.
|
||||
|
||||
* localealias.c (alias_compare):
|
||||
Peter Miller reported that tolower in some systems is
|
||||
even dumber than I thought. Protect call by `isupper'.
|
||||
|
||||
Fri Oct 27 22:22:51 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (libdir, includedir): New variables.
|
||||
(install-src): Install libintl.a and libintl.h in correct dirs.
|
||||
|
||||
Fri Oct 27 22:07:29 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
|
||||
|
||||
* po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
|
||||
|
||||
* localealias.c:
|
||||
Fix typo and superflous test. Reported by Christian von Roques.
|
||||
|
||||
Fri Oct 6 11:52:05 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c (_nl_find_domain):
|
||||
Correct some remainder from the pre-CEN syntax. Now
|
||||
we don't have a constant number of successors anymore.
|
||||
|
||||
Wed Sep 27 21:41:13 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (DISTFILES): Add libintl.h.glibc.
|
||||
|
||||
* Makefile.in (dist-libc): Add goal for packing sources for glibc.
|
||||
(COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
|
||||
|
||||
* loadmsgcat.c: Forget to continue #if line.
|
||||
|
||||
* localealias.c:
|
||||
[_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
|
||||
space clean.
|
||||
|
||||
* dcgettext.c, finddomain.c: Better comment to last change.
|
||||
|
||||
* loadmsgcat.c:
|
||||
[_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
|
||||
__fstat, __open, __close, __read, __mmap, and __munmap resp
|
||||
to keep ANSI C name space clean.
|
||||
|
||||
* finddomain.c:
|
||||
[_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
|
||||
|
||||
* dcgettext.c:
|
||||
[_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
|
||||
keep ANSI C name space clean.
|
||||
|
||||
* libgettext.h:
|
||||
Include sys/types.h for those old SysV systems out there.
|
||||
Reported by Francesco Potorti`.
|
||||
|
||||
* loadmsgcat.c (use_mmap): Define if compiled for glibc.
|
||||
|
||||
* bindtextdom.c: Include all those standard headers
|
||||
unconditionally if _LIBC is defined.
|
||||
|
||||
* finddomain.c: Fix 2 times defiend -> defined.
|
||||
|
||||
* textdomain.c: Include libintl.h instead of libgettext.h when
|
||||
compiling for glibc. Include all those standard headers
|
||||
unconditionally if _LIBC is defined.
|
||||
|
||||
* localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
|
||||
|
||||
* gettext.c:
|
||||
Include libintl.h instead of libgettext.h when compiling for glibc.
|
||||
Get NULL from stddef.h if we compile for glibc.
|
||||
|
||||
* finddomain.c: Include libintl.h instead of libgettext.h when
|
||||
compiling for glibc. Include all those standard headers
|
||||
unconditionally if _LIBC is defined.
|
||||
|
||||
* dcgettext.c: Include all those standard headers unconditionally
|
||||
if _LIBC is defined.
|
||||
|
||||
* dgettext.c: If compiled in glibc include libintl.h instead of
|
||||
libgettext.h.
|
||||
(locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
|
||||
|
||||
* dcgettext.c: If compiled in glibc include libintl.h instead of
|
||||
libgettext.h.
|
||||
(getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
|
||||
|
||||
* bindtextdom.c:
|
||||
If compiled in glibc include libintl.h instead of libgettext.h.
|
||||
|
||||
Mon Sep 25 22:23:06 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
|
||||
Reported by Marcus Daniels.
|
||||
|
||||
* cat-compat.c (bindtextdomain):
|
||||
String used in putenv must not be recycled.
|
||||
Reported by Marcus Daniels.
|
||||
|
||||
* libgettext.h (__USE_GNU_GETTEXT):
|
||||
Additional symbol to signal that we use GNU gettext
|
||||
library.
|
||||
|
||||
* cat-compat.c (bindtextdomain):
|
||||
Fix bug with the strange stpcpy replacement.
|
||||
Reported by Nelson Beebe.
|
||||
|
||||
Sat Sep 23 08:23:51 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* cat-compat.c: Include <string.h> for stpcpy prototype.
|
||||
|
||||
* localealias.c (read_alias_file):
|
||||
While expand strdup code temporary variable `cp' hided
|
||||
higher level variable with same name. Rename to `tp'.
|
||||
|
||||
* textdomain.c (textdomain):
|
||||
Avoid warning by using temporary variable in strdup code.
|
||||
|
||||
* finddomain.c (_nl_find_domain): Remove unused variable `application'.
|
||||
|
||||
Thu Sep 21 15:51:44 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* localealias.c (alias_compare):
|
||||
Use strcasecmp() only if available. Else use
|
||||
implementation in place.
|
||||
|
||||
* intl-compat.c:
|
||||
Wrapper functions now call *__ functions instead of __*.
|
||||
|
||||
* libgettext.h: Declare prototypes for *__ functions instead for __*.
|
||||
|
||||
* cat-compat.c, loadmsgcat.c:
|
||||
Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
|
||||
of the standard libc and so prevent libintl.a from being used
|
||||
standalone.
|
||||
|
||||
* bindtextdom.c:
|
||||
Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
|
||||
of the standard libc and so prevent libintl.a from being used
|
||||
standalone.
|
||||
Rename to bindtextdomain__ if not used in GNU C Library.
|
||||
|
||||
* dgettext.c:
|
||||
Rename function to dgettext__ if not used in GNU C Library.
|
||||
|
||||
* gettext.c:
|
||||
Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
|
||||
of the standard libc and so prevent libintl.a from being used
|
||||
standalone.
|
||||
Functions now called gettext__ if not used in GNU C Library.
|
||||
|
||||
* dcgettext.c, localealias.c, textdomain.c, finddomain.c:
|
||||
Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
|
||||
of the standard libc and so prevent libintl.a from being used
|
||||
standalone.
|
||||
|
||||
Sun Sep 17 23:14:49 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c: Correct some bugs in handling of CEN standard
|
||||
locale definitions.
|
||||
|
||||
Thu Sep 7 01:49:28 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c: Implement CEN syntax.
|
||||
|
||||
* gettextP.h (loaded_domain): Extend number of successors to 31.
|
||||
|
||||
Sat Aug 19 19:25:29 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (aliaspath): Remove path to X11 locale dir.
|
||||
|
||||
* Makefile.in: Make install-src depend on install. This helps
|
||||
gettext to install the sources and other packages can use the
|
||||
install goal.
|
||||
|
||||
Sat Aug 19 15:19:33 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (uninstall): Remove stuff installed by install-src.
|
||||
|
||||
Tue Aug 15 13:13:53 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* VERSION.in: Initial revision.
|
||||
|
||||
* Makefile.in (DISTFILES):
|
||||
Add VERSION file. This is not necessary for gettext, but
|
||||
for other packages using this library.
|
||||
|
||||
Tue Aug 15 06:16:44 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* gettextP.h (_nl_find_domain):
|
||||
New prototype after changing search strategy.
|
||||
|
||||
* finddomain.c (_nl_find_domain):
|
||||
We now try only to find a specified catalog. Fall back to other
|
||||
catalogs listed in the locale list is now done in __dcgettext.
|
||||
|
||||
* dcgettext.c (__dcgettext):
|
||||
Now we provide message fall back even to different languages.
|
||||
I.e. if a message is not available in one language all the other
|
||||
in the locale list a tried. Formerly fall back was only possible
|
||||
within one language. Implemented by moving one loop from
|
||||
_nl_find_domain to here.
|
||||
|
||||
Mon Aug 14 23:45:50 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (gettextsrcdir):
|
||||
Directory where source of GNU gettext library are made
|
||||
available.
|
||||
(INSTALL, INSTALL_DATA): Programs used for installing sources.
|
||||
(gettext-src): New. Rule to install GNU gettext sources for use in
|
||||
gettextize shell script.
|
||||
|
||||
Sun Aug 13 14:40:48 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* loadmsgcat.c (_nl_load_domain):
|
||||
Use mmap for loading only when munmap function is
|
||||
also available.
|
||||
|
||||
* Makefile.in (install): Depend on `all' goal.
|
||||
|
||||
Wed Aug 9 11:04:33 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* localealias.c (read_alias_file):
|
||||
Do not overwrite '\n' when terminating alias value string.
|
||||
|
||||
* localealias.c (read_alias_file):
|
||||
Handle long lines. Ignore the rest not fitting in
|
||||
the buffer after the initial `fgets' call.
|
||||
|
||||
Wed Aug 9 00:54:29 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* gettextP.h (_nl_load_domain):
|
||||
Add prototype, replacing prototype for _nl_load_msg_cat.
|
||||
|
||||
* finddomain.c (_nl_find_domain):
|
||||
Remove unneeded variable filename and filename_len.
|
||||
(expand_alias): Remove prototype because functions does not
|
||||
exist anymore.
|
||||
|
||||
* localealias.c (read_alias_file):
|
||||
Change type of fname_len parameter to int.
|
||||
(xmalloc): Add prototype.
|
||||
|
||||
* loadmsgcat.c: Better prototypes for xmalloc.
|
||||
|
||||
Tue Aug 8 22:30:39 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c (_nl_find_domain):
|
||||
Allow alias name to be constructed from the four components.
|
||||
|
||||
* Makefile.in (aliaspath): New variable. Set to preliminary value.
|
||||
(SOURCES): Add localealias.c.
|
||||
(OBJECTS): Add localealias.o.
|
||||
|
||||
* gettextP.h: Add prototype for _nl_expand_alias.
|
||||
|
||||
* finddomain.c: Aliasing handled in intl/localealias.c.
|
||||
|
||||
* localealias.c: Aliasing for locale names.
|
||||
|
||||
* bindtextdom.c: Better prototypes for xmalloc and xstrdup.
|
||||
|
||||
Mon Aug 7 23:47:42 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (DISTFILES): gettext.perl is now found in misc/.
|
||||
|
||||
* cat-compat.c (bindtextdomain):
|
||||
Correct implementation. dirname parameter was not used.
|
||||
Reported by Marcus Daniels.
|
||||
|
||||
* gettextP.h (loaded_domain):
|
||||
New fields `successor' and `decided' for oo, lazy
|
||||
message handling implementation.
|
||||
|
||||
* dcgettext.c:
|
||||
Adopt for oo, lazy message handliing.
|
||||
Now we can inherit translations from less specific locales.
|
||||
(find_msg): New function.
|
||||
|
||||
* loadmsgcat.c, finddomain.c:
|
||||
Complete rewrite. Implement oo, lazy message handling :-).
|
||||
We now have an additional environment variable `LANGUAGE' with
|
||||
a higher priority than LC_ALL for the LC_MESSAGE locale.
|
||||
Here we can set a colon separated list of specifications each
|
||||
of the form `language[_territory[.codeset]][@modifier]'.
|
||||
|
||||
Sat Aug 5 09:55:42 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c (unistd.h):
|
||||
Include to get _PC_PATH_MAX defined on system having it.
|
||||
|
||||
Fri Aug 4 22:42:00 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* finddomain.c (stpcpy): Include prototype.
|
||||
|
||||
* Makefile.in (dist): Remove `copying instead' message.
|
||||
|
||||
Wed Aug 2 18:52:03 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (ID, TAGS): Do not use $^.
|
||||
|
||||
Tue Aug 1 20:07:11 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (TAGS, ID): Use $^ as command argument.
|
||||
(TAGS): Give etags -o option t write to current directory,
|
||||
not $(srcdir).
|
||||
(ID): Use $(srcdir) instead os $(top_srcdir)/src.
|
||||
(distclean): Remove ID.
|
||||
|
||||
Sun Jul 30 11:51:46 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (gnulocaledir):
|
||||
New variable, always using share/ for data directory.
|
||||
(DEFS): Add GNULOCALEDIR, used in finddomain.c.
|
||||
|
||||
* finddomain.c (_nl_default_dirname):
|
||||
Set to GNULOCALEDIR, because it always has to point
|
||||
to the directory where GNU gettext Library writes it to.
|
||||
|
||||
* intl-compat.c (textdomain, bindtextdomain):
|
||||
Undefine macros before function definition.
|
||||
|
||||
Sat Jul 22 01:10:02 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* libgettext.h (_LIBINTL_H):
|
||||
Protect definition in case where this file is included as
|
||||
libgettext.h on Solaris machines. Add comment about this.
|
||||
|
||||
Wed Jul 19 02:36:42 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* intl-compat.c (textdomain): Correct typo.
|
||||
|
||||
Wed Jul 19 01:51:35 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* dcgettext.c (dcgettext): Function now called __dcgettext.
|
||||
|
||||
* dgettext.c (dgettext): Now called __dgettext and calls
|
||||
__dcgettext.
|
||||
|
||||
* gettext.c (gettext):
|
||||
Function now called __gettext and calls __dgettext.
|
||||
|
||||
* textdomain.c (textdomain): Function now called __textdomain.
|
||||
|
||||
* bindtextdom.c (bindtextdomain): Function now called
|
||||
__bindtextdomain.
|
||||
|
||||
* intl-compat.c: Initial revision.
|
||||
|
||||
* Makefile.in (SOURCES): Add intl-compat.c.
|
||||
(OBJECTS): We always compile the GNU gettext library functions.
|
||||
OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
|
||||
and intl-compat.o.
|
||||
(GETTOBJS): Contains now only intl-compat.o.
|
||||
|
||||
* libgettext.h:
|
||||
Re-include protection matches dualistic character of libgettext.h.
|
||||
For all functions in GNU gettext library define __ counter part.
|
||||
|
||||
* finddomain.c (strchr): Define as index if not found in C library.
|
||||
(_nl_find_domain): For relative paths paste / in between.
|
||||
|
||||
Tue Jul 18 16:37:45 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
|
||||
|
||||
* xopen-msg.sed: Fix bug with `msgstr ""' lines.
|
||||
A little bit better comments.
|
||||
|
||||
Tue Jul 18 01:18:27 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in:
|
||||
po-mode.el, makelinks, combine-sh are now found in ../misc.
|
||||
|
||||
* po-mode.el, makelinks, combine-sh, elisp-comp:
|
||||
Moved to ../misc/.
|
||||
|
||||
* libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
|
||||
|
||||
Sun Jul 16 22:33:02 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (INSTALL, INSTALL_DATA): New variables.
|
||||
(install-data, uninstall): Install/uninstall .elc file.
|
||||
|
||||
* po-mode.el (Installation comment):
|
||||
Add .pox as possible extension of .po files.
|
||||
|
||||
Sun Jul 16 13:23:27 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* elisp-comp: Complete new version by Franc,ois: This does not
|
||||
fail when not compiling in the source directory.
|
||||
|
||||
Sun Jul 16 00:12:17 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (../po/cat-id-tbl.o):
|
||||
Use $(MAKE) instead of make for recursive make.
|
||||
|
||||
* Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
|
||||
(install-exec): Add missing dummy goal.
|
||||
(install-data, uninstall): @ in multi-line shell command at
|
||||
beginning, not in front of echo. Reported by Eric Backus.
|
||||
|
||||
Sat Jul 15 00:21:28 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (DISTFILES):
|
||||
Rename libgettext.perl to gettext.perl to fit in 14 chars
|
||||
file systems.
|
||||
|
||||
* gettext.perl:
|
||||
Rename to gettext.perl to fit in 14 chars file systems.
|
||||
|
||||
Thu Jul 13 23:17:20 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* cat-compat.c: If !STDC_HEADERS try to include malloc.h.
|
||||
|
||||
Thu Jul 13 20:55:02 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* po2tbl.sed.in: Pretty printing.
|
||||
|
||||
* linux-msg.sed, xopen-msg.sed:
|
||||
Correct bugs with handling substitute flags in branches.
|
||||
|
||||
* hash-string.h (hash_string):
|
||||
Old K&R compilers don't under stand `unsigned char'.
|
||||
|
||||
* gettext.h (nls_uint32):
|
||||
Some old K&R compilers (eg HP) don't understand `unsigned int'.
|
||||
|
||||
* cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
|
||||
|
||||
Thu Jul 13 01:34:33 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (ELCFILES): New variable.
|
||||
(DISTFILES): Add elisp-comp.
|
||||
Add implicit rule for .el -> .elc compilation.
|
||||
(install-data): install $ELCFILES
|
||||
(clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
|
||||
|
||||
* elisp-comp: Initial revision
|
||||
|
||||
Wed Jul 12 16:14:52 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in:
|
||||
cat-id-tbl.c is now found in po/. This enables us to use an identical
|
||||
intl/ directory in all packages.
|
||||
|
||||
* dcgettext.c (dcgettext): hashing does not work for table size <= 2.
|
||||
|
||||
* textdomain.c: fix typo (#if def -> #if defined)
|
||||
|
||||
Tue Jul 11 18:44:43 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in (stamp-cat-id): use top_srcdir to address source files
|
||||
(DISTFILES,distclean): move tupdate.perl to src/
|
||||
|
||||
* po-to-tbl.sed.in:
|
||||
add additional jump to clear change flag to recognize multiline strings
|
||||
|
||||
Tue Jul 11 01:32:50 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* textdomain.c: Protect inclusion of stdlib.h and string.h.
|
||||
|
||||
* loadmsgcat.c: Protect inclusion of stdlib.h.
|
||||
|
||||
* libgettext.h: Protect inclusion of locale.h.
|
||||
Allow use in C++ programs.
|
||||
Define NULL is not happened already.
|
||||
|
||||
* Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
|
||||
po-to-tbl.sed.
|
||||
(distclean): remove po-to-tbl.sed and tupdate.perl.
|
||||
|
||||
* tupdate.perl.in: Substitute Perl path even in exec line.
|
||||
Don't include entries without translation from old .po file.
|
||||
|
||||
Tue Jul 4 00:41:51 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* tupdate.perl.in: use "Updated: " in msgid "".
|
||||
|
||||
* cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
|
||||
Define getenv if !__STDC__.
|
||||
|
||||
* bindtextdom.c: Protect stdlib.h and string.h inclusion.
|
||||
Define free if !__STDC__.
|
||||
|
||||
* finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
|
||||
Define free if !__STDC__.
|
||||
|
||||
* cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
|
||||
|
||||
Mon Jul 3 23:56:30 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
|
||||
Remove unneeded $(srcdir) from Makefile.in dependency.
|
||||
|
||||
* makelinks: Add copyright and short description.
|
||||
|
||||
* po-mode.el: Last version for 0.7.
|
||||
|
||||
* tupdate.perl.in: Fix die message.
|
||||
|
||||
* dcgettext.c: Protect include of string.h.
|
||||
|
||||
* gettext.c: Protect include of stdlib.h and further tries to get NULL.
|
||||
|
||||
* finddomain.c: Some corrections in includes.
|
||||
|
||||
* Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
|
||||
|
||||
* po-to-tbl.sed: Adopt for new .po file format.
|
||||
|
||||
* linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
|
||||
|
||||
Sun Jul 2 23:55:03 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* tupdate.perl.in: Complete rewrite for new .po file format.
|
||||
|
||||
Sun Jul 2 02:06:50 1995 Ulrich Drepper <drepper@myware>
|
||||
|
||||
* First official release. This directory contains all the code
|
||||
needed to internationalize own packages. It provides functions
|
||||
which allow to use the X/Open catgets function with an interface
|
||||
like the Uniforum gettext function. For system which does not
|
||||
have neither of those a complete implementation is provided.
|
214
texinfo/intl/Makefile.in
Normal file
214
texinfo/intl/Makefile.in
Normal file
@ -0,0 +1,214 @@
|
||||
# Makefile for directory with message catalog handling in GNU NLS Utilities.
|
||||
# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
PACKAGE = @PACKAGE@
|
||||
VERSION = @VERSION@
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
top_builddir = ..
|
||||
VPATH = @srcdir@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
transform = @program_transform_name@
|
||||
libdir = $(exec_prefix)/lib
|
||||
includedir = $(prefix)/include
|
||||
datadir = $(prefix)/@DATADIRNAME@
|
||||
localedir = $(datadir)/locale
|
||||
gnulocaledir = $(prefix)/share/locale
|
||||
gettextsrcdir = @datadir@/gettext/intl
|
||||
aliaspath = $(localedir):.
|
||||
subdir = intl
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
|
||||
l = @l@
|
||||
|
||||
AR = ar
|
||||
CC = @CC@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
RANLIB = @RANLIB@
|
||||
|
||||
DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
|
||||
-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
|
||||
CFLAGS = @CFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
|
||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
||||
|
||||
HEADERS = $(COMHDRS) libgettext.h loadinfo.h
|
||||
COMHDRS = gettext.h gettextP.h hash-string.h
|
||||
SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
|
||||
COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
|
||||
finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
|
||||
explodename.c
|
||||
OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
|
||||
finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
|
||||
explodename.$lo
|
||||
CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
|
||||
GETTOBJS = intl-compat.$lo
|
||||
DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
|
||||
xopen-msg.sed $(HEADERS) $(SOURCES)
|
||||
DISTFILES.normal = VERSION
|
||||
DISTFILES.gettext = libintl.glibc intlh.inst.in
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .lo
|
||||
.c.o:
|
||||
$(COMPILE) $<
|
||||
.c.lo:
|
||||
$(LIBTOOL) --mode=compile $(COMPILE) $<
|
||||
|
||||
INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
|
||||
|
||||
all: all-@USE_INCLUDED_LIBINTL@
|
||||
|
||||
all-yes: libintl.$la intlh.inst
|
||||
all-no:
|
||||
|
||||
libintl.a: $(OBJECTS)
|
||||
rm -f $@
|
||||
$(AR) cru $@ $(OBJECTS)
|
||||
$(RANLIB) $@
|
||||
|
||||
libintl.la: $(OBJECTS)
|
||||
$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
|
||||
-version-info 1:0 -rpath $(libdir)
|
||||
|
||||
../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
|
||||
cd ../po && $(MAKE) cat-id-tbl.$lo
|
||||
|
||||
check: all
|
||||
|
||||
# This installation goal is only used in GNU gettext. Packages which
|
||||
# only use the library should use install instead.
|
||||
|
||||
# We must not install the libintl.h/libintl.a files if we are on a
|
||||
# system which has the gettext() function in its C library or in a
|
||||
# separate library or use the catgets interface. A special case is
|
||||
# where configure found a previously installed GNU gettext library.
|
||||
# If you want to use the one which comes with this version of the
|
||||
# package, you have to use `configure --with-included-gettext'.
|
||||
install: install-exec install-data
|
||||
install-exec: all
|
||||
if test "$(PACKAGE)" = "gettext" \
|
||||
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
||||
if test -r $(MKINSTALLDIRS); then \
|
||||
$(MKINSTALLDIRS) $(libdir) $(includedir); \
|
||||
else \
|
||||
$(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
|
||||
fi; \
|
||||
$(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
|
||||
$(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
install-data: all
|
||||
if test "$(PACKAGE)" = "gettext"; then \
|
||||
if test -r $(MKINSTALLDIRS); then \
|
||||
$(MKINSTALLDIRS) $(gettextsrcdir); \
|
||||
else \
|
||||
$(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
|
||||
fi; \
|
||||
$(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
|
||||
cd $(srcdir) && \
|
||||
dists="$(DISTFILES.common)"; \
|
||||
for file in $$dists; do \
|
||||
$(INSTALL_DATA) $$file $(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
|
||||
# Define this as empty until I found a useful application.
|
||||
installcheck:
|
||||
|
||||
uninstall:
|
||||
dists="$(DISTFILES.common)"; \
|
||||
for file in $$dists; do \
|
||||
rm -f $(gettextsrcdir)/$$file; \
|
||||
done
|
||||
|
||||
info dvi install-info:
|
||||
|
||||
$(OBJECTS): ../config.h libgettext.h
|
||||
bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
|
||||
dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
|
||||
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES)
|
||||
here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
|
||||
|
||||
id: ID
|
||||
|
||||
ID: $(HEADERS) $(SOURCES)
|
||||
here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
|
||||
|
||||
|
||||
mostlyclean:
|
||||
rm -f *.a *.o *.lo core core.*
|
||||
|
||||
clean: mostlyclean
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile ID TAGS po2msg.sed po2tbl.sed libintl.h
|
||||
|
||||
maintainer-clean: distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
|
||||
# GNU gettext needs not contain the file `VERSION' but contains some
|
||||
# other files which should not be distributed in other packages.
|
||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist distdir: Makefile $(DISTFILES)
|
||||
if test "$(PACKAGE)" = gettext; then \
|
||||
additional="$(DISTFILES.gettext)"; \
|
||||
else \
|
||||
additional="$(DISTFILES.normal)"; \
|
||||
fi; \
|
||||
for file in $(DISTFILES.common) $$additional; do \
|
||||
ln $(srcdir)/$$file $(distdir) 2> /dev/null \
|
||||
|| cp -p $(srcdir)/$$file $(distdir); \
|
||||
done
|
||||
|
||||
dist-libc:
|
||||
tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
|
||||
|
||||
Makefile: Makefile.in ../config.status
|
||||
cd .. \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
# The dependency for intlh.inst is different in gettext and all other
|
||||
# packages. Because we cannot you GNU make features we have to solve
|
||||
# the problem while rewriting Makefile.in.
|
||||
@GT_YES@intlh.inst: intlh.inst.in ../config.status
|
||||
@GT_YES@ cd .. \
|
||||
@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
|
||||
@GT_YES@ $(SHELL) ./config.status
|
||||
@GT_NO@.PHONY: intlh.inst
|
||||
@GT_NO@intlh.inst:
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
1
texinfo/intl/VERSION
Normal file
1
texinfo/intl/VERSION
Normal file
@ -0,0 +1 @@
|
||||
GNU gettext library from gettext-0.10.27
|
175
texinfo/intl/bindtextdom.c
Normal file
175
texinfo/intl/bindtextdom.c
Normal file
@ -0,0 +1,175 @@
|
||||
/* bindtextdom.c -- implementation of the bindtextdomain(3) function
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined STDC_HEADERS || defined _LIBC
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
# ifdef HAVE_MALLOC_H
|
||||
# include <malloc.h>
|
||||
# else
|
||||
void free ();
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined HAVE_STRING_H || defined _LIBC
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
# ifndef memcpy
|
||||
# define memcpy(Dst, Src, Num) bcopy ((Src), (Dst), (Num))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgettext.h"
|
||||
#endif
|
||||
#include "gettext.h"
|
||||
#include "gettextP.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Contains the default location of the message catalogs. */
|
||||
extern const char _nl_default_dirname[];
|
||||
|
||||
/* List with bindings of specific domains. */
|
||||
extern struct binding *_nl_domain_bindings;
|
||||
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define BINDTEXTDOMAIN __bindtextdomain
|
||||
#else
|
||||
# define BINDTEXTDOMAIN bindtextdomain__
|
||||
#endif
|
||||
|
||||
/* Specify that the DOMAINNAME message catalog will be found
|
||||
in DIRNAME rather than in the system locale data base. */
|
||||
char *
|
||||
BINDTEXTDOMAIN (domainname, dirname)
|
||||
const char *domainname;
|
||||
const char *dirname;
|
||||
{
|
||||
struct binding *binding;
|
||||
|
||||
/* Some sanity checks. */
|
||||
if (domainname == NULL || domainname[0] == '\0')
|
||||
return NULL;
|
||||
|
||||
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
|
||||
{
|
||||
int compare = strcmp (domainname, binding->domainname);
|
||||
if (compare == 0)
|
||||
/* We found it! */
|
||||
break;
|
||||
if (compare < 0)
|
||||
{
|
||||
/* It is not in the list. */
|
||||
binding = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (dirname == NULL)
|
||||
/* The current binding has be to returned. */
|
||||
return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
|
||||
|
||||
if (binding != NULL)
|
||||
{
|
||||
/* The domain is already bound. Replace the old binding. */
|
||||
char *new_dirname;
|
||||
|
||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
||||
new_dirname = (char *) _nl_default_dirname;
|
||||
else
|
||||
{
|
||||
size_t len = strlen (dirname) + 1;
|
||||
new_dirname = (char *) malloc (len);
|
||||
if (new_dirname == NULL)
|
||||
return NULL;
|
||||
|
||||
memcpy (new_dirname, dirname, len);
|
||||
}
|
||||
|
||||
if (strcmp (binding->dirname, _nl_default_dirname) != 0)
|
||||
free (binding->dirname);
|
||||
|
||||
binding->dirname = new_dirname;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We have to create a new binding. */
|
||||
size_t len;
|
||||
struct binding *new_binding =
|
||||
(struct binding *) malloc (sizeof (*new_binding));
|
||||
|
||||
if (new_binding == NULL)
|
||||
return NULL;
|
||||
|
||||
len = strlen (domainname) + 1;
|
||||
new_binding->domainname = (char *) malloc (len);
|
||||
if (new_binding->domainname == NULL)
|
||||
return NULL;
|
||||
memcpy (new_binding->domainname, domainname, len);
|
||||
|
||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
||||
new_binding->dirname = (char *) _nl_default_dirname;
|
||||
else
|
||||
{
|
||||
len = strlen (dirname) + 1;
|
||||
new_binding->dirname = (char *) malloc (len);
|
||||
if (new_binding->dirname == NULL)
|
||||
return NULL;
|
||||
memcpy (new_binding->dirname, dirname, len);
|
||||
}
|
||||
|
||||
/* Now enqueue it. */
|
||||
if (_nl_domain_bindings == NULL
|
||||
|| strcmp (domainname, _nl_domain_bindings->domainname) < 0)
|
||||
{
|
||||
new_binding->next = _nl_domain_bindings;
|
||||
_nl_domain_bindings = new_binding;
|
||||
}
|
||||
else
|
||||
{
|
||||
binding = _nl_domain_bindings;
|
||||
while (binding->next != NULL
|
||||
&& strcmp (domainname, binding->next->domainname) > 0)
|
||||
binding = binding->next;
|
||||
|
||||
new_binding->next = binding->next;
|
||||
binding->next = new_binding;
|
||||
}
|
||||
|
||||
binding = new_binding;
|
||||
}
|
||||
|
||||
return binding->dirname;
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__bindtextdomain, bindtextdomain);
|
||||
#endif
|
252
texinfo/intl/cat-compat.c
Normal file
252
texinfo/intl/cat-compat.c
Normal file
@ -0,0 +1,252 @@
|
||||
/* Compatibility code for gettext-using-catgets interface.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
|
||||
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., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
#else
|
||||
char *getenv ();
|
||||
# ifdef HAVE_MALLOC_H
|
||||
# include <malloc.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NL_TYPES_H
|
||||
# include <nl_types.h>
|
||||
#endif
|
||||
|
||||
#include "libgettext.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* The catalog descriptor. */
|
||||
static nl_catd catalog = (nl_catd) -1;
|
||||
|
||||
/* Name of the default catalog. */
|
||||
static const char default_catalog_name[] = "messages";
|
||||
|
||||
/* Name of currently used catalog. */
|
||||
static const char *catalog_name = default_catalog_name;
|
||||
|
||||
/* Get ID for given string. If not found return -1. */
|
||||
static int msg_to_cat_id PARAMS ((const char *msg));
|
||||
|
||||
/* Substitution for systems lacking this function in their C library. */
|
||||
#if !_LIBC && !HAVE_STPCPY
|
||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||
#endif
|
||||
|
||||
|
||||
/* Set currently used domain/catalog. */
|
||||
char *
|
||||
textdomain (domainname)
|
||||
const char *domainname;
|
||||
{
|
||||
nl_catd new_catalog;
|
||||
char *new_name;
|
||||
size_t new_name_len;
|
||||
char *lang;
|
||||
|
||||
#if HAVE_SETLOCALE && HAVE_LC_MESSAGES && HAVE_SETLOCALE_NULL
|
||||
lang = setlocale (LC_MESSAGES, NULL);
|
||||
#else
|
||||
lang = getenv ("LC_ALL");
|
||||
if (lang == NULL || lang[0] == '\0')
|
||||
{
|
||||
lang = getenv ("LC_MESSAGES");
|
||||
if (lang == NULL || lang[0] == '\0')
|
||||
lang = getenv ("LANG");
|
||||
}
|
||||
#endif
|
||||
if (lang == NULL || lang[0] == '\0')
|
||||
lang = "C";
|
||||
|
||||
/* See whether name of currently used domain is asked. */
|
||||
if (domainname == NULL)
|
||||
return (char *) catalog_name;
|
||||
|
||||
if (domainname[0] == '\0')
|
||||
domainname = default_catalog_name;
|
||||
|
||||
/* Compute length of added path element. */
|
||||
new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
|
||||
+ sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
|
||||
+ sizeof (".cat");
|
||||
|
||||
new_name = (char *) malloc (new_name_len);
|
||||
if (new_name == NULL)
|
||||
return NULL;
|
||||
|
||||
strcpy (new_name, PACKAGE);
|
||||
new_catalog = catopen (new_name, 0);
|
||||
|
||||
if (new_catalog == (nl_catd) -1)
|
||||
{
|
||||
/* NLSPATH search didn't work, try absolute path */
|
||||
sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
|
||||
PACKAGE);
|
||||
new_catalog = catopen (new_name, 0);
|
||||
|
||||
if (new_catalog == (nl_catd) -1)
|
||||
{
|
||||
free (new_name);
|
||||
return (char *) catalog_name;
|
||||
}
|
||||
}
|
||||
|
||||
/* Close old catalog. */
|
||||
if (catalog != (nl_catd) -1)
|
||||
catclose (catalog);
|
||||
if (catalog_name != default_catalog_name)
|
||||
free ((char *) catalog_name);
|
||||
|
||||
catalog = new_catalog;
|
||||
catalog_name = new_name;
|
||||
|
||||
return (char *) catalog_name;
|
||||
}
|
||||
|
||||
char *
|
||||
bindtextdomain (domainname, dirname)
|
||||
const char *domainname;
|
||||
const char *dirname;
|
||||
{
|
||||
#if HAVE_SETENV || HAVE_PUTENV
|
||||
char *old_val, *new_val, *cp;
|
||||
size_t new_val_len;
|
||||
|
||||
/* This does not make much sense here but to be compatible do it. */
|
||||
if (domainname == NULL)
|
||||
return NULL;
|
||||
|
||||
/* Compute length of added path element. If we use setenv we don't need
|
||||
the first byts for NLSPATH=, but why complicate the code for this
|
||||
peanuts. */
|
||||
new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
|
||||
+ sizeof ("/%L/LC_MESSAGES/%N.cat");
|
||||
|
||||
old_val = getenv ("NLSPATH");
|
||||
if (old_val == NULL || old_val[0] == '\0')
|
||||
{
|
||||
old_val = NULL;
|
||||
new_val_len += 1 + sizeof (LOCALEDIR) - 1
|
||||
+ sizeof ("/%L/LC_MESSAGES/%N.cat");
|
||||
}
|
||||
else
|
||||
new_val_len += strlen (old_val);
|
||||
|
||||
new_val = (char *) malloc (new_val_len);
|
||||
if (new_val == NULL)
|
||||
return NULL;
|
||||
|
||||
# if HAVE_SETENV
|
||||
cp = new_val;
|
||||
# else
|
||||
cp = stpcpy (new_val, "NLSPATH=");
|
||||
# endif
|
||||
|
||||
cp = stpcpy (cp, dirname);
|
||||
cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
|
||||
|
||||
if (old_val == NULL)
|
||||
{
|
||||
# if __STDC__
|
||||
stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
|
||||
# else
|
||||
|
||||
cp = stpcpy (cp, LOCALEDIR);
|
||||
stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
|
||||
# endif
|
||||
}
|
||||
else
|
||||
stpcpy (cp, old_val);
|
||||
|
||||
# if HAVE_SETENV
|
||||
setenv ("NLSPATH", new_val, 1);
|
||||
free (new_val);
|
||||
# else
|
||||
putenv (new_val);
|
||||
/* Do *not* free the environment entry we just entered. It is used
|
||||
from now on. */
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
return (char *) domainname;
|
||||
}
|
||||
|
||||
#undef gettext
|
||||
char *
|
||||
gettext (msg)
|
||||
const char *msg;
|
||||
{
|
||||
int msgid;
|
||||
|
||||
if (msg == NULL || catalog == (nl_catd) -1)
|
||||
return (char *) msg;
|
||||
|
||||
/* Get the message from the catalog. We always use set number 1.
|
||||
The message ID is computed by the function `msg_to_cat_id'
|
||||
which works on the table generated by `po-to-tbl'. */
|
||||
msgid = msg_to_cat_id (msg);
|
||||
if (msgid == -1)
|
||||
return (char *) msg;
|
||||
|
||||
return catgets (catalog, 1, msgid, (char *) msg);
|
||||
}
|
||||
|
||||
/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
|
||||
for the one equal to msg. If it is found return the ID. In case when
|
||||
the string is not found return -1. */
|
||||
static int
|
||||
msg_to_cat_id (msg)
|
||||
const char *msg;
|
||||
{
|
||||
int cnt;
|
||||
|
||||
for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
|
||||
if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
|
||||
return _msg_tbl[cnt]._msg_number;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
/* We don't want libintl.a to depend on any other library. So we
|
||||
avoid the non-standard function stpcpy. In GNU C Library this
|
||||
function is available, though. Also allow the symbol HAVE_STPCPY
|
||||
to be defined. */
|
||||
#if !_LIBC && !HAVE_STPCPY
|
||||
static char *
|
||||
stpcpy (dest, src)
|
||||
char *dest;
|
||||
const char *src;
|
||||
{
|
||||
while ((*dest++ = *src++) != '\0')
|
||||
/* Do nothing. */ ;
|
||||
return dest - 1;
|
||||
}
|
||||
#endif
|
596
texinfo/intl/dcgettext.c
Normal file
596
texinfo/intl/dcgettext.c
Normal file
@ -0,0 +1,596 @@
|
||||
/* dcgettext.c -- implementation of the dcgettext(3) function
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
# define alloca __builtin_alloca
|
||||
# define HAVE_ALLOCA 1
|
||||
#else
|
||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||
# include <alloca.h>
|
||||
# else
|
||||
# ifdef _AIX
|
||||
#pragma alloca
|
||||
# else
|
||||
# ifndef alloca
|
||||
char *alloca ();
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#if defined STDC_HEADERS || defined _LIBC
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
char *getenv ();
|
||||
# ifdef HAVE_MALLOC_H
|
||||
# include <malloc.h>
|
||||
# else
|
||||
void free ();
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined HAVE_STRING_H || defined _LIBC
|
||||
# ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE 1
|
||||
# endif
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
#if !HAVE_STRCHR && !defined _LIBC
|
||||
# ifndef strchr
|
||||
# define strchr index
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "gettext.h"
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgettext.h"
|
||||
#endif
|
||||
#include "hash-string.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Rename the non ANSI C functions. This is required by the standard
|
||||
because some ANSI C functions will require linking with this object
|
||||
file and the name space must not be polluted. */
|
||||
# define getcwd __getcwd
|
||||
# define stpcpy __stpcpy
|
||||
#else
|
||||
# if !defined HAVE_GETCWD
|
||||
char *getwd ();
|
||||
# define getcwd(buf, max) getwd (buf)
|
||||
# else
|
||||
char *getcwd ();
|
||||
# endif
|
||||
# ifndef HAVE_STPCPY
|
||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Amount to increase buffer size by in each try. */
|
||||
#define PATH_INCR 32
|
||||
|
||||
/* The following is from pathmax.h. */
|
||||
/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
|
||||
PATH_MAX but might cause redefinition warnings when sys/param.h is
|
||||
later included (as on MORE/BSD 4.3). */
|
||||
#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
#ifndef _POSIX_PATH_MAX
|
||||
# define _POSIX_PATH_MAX 255
|
||||
#endif
|
||||
|
||||
#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
|
||||
# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
|
||||
#endif
|
||||
|
||||
/* Don't include sys/param.h if it already has been. */
|
||||
#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#if !defined(PATH_MAX) && defined(MAXPATHLEN)
|
||||
# define PATH_MAX MAXPATHLEN
|
||||
#endif
|
||||
|
||||
#ifndef PATH_MAX
|
||||
# define PATH_MAX _POSIX_PATH_MAX
|
||||
#endif
|
||||
|
||||
/* XPG3 defines the result of `setlocale (category, NULL)' as:
|
||||
``Directs `setlocale()' to query `category' and return the current
|
||||
setting of `local'.''
|
||||
However it does not specify the exact format. And even worse: POSIX
|
||||
defines this not at all. So we can use this feature only on selected
|
||||
system (e.g. those using GNU C Library). */
|
||||
#ifdef _LIBC
|
||||
# define HAVE_LOCALE_NULL
|
||||
#endif
|
||||
|
||||
/* Name of the default domain used for gettext(3) prior any call to
|
||||
textdomain(3). The default value for this is "messages". */
|
||||
const char _nl_default_default_domain[] = "messages";
|
||||
|
||||
/* Value used as the default domain for gettext(3). */
|
||||
const char *_nl_current_default_domain = _nl_default_default_domain;
|
||||
|
||||
/* Contains the default location of the message catalogs. */
|
||||
const char _nl_default_dirname[] = GNULOCALEDIR;
|
||||
|
||||
/* List with bindings of specific domains created by bindtextdomain()
|
||||
calls. */
|
||||
struct binding *_nl_domain_bindings;
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
|
||||
const char *msgid));
|
||||
static const char *category_to_name PARAMS ((int category));
|
||||
static const char *guess_category_value PARAMS ((int category,
|
||||
const char *categoryname));
|
||||
|
||||
|
||||
/* For those loosing systems which don't have `alloca' we have to add
|
||||
some additional code emulating it. */
|
||||
#ifdef HAVE_ALLOCA
|
||||
/* Nothing has to be done. */
|
||||
# define ADD_BLOCK(list, address) /* nothing */
|
||||
# define FREE_BLOCKS(list) /* nothing */
|
||||
#else
|
||||
struct block_list
|
||||
{
|
||||
void *address;
|
||||
struct block_list *next;
|
||||
};
|
||||
# define ADD_BLOCK(list, addr) \
|
||||
do { \
|
||||
struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
|
||||
/* If we cannot get a free block we cannot add the new element to \
|
||||
the list. */ \
|
||||
if (newp != NULL) { \
|
||||
newp->address = (addr); \
|
||||
newp->next = (list); \
|
||||
(list) = newp; \
|
||||
} \
|
||||
} while (0)
|
||||
# define FREE_BLOCKS(list) \
|
||||
do { \
|
||||
while (list != NULL) { \
|
||||
struct block_list *old = list; \
|
||||
list = list->next; \
|
||||
free (old); \
|
||||
} \
|
||||
} while (0)
|
||||
# undef alloca
|
||||
# define alloca(size) (malloc (size))
|
||||
#endif /* have alloca */
|
||||
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DCGETTEXT __dcgettext
|
||||
#else
|
||||
# define DCGETTEXT dcgettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||
locale. */
|
||||
char *
|
||||
DCGETTEXT (domainname, msgid, category)
|
||||
const char *domainname;
|
||||
const char *msgid;
|
||||
int category;
|
||||
{
|
||||
#ifndef HAVE_ALLOCA
|
||||
struct block_list *block_list = NULL;
|
||||
#endif
|
||||
struct loaded_l10nfile *domain;
|
||||
struct binding *binding;
|
||||
const char *categoryname;
|
||||
const char *categoryvalue;
|
||||
char *dirname, *xdomainname;
|
||||
char *single_locale;
|
||||
char *retval;
|
||||
int saved_errno = errno;
|
||||
|
||||
/* If no real MSGID is given return NULL. */
|
||||
if (msgid == NULL)
|
||||
return NULL;
|
||||
|
||||
/* If DOMAINNAME is NULL, we are interested in the default domain. If
|
||||
CATEGORY is not LC_MESSAGES this might not make much sense but the
|
||||
defintion left this undefined. */
|
||||
if (domainname == NULL)
|
||||
domainname = _nl_current_default_domain;
|
||||
|
||||
/* First find matching binding. */
|
||||
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
|
||||
{
|
||||
int compare = strcmp (domainname, binding->domainname);
|
||||
if (compare == 0)
|
||||
/* We found it! */
|
||||
break;
|
||||
if (compare < 0)
|
||||
{
|
||||
/* It is not in the list. */
|
||||
binding = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (binding == NULL)
|
||||
dirname = (char *) _nl_default_dirname;
|
||||
else if (binding->dirname[0] == '/')
|
||||
dirname = binding->dirname;
|
||||
else
|
||||
{
|
||||
/* We have a relative path. Make it absolute now. */
|
||||
size_t dirname_len = strlen (binding->dirname) + 1;
|
||||
size_t path_max;
|
||||
char *ret;
|
||||
|
||||
path_max = (unsigned) PATH_MAX;
|
||||
path_max += 2; /* The getcwd docs say to do this. */
|
||||
|
||||
dirname = (char *) alloca (path_max + dirname_len);
|
||||
ADD_BLOCK (block_list, dirname);
|
||||
|
||||
errno = 0;
|
||||
while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
|
||||
{
|
||||
path_max += PATH_INCR;
|
||||
dirname = (char *) alloca (path_max + dirname_len);
|
||||
ADD_BLOCK (block_list, dirname);
|
||||
errno = 0;
|
||||
}
|
||||
|
||||
if (ret == NULL)
|
||||
{
|
||||
/* We cannot get the current working directory. Don't signal an
|
||||
error but simply return the default string. */
|
||||
FREE_BLOCKS (block_list);
|
||||
errno = saved_errno;
|
||||
return (char *) msgid;
|
||||
}
|
||||
|
||||
/* 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. */
|
||||
stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
|
||||
}
|
||||
|
||||
/* Now determine the symbolic name of CATEGORY and its value. */
|
||||
categoryname = category_to_name (category);
|
||||
categoryvalue = guess_category_value (category, categoryname);
|
||||
|
||||
xdomainname = (char *) alloca (strlen (categoryname)
|
||||
+ strlen (domainname) + 5);
|
||||
ADD_BLOCK (block_list, xdomainname);
|
||||
/* 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. */
|
||||
stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
|
||||
domainname),
|
||||
".mo");
|
||||
|
||||
/* Creating working area. */
|
||||
single_locale = (char *) alloca (strlen (categoryvalue) + 1);
|
||||
ADD_BLOCK (block_list, single_locale);
|
||||
|
||||
|
||||
/* Search for the given string. This is a loop because we perhaps
|
||||
got an ordered list of languages to consider for th translation. */
|
||||
while (1)
|
||||
{
|
||||
/* Make CATEGORYVALUE point to the next element of the list. */
|
||||
while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
|
||||
++categoryvalue;
|
||||
if (categoryvalue[0] == '\0')
|
||||
{
|
||||
/* The whole contents of CATEGORYVALUE has been searched but
|
||||
no valid entry has been found. We solve this situation
|
||||
by implicitely appending a "C" entry, i.e. no translation
|
||||
will take place. */
|
||||
single_locale[0] = 'C';
|
||||
single_locale[1] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
char *cp = single_locale;
|
||||
while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
|
||||
*cp++ = *categoryvalue++;
|
||||
*cp = '\0';
|
||||
}
|
||||
|
||||
/* If the current locale value is C (or POSIX) we don't load a
|
||||
domain. Return the MSGID. */
|
||||
if (strcmp (single_locale, "C") == 0
|
||||
|| strcmp (single_locale, "POSIX") == 0)
|
||||
{
|
||||
FREE_BLOCKS (block_list);
|
||||
errno = saved_errno;
|
||||
return (char *) msgid;
|
||||
}
|
||||
|
||||
|
||||
/* Find structure describing the message catalog matching the
|
||||
DOMAINNAME and CATEGORY. */
|
||||
domain = _nl_find_domain (dirname, single_locale, xdomainname);
|
||||
|
||||
if (domain != NULL)
|
||||
{
|
||||
retval = find_msg (domain, msgid);
|
||||
|
||||
if (retval == NULL)
|
||||
{
|
||||
int cnt;
|
||||
|
||||
for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
|
||||
{
|
||||
retval = find_msg (domain->successor[cnt], msgid);
|
||||
|
||||
if (retval != NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (retval != NULL)
|
||||
{
|
||||
FREE_BLOCKS (block_list);
|
||||
errno = saved_errno;
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dcgettext, dcgettext);
|
||||
#endif
|
||||
|
||||
|
||||
static char *
|
||||
find_msg (domain_file, msgid)
|
||||
struct loaded_l10nfile *domain_file;
|
||||
const char *msgid;
|
||||
{
|
||||
size_t top, act, bottom;
|
||||
struct loaded_domain *domain;
|
||||
|
||||
if (domain_file->decided == 0)
|
||||
_nl_load_domain (domain_file);
|
||||
|
||||
if (domain_file->data == NULL)
|
||||
return NULL;
|
||||
|
||||
domain = (struct loaded_domain *) domain_file->data;
|
||||
|
||||
/* Locate the MSGID and its translation. */
|
||||
if (domain->hash_size > 2 && domain->hash_tab != NULL)
|
||||
{
|
||||
/* Use the hashing table. */
|
||||
nls_uint32 len = strlen (msgid);
|
||||
nls_uint32 hash_val = hash_string (msgid);
|
||||
nls_uint32 idx = hash_val % domain->hash_size;
|
||||
nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
|
||||
nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
|
||||
|
||||
if (nstr == 0)
|
||||
/* Hash table entry is empty. */
|
||||
return NULL;
|
||||
|
||||
if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
|
||||
&& strcmp (msgid,
|
||||
domain->data + W (domain->must_swap,
|
||||
domain->orig_tab[nstr - 1].offset)) == 0)
|
||||
return (char *) domain->data + W (domain->must_swap,
|
||||
domain->trans_tab[nstr - 1].offset);
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (idx >= domain->hash_size - incr)
|
||||
idx -= domain->hash_size - incr;
|
||||
else
|
||||
idx += incr;
|
||||
|
||||
nstr = W (domain->must_swap, domain->hash_tab[idx]);
|
||||
if (nstr == 0)
|
||||
/* Hash table entry is empty. */
|
||||
return NULL;
|
||||
|
||||
if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
|
||||
&& strcmp (msgid,
|
||||
domain->data + W (domain->must_swap,
|
||||
domain->orig_tab[nstr - 1].offset))
|
||||
== 0)
|
||||
return (char *) domain->data
|
||||
+ W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
|
||||
}
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
/* Now we try the default method: binary search in the sorted
|
||||
array of messages. */
|
||||
bottom = 0;
|
||||
top = domain->nstrings;
|
||||
while (bottom < top)
|
||||
{
|
||||
int cmp_val;
|
||||
|
||||
act = (bottom + top) / 2;
|
||||
cmp_val = strcmp (msgid, domain->data
|
||||
+ W (domain->must_swap,
|
||||
domain->orig_tab[act].offset));
|
||||
if (cmp_val < 0)
|
||||
top = act;
|
||||
else if (cmp_val > 0)
|
||||
bottom = act + 1;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
/* If an translation is found return this. */
|
||||
return bottom >= top ? NULL : (char *) domain->data
|
||||
+ W (domain->must_swap,
|
||||
domain->trans_tab[act].offset);
|
||||
}
|
||||
|
||||
|
||||
/* Return string representation of locale CATEGORY. */
|
||||
static const char *
|
||||
category_to_name (category)
|
||||
int category;
|
||||
{
|
||||
const char *retval;
|
||||
|
||||
switch (category)
|
||||
{
|
||||
#ifdef LC_COLLATE
|
||||
case LC_COLLATE:
|
||||
retval = "LC_COLLATE";
|
||||
break;
|
||||
#endif
|
||||
#ifdef LC_CTYPE
|
||||
case LC_CTYPE:
|
||||
retval = "LC_CTYPE";
|
||||
break;
|
||||
#endif
|
||||
#ifdef LC_MONETARY
|
||||
case LC_MONETARY:
|
||||
retval = "LC_MONETARY";
|
||||
break;
|
||||
#endif
|
||||
#ifdef LC_NUMERIC
|
||||
case LC_NUMERIC:
|
||||
retval = "LC_NUMERIC";
|
||||
break;
|
||||
#endif
|
||||
#ifdef LC_TIME
|
||||
case LC_TIME:
|
||||
retval = "LC_TIME";
|
||||
break;
|
||||
#endif
|
||||
#ifdef LC_MESSAGES
|
||||
case LC_MESSAGES:
|
||||
retval = "LC_MESSAGES";
|
||||
break;
|
||||
#endif
|
||||
#ifdef LC_RESPONSE
|
||||
case LC_RESPONSE:
|
||||
retval = "LC_RESPONSE";
|
||||
break;
|
||||
#endif
|
||||
#ifdef LC_ALL
|
||||
case LC_ALL:
|
||||
/* This might not make sense but is perhaps better than any other
|
||||
value. */
|
||||
retval = "LC_ALL";
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
/* If you have a better idea for a default value let me know. */
|
||||
retval = "LC_XXX";
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Guess value of current locale from value of the environment variables. */
|
||||
static const char *guess_category_value (category, categoryname)
|
||||
int category;
|
||||
const char *categoryname;
|
||||
{
|
||||
const char *retval;
|
||||
|
||||
/* The highest priority value is the `LANGUAGE' environment
|
||||
variable. This is a GNU extension. */
|
||||
retval = getenv ("LANGUAGE");
|
||||
if (retval != NULL && retval[0] != '\0')
|
||||
return retval;
|
||||
|
||||
/* `LANGUAGE' is not set. So we have to proceed with the POSIX
|
||||
methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some
|
||||
systems this can be done by the `setlocale' function itself. */
|
||||
#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
|
||||
return setlocale (category, NULL);
|
||||
#else
|
||||
/* Setting of LC_ALL overwrites all other. */
|
||||
retval = getenv ("LC_ALL");
|
||||
if (retval != NULL && retval[0] != '\0')
|
||||
return retval;
|
||||
|
||||
/* Next comes the name of the desired category. */
|
||||
retval = getenv (categoryname);
|
||||
if (retval != NULL && retval[0] != '\0')
|
||||
return retval;
|
||||
|
||||
/* Last possibility is the LANG environment variable. */
|
||||
retval = getenv ("LANG");
|
||||
if (retval != NULL && retval[0] != '\0')
|
||||
return retval;
|
||||
|
||||
/* We use C as the default domain. POSIX says this is implementation
|
||||
defined. */
|
||||
return "C";
|
||||
#endif
|
||||
}
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
/* We don't want libintl.a to depend on any other library. So we
|
||||
avoid the non-standard function stpcpy. In GNU C Library this
|
||||
function is available, though. Also allow the symbol HAVE_STPCPY
|
||||
to be defined. */
|
||||
#if !_LIBC && !HAVE_STPCPY
|
||||
static char *
|
||||
stpcpy (dest, src)
|
||||
char *dest;
|
||||
const char *src;
|
||||
{
|
||||
while ((*dest++ = *src++) != '\0')
|
||||
/* Do nothing. */ ;
|
||||
return dest - 1;
|
||||
}
|
||||
#endif
|
59
texinfo/intl/dgettext.c
Normal file
59
texinfo/intl/dgettext.c
Normal file
@ -0,0 +1,59 @@
|
||||
/* dgettext.c -- implementation of the dgettext(3) function
|
||||
Copyright (C) 1995 Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined HAVE_LOCALE_H || defined _LIBC
|
||||
# include <locale.h>
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgettext.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DGETTEXT __dgettext
|
||||
# define DCGETTEXT __dcgettext
|
||||
#else
|
||||
# define DGETTEXT dgettext__
|
||||
# define DCGETTEXT dcgettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
||||
LC_MESSAGES locale. */
|
||||
char *
|
||||
DGETTEXT (domainname, msgid)
|
||||
const char *domainname;
|
||||
const char *msgid;
|
||||
{
|
||||
return DCGETTEXT (domainname, msgid, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dgettext, dgettext);
|
||||
#endif
|
182
texinfo/intl/explodename.c
Normal file
182
texinfo/intl/explodename.c
Normal file
@ -0,0 +1,182 @@
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
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., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "loadinfo.h"
|
||||
|
||||
/* On some strange systems still no definition of NULL is found. Sigh! */
|
||||
#ifndef NULL
|
||||
# if defined __STDC__ && __STDC__
|
||||
# define NULL ((void *) 0)
|
||||
# else
|
||||
# define NULL 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
int
|
||||
_nl_explode_name (name, language, modifier, territory, codeset,
|
||||
normalized_codeset, special, sponsor, revision)
|
||||
char *name;
|
||||
const char **language;
|
||||
const char **modifier;
|
||||
const char **territory;
|
||||
const char **codeset;
|
||||
const char **normalized_codeset;
|
||||
const char **special;
|
||||
const char **sponsor;
|
||||
const char **revision;
|
||||
{
|
||||
enum { undecided, xpg, cen } syntax;
|
||||
char *cp;
|
||||
int mask;
|
||||
|
||||
*modifier = NULL;
|
||||
*territory = NULL;
|
||||
*codeset = NULL;
|
||||
*normalized_codeset = NULL;
|
||||
*special = NULL;
|
||||
*sponsor = NULL;
|
||||
*revision = NULL;
|
||||
|
||||
/* Now we determine the single parts of the locale name. First
|
||||
look for the language. Termination symbols are `_' and `@' if
|
||||
we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
|
||||
mask = 0;
|
||||
syntax = undecided;
|
||||
*language = cp = name;
|
||||
while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
|
||||
&& cp[0] != '+' && cp[0] != ',')
|
||||
++cp;
|
||||
|
||||
if (*language == cp)
|
||||
/* This does not make sense: language has to be specified. Use
|
||||
this entry as it is without exploding. Perhaps it is an alias. */
|
||||
cp = strchr (*language, '\0');
|
||||
else if (cp[0] == '_')
|
||||
{
|
||||
/* Next is the territory. */
|
||||
cp[0] = '\0';
|
||||
*territory = ++cp;
|
||||
|
||||
while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
|
||||
&& cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
|
||||
++cp;
|
||||
|
||||
mask |= TERRITORY;
|
||||
|
||||
if (cp[0] == '.')
|
||||
{
|
||||
/* Next is the codeset. */
|
||||
syntax = xpg;
|
||||
cp[0] = '\0';
|
||||
*codeset = ++cp;
|
||||
|
||||
while (cp[0] != '\0' && cp[0] != '@')
|
||||
++cp;
|
||||
|
||||
mask |= XPG_CODESET;
|
||||
|
||||
if (*codeset != cp && (*codeset)[0] != '\0')
|
||||
{
|
||||
*normalized_codeset = _nl_normalize_codeset (*codeset,
|
||||
cp - *codeset);
|
||||
if (strcmp (*codeset, *normalized_codeset) == 0)
|
||||
free ((char *) *normalized_codeset);
|
||||
else
|
||||
mask |= XPG_NORM_CODESET;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
|
||||
{
|
||||
/* Next is the modifier. */
|
||||
syntax = cp[0] == '@' ? xpg : cen;
|
||||
cp[0] = '\0';
|
||||
*modifier = ++cp;
|
||||
|
||||
while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
|
||||
&& cp[0] != ',' && cp[0] != '_')
|
||||
++cp;
|
||||
|
||||
mask |= XPG_MODIFIER | CEN_AUDIENCE;
|
||||
}
|
||||
|
||||
if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
|
||||
{
|
||||
syntax = cen;
|
||||
|
||||
if (cp[0] == '+')
|
||||
{
|
||||
/* Next is special application (CEN syntax). */
|
||||
cp[0] = '\0';
|
||||
*special = ++cp;
|
||||
|
||||
while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
|
||||
++cp;
|
||||
|
||||
mask |= CEN_SPECIAL;
|
||||
}
|
||||
|
||||
if (cp[0] == ',')
|
||||
{
|
||||
/* Next is sponsor (CEN syntax). */
|
||||
cp[0] = '\0';
|
||||
*sponsor = ++cp;
|
||||
|
||||
while (cp[0] != '\0' && cp[0] != '_')
|
||||
++cp;
|
||||
|
||||
mask |= CEN_SPONSOR;
|
||||
}
|
||||
|
||||
if (cp[0] == '_')
|
||||
{
|
||||
/* Next is revision (CEN syntax). */
|
||||
cp[0] = '\0';
|
||||
*revision = ++cp;
|
||||
|
||||
mask |= CEN_REVISION;
|
||||
}
|
||||
}
|
||||
|
||||
/* For CEN sytnax 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;
|
||||
}
|
217
texinfo/intl/finddomain.c
Normal file
217
texinfo/intl/finddomain.c
Normal file
@ -0,0 +1,217 @@
|
||||
/* finddomain.c -- handle list of needed message catalogs
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#if defined STDC_HEADERS || defined _LIBC
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
# ifdef HAVE_MALLOC_H
|
||||
# include <malloc.h>
|
||||
# else
|
||||
void free ();
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined HAVE_STRING_H || defined _LIBC
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
# ifndef strchr
|
||||
# define strchr index
|
||||
# endif
|
||||
# ifndef memcpy
|
||||
# define memcpy(Dst, Src, Num) bcopy ((Src), (Dst), (Num))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "gettext.h"
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgettext.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#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 stpcpy(dest, src) __stpcpy(dest, src)
|
||||
#else
|
||||
# ifndef HAVE_STPCPY
|
||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* 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 *
|
||||
_nl_find_domain (dirname, locale, domainname)
|
||||
const char *dirname;
|
||||
char *locale;
|
||||
const char *domainname;
|
||||
{
|
||||
struct loaded_l10nfile *retval;
|
||||
const char *language;
|
||||
const char *modifier;
|
||||
const char *territory;
|
||||
const char *codeset;
|
||||
const char *normalized_codeset;
|
||||
const char *special;
|
||||
const char *sponsor;
|
||||
const char *revision;
|
||||
const char *alias_value;
|
||||
int mask;
|
||||
|
||||
/* LOCALE can consist of up to four recognized parts for the XPG syntax:
|
||||
|
||||
language[_territory[.codeset]][@modifier]
|
||||
|
||||
and six parts for the CEN syntax:
|
||||
|
||||
language[_territory][+audience][+special][,sponsor][_revision]
|
||||
|
||||
Beside the first 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 part will be stripped of according to
|
||||
the following order:
|
||||
(1) revision
|
||||
(2) sponsor
|
||||
(3) special
|
||||
(4) codeset
|
||||
(5) normalized codeset
|
||||
(6) territory
|
||||
(7) audience/modifier
|
||||
*/
|
||||
|
||||
/* If we have already tested for this locale entry there has to
|
||||
be one data set in the list of loaded domains. */
|
||||
retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
|
||||
strlen (dirname) + 1, 0, locale, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, domainname, 0);
|
||||
if (retval != NULL)
|
||||
{
|
||||
/* We know something about this locale. */
|
||||
int cnt;
|
||||
|
||||
if (retval->decided == 0)
|
||||
_nl_load_domain (retval);
|
||||
|
||||
if (retval->data != NULL)
|
||||
return retval;
|
||||
|
||||
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
|
||||
{
|
||||
if (retval->successor[cnt]->decided == 0)
|
||||
_nl_load_domain (retval->successor[cnt]);
|
||||
|
||||
if (retval->successor[cnt]->data != NULL)
|
||||
break;
|
||||
}
|
||||
return cnt >= 0 ? retval : NULL;
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
/* See whether the locale value is an alias. If yes its value
|
||||
*overwrites* the alias name. No test for the original value is
|
||||
done. */
|
||||
alias_value = _nl_expand_alias (locale);
|
||||
if (alias_value != NULL)
|
||||
{
|
||||
size_t len = strlen (alias_value) + 1;
|
||||
locale = (char *) malloc (len);
|
||||
if (locale == NULL)
|
||||
return NULL;
|
||||
|
||||
memcpy (locale, alias_value, len);
|
||||
}
|
||||
|
||||
/* 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
|
||||
generalzation. */
|
||||
retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
|
||||
strlen (dirname) + 1, mask, language, territory,
|
||||
codeset, normalized_codeset, modifier, special,
|
||||
sponsor, revision, domainname, 1);
|
||||
if (retval == NULL)
|
||||
/* This means we are out of core. */
|
||||
return NULL;
|
||||
|
||||
if (retval->decided == 0)
|
||||
_nl_load_domain (retval);
|
||||
if (retval->data == NULL)
|
||||
{
|
||||
int cnt;
|
||||
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
|
||||
{
|
||||
if (retval->successor[cnt]->decided == 0)
|
||||
_nl_load_domain (retval->successor[cnt]);
|
||||
if (retval->successor[cnt]->data != NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The room for an alias was dynamically allocated. Free it now. */
|
||||
if (alias_value != NULL)
|
||||
free (locale);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
/* We don't want libintl.a to depend on any other library. So we
|
||||
avoid the non-standard function stpcpy. In GNU C Library this
|
||||
function is available, though. Also allow the symbol HAVE_STPCPY
|
||||
to be defined. */
|
||||
#if !_LIBC && !HAVE_STPCPY
|
||||
static char *
|
||||
stpcpy (dest, src)
|
||||
char *dest;
|
||||
const char *src;
|
||||
{
|
||||
while ((*dest++ = *src++) != '\0')
|
||||
/* Do nothing. */ ;
|
||||
return dest - 1;
|
||||
}
|
||||
#endif
|
70
texinfo/intl/gettext.c
Normal file
70
texinfo/intl/gettext.c
Normal file
@ -0,0 +1,70 @@
|
||||
/* gettext.c -- implementation of gettext(3) function
|
||||
Copyright (C) 1995 Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# define __need_NULL
|
||||
# include <stddef.h>
|
||||
#else
|
||||
# ifdef STDC_HEADERS
|
||||
# include <stdlib.h> /* Just for NULL. */
|
||||
# else
|
||||
# ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
# else
|
||||
# define NULL ((void *) 0)
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgettext.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define GETTEXT __gettext
|
||||
# define DGETTEXT __dgettext
|
||||
#else
|
||||
# define GETTEXT gettext__
|
||||
# define DGETTEXT dgettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the current default message catalog for the current
|
||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||
text). */
|
||||
char *
|
||||
GETTEXT (msgid)
|
||||
const char *msgid;
|
||||
{
|
||||
return DGETTEXT (NULL, msgid);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__gettext, gettext);
|
||||
#endif
|
105
texinfo/intl/gettext.h
Normal file
105
texinfo/intl/gettext.h
Normal file
@ -0,0 +1,105 @@
|
||||
/* gettext.h - internal header for GNU gettext internationalization functions
|
||||
Copyright (C) 1995 Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _GETTEXT_H
|
||||
#define _GETTEXT_H 1
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if HAVE_LIMITS_H || _LIBC
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* The magic number of the GNU message catalog format. */
|
||||
#define _MAGIC 0x950412de
|
||||
#define _MAGIC_SWAPPED 0xde120495
|
||||
|
||||
/* Revision number of the currently used .mo (binary) file format. */
|
||||
#define MO_REVISION_NUMBER 0
|
||||
|
||||
/* The following contortions are an attempt to use the C preprocessor
|
||||
to determine an unsigned integral type that is 32 bits wide. An
|
||||
alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
|
||||
doing that would require that the configure script compile and *run*
|
||||
the resulting executable. Locally running cross-compiled executables
|
||||
is usually not possible. */
|
||||
|
||||
#if __STDC__
|
||||
# define UINT_MAX_32_BITS 4294967295U
|
||||
#else
|
||||
# define UINT_MAX_32_BITS 0xFFFFFFFF
|
||||
#endif
|
||||
|
||||
/* If UINT_MAX isn't defined, assume it's a 32-bit type.
|
||||
This should be valid for all systems GNU cares about because
|
||||
that doesn't include 16-bit systems, and only modern systems
|
||||
(that certainly have <limits.h>) have 64+-bit integral types. */
|
||||
|
||||
#ifndef UINT_MAX
|
||||
# define UINT_MAX UINT_MAX_32_BITS
|
||||
#endif
|
||||
|
||||
#if UINT_MAX == UINT_MAX_32_BITS
|
||||
typedef unsigned nls_uint32;
|
||||
#else
|
||||
# if USHRT_MAX == UINT_MAX_32_BITS
|
||||
typedef unsigned short nls_uint32;
|
||||
# else
|
||||
# if ULONG_MAX == UINT_MAX_32_BITS
|
||||
typedef unsigned long nls_uint32;
|
||||
# else
|
||||
/* The following line is intended to throw an error. Using #error is
|
||||
not portable enough. */
|
||||
"Cannot determine unsigned 32-bit data type."
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Header for binary .mo file format. */
|
||||
struct mo_file_header
|
||||
{
|
||||
/* The magic number. */
|
||||
nls_uint32 magic;
|
||||
/* The revision number of the file format. */
|
||||
nls_uint32 revision;
|
||||
/* The number of strings pairs. */
|
||||
nls_uint32 nstrings;
|
||||
/* Offset of table with start offsets of original strings. */
|
||||
nls_uint32 orig_tab_offset;
|
||||
/* Offset of table with start offsets of translation strings. */
|
||||
nls_uint32 trans_tab_offset;
|
||||
/* Size of hashing table. */
|
||||
nls_uint32 hash_tab_size;
|
||||
/* Offset of first hashing entry. */
|
||||
nls_uint32 hash_tab_offset;
|
||||
};
|
||||
|
||||
struct string_desc
|
||||
{
|
||||
/* Length of addressed string. */
|
||||
nls_uint32 length;
|
||||
/* Offset of string in file. */
|
||||
nls_uint32 offset;
|
||||
};
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
#endif /* gettext.h */
|
73
texinfo/intl/gettextP.h
Normal file
73
texinfo/intl/gettextP.h
Normal file
@ -0,0 +1,73 @@
|
||||
/* Header describing internals of gettext library
|
||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _GETTEXTP_H
|
||||
#define _GETTEXTP_H
|
||||
|
||||
#include "loadinfo.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define PARAMS(args) args
|
||||
# else
|
||||
# define PARAMS(args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef W
|
||||
# define W(flag, data) ((flag) ? SWAP (data) : (data))
|
||||
#endif
|
||||
|
||||
|
||||
static nls_uint32 SWAP PARAMS ((nls_uint32 i));
|
||||
|
||||
static inline nls_uint32
|
||||
SWAP (i)
|
||||
nls_uint32 i;
|
||||
{
|
||||
return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
|
||||
}
|
||||
|
||||
|
||||
struct loaded_domain
|
||||
{
|
||||
const char *data;
|
||||
int must_swap;
|
||||
nls_uint32 nstrings;
|
||||
struct string_desc *orig_tab;
|
||||
struct string_desc *trans_tab;
|
||||
nls_uint32 hash_size;
|
||||
nls_uint32 *hash_tab;
|
||||
};
|
||||
|
||||
struct binding
|
||||
{
|
||||
struct binding *next;
|
||||
char *domainname;
|
||||
char *dirname;
|
||||
};
|
||||
|
||||
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
||||
char *__locale,
|
||||
const char *__domainname));
|
||||
void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain));
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
#endif /* gettextP.h */
|
62
texinfo/intl/hash-string.h
Normal file
62
texinfo/intl/hash-string.h
Normal file
@ -0,0 +1,62 @@
|
||||
/* hash-string - Implements a string hashing function.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_VALUES_H
|
||||
# include <values.h>
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* We assume to have `unsigned long int' value with at least 32 bits. */
|
||||
#define HASHWORDBITS 32
|
||||
|
||||
|
||||
/* Defines the so called `hashpjw' function by P.J. Weinberger
|
||||
[see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
|
||||
1986, 1987 Bell Telephone Laboratories, Inc.] */
|
||||
static unsigned long hash_string PARAMS ((const char *__str_param));
|
||||
|
||||
static inline unsigned long
|
||||
hash_string (str_param)
|
||||
const char *str_param;
|
||||
{
|
||||
unsigned long int hval, g;
|
||||
const char *str = str_param;
|
||||
|
||||
/* Compute the hash value for the given string. */
|
||||
hval = 0;
|
||||
while (*str != '\0')
|
||||
{
|
||||
hval <<= 4;
|
||||
hval += (unsigned long) *str++;
|
||||
g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
|
||||
if (g != 0)
|
||||
{
|
||||
hval ^= g >> (HASHWORDBITS - 8);
|
||||
hval ^= g;
|
||||
}
|
||||
}
|
||||
return hval;
|
||||
}
|
76
texinfo/intl/intl-compat.c
Normal file
76
texinfo/intl/intl-compat.c
Normal file
@ -0,0 +1,76 @@
|
||||
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
|
||||
Library.
|
||||
Copyright (C) 1995 Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "libgettext.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
|
||||
#undef gettext
|
||||
#undef dgettext
|
||||
#undef dcgettext
|
||||
#undef textdomain
|
||||
#undef bindtextdomain
|
||||
|
||||
|
||||
char *
|
||||
bindtextdomain (domainname, dirname)
|
||||
const char *domainname;
|
||||
const char *dirname;
|
||||
{
|
||||
return bindtextdomain__ (domainname, dirname);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
dcgettext (domainname, msgid, category)
|
||||
const char *domainname;
|
||||
const char *msgid;
|
||||
int category;
|
||||
{
|
||||
return dcgettext__ (domainname, msgid, category);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
dgettext (domainname, msgid)
|
||||
const char *domainname;
|
||||
const char *msgid;
|
||||
{
|
||||
return dgettext__ (domainname, msgid);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
gettext (msgid)
|
||||
const char *msgid;
|
||||
{
|
||||
return gettext__ (msgid);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
textdomain (domainname)
|
||||
const char *domainname;
|
||||
{
|
||||
return textdomain__ (domainname);
|
||||
}
|
402
texinfo/intl/l10nflist.c
Normal file
402
texinfo/intl/l10nflist.c
Normal file
@ -0,0 +1,402 @@
|
||||
/* finddomain.c -- handle list of needed message catalogs
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined HAVE_STRING_H || defined _LIBC
|
||||
# ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE 1
|
||||
# endif
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
# ifndef strchr
|
||||
# define strchr index
|
||||
# endif
|
||||
# ifndef memcpy
|
||||
# define memcpy(Dst, Src, Num) bcopy ((Src), (Dst), (Num))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined _LIBC || defined HAVE_ARGZ_H
|
||||
# include <argz.h>
|
||||
#endif
|
||||
#include <ctype.h>
|
||||
|
||||
#if defined STDC_HEADERS || defined _LIBC
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#include "loadinfo.h"
|
||||
|
||||
/* On some strange systems still no definition of NULL is found. Sigh! */
|
||||
#ifndef NULL
|
||||
# if defined __STDC__ && __STDC__
|
||||
# define NULL ((void *) 0)
|
||||
# else
|
||||
# define NULL 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Rename the non ANSI C functions. This is required by the standard
|
||||
because some ANSI C functions will require linking with this object
|
||||
file and the name space must not be polluted. */
|
||||
# define stpcpy(dest, src) __stpcpy(dest, src)
|
||||
#else
|
||||
# ifndef HAVE_STPCPY
|
||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Define function which are usually not available. */
|
||||
|
||||
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
||||
/* Returns the number of strings in ARGZ. */
|
||||
static size_t argz_count__ PARAMS ((const char *argz, size_t len));
|
||||
|
||||
static size_t
|
||||
argz_count__ (argz, len)
|
||||
const char *argz;
|
||||
size_t len;
|
||||
{
|
||||
size_t count = 0;
|
||||
while (len > 0)
|
||||
{
|
||||
size_t part_len = strlen (argz);
|
||||
argz += part_len + 1;
|
||||
len -= part_len + 1;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
# undef __argz_count
|
||||
# define __argz_count(argz, len) argz_count__ (argz, len)
|
||||
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
|
||||
|
||||
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
||||
/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
|
||||
except the last into the character SEP. */
|
||||
static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
|
||||
|
||||
static void
|
||||
argz_stringify__ (argz, len, sep)
|
||||
char *argz;
|
||||
size_t len;
|
||||
int sep;
|
||||
{
|
||||
while (len > 0)
|
||||
{
|
||||
size_t part_len = strlen (argz);
|
||||
argz += part_len;
|
||||
len -= part_len + 1;
|
||||
if (len > 0)
|
||||
*argz++ = sep;
|
||||
}
|
||||
}
|
||||
# undef __argz_stringify
|
||||
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
|
||||
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
||||
|
||||
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
||||
static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
|
||||
const char *entry));
|
||||
|
||||
static char *
|
||||
argz_next__ (argz, argz_len, entry)
|
||||
char *argz;
|
||||
size_t argz_len;
|
||||
const char *entry;
|
||||
{
|
||||
if (entry)
|
||||
{
|
||||
if (entry < argz + argz_len)
|
||||
entry = strchr (entry, '\0') + 1;
|
||||
|
||||
return entry >= argz + argz_len ? NULL : (char *) entry;
|
||||
}
|
||||
else
|
||||
if (argz_len > 0)
|
||||
return argz;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
# undef __argz_next
|
||||
# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
|
||||
#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
|
||||
|
||||
|
||||
/* Return number of bits set in X. */
|
||||
static int pop PARAMS ((int x));
|
||||
|
||||
static inline int
|
||||
pop (x)
|
||||
int x;
|
||||
{
|
||||
/* We assume that no more than 16 bits are used. */
|
||||
x = ((x & ~0x5555) >> 1) + (x & 0x5555);
|
||||
x = ((x & ~0x3333) >> 2) + (x & 0x3333);
|
||||
x = ((x >> 4) + x) & 0x0f0f;
|
||||
x = ((x >> 8) + x) & 0xff;
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
|
||||
struct loaded_l10nfile *
|
||||
_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||
territory, codeset, normalized_codeset, modifier, special,
|
||||
sponsor, revision, filename, do_allocate)
|
||||
struct loaded_l10nfile **l10nfile_list;
|
||||
const char *dirlist;
|
||||
size_t dirlist_len;
|
||||
int mask;
|
||||
const char *language;
|
||||
const char *territory;
|
||||
const char *codeset;
|
||||
const char *normalized_codeset;
|
||||
const char *modifier;
|
||||
const char *special;
|
||||
const char *sponsor;
|
||||
const char *revision;
|
||||
const char *filename;
|
||||
int do_allocate;
|
||||
{
|
||||
char *abs_filename;
|
||||
struct loaded_l10nfile *last = NULL;
|
||||
struct loaded_l10nfile *retval;
|
||||
char *cp;
|
||||
size_t entries;
|
||||
int cnt;
|
||||
|
||||
/* Allocate room for the full file name. */
|
||||
abs_filename = (char *) malloc (dirlist_len
|
||||
+ strlen (language)
|
||||
+ ((mask & TERRITORY) != 0
|
||||
? strlen (territory) + 1 : 0)
|
||||
+ ((mask & XPG_CODESET) != 0
|
||||
? strlen (codeset) + 1 : 0)
|
||||
+ ((mask & XPG_NORM_CODESET) != 0
|
||||
? strlen (normalized_codeset) + 1 : 0)
|
||||
+ (((mask & XPG_MODIFIER) != 0
|
||||
|| (mask & CEN_AUDIENCE) != 0) ?
|
||||
strlen (modifier) + 1 : 0)
|
||||
+ ((mask & CEN_SPECIAL) != 0
|
||||
? strlen (special) + 1 : 0)
|
||||
+ ((mask & CEN_SPONSOR) != 0
|
||||
? strlen (sponsor) + 1 : 0)
|
||||
+ ((mask & CEN_REVISION) != 0
|
||||
? strlen (revision) + 1 : 0)
|
||||
+ 1 + strlen (filename) + 1);
|
||||
|
||||
if (abs_filename == NULL)
|
||||
return NULL;
|
||||
|
||||
retval = NULL;
|
||||
last = NULL;
|
||||
|
||||
/* Construct file name. */
|
||||
memcpy (abs_filename, dirlist, dirlist_len);
|
||||
__argz_stringify (abs_filename, dirlist_len, ':');
|
||||
cp = abs_filename + (dirlist_len - 1);
|
||||
*cp++ = '/';
|
||||
cp = stpcpy (cp, language);
|
||||
|
||||
if ((mask & TERRITORY) != 0)
|
||||
{
|
||||
*cp++ = '_';
|
||||
cp = stpcpy (cp, territory);
|
||||
}
|
||||
if ((mask & XPG_CODESET) != 0)
|
||||
{
|
||||
*cp++ = '.';
|
||||
cp = stpcpy (cp, codeset);
|
||||
}
|
||||
if ((mask & XPG_NORM_CODESET) != 0)
|
||||
{
|
||||
*cp++ = '.';
|
||||
cp = stpcpy (cp, normalized_codeset);
|
||||
}
|
||||
if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
|
||||
{
|
||||
/* This component can be part of both syntaces but has different
|
||||
leading characters. For CEN we use `+', else `@'. */
|
||||
*cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
|
||||
cp = stpcpy (cp, modifier);
|
||||
}
|
||||
if ((mask & CEN_SPECIAL) != 0)
|
||||
{
|
||||
*cp++ = '+';
|
||||
cp = stpcpy (cp, special);
|
||||
}
|
||||
if ((mask & CEN_SPONSOR) != 0)
|
||||
{
|
||||
*cp++ = ',';
|
||||
cp = stpcpy (cp, sponsor);
|
||||
}
|
||||
if ((mask & CEN_REVISION) != 0)
|
||||
{
|
||||
*cp++ = '_';
|
||||
cp = stpcpy (cp, revision);
|
||||
}
|
||||
|
||||
*cp++ = '/';
|
||||
stpcpy (cp, filename);
|
||||
|
||||
/* Look in list of already loaded domains whether it is already
|
||||
available. */
|
||||
last = NULL;
|
||||
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
|
||||
if (retval->filename != NULL)
|
||||
{
|
||||
int compare = strcmp (retval->filename, abs_filename);
|
||||
if (compare == 0)
|
||||
/* We found it! */
|
||||
break;
|
||||
if (compare < 0)
|
||||
{
|
||||
/* It's not in the list. */
|
||||
retval = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
last = retval;
|
||||
}
|
||||
|
||||
if (retval != NULL || do_allocate == 0)
|
||||
{
|
||||
free (abs_filename);
|
||||
return retval;
|
||||
}
|
||||
|
||||
retval = (struct loaded_l10nfile *)
|
||||
malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
|
||||
* (1 << pop (mask))
|
||||
* sizeof (struct loaded_l10nfile *)));
|
||||
if (retval == NULL)
|
||||
return NULL;
|
||||
|
||||
retval->filename = abs_filename;
|
||||
retval->decided = (__argz_count (dirlist, dirlist_len) != 1
|
||||
|| ((mask & XPG_CODESET) != 0
|
||||
&& (mask & XPG_NORM_CODESET) != 0));
|
||||
retval->data = NULL;
|
||||
|
||||
if (last == NULL)
|
||||
{
|
||||
retval->next = *l10nfile_list;
|
||||
*l10nfile_list = retval;
|
||||
}
|
||||
else
|
||||
{
|
||||
retval->next = last->next;
|
||||
last->next = retval;
|
||||
}
|
||||
|
||||
entries = 0;
|
||||
/* If the DIRLIST is a real list the RETVAL entry correcponds not to
|
||||
a real file. So we have to use the DIRLIST separation machanism
|
||||
of the inner loop. */
|
||||
cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
|
||||
for (; cnt >= 0; --cnt)
|
||||
if ((cnt & ~mask) == 0
|
||||
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
|
||||
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
|
||||
{
|
||||
/* Iterate over all elements of the DIRLIST. */
|
||||
char *dir = NULL;
|
||||
|
||||
while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
|
||||
!= NULL)
|
||||
retval->successor[entries++]
|
||||
= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
|
||||
language, territory, codeset,
|
||||
normalized_codeset, modifier, special,
|
||||
sponsor, revision, filename, 1);
|
||||
}
|
||||
retval->successor[entries] = NULL;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Normalize codeset name. There is no standard for the codeset
|
||||
names. Normalization allows the user to use any of the common
|
||||
names. */
|
||||
const char *
|
||||
_nl_normalize_codeset (codeset, name_len)
|
||||
const char *codeset;
|
||||
size_t name_len;
|
||||
{
|
||||
int len = 0;
|
||||
int only_digit = 1;
|
||||
char *retval;
|
||||
char *wp;
|
||||
size_t cnt;
|
||||
|
||||
for (cnt = 0; cnt < name_len; ++cnt)
|
||||
if (isalnum (codeset[cnt]))
|
||||
{
|
||||
++len;
|
||||
|
||||
if (isalpha (codeset[cnt]))
|
||||
only_digit = 0;
|
||||
}
|
||||
|
||||
retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
|
||||
|
||||
if (retval != NULL)
|
||||
{
|
||||
if (only_digit)
|
||||
wp = stpcpy (retval, "iso");
|
||||
else
|
||||
wp = retval;
|
||||
|
||||
for (cnt = 0; cnt < name_len; ++cnt)
|
||||
if (isalpha (codeset[cnt]))
|
||||
*wp++ = tolower (codeset[cnt]);
|
||||
else if (isdigit (codeset[cnt]))
|
||||
*wp++ = codeset[cnt];
|
||||
|
||||
*wp = '\0';
|
||||
}
|
||||
|
||||
return (const char *) retval;
|
||||
}
|
||||
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
/* We don't want libintl.a to depend on any other library. So we
|
||||
avoid the non-standard function stpcpy. In GNU C Library this
|
||||
function is available, though. Also allow the symbol HAVE_STPCPY
|
||||
to be defined. */
|
||||
#if !_LIBC && !HAVE_STPCPY
|
||||
static char *
|
||||
stpcpy (dest, src)
|
||||
char *dest;
|
||||
const char *src;
|
||||
{
|
||||
while ((*dest++ = *src++) != '\0')
|
||||
/* Do nothing. */ ;
|
||||
return dest - 1;
|
||||
}
|
||||
#endif
|
182
texinfo/intl/libgettext.h
Normal file
182
texinfo/intl/libgettext.h
Normal file
@ -0,0 +1,182 @@
|
||||
/* libgettext.h -- Message catalogs for internationalization.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Because on some systems (e.g. Solaris) we sometimes have to include
|
||||
the systems libintl.h as well as this file we have more complex
|
||||
include protection above. But the systems header might perhaps also
|
||||
define _LIBINTL_H and therefore we have to protect the definition here. */
|
||||
|
||||
#if !defined (_LIBINTL_H) || !defined (_LIBGETTEXT_H)
|
||||
#if !defined (_LIBINTL_H)
|
||||
# define _LIBINTL_H 1
|
||||
#endif
|
||||
#define _LIBGETTEXT_H 1
|
||||
|
||||
/* We define an additional symbol to signal that we use the GNU
|
||||
implementation of gettext. */
|
||||
#define __USE_GNU_GETTEXT 1
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#if HAVE_LOCALE_H
|
||||
# include <locale.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define PARAMS(args) args
|
||||
# else
|
||||
# define PARAMS(args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
# if !defined __cplusplus || defined __GNUC__
|
||||
# define NULL ((void *) 0)
|
||||
# else
|
||||
# define NULL (0)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !HAVE_LC_MESSAGES
|
||||
/* This value determines the behaviour of the gettext() and dgettext()
|
||||
function. But some system does not have this defined. Define it
|
||||
to a default value. */
|
||||
# define LC_MESSAGES (-1)
|
||||
#endif
|
||||
|
||||
|
||||
/* Declarations for gettext-using-catgets interface. Derived from
|
||||
Jim Meyering's libintl.h. */
|
||||
struct _msg_ent
|
||||
{
|
||||
const char *_msg;
|
||||
int _msg_number;
|
||||
};
|
||||
|
||||
|
||||
#if HAVE_CATGETS
|
||||
/* These two variables are defined in the automatically by po-to-tbl.sed
|
||||
generated file `cat-id-tbl.c'. */
|
||||
extern const struct _msg_ent _msg_tbl[];
|
||||
extern int _msg_tbl_length;
|
||||
#endif
|
||||
|
||||
|
||||
/* For automatical extraction of messages sometimes no real
|
||||
translation is needed. Instead the string itself is the result. */
|
||||
#define gettext_noop(Str) (Str)
|
||||
|
||||
/* Look up MSGID in the current default message catalog for the current
|
||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||
text). */
|
||||
extern char *gettext PARAMS ((const char *__msgid));
|
||||
extern char *gettext__ PARAMS ((const char *__msgid));
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
||||
LC_MESSAGES locale. */
|
||||
extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
|
||||
extern char *dgettext__ PARAMS ((const char *__domainname,
|
||||
const char *__msgid));
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||
locale. */
|
||||
extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
|
||||
int __category));
|
||||
extern char *dcgettext__ PARAMS ((const char *__domainname,
|
||||
const char *__msgid, int __category));
|
||||
|
||||
|
||||
/* Set the current default message catalog to DOMAINNAME.
|
||||
If DOMAINNAME is null, return the current default.
|
||||
If DOMAINNAME is "", reset to the default of "messages". */
|
||||
extern char *textdomain PARAMS ((const char *__domainname));
|
||||
extern char *textdomain__ PARAMS ((const char *__domainname));
|
||||
|
||||
/* Specify that the DOMAINNAME message catalog will be found
|
||||
in DIRNAME rather than in the system locale data base. */
|
||||
extern char *bindtextdomain PARAMS ((const char *__domainname,
|
||||
const char *__dirname));
|
||||
extern char *bindtextdomain__ PARAMS ((const char *__domainname,
|
||||
const char *__dirname));
|
||||
|
||||
#if ENABLE_NLS
|
||||
|
||||
/* Solaris 2.3 has the gettext function but dcgettext is missing.
|
||||
So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4
|
||||
has dcgettext. */
|
||||
# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
|
||||
|
||||
# define gettext(Msgid) \
|
||||
dgettext (NULL, Msgid)
|
||||
|
||||
# define dgettext(Domainname, Msgid) \
|
||||
dcgettext (Domainname, Msgid, LC_MESSAGES)
|
||||
|
||||
# if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
|
||||
/* This global variable is defined in loadmsgcat.c. We need a sign,
|
||||
whether a new catalog was loaded, which can be associated with all
|
||||
translations. */
|
||||
extern int _nl_msg_cat_cntr;
|
||||
|
||||
# define dcgettext(Domainname, Msgid, Category) \
|
||||
(__extension__ \
|
||||
({ \
|
||||
char *__result; \
|
||||
if (__builtin_constant_p (Msgid)) \
|
||||
{ \
|
||||
static char *__translation__; \
|
||||
static int __catalog_counter__; \
|
||||
if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \
|
||||
{ \
|
||||
__translation__ = \
|
||||
dcgettext__ ((Domainname), (Msgid), (Category)); \
|
||||
__catalog_counter__ = _nl_msg_cat_cntr; \
|
||||
} \
|
||||
__result = __translation__; \
|
||||
} \
|
||||
else \
|
||||
__result = dcgettext__ ((Domainname), (Msgid), (Category)); \
|
||||
__result; \
|
||||
}))
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#else
|
||||
|
||||
# define gettext(Msgid) (Msgid)
|
||||
# define dgettext(Domainname, Msgid) (Msgid)
|
||||
# define dcgettext(Domainname, Msgid, Category) (Msgid)
|
||||
# define textdomain(Domainname) while (0) /* nothing */
|
||||
# define bindtextdomain(Domainname, Dirname) while (0) /* nothing */
|
||||
|
||||
#endif
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
100
texinfo/intl/linux-msg.sed
Normal file
100
texinfo/intl/linux-msg.sed
Normal file
@ -0,0 +1,100 @@
|
||||
# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
|
||||
# Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
#
|
||||
# The first directive in the .msg should be the definition of the
|
||||
# message set number. We use always set number 1.
|
||||
#
|
||||
1 {
|
||||
i\
|
||||
$set 1 # Automatically created by po2msg.sed
|
||||
h
|
||||
s/.*/0/
|
||||
x
|
||||
}
|
||||
#
|
||||
# Mitch's old catalog format does not allow comments.
|
||||
#
|
||||
# We copy the original message as a comment into the .msg file.
|
||||
#
|
||||
/^msgid/ {
|
||||
s/msgid[ ]*"//
|
||||
#
|
||||
# This does not work now with the new format.
|
||||
# /"$/! {
|
||||
# s/\\$//
|
||||
# s/$/ ... (more lines following)"/
|
||||
# }
|
||||
x
|
||||
# The following nice solution is by
|
||||
# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
|
||||
td
|
||||
# Increment a decimal number in pattern space.
|
||||
# First hide trailing `9' digits.
|
||||
:d
|
||||
s/9\(_*\)$/_\1/
|
||||
td
|
||||
# Assure at least one digit is available.
|
||||
s/^\(_*\)$/0\1/
|
||||
# Increment the last digit.
|
||||
s/8\(_*\)$/9\1/
|
||||
s/7\(_*\)$/8\1/
|
||||
s/6\(_*\)$/7\1/
|
||||
s/5\(_*\)$/6\1/
|
||||
s/4\(_*\)$/5\1/
|
||||
s/3\(_*\)$/4\1/
|
||||
s/2\(_*\)$/3\1/
|
||||
s/1\(_*\)$/2\1/
|
||||
s/0\(_*\)$/1\1/
|
||||
# Convert the hidden `9' digits to `0's.
|
||||
s/_/0/g
|
||||
x
|
||||
G
|
||||
s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
|
||||
}
|
||||
#
|
||||
# The .msg file contains, other then the .po file, only the translations
|
||||
# but each given a unique ID. Starting from 1 and incrementing by 1 for
|
||||
# each message we assign them to the messages.
|
||||
# It is important that the .po file used to generate the cat-id-tbl.c file
|
||||
# (with po-to-tbl) is the same as the one used here. (At least the order
|
||||
# of declarations must not be changed.)
|
||||
#
|
||||
/^msgstr/ {
|
||||
s/msgstr[ ]*"\(.*\)"/# \1/
|
||||
# Clear substitution flag.
|
||||
tb
|
||||
# Append the next line.
|
||||
:b
|
||||
N
|
||||
# Look whether second part is continuation line.
|
||||
s/\(.*\n\)"\(.*\)"/\1\2/
|
||||
# Yes, then branch.
|
||||
ta
|
||||
P
|
||||
D
|
||||
# Note that D includes a jump to the start!!
|
||||
# We found a continuation line. But before printing insert '\'.
|
||||
:a
|
||||
s/\(.*\)\(\n.*\)/\1\\\2/
|
||||
P
|
||||
# We cannot use D here.
|
||||
s/.*\n\(.*\)/\1/
|
||||
tb
|
||||
}
|
||||
d
|
58
texinfo/intl/loadinfo.h
Normal file
58
texinfo/intl/loadinfo.h
Normal file
@ -0,0 +1,58 @@
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define PARAMS(args) args
|
||||
# else
|
||||
# define PARAMS(args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Encoding of locale name parts. */
|
||||
#define CEN_REVISION 1
|
||||
#define CEN_SPONSOR 2
|
||||
#define CEN_SPECIAL 4
|
||||
#define XPG_NORM_CODESET 8
|
||||
#define XPG_CODESET 16
|
||||
#define TERRITORY 32
|
||||
#define CEN_AUDIENCE 64
|
||||
#define XPG_MODIFIER 128
|
||||
|
||||
#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
|
||||
#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
|
||||
|
||||
|
||||
struct loaded_l10nfile
|
||||
{
|
||||
const char *filename;
|
||||
int decided;
|
||||
|
||||
const void *data;
|
||||
|
||||
struct loaded_l10nfile *next;
|
||||
struct loaded_l10nfile *successor[1];
|
||||
};
|
||||
|
||||
|
||||
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
||||
size_t name_len));
|
||||
|
||||
extern struct loaded_l10nfile *
|
||||
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
||||
const char *dirlist, size_t dirlist_len, int mask,
|
||||
const char *language, const char *territory,
|
||||
const char *codeset,
|
||||
const char *normalized_codeset,
|
||||
const char *modifier, const char *special,
|
||||
const char *sponsor, const char *revision,
|
||||
const char *filename, int do_allocate));
|
||||
|
||||
|
||||
extern const char *_nl_expand_alias PARAMS ((const char *name));
|
||||
|
||||
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
||||
const char **modifier,
|
||||
const char **territory,
|
||||
const char **codeset,
|
||||
const char **normalized_codeset,
|
||||
const char **special,
|
||||
const char **sponsor,
|
||||
const char **revision));
|
199
texinfo/intl/loadmsgcat.c
Normal file
199
texinfo/intl/loadmsgcat.c
Normal file
@ -0,0 +1,199 @@
|
||||
/* loadmsgcat.c -- load needed message catalogs
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#if defined STDC_HEADERS || defined _LIBC
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC
|
||||
# include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
#include "gettext.h"
|
||||
#include "gettextP.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Rename the non 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 fstat __fstat
|
||||
# define open __open
|
||||
# define close __close
|
||||
# define read __read
|
||||
# define mmap __mmap
|
||||
# define munmap __munmap
|
||||
#endif
|
||||
|
||||
/* We need a sign, whether a new catalog was loaded, which can be associated
|
||||
with all translations. This is important if the translations are
|
||||
cached by one of GCC's features. */
|
||||
int _nl_msg_cat_cntr;
|
||||
|
||||
|
||||
/* Load the message catalogs specified by FILENAME. If it is no valid
|
||||
message catalog do nothing. */
|
||||
void
|
||||
_nl_load_domain (domain_file)
|
||||
struct loaded_l10nfile *domain_file;
|
||||
{
|
||||
int fd;
|
||||
struct stat st;
|
||||
struct mo_file_header *data = (struct mo_file_header *) -1;
|
||||
#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
|
||||
|| defined _LIBC
|
||||
int use_mmap = 0;
|
||||
#endif
|
||||
struct loaded_domain *domain;
|
||||
|
||||
domain_file->decided = 1;
|
||||
domain_file->data = NULL;
|
||||
|
||||
/* If the record does not represent a valid locale the FILENAME
|
||||
might be NULL. This can happen when according to the given
|
||||
specification the locale file name is different for XPG and CEN
|
||||
syntax. */
|
||||
if (domain_file->filename == NULL)
|
||||
return;
|
||||
|
||||
/* Try to open the addressed file. */
|
||||
fd = open (domain_file->filename, O_RDONLY);
|
||||
if (fd == -1)
|
||||
return;
|
||||
|
||||
/* We must know about the size of the file. */
|
||||
if (fstat (fd, &st) != 0
|
||||
&& st.st_size < (off_t) sizeof (struct mo_file_header))
|
||||
{
|
||||
/* Something went wrong. */
|
||||
close (fd);
|
||||
return;
|
||||
}
|
||||
|
||||
#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
|
||||
|| defined _LIBC
|
||||
/* Now we are ready to load the file. If mmap() is available we try
|
||||
this first. If not available or it failed we try to load it. */
|
||||
data = (struct mo_file_header *) mmap (NULL, st.st_size, PROT_READ,
|
||||
MAP_PRIVATE, fd, 0);
|
||||
|
||||
if (data != (struct mo_file_header *) -1)
|
||||
{
|
||||
/* mmap() call was successful. */
|
||||
close (fd);
|
||||
use_mmap = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If the data is not yet available (i.e. mmap'ed) we try to load
|
||||
it manually. */
|
||||
if (data == (struct mo_file_header *) -1)
|
||||
{
|
||||
off_t to_read;
|
||||
char *read_ptr;
|
||||
|
||||
data = (struct mo_file_header *) malloc (st.st_size);
|
||||
if (data == NULL)
|
||||
return;
|
||||
|
||||
to_read = st.st_size;
|
||||
read_ptr = (char *) data;
|
||||
do
|
||||
{
|
||||
long int nb = (long int) read (fd, read_ptr, to_read);
|
||||
if (nb == -1)
|
||||
{
|
||||
close (fd);
|
||||
return;
|
||||
}
|
||||
|
||||
read_ptr += nb;
|
||||
to_read -= nb;
|
||||
}
|
||||
while (to_read > 0);
|
||||
|
||||
close (fd);
|
||||
}
|
||||
|
||||
/* Using the magic number we can test whether it really is a message
|
||||
catalog file. */
|
||||
if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
|
||||
{
|
||||
/* The magic number is wrong: not a message catalog file. */
|
||||
#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
|
||||
|| defined _LIBC
|
||||
if (use_mmap)
|
||||
munmap ((caddr_t) data, st.st_size);
|
||||
else
|
||||
#endif
|
||||
free (data);
|
||||
return;
|
||||
}
|
||||
|
||||
domain_file->data
|
||||
= (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
|
||||
if (domain_file->data == NULL)
|
||||
return;
|
||||
|
||||
domain = (struct loaded_domain *) domain_file->data;
|
||||
domain->data = (char *) data;
|
||||
domain->must_swap = data->magic != _MAGIC;
|
||||
|
||||
/* Fill in the information about the available tables. */
|
||||
switch (W (domain->must_swap, data->revision))
|
||||
{
|
||||
case 0:
|
||||
domain->nstrings = W (domain->must_swap, data->nstrings);
|
||||
domain->orig_tab = (struct string_desc *)
|
||||
((char *) data + W (domain->must_swap, data->orig_tab_offset));
|
||||
domain->trans_tab = (struct string_desc *)
|
||||
((char *) data + W (domain->must_swap, data->trans_tab_offset));
|
||||
domain->hash_size = W (domain->must_swap, data->hash_tab_size);
|
||||
domain->hash_tab = (nls_uint32 *)
|
||||
((char *) data + W (domain->must_swap, data->hash_tab_offset));
|
||||
break;
|
||||
default:
|
||||
/* This is an illegal revision. */
|
||||
#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
|
||||
|| defined _LIBC
|
||||
if (use_mmap)
|
||||
munmap ((caddr_t) data, st.st_size);
|
||||
else
|
||||
#endif
|
||||
free (data);
|
||||
free (domain);
|
||||
domain_file->data = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Show that one domain is changed. This might make some cached
|
||||
translations invalid. */
|
||||
++_nl_msg_cat_cntr;
|
||||
}
|
376
texinfo/intl/localealias.c
Normal file
376
texinfo/intl/localealias.c
Normal file
@ -0,0 +1,376 @@
|
||||
/* localealias.c -- handle aliases for locale names
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
# define alloca __builtin_alloca
|
||||
# define HAVE_ALLOCA 1
|
||||
#else
|
||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||
# include <alloca.h>
|
||||
# else
|
||||
# ifdef _AIX
|
||||
#pragma alloca
|
||||
# else
|
||||
# ifndef alloca
|
||||
char *alloca ();
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined STDC_HEADERS || defined _LIBC
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
char *getenv ();
|
||||
# ifdef HAVE_MALLOC_H
|
||||
# include <malloc.h>
|
||||
# else
|
||||
void free ();
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined HAVE_STRING_H || defined _LIBC
|
||||
# ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE 1
|
||||
# endif
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
# ifndef strchr
|
||||
# define strchr index
|
||||
# endif
|
||||
# ifndef memcpy
|
||||
# define memcpy(Dst, Src, Num) bcopy ((Src), (Dst), (Num))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "gettext.h"
|
||||
#include "gettextP.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Rename the non ANSI C functions. This is required by the standard
|
||||
because some ANSI C functions will require linking with this object
|
||||
file and the name space must not be polluted. */
|
||||
# define strcasecmp __strcasecmp
|
||||
#endif
|
||||
|
||||
|
||||
/* For those loosing systems which don't have `alloca' we have to add
|
||||
some additional code emulating it. */
|
||||
#ifdef HAVE_ALLOCA
|
||||
/* Nothing has to be done. */
|
||||
# define ADD_BLOCK(list, address) /* nothing */
|
||||
# define FREE_BLOCKS(list) /* nothing */
|
||||
#else
|
||||
struct block_list
|
||||
{
|
||||
void *address;
|
||||
struct block_list *next;
|
||||
};
|
||||
# define ADD_BLOCK(list, addr) \
|
||||
do { \
|
||||
struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
|
||||
/* If we cannot get a free block we cannot add the new element to \
|
||||
the list. */ \
|
||||
if (newp != NULL) { \
|
||||
newp->address = (addr); \
|
||||
newp->next = (list); \
|
||||
(list) = newp; \
|
||||
} \
|
||||
} while (0)
|
||||
# define FREE_BLOCKS(list) \
|
||||
do { \
|
||||
while (list != NULL) { \
|
||||
struct block_list *old = list; \
|
||||
list = list->next; \
|
||||
free (old); \
|
||||
} \
|
||||
} while (0)
|
||||
# undef alloca
|
||||
# define alloca(size) (malloc (size))
|
||||
#endif /* have alloca */
|
||||
|
||||
|
||||
struct alias_map
|
||||
{
|
||||
const char *alias;
|
||||
const char *value;
|
||||
};
|
||||
|
||||
|
||||
static struct alias_map *map;
|
||||
static size_t nmap = 0;
|
||||
static size_t maxmap = 0;
|
||||
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static size_t read_alias_file PARAMS ((const char *fname, int fname_len));
|
||||
static void extend_alias_table PARAMS ((void));
|
||||
static int alias_compare PARAMS ((const struct alias_map *map1,
|
||||
const struct alias_map *map2));
|
||||
|
||||
|
||||
const char *
|
||||
_nl_expand_alias (name)
|
||||
const char *name;
|
||||
{
|
||||
static const char *locale_alias_path = LOCALE_ALIAS_PATH;
|
||||
struct alias_map *retval;
|
||||
size_t added;
|
||||
|
||||
do
|
||||
{
|
||||
struct alias_map item;
|
||||
|
||||
item.alias = name;
|
||||
|
||||
if (nmap > 0)
|
||||
retval = (struct alias_map *) bsearch (&item, map, nmap,
|
||||
sizeof (struct alias_map),
|
||||
(int (*) PARAMS ((const void *,
|
||||
const void *))
|
||||
) alias_compare);
|
||||
else
|
||||
retval = NULL;
|
||||
|
||||
/* We really found an alias. Return the value. */
|
||||
if (retval != NULL)
|
||||
return retval->value;
|
||||
|
||||
/* Perhaps we can find another alias file. */
|
||||
added = 0;
|
||||
while (added == 0 && locale_alias_path[0] != '\0')
|
||||
{
|
||||
const char *start;
|
||||
|
||||
while (locale_alias_path[0] == ':')
|
||||
++locale_alias_path;
|
||||
start = locale_alias_path;
|
||||
|
||||
while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
|
||||
++locale_alias_path;
|
||||
|
||||
if (start < locale_alias_path)
|
||||
added = read_alias_file (start, locale_alias_path - start);
|
||||
}
|
||||
}
|
||||
while (added != 0);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static size_t
|
||||
read_alias_file (fname, fname_len)
|
||||
const char *fname;
|
||||
int fname_len;
|
||||
{
|
||||
#ifndef HAVE_ALLOCA
|
||||
struct block_list *block_list = NULL;
|
||||
#endif
|
||||
FILE *fp;
|
||||
char *full_fname;
|
||||
size_t added;
|
||||
static const char aliasfile[] = "/locale.alias";
|
||||
|
||||
full_fname = (char *) alloca (fname_len + sizeof aliasfile);
|
||||
ADD_BLOCK (block_list, full_fname);
|
||||
memcpy (full_fname, fname, fname_len);
|
||||
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
|
||||
|
||||
fp = fopen (full_fname, "r");
|
||||
if (fp == NULL)
|
||||
{
|
||||
FREE_BLOCKS (block_list);
|
||||
return 0;
|
||||
}
|
||||
|
||||
added = 0;
|
||||
while (!feof (fp))
|
||||
{
|
||||
/* It is a reasonable approach to use a fix buffer here because
|
||||
a) we are only interested in the first two fields
|
||||
b) these fields must be usable as file names and so must not
|
||||
be that long
|
||||
*/
|
||||
char buf[BUFSIZ];
|
||||
char *alias;
|
||||
char *value;
|
||||
char *cp;
|
||||
|
||||
if (fgets (buf, BUFSIZ, fp) == NULL)
|
||||
/* EOF reached. */
|
||||
break;
|
||||
|
||||
cp = buf;
|
||||
/* Ignore leading white space. */
|
||||
while (isspace (cp[0]))
|
||||
++cp;
|
||||
|
||||
/* A leading '#' signals a comment line. */
|
||||
if (cp[0] != '\0' && cp[0] != '#')
|
||||
{
|
||||
alias = cp++;
|
||||
while (cp[0] != '\0' && !isspace (cp[0]))
|
||||
++cp;
|
||||
/* Terminate alias name. */
|
||||
if (cp[0] != '\0')
|
||||
*cp++ = '\0';
|
||||
|
||||
/* Now look for the beginning of the value. */
|
||||
while (isspace (cp[0]))
|
||||
++cp;
|
||||
|
||||
if (cp[0] != '\0')
|
||||
{
|
||||
char *tp;
|
||||
size_t len;
|
||||
|
||||
value = cp++;
|
||||
while (cp[0] != '\0' && !isspace (cp[0]))
|
||||
++cp;
|
||||
/* Terminate value. */
|
||||
if (cp[0] == '\n')
|
||||
{
|
||||
/* This has to be done to make the following test
|
||||
for the end of line possible. We are looking for
|
||||
the terminating '\n' which do not overwrite here. */
|
||||
*cp++ = '\0';
|
||||
*cp = '\n';
|
||||
}
|
||||
else if (cp[0] != '\0')
|
||||
*cp++ = '\0';
|
||||
|
||||
if (nmap >= maxmap)
|
||||
extend_alias_table ();
|
||||
|
||||
/* We cannot depend on strdup available in the libc. Sigh! */
|
||||
len = strlen (alias) + 1;
|
||||
tp = (char *) malloc (len);
|
||||
if (tp == NULL)
|
||||
{
|
||||
FREE_BLOCKS (block_list);
|
||||
return added;
|
||||
}
|
||||
memcpy (tp, alias, len);
|
||||
map[nmap].alias = tp;
|
||||
|
||||
len = strlen (value) + 1;
|
||||
tp = (char *) malloc (len);
|
||||
if (tp == NULL)
|
||||
{
|
||||
FREE_BLOCKS (block_list);
|
||||
return added;
|
||||
}
|
||||
memcpy (tp, value, len);
|
||||
map[nmap].value = tp;
|
||||
|
||||
++nmap;
|
||||
++added;
|
||||
}
|
||||
}
|
||||
|
||||
/* Possibily not the whole line fitted into the buffer. Ignore
|
||||
the rest of the line. */
|
||||
while (strchr (cp, '\n') == NULL)
|
||||
{
|
||||
cp = buf;
|
||||
if (fgets (buf, BUFSIZ, fp) == NULL)
|
||||
/* Make sure the inner loop will be left. The outer loop
|
||||
will exit at the `feof' test. */
|
||||
*cp = '\n';
|
||||
}
|
||||
}
|
||||
|
||||
/* Should we test for ferror()? I think we have to silently ignore
|
||||
errors. --drepper */
|
||||
fclose (fp);
|
||||
|
||||
if (added > 0)
|
||||
qsort (map, nmap, sizeof (struct alias_map),
|
||||
(int (*) PARAMS ((const void *, const void *))) alias_compare);
|
||||
|
||||
FREE_BLOCKS (block_list);
|
||||
return added;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
extend_alias_table ()
|
||||
{
|
||||
size_t new_size;
|
||||
struct alias_map *new_map;
|
||||
|
||||
new_size = maxmap == 0 ? 100 : 2 * maxmap;
|
||||
new_map = (struct alias_map *) malloc (new_size
|
||||
* sizeof (struct alias_map));
|
||||
if (new_map == NULL)
|
||||
/* Simply don't extend: we don't have any more core. */
|
||||
return;
|
||||
|
||||
memcpy (new_map, map, nmap * sizeof (struct alias_map));
|
||||
|
||||
if (maxmap != 0)
|
||||
free (map);
|
||||
|
||||
map = new_map;
|
||||
maxmap = new_size;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
alias_compare (map1, map2)
|
||||
const struct alias_map *map1;
|
||||
const struct alias_map *map2;
|
||||
{
|
||||
#if defined _LIBC || defined HAVE_STRCASECMP
|
||||
return strcasecmp (map1->alias, map2->alias);
|
||||
#else
|
||||
const unsigned char *p1 = (const unsigned char *) map1->alias;
|
||||
const unsigned char *p2 = (const unsigned char *) map2->alias;
|
||||
unsigned char c1, c2;
|
||||
|
||||
if (p1 == p2)
|
||||
return 0;
|
||||
|
||||
do
|
||||
{
|
||||
/* I know this seems to be odd but the tolower() function in
|
||||
some systems libc cannot handle nonalpha characters. */
|
||||
c1 = isupper (*p1) ? tolower (*p1) : *p1;
|
||||
c2 = isupper (*p2) ? tolower (*p2) : *p2;
|
||||
if (c1 == '\0')
|
||||
break;
|
||||
++p1;
|
||||
++p2;
|
||||
}
|
||||
while (c1 == c2);
|
||||
|
||||
return c1 - c2;
|
||||
#endif
|
||||
}
|
102
texinfo/intl/po2tbl.sed.in
Normal file
102
texinfo/intl/po2tbl.sed.in
Normal file
@ -0,0 +1,102 @@
|
||||
# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
|
||||
# Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
1 {
|
||||
i\
|
||||
/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\
|
||||
\
|
||||
#if HAVE_CONFIG_H\
|
||||
# include <config.h>\
|
||||
#endif\
|
||||
\
|
||||
#include "libgettext.h"\
|
||||
\
|
||||
const struct _msg_ent _msg_tbl[] = {
|
||||
h
|
||||
s/.*/0/
|
||||
x
|
||||
}
|
||||
#
|
||||
# Write msgid entries in C array form.
|
||||
#
|
||||
/^msgid/ {
|
||||
s/msgid[ ]*\(".*"\)/ {\1/
|
||||
tb
|
||||
# Append the next line
|
||||
:b
|
||||
N
|
||||
# Look whether second part is continuation line.
|
||||
s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
|
||||
# Yes, then branch.
|
||||
ta
|
||||
# Because we assume that the input file correctly formed the line
|
||||
# just read cannot be again be a msgid line. So it's safe to ignore
|
||||
# it.
|
||||
s/\(.*\)\n.*/\1/
|
||||
bc
|
||||
# We found a continuation line. But before printing insert '\'.
|
||||
:a
|
||||
s/\(.*\)\(\n.*\)/\1\\\2/
|
||||
P
|
||||
# We cannot use D here.
|
||||
s/.*\n\(.*\)/\1/
|
||||
# Some buggy seds do not clear the `successful substitution since last ``t'''
|
||||
# flag on `N', so we do a `t' here to clear it.
|
||||
tb
|
||||
# Not reached
|
||||
:c
|
||||
x
|
||||
# The following nice solution is by
|
||||
# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
|
||||
td
|
||||
# Increment a decimal number in pattern space.
|
||||
# First hide trailing `9' digits.
|
||||
:d
|
||||
s/9\(_*\)$/_\1/
|
||||
td
|
||||
# Assure at least one digit is available.
|
||||
s/^\(_*\)$/0\1/
|
||||
# Increment the last digit.
|
||||
s/8\(_*\)$/9\1/
|
||||
s/7\(_*\)$/8\1/
|
||||
s/6\(_*\)$/7\1/
|
||||
s/5\(_*\)$/6\1/
|
||||
s/4\(_*\)$/5\1/
|
||||
s/3\(_*\)$/4\1/
|
||||
s/2\(_*\)$/3\1/
|
||||
s/1\(_*\)$/2\1/
|
||||
s/0\(_*\)$/1\1/
|
||||
# Convert the hidden `9' digits to `0's.
|
||||
s/_/0/g
|
||||
x
|
||||
G
|
||||
s/\(.*\)\n\([0-9]*\)/\1, \2},/
|
||||
s/\(.*\)"$/\1/
|
||||
p
|
||||
}
|
||||
#
|
||||
# Last line.
|
||||
#
|
||||
$ {
|
||||
i\
|
||||
};\
|
||||
|
||||
g
|
||||
s/0*\(.*\)/int _msg_tbl_length = \1;/p
|
||||
}
|
||||
d
|
101
texinfo/intl/textdomain.c
Normal file
101
texinfo/intl/textdomain.c
Normal file
@ -0,0 +1,101 @@
|
||||
/* textdomain.c -- implementation of the textdomain(3) function
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined STDC_HEADERS || defined _LIBC
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
# ifndef memcpy
|
||||
# define memcpy(Dst, Src, Num) bcopy ((Src), (Dst), (Num))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgettext.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Name of the default text domain. */
|
||||
extern const char _nl_default_default_domain[];
|
||||
|
||||
/* Default text domain in which entries for gettext(3) are to be found. */
|
||||
extern const char *_nl_current_default_domain;
|
||||
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define TEXTDOMAIN __textdomain
|
||||
#else
|
||||
# define TEXTDOMAIN textdomain__
|
||||
#endif
|
||||
|
||||
/* Set the current default message catalog to DOMAINNAME.
|
||||
If DOMAINNAME is null, return the current default.
|
||||
If DOMAINNAME is "", reset to the default of "messages". */
|
||||
char *
|
||||
TEXTDOMAIN (domainname)
|
||||
const char *domainname;
|
||||
{
|
||||
char *old;
|
||||
|
||||
/* A NULL pointer requests the current setting. */
|
||||
if (domainname == NULL)
|
||||
return (char *) _nl_current_default_domain;
|
||||
|
||||
old = (char *) _nl_current_default_domain;
|
||||
|
||||
/* If domain name is the null string set to default domain "messages". */
|
||||
if (domainname[0] == '\0'
|
||||
|| strcmp (domainname, _nl_default_default_domain) == 0)
|
||||
_nl_current_default_domain = _nl_default_default_domain;
|
||||
else
|
||||
{
|
||||
/* If the following malloc fails `_nl_current_default_domain'
|
||||
will be NULL. This value will be returned and so signals we
|
||||
are out of core. */
|
||||
size_t len = strlen (domainname) + 1;
|
||||
char *cp = (char *) malloc (len);
|
||||
if (cp != NULL)
|
||||
memcpy (cp, domainname, len);
|
||||
_nl_current_default_domain = cp;
|
||||
}
|
||||
|
||||
if (old != _nl_default_default_domain)
|
||||
free (old);
|
||||
|
||||
return (char *) _nl_current_default_domain;
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__textdomain, textdomain);
|
||||
#endif
|
104
texinfo/intl/xopen-msg.sed
Normal file
104
texinfo/intl/xopen-msg.sed
Normal file
@ -0,0 +1,104 @@
|
||||
# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
|
||||
# Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
#
|
||||
# The first directive in the .msg should be the definition of the
|
||||
# message set number. We use always set number 1.
|
||||
#
|
||||
1 {
|
||||
i\
|
||||
$set 1 # Automatically created by po2msg.sed
|
||||
h
|
||||
s/.*/0/
|
||||
x
|
||||
}
|
||||
#
|
||||
# We copy all comments into the .msg file. Perhaps they can help.
|
||||
#
|
||||
/^#/ s/^#[ ]*/$ /p
|
||||
#
|
||||
# We copy the original message as a comment into the .msg file.
|
||||
#
|
||||
/^msgid/ {
|
||||
# Does not work now
|
||||
# /"$/! {
|
||||
# s/\\$//
|
||||
# s/$/ ... (more lines following)"/
|
||||
# }
|
||||
s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/
|
||||
p
|
||||
}
|
||||
#
|
||||
# The .msg file contains, other then the .po file, only the translations
|
||||
# but each given a unique ID. Starting from 1 and incrementing by 1 for
|
||||
# each message we assign them to the messages.
|
||||
# It is important that the .po file used to generate the cat-id-tbl.c file
|
||||
# (with po-to-tbl) is the same as the one used here. (At least the order
|
||||
# of declarations must not be changed.)
|
||||
#
|
||||
/^msgstr/ {
|
||||
s/msgstr[ ]*"\(.*\)"/\1/
|
||||
x
|
||||
# The following nice solution is by
|
||||
# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
|
||||
td
|
||||
# Increment a decimal number in pattern space.
|
||||
# First hide trailing `9' digits.
|
||||
:d
|
||||
s/9\(_*\)$/_\1/
|
||||
td
|
||||
# Assure at least one digit is available.
|
||||
s/^\(_*\)$/0\1/
|
||||
# Increment the last digit.
|
||||
s/8\(_*\)$/9\1/
|
||||
s/7\(_*\)$/8\1/
|
||||
s/6\(_*\)$/7\1/
|
||||
s/5\(_*\)$/6\1/
|
||||
s/4\(_*\)$/5\1/
|
||||
s/3\(_*\)$/4\1/
|
||||
s/2\(_*\)$/3\1/
|
||||
s/1\(_*\)$/2\1/
|
||||
s/0\(_*\)$/1\1/
|
||||
# Convert the hidden `9' digits to `0's.
|
||||
s/_/0/g
|
||||
x
|
||||
# Bring the line in the format `<number> <message>'
|
||||
G
|
||||
s/^[^\n]*$/& /
|
||||
s/\(.*\)\n\([0-9]*\)/\2 \1/
|
||||
# Clear flag from last substitution.
|
||||
tb
|
||||
# Append the next line.
|
||||
:b
|
||||
N
|
||||
# Look whether second part is a continuation line.
|
||||
s/\(.*\n\)"\(.*\)"/\1\2/
|
||||
# Yes, then branch.
|
||||
ta
|
||||
P
|
||||
D
|
||||
# Note that `D' includes a jump to the start!!
|
||||
# We found a continuation line. But before printing insert '\'.
|
||||
:a
|
||||
s/\(.*\)\(\n.*\)/\1\\\2/
|
||||
P
|
||||
# We cannot use the sed command `D' here
|
||||
s/.*\n\(.*\)/\1/
|
||||
tb
|
||||
}
|
||||
d
|
15
texinfo/lib/Makefile.am
Normal file
15
texinfo/lib/Makefile.am
Normal file
@ -0,0 +1,15 @@
|
||||
## Makefile.am for texinfo/lib.
|
||||
## $Id: Makefile.am,v 1.1 1998/03/23 04:43:06 law Exp $
|
||||
## Run automake in .. to produce Makefile.in from this.
|
||||
|
||||
noinst_LIBRARIES = libtxi.a
|
||||
INCLUDES = -I../intl
|
||||
|
||||
# Don't need to list alloca.c, etc., Automake includes them.
|
||||
libtxi_a_SOURCES = getopt.c getopt.h getopt1.c system.h xmalloc.c xstrdup.c
|
||||
libtxi_a_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
libtxi_a_DEPENDENCIES = $(libtxi_a_LIBADD)
|
||||
|
||||
## xx configure for bzero?, clib, other common stuff
|
||||
|
||||
EXTRA_DIST = README
|
253
texinfo/lib/Makefile.in
Normal file
253
texinfo/lib/Makefile.in
Normal file
@ -0,0 +1,253 @@
|
||||
# Makefile.in generated automatically by automake 1.2 from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy, distribute and modify it.
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
|
||||
top_builddir = ..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
transform = @program_transform_name@
|
||||
|
||||
NORMAL_INSTALL = true
|
||||
PRE_INSTALL = true
|
||||
POST_INSTALL = true
|
||||
NORMAL_UNINSTALL = true
|
||||
PRE_UNINSTALL = true
|
||||
POST_UNINSTALL = true
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
EXEEXT = @EXEEXT@
|
||||
GENCAT = @GENCAT@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GT_NO = @GT_NO@
|
||||
GT_YES = @GT_YES@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLDEPS = @INTLDEPS@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
TERMLIBS = @TERMLIBS@
|
||||
TEXCONFIG = @TEXCONFIG@
|
||||
TEXMF = @TEXMF@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
l = @l@
|
||||
|
||||
noinst_LIBRARIES = libtxi.a
|
||||
INCLUDES = -I../intl
|
||||
|
||||
# Don't need to list alloca.c, etc., Automake includes them.
|
||||
libtxi_a_SOURCES = getopt.c getopt.h getopt1.c system.h xmalloc.c xstrdup.c
|
||||
libtxi_a_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
libtxi_a_DEPENDENCIES = $(libtxi_a_LIBADD)
|
||||
|
||||
EXTRA_DIST = README
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
|
||||
DEFS = @DEFS@ -I. -I$(srcdir) -I..
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@
|
||||
libtxi_a_OBJECTS = getopt.o getopt1.o xmalloc.o xstrdup.o
|
||||
AR = ar
|
||||
CFLAGS = @CFLAGS@
|
||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_COMMON = README Makefile.am Makefile.in alloca.c memcpy.c \
|
||||
memmove.c strdup.c strerror.c
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
GZIP = --best
|
||||
SOURCES = $(libtxi_a_SOURCES)
|
||||
OBJECTS = $(libtxi_a_OBJECTS)
|
||||
|
||||
default: all
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
$(srcdir)/Makefile.in: @MAINT@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --cygnus lib/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
|
||||
mostlyclean-noinstLIBRARIES:
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
|
||||
distclean-noinstLIBRARIES:
|
||||
|
||||
maintainer-clean-noinstLIBRARIES:
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
rm -f *.o core
|
||||
|
||||
clean-compile:
|
||||
|
||||
distclean-compile:
|
||||
rm -f *.tab.c
|
||||
|
||||
maintainer-clean-compile:
|
||||
|
||||
libtxi.a: $(libtxi_a_OBJECTS) $(libtxi_a_DEPENDENCIES)
|
||||
rm -f libtxi.a
|
||||
$(AR) cru libtxi.a $(libtxi_a_OBJECTS) $(libtxi_a_LIBADD)
|
||||
$(RANLIB) libtxi.a
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES)
|
||||
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
test -z "$(ETAGS_ARGS)$(SOURCES)$(HEADERS)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $(SOURCES) $(HEADERS) -o $$here/TAGS)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
clean-tags:
|
||||
|
||||
distclean-tags:
|
||||
rm -f TAGS ID
|
||||
|
||||
maintainer-clean-tags:
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
|
||||
subdir = lib
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
done
|
||||
info:
|
||||
dvi:
|
||||
check: all
|
||||
$(MAKE)
|
||||
installcheck:
|
||||
install-info:
|
||||
install-exec:
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install-data:
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall:
|
||||
|
||||
all: Makefile $(LIBRARIES)
|
||||
|
||||
install-strip:
|
||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||
installdirs:
|
||||
|
||||
|
||||
mostlyclean-generic:
|
||||
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||
|
||||
clean-generic:
|
||||
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
rm -f Makefile $(DISTCLEANFILES)
|
||||
rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
mostlyclean: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
||||
mostlyclean-tags mostlyclean-generic
|
||||
|
||||
clean: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
|
||||
mostlyclean
|
||||
|
||||
distclean: distclean-noinstLIBRARIES distclean-compile distclean-tags \
|
||||
distclean-generic clean
|
||||
rm -f config.status
|
||||
|
||||
maintainer-clean: maintainer-clean-noinstLIBRARIES \
|
||||
maintainer-clean-compile maintainer-clean-tags \
|
||||
maintainer-clean-generic distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
.PHONY: default mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
|
||||
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
|
||||
mostlyclean-compile distclean-compile clean-compile \
|
||||
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
||||
clean-tags maintainer-clean-tags distdir info dvi installcheck \
|
||||
install-info install-exec install-data install uninstall all \
|
||||
installdirs mostlyclean-generic distclean-generic clean-generic \
|
||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
# 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:
|
3
texinfo/lib/README
Normal file
3
texinfo/lib/README
Normal file
@ -0,0 +1,3 @@
|
||||
Common routines to the Texinfo package.
|
||||
Many are common to other GNU packages as well.
|
||||
(On the FSF machines, check /gd/gnu/lib for the latest.)
|
504
texinfo/lib/alloca.c
Normal file
504
texinfo/lib/alloca.c
Normal file
@ -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
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#ifdef 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 use xmalloc.
|
||||
|
||||
Callers below should use malloc. */
|
||||
|
||||
#ifndef emacs
|
||||
#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)
|
||||
unsigned 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 */
|
1053
texinfo/lib/getopt.c
Normal file
1053
texinfo/lib/getopt.c
Normal file
File diff suppressed because it is too large
Load Diff
133
texinfo/lib/getopt.h
Normal file
133
texinfo/lib/getopt.h
Normal file
@ -0,0 +1,133 @@
|
||||
/* Declarations for getopt.
|
||||
Copyright (C) 1989,90,91,92,93,94,96,97 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 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
#ifndef _GETOPT_H
|
||||
#define _GETOPT_H 1
|
||||
|
||||
#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;
|
||||
|
||||
/* 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__
|
||||
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
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#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__ */
|
||||
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);
|
||||
#else /* not __STDC__ */
|
||||
extern int getopt ();
|
||||
extern int getopt_long ();
|
||||
extern int getopt_long_only ();
|
||||
|
||||
extern int _getopt_internal ();
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _GETOPT_H */
|
189
texinfo/lib/getopt1.c
Normal file
189
texinfo/lib/getopt1.c
Normal file
@ -0,0 +1,189 @@
|
||||
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
||||
Copyright (C) 1987,88,89,90,91,92,93,94,96,97 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 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "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 */
|
20
texinfo/lib/memcpy.c
Normal file
20
texinfo/lib/memcpy.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Copy LEN bytes starting at SRCADDR to DESTADDR. Result undefined
|
||||
if the source overlaps with the destination.
|
||||
Return DESTADDR. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
char *
|
||||
memcpy (destaddr, srcaddr, len)
|
||||
char *destaddr;
|
||||
const char *srcaddr;
|
||||
int len;
|
||||
{
|
||||
char *dest = destaddr;
|
||||
|
||||
while (len-- > 0)
|
||||
*destaddr++ = *srcaddr++;
|
||||
return dest;
|
||||
}
|
24
texinfo/lib/memmove.c
Normal file
24
texinfo/lib/memmove.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* memmove.c -- copy memory.
|
||||
Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate.
|
||||
In the public domain.
|
||||
By David MacKenzie <djm@gnu.ai.mit.edu>. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
void
|
||||
memmove (dest, source, length)
|
||||
char *dest;
|
||||
const char *source;
|
||||
unsigned length;
|
||||
{
|
||||
if (source < dest)
|
||||
/* Moving from low mem to hi mem; start at end. */
|
||||
for (source += length, dest += length; length; --length)
|
||||
*--dest = *--source;
|
||||
else if (source != dest)
|
||||
/* Moving from hi mem to low mem; start at beginning. */
|
||||
for (; length; --length)
|
||||
*dest++ = *source++;
|
||||
}
|
43
texinfo/lib/strdup.c
Normal file
43
texinfo/lib/strdup.c
Normal file
@ -0,0 +1,43 @@
|
||||
/* strdup.c -- return a newly allocated copy of a string
|
||||
Copyright (C) 1990 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#else
|
||||
char *malloc ();
|
||||
char *strcpy ();
|
||||
#endif
|
||||
|
||||
/* Return a newly allocated copy of STR,
|
||||
or 0 if out of memory. */
|
||||
|
||||
char *
|
||||
strdup (str)
|
||||
const char *str;
|
||||
{
|
||||
char *newstr;
|
||||
|
||||
newstr = (char *) malloc (strlen (str) + 1);
|
||||
if (newstr)
|
||||
strcpy (newstr, str);
|
||||
return newstr;
|
||||
}
|
43
texinfo/lib/strerror.c
Normal file
43
texinfo/lib/strerror.c
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* strerror.c --- ANSI C compatible system error routine
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 1986, 1988, 1989, 1991 the Free Software Foundation, Inc.
|
||||
* From gawk.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
extern int sys_nerr;
|
||||
extern char *sys_errlist[];
|
||||
|
||||
char *
|
||||
strerror(n)
|
||||
int n;
|
||||
{
|
||||
static char mesg[30];
|
||||
|
||||
if (n < 0 || n >= sys_nerr) {
|
||||
sprintf(mesg, "Unknown error (%d)", n);
|
||||
return mesg;
|
||||
} else
|
||||
return sys_errlist[n];
|
||||
}
|
102
texinfo/lib/system.h
Normal file
102
texinfo/lib/system.h
Normal file
@ -0,0 +1,102 @@
|
||||
/* system.h: System-dependent declarations. Include this first.
|
||||
$Id: system.h,v 1.1 1998/03/23 04:43:06 law Exp $
|
||||
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef TEXINFO_SYSTEM_H
|
||||
#define TEXINFO_SYSTEM_H
|
||||
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* <unistd.h> should be included before any preprocessor test
|
||||
of _POSIX_VERSION. */
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif /* HAVE_UNISTD_H */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#ifdef HAVE_LOCALE_H
|
||||
#include <locale.h>
|
||||
#endif
|
||||
#include <libintl.h>
|
||||
|
||||
/* Don't use bcopy! Use memmove if source and destination may overlap,
|
||||
memcpy otherwise. */
|
||||
#ifdef HAVE_STRING_H
|
||||
# if !STDC_HEADERS && HAVE_MEMORY_H
|
||||
# include <memory.h>
|
||||
# endif
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
char *memchr ();
|
||||
#endif
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
#define getopt system_getopt
|
||||
#include <stdlib.h>
|
||||
#undef getopt
|
||||
#else
|
||||
extern char *getenv ();
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRERROR
|
||||
extern char *strerror ();
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
#ifdef VMS
|
||||
#include <perror.h>
|
||||
#endif
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef HAVE_SYS_FILE_H
|
||||
#include <sys/file.h>
|
||||
#endif /* HAVE_SYS_FILE_H */
|
||||
|
||||
#ifndef O_RDONLY
|
||||
/* Since <fcntl.h> is POSIX, prefer that to <sys/fcntl.h>.
|
||||
This also avoids some useless warnings on (at least) Linux. */
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#else /* not HAVE_FCNTL_H */
|
||||
#ifdef HAVE_SYS_FCNTL_H
|
||||
#include <sys/fcntl.h>
|
||||
#endif /* not HAVE_SYS_FCNTL_H */
|
||||
#endif /* not HAVE_FCNTL_H */
|
||||
#endif /* not O_RDONLY */
|
||||
|
||||
#ifdef HAVE_PWD_H
|
||||
#include <pwd.h>
|
||||
#endif
|
||||
/* Some systems don't declare this function in pwd.h. */
|
||||
struct passwd *getpwnam ();
|
||||
|
||||
/* Our library routines not included in any system library. */
|
||||
extern void *xmalloc (), *xrealloc ();
|
||||
extern char *xstrdup ();
|
||||
|
||||
#endif /* TEXINFO_SYSTEM_H */
|
80
texinfo/lib/xmalloc.c
Normal file
80
texinfo/lib/xmalloc.c
Normal file
@ -0,0 +1,80 @@
|
||||
/* xmalloc.c -- safe versions of malloc and realloc */
|
||||
|
||||
/* This file is part of GNU Info, a program for reading online documentation
|
||||
stored in Info format.
|
||||
|
||||
This file has appeared in prior works by the Free Software Foundation;
|
||||
thus it carries copyright dates from 1988 through 1993.
|
||||
|
||||
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993 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.
|
||||
|
||||
Written by Brian Fox (bfox@ai.mit.edu). */
|
||||
|
||||
#if !defined (ALREADY_HAVE_XMALLOC)
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
extern void *malloc (), *realloc ();
|
||||
static void memory_error_and_abort ();
|
||||
|
||||
/* **************************************************************** */
|
||||
/* */
|
||||
/* Memory Allocation and Deallocation. */
|
||||
/* */
|
||||
/* **************************************************************** */
|
||||
|
||||
/* Return a pointer to free()able block of memory large enough
|
||||
to hold BYTES number of bytes. If the memory cannot be allocated,
|
||||
print an error message and abort. */
|
||||
void *
|
||||
xmalloc (bytes)
|
||||
int bytes;
|
||||
{
|
||||
void *temp = malloc (bytes);
|
||||
|
||||
if (!temp)
|
||||
memory_error_and_abort ("xmalloc");
|
||||
return (temp);
|
||||
}
|
||||
|
||||
void *
|
||||
xrealloc (pointer, bytes)
|
||||
void *pointer;
|
||||
int bytes;
|
||||
{
|
||||
void *temp;
|
||||
|
||||
if (!pointer)
|
||||
temp = malloc (bytes);
|
||||
else
|
||||
temp = realloc (pointer, bytes);
|
||||
|
||||
if (!temp)
|
||||
memory_error_and_abort ("xrealloc");
|
||||
|
||||
return (temp);
|
||||
}
|
||||
|
||||
static void
|
||||
memory_error_and_abort (fname)
|
||||
char *fname;
|
||||
{
|
||||
fprintf (stderr, "%s: Out of virtual memory!\n", fname);
|
||||
abort ();
|
||||
}
|
||||
#endif /* !ALREADY_HAVE_XMALLOC */
|
42
texinfo/lib/xstrdup.c
Normal file
42
texinfo/lib/xstrdup.c
Normal file
@ -0,0 +1,42 @@
|
||||
/* xstrdup.c -- copy a string with out of memory checking
|
||||
Copyright (C) 1990, 1996 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. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
char *xmalloc (size_t);
|
||||
char *xstrdup (char *string);
|
||||
#else
|
||||
char *xmalloc ();
|
||||
#endif
|
||||
|
||||
/* Return a newly allocated copy of STRING. */
|
||||
|
||||
char *
|
||||
xstrdup (string)
|
||||
char *string;
|
||||
{
|
||||
return strcpy (xmalloc (strlen (string) + 1), string);
|
||||
}
|
13
texinfo/makeinfo/Makefile.am
Normal file
13
texinfo/makeinfo/Makefile.am
Normal file
@ -0,0 +1,13 @@
|
||||
## Makefile.am for texinfo/makeinfo.
|
||||
## $Id: Makefile.am,v 1.1 1998/03/23 04:43:06 law Exp $
|
||||
## Run automake in .. to produce Makefile.in from this.
|
||||
|
||||
bin_PROGRAMS = makeinfo
|
||||
|
||||
localedir = $(datadir)/locale
|
||||
INCLUDES = -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
|
||||
LDADD = ../lib/libtxi.a @INTLLIBS@
|
||||
|
||||
makeinfo_SOURCES = makeinfo.c makeinfo.h multi.c
|
||||
|
||||
EXTRA_DIST = README
|
6
texinfo/makeinfo/README
Normal file
6
texinfo/makeinfo/README
Normal file
@ -0,0 +1,6 @@
|
||||
A standalone program to convert Texinfo source into Info files
|
||||
readable with standalone info or M-x info in Emacs.
|
||||
makeinfo can also output plain ASCII.
|
||||
|
||||
The Emacs function M-x texinfo-format-buffer does the same job, but
|
||||
makeinfo is faster and gives better error messages.
|
134
texinfo/missing
Executable file
134
texinfo/missing
Executable file
@ -0,0 +1,134 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
# Franc,ois 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., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
automake touch all \`Makefile.in' files
|
||||
bison touch file \`y.tab.c'
|
||||
makeinfo touch the output file
|
||||
yacc touch file \`y.tab.c'"
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing - GNU libit 0.0"
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
aclocal)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`acinclude.m4' or \`configure.in'. 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 missing on your system. You should only need it if
|
||||
you modified \`configure.in'. 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 missing on your system. You should only need it if
|
||||
you modified \`acconfig.h' or \`configure.in'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
touch config.h.in
|
||||
;;
|
||||
|
||||
automake)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
|
||||
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$/touch \1.in/' \
|
||||
| sh
|
||||
;;
|
||||
|
||||
bison|yacc)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
touch y.tab.c
|
||||
;;
|
||||
|
||||
makeinfo)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
|
||||
fi
|
||||
touch $file
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and you do not seem to have it handy on your
|
||||
system. You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequirements 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
|
40
texinfo/mkinstalldirs
Executable file
40
texinfo/mkinstalldirs
Executable file
@ -0,0 +1,40 @@
|
||||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
# Public domain
|
||||
|
||||
# $Id: mkinstalldirs,v 1.1 1998/03/23 04:42:10 law Exp $
|
||||
|
||||
errstatus=0
|
||||
|
||||
for file
|
||||
do
|
||||
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
||||
shift
|
||||
|
||||
pathcomp=
|
||||
for d
|
||||
do
|
||||
pathcomp="$pathcomp$d"
|
||||
case "$pathcomp" in
|
||||
-* ) pathcomp=./$pathcomp ;;
|
||||
esac
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
echo "mkdir $pathcomp" 1>&2
|
||||
|
||||
mkdir "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
|
||||
pathcomp="$pathcomp/"
|
||||
done
|
||||
done
|
||||
|
||||
exit $errstatus
|
||||
|
||||
# mkinstalldirs ends here
|
5
texinfo/po/ChangeLog
Normal file
5
texinfo/po/ChangeLog
Normal file
@ -0,0 +1,5 @@
|
||||
Thu Sep 4 15:01:33 1997 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* Makefile.in.in (install-info): Add dummy target.
|
||||
|
||||
|
270
texinfo/po/Makefile.in.in
Normal file
270
texinfo/po/Makefile.in.in
Normal file
@ -0,0 +1,270 @@
|
||||
# Makefile for program source directory in GNU NLS utilities package.
|
||||
# Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
PACKAGE = @PACKAGE@
|
||||
VERSION = @VERSION@
|
||||
|
||||
SHELL = /bin/sh
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
datadir = $(prefix)/@DATADIRNAME@
|
||||
localedir = $(datadir)/locale
|
||||
gnulocaledir = $(prefix)/share/locale
|
||||
gettextsrcdir = $(prefix)/share/gettext/po
|
||||
subdir = po
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
|
||||
CC = @CC@
|
||||
GENCAT = @GENCAT@
|
||||
GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
|
||||
MSGFMT = @MSGFMT@
|
||||
XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
|
||||
MSGMERGE = PATH=../src:$$PATH msgmerge
|
||||
|
||||
DEFS = @DEFS@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
|
||||
INCLUDES = -I.. -I$(top_srcdir)/intl
|
||||
|
||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
||||
|
||||
SOURCES = cat-id-tbl.c
|
||||
POFILES = @POFILES@
|
||||
GMOFILES = @GMOFILES@
|
||||
DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
|
||||
stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
|
||||
|
||||
POTFILES = \
|
||||
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) $<
|
||||
|
||||
.po.pox:
|
||||
if [ x"@MAINT@" = x ]; then \
|
||||
$(MAKE) $(PACKAGE).pot; \
|
||||
$(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox; \
|
||||
else \
|
||||
touch $@; \
|
||||
fi
|
||||
|
||||
.po.mo:
|
||||
if [ x"@MAINT@" = x ]; then \
|
||||
$(MSGFMT) -o $@ $<; \
|
||||
else \
|
||||
touch $@; \
|
||||
fi
|
||||
|
||||
.po.gmo:
|
||||
if [ x"@MAINT@" = x ]; then \
|
||||
file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
|
||||
&& rm -f $$file && $(GMSGFMT) -o $$file $<; \
|
||||
else \
|
||||
touch $@; \
|
||||
fi
|
||||
|
||||
.po.cat:
|
||||
if [ x"@MAINT@" = x ]; then \
|
||||
sed -f ../intl/po2msg.sed < $< > $*.msg \
|
||||
&& rm -f $@ && $(GENCAT) $@ $*.msg; \
|
||||
else \
|
||||
touch $@; \
|
||||
fi
|
||||
|
||||
|
||||
all: all-@USE_NLS@
|
||||
|
||||
all-yes: cat-id-tbl.c $(CATALOGS)
|
||||
all-no:
|
||||
|
||||
$(PACKAGE).pot: @MAINT@ $(POTFILES)
|
||||
$(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
|
||||
--add-comments --keyword=_ --keyword=N_ \
|
||||
--files-from=$(srcdir)/POTFILES.in
|
||||
if [ ! -s $(PACKAGE).po ] \
|
||||
|| cmp -s $(PACKAGE).po $(srcdir)/$(PACKAGE).pot; then \
|
||||
rm -f $(PACKAGE).po; \
|
||||
else \
|
||||
rm -f $(srcdir)/$(PACKAGE).pot \
|
||||
&& mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot; \
|
||||
fi
|
||||
|
||||
cat-id-tbl.c: stamp-cat-id
|
||||
stamp-cat-id: @MAINT@ $(PACKAGE).pot
|
||||
rm -f cat-id-tbl.tmp
|
||||
sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
|
||||
| sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
|
||||
if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
|
||||
rm cat-id-tbl.tmp; \
|
||||
else \
|
||||
echo cat-id-tbl.c changed; \
|
||||
rm -f $(srcdir)/cat-id-tbl.c; \
|
||||
mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
|
||||
fi
|
||||
cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
|
||||
|
||||
|
||||
install: install-exec install-data
|
||||
install-exec:
|
||||
install-data: install-data-@USE_NLS@
|
||||
install-data-no: all
|
||||
install-data-yes: all
|
||||
if test -r $(MKINSTALLDIRS); then \
|
||||
$(MKINSTALLDIRS) $(datadir); \
|
||||
else \
|
||||
$(top_srcdir)/mkinstalldirs $(datadir); \
|
||||
fi
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
case "$$cat" in \
|
||||
*.gmo) destdir=$(gnulocaledir);; \
|
||||
*) destdir=$(localedir);; \
|
||||
esac; \
|
||||
lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
|
||||
dir=$$destdir/$$lang/LC_MESSAGES; \
|
||||
if test -r $(MKINSTALLDIRS); then \
|
||||
$(MKINSTALLDIRS) $$dir; \
|
||||
else \
|
||||
$(top_srcdir)/mkinstalldirs $$dir; \
|
||||
fi; \
|
||||
if test -r $$cat; then \
|
||||
$(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
|
||||
echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
|
||||
echo "installing $(srcdir)/$$cat as" \
|
||||
"$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
||||
fi; \
|
||||
if test -r $$cat.m; then \
|
||||
$(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
||||
else \
|
||||
if test -r $(srcdir)/$$cat.m ; then \
|
||||
$(INSTALL_DATA) $(srcdir)/$$cat.m \
|
||||
$$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
echo "installing $(srcdir)/$$cat as" \
|
||||
"$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
||||
else \
|
||||
true; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
if test "$(PACKAGE)" = "gettext"; then \
|
||||
if test -r $(MKINSTALLDIRS); then \
|
||||
$(MKINSTALLDIRS) $(gettextsrcdir); \
|
||||
else \
|
||||
$(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
|
||||
fi; \
|
||||
cd $(srcdir) && \
|
||||
$(INSTALL_DATA) Makefile.in.in $(gettextsrcdir)/Makefile.in.in; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
|
||||
# Define this as empty until I found a useful application.
|
||||
installcheck:
|
||||
|
||||
uninstall:
|
||||
catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
|
||||
rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
|
||||
rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
|
||||
rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
done
|
||||
rm -f $(gettextsrcdir)/po-Makefile.in.in
|
||||
|
||||
check: all
|
||||
|
||||
cat-id-tbl.o: ../intl/libgettext.h
|
||||
|
||||
dvi info install-info tags TAGS ID:
|
||||
|
||||
mostlyclean:
|
||||
rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
|
||||
rm -fr *.o
|
||||
|
||||
clean: mostlyclean
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
|
||||
|
||||
maintainer-clean: distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist distdir: update-po $(DISTFILES)
|
||||
dists="$(DISTFILES)"; \
|
||||
for file in $$dists; do \
|
||||
ln $(srcdir)/$$file $(distdir) 2> /dev/null \
|
||||
|| cp -p $(srcdir)/$$file $(distdir); \
|
||||
done
|
||||
|
||||
update-po: Makefile
|
||||
$(MAKE) $(PACKAGE).pot
|
||||
PATH=`pwd`/../src:$$PATH; \
|
||||
cd $(srcdir); \
|
||||
catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
|
||||
mv $$lang.po $$lang.old.po; \
|
||||
echo "$$lang:"; \
|
||||
if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
|
||||
rm -f $$lang.old.po; \
|
||||
else \
|
||||
echo "msgmerge for $$cat failed!"; \
|
||||
rm -f $$lang.po; \
|
||||
mv $$lang.old.po $$lang.po; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
POTFILES: POTFILES.in
|
||||
( if test 'x$(srcdir)' != 'x.'; then \
|
||||
posrcprefix='$(top_srcdir)/'; \
|
||||
else \
|
||||
posrcprefix="../"; \
|
||||
fi; \
|
||||
sed -e '/^#/d' -e '/^[ ]*$$/d' \
|
||||
-e "s@.*@ $$posrcprefix& \\\\@" \
|
||||
-e '$$s/\(.*\) \\/\1/' < $(srcdir)/POTFILES.in > POTFILES )
|
||||
|
||||
Makefile: Makefile.in.in ../config.status POTFILES
|
||||
cd .. \
|
||||
&& CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
|
||||
$(SHELL) ./config.status
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
20
texinfo/po/POTFILES.in
Normal file
20
texinfo/po/POTFILES.in
Normal file
@ -0,0 +1,20 @@
|
||||
# List of source files containing translatable strings.
|
||||
# The last line must not be a comment.
|
||||
|
||||
info/doc.c
|
||||
info/echo-area.c
|
||||
info/footnotes.c
|
||||
info/indices.c
|
||||
info/info.c
|
||||
info/infodoc.c
|
||||
info/m-x.c
|
||||
info/makedoc.c
|
||||
info/nodemenu.c
|
||||
info/nodes.h
|
||||
info/session.c
|
||||
info/variables.c
|
||||
info/window.c
|
||||
makeinfo/makeinfo.c
|
||||
makeinfo/multi.c
|
||||
util/install-info.c
|
||||
util/texindex.c
|
501
texinfo/po/cat-id-tbl.c
Normal file
501
texinfo/po/cat-id-tbl.c
Normal file
@ -0,0 +1,501 @@
|
||||
/* Automatically generated by po2tbl.sed from texinfo.pot. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "libgettext.h"
|
||||
|
||||
const struct _msg_ent _msg_tbl[] = {
|
||||
{"", 1},
|
||||
{"Move down to the next line", 2},
|
||||
{"Move up to the previous line", 3},
|
||||
{"Move to the end of the line", 4},
|
||||
{"Move to the start of the line", 5},
|
||||
{"Move forward a character", 6},
|
||||
{"Move backward a character", 7},
|
||||
{"Move forward a word", 8},
|
||||
{"Move backward a word", 9},
|
||||
{"Move forwards or down through node structure", 10},
|
||||
{"Move backwards or up through node structure", 11},
|
||||
{"Scroll forward in this window", 12},
|
||||
{"Scroll backward in this window", 13},
|
||||
{"Move to the start of this node", 14},
|
||||
{"Move to the end of this node", 15},
|
||||
{"Select the next window", 16},
|
||||
{"Select the previous window", 17},
|
||||
{"Split the current window", 18},
|
||||
{"Delete the current window", 19},
|
||||
{"Delete all other windows", 20},
|
||||
{"Scroll the other window", 21},
|
||||
{"Grow (or shrink) this window", 22},
|
||||
{"Divide the available screen space among the visible windows", 23},
|
||||
{"Toggle the state of line wrapping in the current window", 24},
|
||||
{"Select the `Next' node", 25},
|
||||
{"Select the `Prev' node", 26},
|
||||
{"Select the `Up' node", 27},
|
||||
{"Select the last node in this file", 28},
|
||||
{"Select the first node in this file", 29},
|
||||
{"Select the most recently selected node", 30},
|
||||
{"Select the last item in this node's menu", 31},
|
||||
{"Select this menu item", 32},
|
||||
{"Read a menu item and select its node", 33},
|
||||
{"Read a footnote or cross reference and select its node", 34},
|
||||
{"Move to the start of this node's menu", 35},
|
||||
{"Visit as many menu items at once as possible", 36},
|
||||
{"Read a node name and select it", 37},
|
||||
{"Read a manpage reference and select it", 38},
|
||||
{"Select the node `Top' in this file", 39},
|
||||
{"Select the node `(dir)'", 40},
|
||||
{"Kill this node", 41},
|
||||
{"Read the name of a file and select it", 42},
|
||||
{"Pipe the contents of this node through INFO_PRINT_COMMAND", 43},
|
||||
{"Read a string and search for it", 44},
|
||||
{"Search interactively for a string as you type it", 45},
|
||||
{"Move to the previous cross reference", 46},
|
||||
{"Move to the next cross reference", 47},
|
||||
{"Select reference or menu item appearing on this line", 48},
|
||||
{"Cancel current operation", 49},
|
||||
{"Move to the cursor to a specific line of the window", 50},
|
||||
{"Redraw the display", 51},
|
||||
{"Quit using Info", 52},
|
||||
{"Add this digit to the current numeric argument", 53},
|
||||
{"universal-argument", 54},
|
||||
{"Start (or multiply by 4) the current numeric argument", 55},
|
||||
{"Internally used by \\[universal-argument]", 56},
|
||||
{"Move to the start of this line", 57},
|
||||
{"Move to the end of this line", 58},
|
||||
{"Delete the character under the cursor", 59},
|
||||
{"Delete the character behind the cursor", 60},
|
||||
{"Cancel or quit operation", 61},
|
||||
{"Accept (or force completion of) this line", 62},
|
||||
{"Insert next character verbatim", 63},
|
||||
{"Insert this character", 64},
|
||||
{"Insert a TAB character", 65},
|
||||
{"Transpose characters at point", 66},
|
||||
{"Yank back the contents of the last kill", 67},
|
||||
{"Yank back a previous kill", 68},
|
||||
{"Kill to the end of the line", 69},
|
||||
{"Kill to the beginning of the line", 70},
|
||||
{"Kill the word following the cursor", 71},
|
||||
{"Kill the word preceding the cursor", 72},
|
||||
{"List possible completions", 73},
|
||||
{"Insert completion", 74},
|
||||
{"Scroll the completions window", 75},
|
||||
{"Display help message", 76},
|
||||
{"Visit Info node `(info)Help'", 77},
|
||||
{"Print documentation for KEY", 78},
|
||||
{"Show what to type to execute a given command", 79},
|
||||
{"Read the name of an Info command and describe it", 80},
|
||||
{"Read a command name in the echo area and execute it", 81},
|
||||
{"Set the height of the displayed window", 82},
|
||||
{"Look up a string in the index for this file", 83},
|
||||
{"\
|
||||
Go to the next matching index item from the last `\\[index-search]' command", 84},
|
||||
{"Grovel all known info file's indices for a string and build a menu", 85},
|
||||
{"Make a window containing a menu of all of the currently visited nodes", 86},
|
||||
{"Select a node which has been previously visited in a visible window", 87},
|
||||
{"Show the footnotes associated with this node in another window", 88},
|
||||
{"Explain the use of a variable", 89},
|
||||
{"Set the value of an Info variable", 90},
|
||||
{"Kill ring is empty", 91},
|
||||
{"Not complete", 92},
|
||||
{"No completions", 93},
|
||||
{"Sole completion", 94},
|
||||
{"There %s %d ", 95},
|
||||
{"is", 96},
|
||||
{"are", 97},
|
||||
{"completion%s:\n", 98},
|
||||
{"Building completions...", 99},
|
||||
{"Footnotes could not be displayed", 100},
|
||||
{"Finding index entries...", 101},
|
||||
{"No indices found.", 102},
|
||||
{"Index entry: ", 103},
|
||||
{"No previous index search string.", 104},
|
||||
{"No index entries.", 105},
|
||||
{"No %sindex entries containing \"%s\".", 106},
|
||||
{"more ", 107},
|
||||
{"CAN'T SEE THIS", 108},
|
||||
{"Found \"%s\" in %s. (`\\[next-index-match]' tries to find next.)", 109},
|
||||
{"Scanning indices of \"%s\"...", 110},
|
||||
{"Index apropos: ", 111},
|
||||
{"\
|
||||
\n\
|
||||
* Menu: Nodes whoses indices contain \"%s\":\n", 112},
|
||||
{"no entries found\n", 113},
|
||||
{"There is no menu in this node.", 114},
|
||||
{"There is no menu item \"%s\" in this node.", 115},
|
||||
{"Unable to find the node referenced by \"%s\".", 116},
|
||||
{"\
|
||||
Usage: info [-d dir-path] [-f info-file] [-o output-file] [-n node-name]...", 117},
|
||||
{"\
|
||||
[--directory dir-path] [--file info-file] [--node node-name]...", 118},
|
||||
{" [--help] [--output output-file] [--subnodes] [--version]", 119},
|
||||
{" [--dribble dribble-file] [--restore from-file]", 120},
|
||||
{" [menu-selection ...]", 121},
|
||||
{"\
|
||||
Here is a quick description of Info's options. For a more complete\n\
|
||||
description of how to use Info, type `info info options'.\n\
|
||||
\n\
|
||||
--directory DIR Add DIR to INFOPATH.\n\
|
||||
--dribble FILENAME Remember user keystrokes in FILENAME.\n\
|
||||
--file FILENAME Specify Info file to visit.\n\
|
||||
--node NODENAME Specify nodes in first visited Info file.\n\
|
||||
--output FILENAME Output selected nodes to FILENAME.\n\
|
||||
--restore FILENAME Read initial keystrokes from FILENAME.\n\
|
||||
--subnodes Recursively output menu items.\n\
|
||||
--help Get this help message.\n\
|
||||
--version Display Info's version information.\n\
|
||||
\n\
|
||||
Remaining arguments to Info are treated as the names of menu\n\
|
||||
items in the initial node visited. You can easily move to the\n\
|
||||
node of your choice by specifying the menu names which describe\n\
|
||||
the path to that node. For example, `info emacs buffers'.\n\
|
||||
\n\
|
||||
Email bug reports to bug-texinfo@prep.ai.mit.edu.", 122},
|
||||
{"Basic Commands in Info Windows", 123},
|
||||
{"\
|
||||
The following commands can only be invoked via M-x:\n\
|
||||
\n", 124},
|
||||
{"--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n", 125},
|
||||
{"Describe key: %s", 126},
|
||||
{"ESC %s is undefined.", 127},
|
||||
{"%s is undefined.", 128},
|
||||
{"%s is defined to %s.", 129},
|
||||
{"Where is command: ", 130},
|
||||
{"`%s' is not on any keys", 131},
|
||||
{"%s can only be invoked via %s.", 132},
|
||||
{"%s can be invoked via %s.", 133},
|
||||
{"There is no function named `%s'", 134},
|
||||
{"Describe command: ", 135},
|
||||
{"Cannot execute an `echo-area' command here.", 136},
|
||||
{"Set screen height to (%d): ", 137},
|
||||
{"\
|
||||
Source files groveled to make this file include:\n\
|
||||
\n", 138},
|
||||
{"Couldn't manipulate the file %s.\n", 139},
|
||||
{"\
|
||||
\n\
|
||||
* Menu:\n\
|
||||
(File)Node Lines Size Containing File\n\
|
||||
---------- ----- ---- ---------------", 140},
|
||||
{"\
|
||||
Here is the menu of nodes you have recently visited.\n\
|
||||
Select one from this menu, or use `\\[history-node]' in another window.\n", 141},
|
||||
{"Select visited node: ", 142},
|
||||
{"The reference disappeared! (%s).", 143},
|
||||
{"\
|
||||
Welcome to Info version %s. \"\\[get-help-window]\" for help, \
|
||||
\"\\[menu-item]\" for menu item.", 144},
|
||||
{" times", 145},
|
||||
{"%d times", 146},
|
||||
{"No \"Next\" pointer for this node.", 147},
|
||||
{"Following \"Next\" node...", 148},
|
||||
{"Next", 149},
|
||||
{"Selecting first menu item...", 150},
|
||||
{"Selecting \"Next\" node...", 151},
|
||||
{"Up", 152},
|
||||
{"No more nodes.", 153},
|
||||
{"No \"Prev\" for this node.", 154},
|
||||
{"Moving \"Prev\" in this window.", 155},
|
||||
{"Prev", 156},
|
||||
{"No \"Prev\" or \"Up\" for this node.", 157},
|
||||
{"Moving \"Up\" in this window.", 158},
|
||||
{"Moving to \"Prev\"'s last menu item.", 159},
|
||||
{"Cannot delete a permanent window", 160},
|
||||
{"This window has no additional nodes", 161},
|
||||
{"There aren't %d items in this menu.", 162},
|
||||
{"Menu item (%s): ", 163},
|
||||
{"Menu item: ", 164},
|
||||
{"Follow xref (%s): ", 165},
|
||||
{"Follow xref: ", 166},
|
||||
{"Goto Node: ", 167},
|
||||
{"Get Manpage: ", 168},
|
||||
{"Top", 169},
|
||||
{"Kill node (%s): ", 170},
|
||||
{"Cannot kill node `%s'", 171},
|
||||
{"Cannot kill the last node", 172},
|
||||
{"Find file: ", 173},
|
||||
{"Cannot find \"%s\".", 174},
|
||||
{"Could not create output file \"%s\".", 175},
|
||||
{"Done.", 176},
|
||||
{"Writing node \"(%s)%s\"...", 177},
|
||||
{"Writing node \"%s\"...", 178},
|
||||
{"Cannot open pipe to \"%s\".", 179},
|
||||
{"Printing node \"(%s)%s\"...", 180},
|
||||
{"Printing node \"%s\"...", 181},
|
||||
{"Searching subfile \"%s\"...", 182},
|
||||
{"%s for string [%s]: ", 183},
|
||||
{"Search backward", 184},
|
||||
{"Search", 185},
|
||||
{"Search failed.", 186},
|
||||
{"I-search backward: ", 187},
|
||||
{"I-search: ", 188},
|
||||
{"Failing ", 189},
|
||||
{"No cross references in this node.", 190},
|
||||
{"Quit", 191},
|
||||
{"Unknown command (%s).", 192},
|
||||
{"\"\" is invalid", 193},
|
||||
{"\"%s\" is invalid", 194},
|
||||
{"When \"On\", footnotes appear and disappear automatically", 195},
|
||||
{"When \"On\", creating or deleting a window resizes other windows", 196},
|
||||
{"When \"On\", flash the screen instead of ringing the bell", 197},
|
||||
{"When \"On\", errors cause the bell to ring", 198},
|
||||
{"When \"On\", Info garbage collects files which had to be uncompressed", 199},
|
||||
{"When \"On\", the portion of the matched search string is highlighted", 200},
|
||||
{"Controls what happens when scrolling is requested at the end of a node", 201},
|
||||
{"The number lines to scroll when the cursor moves out of the window", 202},
|
||||
{"When \"On\", Info accepts and displays ISO Latin characters", 203},
|
||||
{"Describe variable: ", 204},
|
||||
{"Set variable: ", 205},
|
||||
{"Set %s to value (%d): ", 206},
|
||||
{"Set %s to value (%s): ", 207},
|
||||
{"--*** Tags out of Date ***", 208},
|
||||
{"-----Info: (), lines ----, ", 209},
|
||||
{"-%s---Info: %s, %d lines --%s--", 210},
|
||||
{"-%s%s-Info: (%s)%s, %d lines --%s--", 211},
|
||||
{" Subfile: %s", 212},
|
||||
{"%s:%d: warning: ", 213},
|
||||
{"Too many errors! Gave up.\n", 214},
|
||||
{"%s: %s arg must be numeric, not `%s'.\n", 215},
|
||||
{"Couldn't open macro expansion output `%s'", 216},
|
||||
{"Cannot specify more than one macro expansion output", 217},
|
||||
{"%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n", 218},
|
||||
{"%s: --footnote-style arg must be `separate' or `end', not `%s'.\n", 219},
|
||||
{"\
|
||||
Copyright (C) 1996 Free Software Foundation, Inc.\n\
|
||||
There is NO warranty. You may redistribute this software\n\
|
||||
under the terms of the GNU General Public License.\n\
|
||||
For more information about these matters, see the files named COPYING.", 220},
|
||||
{"%s: missing file argument.\n", 221},
|
||||
{"makeinfo (GNU %s %s) %d.%d\n", 222},
|
||||
{"Try `%s --help' for more information.\n", 223},
|
||||
{"\
|
||||
Usage: %s [OPTION]... TEXINFO-FILE...\n\
|
||||
\n\
|
||||
Translate Texinfo source documentation to a format suitable for reading\n\
|
||||
with GNU Info.\n\
|
||||
\n\
|
||||
Options:\n\
|
||||
-D VAR define a variable, as with @set.\n\
|
||||
-E MACRO-OFILE process macros only, output texinfo source.\n\
|
||||
-I DIR append DIR to the @include directory search path.\n\
|
||||
-P DIR prepend DIR to the @include directory search path.\n\
|
||||
-U VAR undefine a variable, as with @clear.\n\
|
||||
--error-limit NUM quit after NUM errors (default %d).\n\
|
||||
--fill-column NUM break lines at NUM characters (default %d).\n\
|
||||
--footnote-style STYLE output footnotes according to STYLE:\n\
|
||||
`separate' to place footnotes in their own node,\n\
|
||||
`end' to place the footnotes at the end of\n\
|
||||
the node in which they are defined (the default).\n\
|
||||
--force preserve output even if errors.\n\
|
||||
--help display this help and exit.\n\
|
||||
--no-validate suppress node cross-reference validation.\n\
|
||||
--no-warn suppress warnings (but not errors).\n\
|
||||
--no-split suppress splitting of large files.\n\
|
||||
--no-headers suppress node separators and Node: Foo headers.\n\
|
||||
--output FILE, -o FILE output to FILE, and ignore any @setfilename.\n\
|
||||
--paragraph-indent VAL indent paragraphs with VAL spaces (default %d).\n\
|
||||
if VAL is `none', do not indent; if VAL is `asis',\n\
|
||||
preserve any existing indentation.\n\
|
||||
--reference-limit NUM complain about at most NUM references (default %d).\n\
|
||||
--verbose report about what is being done.\n\
|
||||
--version display version information and exit.\n\
|
||||
\n\
|
||||
Email bug reports to bug-texinfo@prep.ai.mit.edu.\n", 224},
|
||||
{"%s: getwd: %s, %s\n", 225},
|
||||
{"Expected `%s'", 226},
|
||||
{"No `%s' found in `%s'", 227},
|
||||
{"%s: Skipping macro expansion to stdout as Info output is going there.\n", 228},
|
||||
{"Making %s file `%s' from `%s'.\n", 229},
|
||||
{"This is Info file %s, produced by Makeinfo version %d.%d", 230},
|
||||
{" from the input file %s.\n", 231},
|
||||
{"\
|
||||
%s: Removing macro output file `%s' due to errors; use --force to preserve.\n", 232},
|
||||
{"%s: Removing output file `%s' due to errors; use --force to preserve.\n", 233},
|
||||
{"Misplaced %c", 234},
|
||||
{"Unknown command `%s'", 235},
|
||||
{"NO_NAME!", 236},
|
||||
{"%c%s expected `{...}'", 237},
|
||||
{"Unmatched }", 238},
|
||||
{"%c%s missing close brace", 239},
|
||||
{"Broken-Type in insertion_type_pname", 240},
|
||||
{"Enumeration stack overflow", 241},
|
||||
{"lettering overflow, restarting at %c", 242},
|
||||
{"* Menu:\n", 243},
|
||||
{"%s requires an argument: the formatter for %citem", 244},
|
||||
{"`%cend' expected `%s', but saw `%s'", 245},
|
||||
{"No matching `%cend %s'", 246},
|
||||
{"How did @%s end up in cm_special_char?\n", 247},
|
||||
{"%c%s expects `i' or `j' as argument, not `%c'", 248},
|
||||
{"%c%s expects a single character `i' or `j' as argument", 249},
|
||||
{"January", 250},
|
||||
{"February", 251},
|
||||
{"March", 252},
|
||||
{"April", 253},
|
||||
{"May", 254},
|
||||
{"June", 255},
|
||||
{"July", 256},
|
||||
{"August", 257},
|
||||
{"September", 258},
|
||||
{"October", 259},
|
||||
{"November", 260},
|
||||
{"December", 261},
|
||||
{"%d %s %d", 262},
|
||||
{"%c%s expects a single character as an argument", 263},
|
||||
{"%c%s is obsolete", 264},
|
||||
{"There already is a node having %ctop as a section", 265},
|
||||
{"Here is the %ctop node", 266},
|
||||
{"%ctop used before %cnode, defaulting to %s", 267},
|
||||
{"%c%s is obsolete; use %c%s instead", 268},
|
||||
{"Node `%s' multiply defined (line %d is first definition at)", 269},
|
||||
{"Formatting node %s...\n", 270},
|
||||
{"Node `%s' requires a sectioning command (e.g. %c%s)", 271},
|
||||
{"Node `%s''s Next field not pointed back to", 272},
|
||||
{"This node (`%s') is the one with the bad `Prev'", 273},
|
||||
{"Node `%s's Prev field not pointed back to", 274},
|
||||
{"This node (`%s') has the bad Next", 275},
|
||||
{"Node `%s' missing Up field", 276},
|
||||
{"`%s' has an Up field of `%s', but `%s' has no menu item for `%s'", 277},
|
||||
{"node `%s' has been referenced %d times", 278},
|
||||
{"unreferenced node `%s'", 279},
|
||||
{"%s reference to nonexistent node `%s'", 280},
|
||||
{"%cmenu seen before first node", 281},
|
||||
{"creating `Top' node", 282},
|
||||
{"`.' or `,' must follow cross reference, not %c", 283},
|
||||
{"@image file `%s' unreadable: %s", 284},
|
||||
{"@image missing filename argument", 285},
|
||||
{"%s requires letter or digit", 286},
|
||||
{"Unmatched `%c%s'", 287},
|
||||
{"`%c%s' needs something after it", 288},
|
||||
{"Bad argument to `%s', `%s', using `%s'", 289},
|
||||
{"{No Value For \"%s\"}", 290},
|
||||
{"%c%s requires a name", 291},
|
||||
{"Reached eof before matching @end %s", 292},
|
||||
{"The `%c%s' command is meaningless within a `@%s' block", 293},
|
||||
{"%citemx is not meaningful inside of a `%s' block", 294},
|
||||
{"%c%s found outside of an insertion block", 295},
|
||||
{"Missing `}' in %cdef arg", 296},
|
||||
{"Function", 297},
|
||||
{"Macro", 298},
|
||||
{"Special Form", 299},
|
||||
{"Variable", 300},
|
||||
{"User Option", 301},
|
||||
{"Instance Variable", 302},
|
||||
{"Method", 303},
|
||||
{"Must be in a `%s' insertion in order to use `%s'x", 304},
|
||||
{"%csp requires a positive numeric argument", 305},
|
||||
{"asis", 306},
|
||||
{"none", 307},
|
||||
{"Bad argument to %c%s", 308},
|
||||
{"Unknown index `%s'", 309},
|
||||
{"Index `%s' already exists", 310},
|
||||
{"Unknown index `%s' and/or `%s' in @synindex", 311},
|
||||
{"Unknown index `%s' in @printindex", 312},
|
||||
{"\
|
||||
* Menu:\n\
|
||||
\n", 313},
|
||||
{"`%c%s' needs an argument `{...}', not just `%s'", 314},
|
||||
{"No closing brace for footnote `%s'", 315},
|
||||
{"Footnote defined without parent node", 316},
|
||||
{"-Footnotes", 317},
|
||||
{"\
|
||||
---------- Footnotes ----------\n\
|
||||
\n", 318},
|
||||
{"macro `%s' previously defined", 319},
|
||||
{"here is the previous definition of `%s'", 320},
|
||||
{"Macro `%s' called with too many args", 321},
|
||||
{"%cend macro not found", 322},
|
||||
{"%cquote-arg only useful when the macro takes a single argument", 323},
|
||||
{"ignoring stray text `%s' after @multitable", 324},
|
||||
{"Too many columns in multitable item (max %d)", 325},
|
||||
{"multitable item not in active multitable", 326},
|
||||
{"Cannot select column #%d in multitable", 327},
|
||||
{"ignoring @tab outside of multitable", 328},
|
||||
{"** Multicolumn output from last row:\n", 329},
|
||||
{"* column #%d: output = %s\n", 330},
|
||||
{"virtual memory exhausted", 331},
|
||||
{"%s: warning: ", 332},
|
||||
{" for %s", 333},
|
||||
{"\tTry `%s --help' for a complete list of options.\n", 334},
|
||||
{"\
|
||||
%s [OPTION]... [INFO-FILE [DIR-FILE]]\n\
|
||||
Install INFO-FILE in the Info directory file DIR-FILE.\n\
|
||||
\n\
|
||||
Options:\n\
|
||||
--delete Delete existing entries in INFO-FILE;\n\
|
||||
don't insert any new entries.\n\
|
||||
--dir-file=NAME Specify file name of Info directory file.\n\
|
||||
This is equivalent to using the DIR-FILE argument.\n\
|
||||
--entry=TEXT Insert TEXT as an Info directory entry.\n\
|
||||
TEXT should have the form of an Info menu item line\n\
|
||||
plus zero or more extra lines starting with whitespace.\n\
|
||||
If you specify more than one entry, they are all added.\n\
|
||||
If you don't specify any entries, they are determined\n\
|
||||
from information in the Info file itself.\n\
|
||||
--help Display this help and exit.\n\
|
||||
--info-file=FILE Specify Info file to install in the directory.\n\
|
||||
This is equivalent to using the INFO-FILE argument.\n\
|
||||
--info-dir=DIR Same as --dir-file=DIR/dir.\n\
|
||||
--item=TEXT Same as --entry TEXT.\n\
|
||||
An Info directory entry is actually a menu item.\n\
|
||||
--quiet Suppress warnings.\n\
|
||||
--remove Same as --delete.\n\
|
||||
--section=SEC Put this file's entries in section SEC of the directory.\n\
|
||||
If you specify more than one section, all the entries\n\
|
||||
are added in each of the sections.\n\
|
||||
If you don't specify any sections, they are determined\n\
|
||||
from information in the Info file itself.\n\
|
||||
--version Display version information and exit.\n\
|
||||
\n\
|
||||
Email bug reports to bug-texinfo@prep.ai.mit.edu.\n", 335},
|
||||
{"\
|
||||
This is the file .../info/dir, which contains the\n\
|
||||
topmost node of the Info hierarchy, called (dir)Top.\n\
|
||||
The first time you invoke Info you start off looking at this node.\n\
|
||||
\n\
|
||||
File: dir Node: Top This is the top of the INFO tree\n\
|
||||
\n\
|
||||
This (the Directory node) gives a menu of major topics.\n\
|
||||
Typing \"q\" exits, \"?\" lists all Info commands, \"d\" returns here,\n\
|
||||
\"h\" gives a primer for first-timers,\n\
|
||||
\"mEmacs<Return>\" visits the Emacs manual, etc.\n\
|
||||
\n\
|
||||
In Emacs, you can click mouse button 2 on a menu item or cross reference\n\
|
||||
to select it.\n\
|
||||
\n\
|
||||
* Menu:\n", 336},
|
||||
{"%s: could not read (%s) and could not create (%s)\n", 337},
|
||||
{"%s: Specify the Info directory only once.\n", 338},
|
||||
{"%s: Specify the Info file only once.\n", 339},
|
||||
{"install-info (GNU %s) %s\n", 340},
|
||||
{"excess command line argument `%s'", 341},
|
||||
{"No input file specified; try --help for more information.", 342},
|
||||
{"No dir file specified; try --help for more information.", 343},
|
||||
{"START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY", 344},
|
||||
{"END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY", 345},
|
||||
{"no info dir entry in `%s'", 346},
|
||||
{"menu item `%s' already exists, for file `%s'", 347},
|
||||
{"no entries found for `%s'; nothing deleted", 348},
|
||||
{"keep temporary files around after processing", 349},
|
||||
{"do not keep temporary files around after processing (default)", 350},
|
||||
{"send output to FILE", 351},
|
||||
{"display version information and exit", 352},
|
||||
{"display this help and exit", 353},
|
||||
{"Usage: %s [OPTION]... FILE...\n", 354},
|
||||
{"Generate a sorted index for each TeX output FILE.\n", 355},
|
||||
{"Usually FILE... is `foo.??' for a document `foo.texi'.\n", 356},
|
||||
{"\
|
||||
\n\
|
||||
Options:\n", 357},
|
||||
{"\
|
||||
\n\
|
||||
Email bug reports to bug-texinfo@prep.ai.mit.edu.", 358},
|
||||
{"texindex (GNU %s %s) 2.1\n", 359},
|
||||
{"%s: not a texinfo index file", 360},
|
||||
{"failure reopening %s", 361},
|
||||
{"entry %s follows an entry with a secondary name", 362},
|
||||
{"%s; for file `%s'.\n", 363},
|
||||
{"Virtual memory exhausted in %s ()! Needed %d bytes.", 364},
|
||||
};
|
||||
|
BIN
texinfo/po/de.gmo
Normal file
BIN
texinfo/po/de.gmo
Normal file
Binary file not shown.
2233
texinfo/po/de.po
Normal file
2233
texinfo/po/de.po
Normal file
File diff suppressed because it is too large
Load Diff
BIN
texinfo/po/fr.gmo
Normal file
BIN
texinfo/po/fr.gmo
Normal file
Binary file not shown.
2445
texinfo/po/fr.po
Normal file
2445
texinfo/po/fr.po
Normal file
File diff suppressed because it is too large
Load Diff
1
texinfo/po/stamp-cat-id
Normal file
1
texinfo/po/stamp-cat-id
Normal file
@ -0,0 +1 @@
|
||||
timestamp
|
1832
texinfo/po/texinfo.pot
Normal file
1832
texinfo/po/texinfo.pot
Normal file
File diff suppressed because it is too large
Load Diff
1
texinfo/stamp-h.in
Normal file
1
texinfo/stamp-h.in
Normal file
@ -0,0 +1 @@
|
||||
timestamp
|
23
texinfo/util/Makefile.am
Normal file
23
texinfo/util/Makefile.am
Normal file
@ -0,0 +1,23 @@
|
||||
## Makefile.am for texinfo/util.
|
||||
## $Id: Makefile.am,v 1.1 1998/03/23 04:43:11 law Exp $
|
||||
## Run automake in .. to produce Makefile.in from this.
|
||||
|
||||
bin_PROGRAMS = texindex
|
||||
bin_SCRIPTS = texi2dvi
|
||||
|
||||
## CYGNUS LOCAL: Build install-inf locally, and install it as
|
||||
## install-info, to avoid confusing with the install-info target
|
||||
## generated by automake --cygnus.
|
||||
noinst_PROGRAMS = install-inf
|
||||
install_inf_SOURCES = install-info.c
|
||||
|
||||
localedir = $(datadir)/locale
|
||||
INCLUDES = -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
|
||||
LDADD = ../lib/libtxi.a @INTLLIBS@
|
||||
|
||||
EXTRA_DIST = README deref.c fixfonts gen-dir-node tex3patch texi2dvi \
|
||||
update-info
|
||||
|
||||
install-exec-local: $(noinst_PROGRAMS)
|
||||
$(mkinstalldirs) $(bindir)
|
||||
$(INSTALL_PROGRAM) install-inf$(EXEEXT) $(bindir)/`echo install-info$(EXEEXT)|sed '$(transform)'`; \
|
3
texinfo/util/README
Normal file
3
texinfo/util/README
Normal file
@ -0,0 +1,3 @@
|
||||
Assorted Texinfo-related programs and scripts.
|
||||
texindex, texi2dvi, and install-info get installed.
|
||||
The other programs are for your amusement.
|
875
texinfo/util/update-info
Executable file
875
texinfo/util/update-info
Executable file
@ -0,0 +1,875 @@
|
||||
#!/bin/sh
|
||||
# update-info -- update dir file from all extant info pages.
|
||||
#
|
||||
# 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, you can either send email to this
|
||||
# program's maintainer or write to: The Free Software Foundation,
|
||||
# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# Author: rhawes@dmapub.dma.org. Please report bugs to him.
|
||||
#
|
||||
# run this program to install update-info
|
||||
# ###SECTION 0### install script
|
||||
# These constants set the version numbers for both files:
|
||||
PROGRAM_VERSION="1.4"
|
||||
PACKAGE_VERSION="4.0"
|
||||
|
||||
# ENVIRONMENT
|
||||
if test -z "$TMPDIR"; then
|
||||
TMPDIR="/usr/tmp"
|
||||
fi
|
||||
|
||||
TMP_SED="$TMPDIR/uss$$.info"
|
||||
TMP_F_ADD_SECTION="$TMPDIR/ufa$$.info"
|
||||
TMP_F_DELETE_INVALID="$TMPDIR/ufd$$.info"
|
||||
TMP_F_INSERT_MISSING="$TMPDIR/ufi$$.info"
|
||||
TMP_FILES="$TMP_SED $TMP_F_ADD_SECTION $TMP_F_DELETE_INVALID\
|
||||
$TMP_F_INSERT_MISSING"
|
||||
|
||||
trap 'rm -f $TMP_FILES' 0
|
||||
|
||||
# file boundaries
|
||||
UPDATE_INFO="/^# _file: 'update-info'_/"
|
||||
UPDATE_INFO_F="/^# _file: 'update-info.f'_/"
|
||||
|
||||
# @F_ADD_SECTION@
|
||||
echo 'Item_Num=`expr "$Item_Num" + "1"`
|
||||
echo "$1">>"$TMP_SECTIONS"
|
||||
if test "$Item_Status"; then
|
||||
Item_Status=`echo "${Item_Status}
|
||||
X"`
|
||||
else
|
||||
Item_Status="X"
|
||||
fi '>$TMP_F_ADD_SECTION
|
||||
|
||||
# @F_INSERT_MISSING@
|
||||
echo 'if test -z "$Create_Node"; then
|
||||
rm -f ${Info_Node}.old
|
||||
cp $Info_Node ${Info_Node}.old
|
||||
echo "$BACKUP_MSG"
|
||||
fi
|
||||
echo "/$MENU_BEGIN/
|
||||
+,$ d
|
||||
r $TMP_MENU
|
||||
w
|
||||
q"|ed -s $Info_Node>/dev/null'>$TMP_F_INSERT_MISSING
|
||||
|
||||
# @F_DELETE_INVALID@
|
||||
echo '
|
||||
rm -f ${Info_Node}.old
|
||||
cp $Info_Node ${Info_Node}.old
|
||||
echo "$BACKUP_MSG"
|
||||
echo "/$MENU_BEGIN/
|
||||
+,$ d
|
||||
w
|
||||
q"|ed -s $Info_Node>/dev/null
|
||||
sed -f "$TMP_SED" "$TMP_MENU">>"$Info_Node"'>$TMP_F_DELETE_INVALID
|
||||
|
||||
cat<<Sed_Script_EOF>$TMP_SED
|
||||
s/@UPDATE_INFO_VERSION@/$PROGRAM_VERSION/g
|
||||
s/@TEXINFO_VERSION@/$PACKAGE_VERSION/g
|
||||
s/@SET_ITEM@/Item_Status=\`echo "\$Item_Status"|sed -e "\${1}s%^.*%\${2}%"\`/
|
||||
/@F_ADD_SECTION@/r $TMP_F_ADD_SECTION
|
||||
/@F_ADD_SECTION@/d
|
||||
/@F_DELETE_INVALID@/r $TMP_F_DELETE_INVALID
|
||||
/@F_DELETE_INVALID@/d
|
||||
/@F_INSERT_MISSING@/r $TMP_F_INSERT_MISSING
|
||||
/@F_INSERT_MISSING@/d
|
||||
Sed_Script_EOF
|
||||
|
||||
sed -e "1,${UPDATE_INFO}d" -e "$UPDATE_INFO_F,\$d" -f $TMP_SED $0>update-info
|
||||
sed -e "1,${UPDATE_INFO_F}d" -f $TMP_SED $0>update-info.f
|
||||
chmod +x update-info update-info.f
|
||||
echo "installed update-info, and update-info.f into `pwd`"
|
||||
rm -f $TMP_FILES
|
||||
exit
|
||||
|
||||
# _file: 'update-info'_
|
||||
#!/bin/sh
|
||||
#update-info (GNU texinfo @TEXINFO_VERSION@) @UPDATE_INFO_VERSION@
|
||||
#Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
#update-info comes with NO WARRANTY, to the extent permitted by law.
|
||||
#You may redistribute copies of update-info
|
||||
#under the terms of the GNU General Public License.
|
||||
#For more information about these matters, see the files named COPYING."
|
||||
#Author: Richard L. Hawes
|
||||
|
||||
# ###SECTION 1### Constants
|
||||
set -h 2>/dev/null
|
||||
# ENVIRONMENT
|
||||
if test -z "$TMPDIR"; then
|
||||
TMPDIR="/usr/tmp"
|
||||
fi
|
||||
if test -z "$LINES"; then
|
||||
LINES=24
|
||||
fi
|
||||
if test -z "$COLUMNS"; then
|
||||
COLUMNS=80
|
||||
fi
|
||||
if test -z "$EDITOR"; then
|
||||
EDITOR=vi
|
||||
fi
|
||||
if test -z "$LINENO"; then
|
||||
LINENO="0"
|
||||
fi
|
||||
# constants redefined by update-info.f
|
||||
PROMPT1="(y=yes, Y=yes to all, n=no, N=No to all):"
|
||||
FUNCTIONS=""
|
||||
#
|
||||
ARGUMENTS="$*"
|
||||
DISPLAY_NUM=`expr "$LINES" - 4`
|
||||
CONTROL_D="{Ctrl-D}"
|
||||
DIR_SECTION="^INFO-DIR-SECTION"
|
||||
ENTRY_END="^END-INFO-DIR-ENTRY"
|
||||
ENTRY_START="^START-INFO-DIR-ENTRY"
|
||||
MENU_BEGIN='^\*\([ ]\)\{1,\}Menu:'
|
||||
MENU_ITEM='^\* ([^ ]).*:([ ])+\('
|
||||
SECTION_TITLE="^[A-Za-z0-9]"
|
||||
MENU_FILTER1='s/^\*\([ ]\)\{1,\}/* /'
|
||||
MENU_FILTER2='s/\([ ]\)\{1,\}$//g'
|
||||
TMP_ITEM="${TMPDIR}/ui${$}.info"
|
||||
TMP_LIST="${TMPDIR}/ul${$}.info"
|
||||
TMP_MENU="${TMPDIR}/um${$}.info"
|
||||
TMP_SECTIONS="${TMPDIR}/us${$}.info" # used only in Detect_Missing
|
||||
TMP_SED="$TMP_SECTIONS" # used only in Detect_Invalid routines
|
||||
TMP_FILE1="${TMPDIR}/ux${$}.info"
|
||||
TMP_FILE2="${TMPDIR}/uy${$}.info"
|
||||
TMP_COUNT="$TMP_FILE2"
|
||||
TMP_FILE_LIST="$TMP_LIST $TMP_MENU $TMP_SECTIONS $TMP_FILE1 $TMP_FILE2\
|
||||
$TMP_ITEM"
|
||||
TRY_HELP_MSG="Try --help for more information"
|
||||
if zcat --version 2>/dev/null>/dev/null; then
|
||||
CAT_COMMAND="zcat -f"
|
||||
else
|
||||
echo "$0:$LINENO: GNU zcat not found">&2
|
||||
CAT_COMMAND="cat"
|
||||
fi
|
||||
|
||||
# ###SECTION 100### main program
|
||||
#variables set by options
|
||||
Create_Node=""
|
||||
Debug=":"
|
||||
Interactive=""
|
||||
Load_Functions="y"
|
||||
Mode=""
|
||||
#
|
||||
Inserts="0"
|
||||
Inserts_Total="0"
|
||||
Invalid="0"
|
||||
Invalid_Total="0"
|
||||
Changed=""
|
||||
|
||||
while test "$*"
|
||||
do
|
||||
case "$1" in
|
||||
-c) Create_Node="y";;
|
||||
-ci|-ic) Create_Node="y"; Interactive="y";;
|
||||
-cif|-cfi|-ifc|-icf|-fci|-fic) Create_Node="y"
|
||||
Interactive="y"; Load_Functions="";;
|
||||
--debug) set -eux; Debug="set>&2";;
|
||||
-d|--delete) Mode="Detect_Invalid";;
|
||||
-f) Load_Functions="";;
|
||||
-i|--interactive) Interactive="y";;
|
||||
-fi|-if) Load_Functions=""; Interactive="y";;
|
||||
-id|-di) Mode="Detect_Invalid"; Interactive="y";;
|
||||
+i|+d|+f);;
|
||||
--version)
|
||||
cat<<VersionEOF
|
||||
update-info (GNU texinfo @TEXINFO_VERSION@) @UPDATE_INFO_VERSION@
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
update-info comes with NO WARRANTY, to the extent permitted by law.
|
||||
You may redistribute copies of update-info
|
||||
under the terms of the GNU General Public License.
|
||||
For more information about these matters, see the files named COPYING.
|
||||
Author: Richard L. Hawes
|
||||
VersionEOF
|
||||
exit;;
|
||||
|
||||
--help)
|
||||
cat<<HelpEndOfFile
|
||||
Usage: update-info [OPTION]... INFO_PATH/INFO_DIR_FILE
|
||||
|
||||
It detects and inserts missing menu items into the info node file.
|
||||
|
||||
Options:
|
||||
-c create a new info node
|
||||
--debug print debug information to standard error path
|
||||
-d, --delete delete invalid menu items (ignore missing menu items)
|
||||
-f do not load functions (file update-info.f)
|
||||
--help print this help message and exit
|
||||
-i, --interactive interactive mode prompts before inserting or removing
|
||||
menu items
|
||||
--version print current version and exit
|
||||
Backup of the info node has a '.old' suffix added. This is a shell script.
|
||||
Files: update-info.f -- contains functions (optional).
|
||||
Environment Variables: COLUMNS, EDITOR, LINES, TMPDIR
|
||||
Email bug reports to bug-texinfo@prep.ai.mit.edu.
|
||||
HelpEndOfFile
|
||||
exit;;
|
||||
|
||||
[-+]*) echo "$0:$LINENO: \"$1\" is not a valid option">&2
|
||||
echo "$TRY_HELP_MSG">&2
|
||||
exit 2;;
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test "$#" -lt "1"; then
|
||||
echo "$0:$LINENO: Too few parameters">&2
|
||||
echo "$TRY_HELP_MSG">&2
|
||||
exit 2
|
||||
elif test "$#" -gt "1"; then
|
||||
echo "$0:$LINENO: Too many parameters">&2
|
||||
echo "$TRY_HELP_MSG">&2
|
||||
exit 2
|
||||
fi
|
||||
Info_Path="$1"
|
||||
Info_Node=`basename "$Info_Path"`
|
||||
if echo "$Info_Node"|grep ".*dir$">/dev/null; then
|
||||
:
|
||||
else
|
||||
echo "$0:$LINENO: $Info_Node is not a valid info node name">&2
|
||||
exit 2
|
||||
fi
|
||||
Info_Pathname=`dirname "$Info_Path"`
|
||||
cd "$Info_Pathname"||exit
|
||||
|
||||
BACKUP_MSG="Backed up $Info_Node to ${Info_Node}.old."
|
||||
HANGUP_MSG="Hang up on \"update-info $ARGUMENTS\""
|
||||
INSERT_MSG="menu item(s) were inserted (not counting duplicates)."
|
||||
INSERT_MSG2="total menu item(s) were inserted into `pwd`/$Info_Node"
|
||||
DELETE_MSG="invalid menu item(s) were removed (not counting duplicates)."
|
||||
DELETE_MSG2="total invalid menu item(s) were removed from `pwd`/$Info_Node"
|
||||
|
||||
if test "$Create_Node"; then
|
||||
if test "$Mode"; then
|
||||
echo "$0:$LINENO: ERROR: Illogical option combination: -d -c">&2
|
||||
echo "$TRY_HELP_MSG">&2
|
||||
exit 2
|
||||
fi
|
||||
if test -f "$Info_Node"; then
|
||||
rm -f ${Info_Node}.old
|
||||
mv "$Info_Node" "${Info_Node}.old"
|
||||
echo "$BACKUP_MSG"
|
||||
fi
|
||||
echo "Creating new Info Node: `pwd`/$Info_Node"
|
||||
cat>$Info_Node<<NodeEndOfFile||exit
|
||||
|
||||
This is the file .../info/dir, which contains the topmost node of the
|
||||
Info hierarchy. The first time you invoke Info you start off
|
||||
looking at that node, which is (dir)Top.
|
||||
|
||||
File: dir Node: Top This is the top of the INFO tree
|
||||
This (the Directory node) gives a menu of major topics.
|
||||
Typing "d" returns here, "q" exits, "?" lists all INFO commands, "h"
|
||||
gives a primer for first-timers, "mTexinfo<Return>" visits Texinfo topic,
|
||||
etc.
|
||||
Or click mouse button 2 on a menu item or cross reference to select it.
|
||||
--- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topic first.) ---
|
||||
|
||||
* Menu: The list of major topics begins on the next line.
|
||||
|
||||
NodeEndOfFile
|
||||
else
|
||||
if test ! -f "$Info_Node"; then
|
||||
echo "$0:$LINENO: $Info_Node is irregular or nonexistant">&2
|
||||
exit 2
|
||||
elif test ! -r "$Info_Node"; then
|
||||
echo "$0:$LINENO: $Info_Node is not readable">&2
|
||||
exit 2
|
||||
elif test ! -w "$Info_Node"; then
|
||||
echo "$0:$LINENO: $Info_Node is not writeable">&2
|
||||
exit 2
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$Load_Functions" -a "$Interactive" -a -z "$Mode"; then
|
||||
if FUNCTIONS_VERSION=`( update-info.f )`; then
|
||||
if test `echo "$FUNCTIONS_VERSION"\
|
||||
|cut -d' ' -f5` = "@UPDATE_INFO_VERSION@"; then
|
||||
echo "Loading functions..."
|
||||
. update-info.f
|
||||
else
|
||||
echo "$0:$LINENO: wrong version of update-info.f">&2
|
||||
echo "(functions were not loaded)">&2
|
||||
fi
|
||||
else
|
||||
echo "(functions were not loaded)">&2
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
trap ' eval "$Debug"; rm -f $TMP_FILE_LIST; exit ' 0
|
||||
if test "$Interactive"; then
|
||||
if test ! -t "1"; then
|
||||
echo "$0:$LINENO: Cannot run in interactive mode "\
|
||||
"standard out is redirected">&2
|
||||
exit 2
|
||||
fi
|
||||
trap ' ' 2 3
|
||||
else
|
||||
trap ' rm -f $TMP_FILE_LIST
|
||||
echo "$0:$LINENO: received INT signal. All edits are canceled.">&2
|
||||
exit ' 2
|
||||
trap ' rm -f $TMP_FILE_LIST
|
||||
echo "$0:$LINENO: received QUIT signal. All edits are canceled.">&2
|
||||
exit ' 3
|
||||
fi
|
||||
if test -z "$Mode"; then
|
||||
trap '
|
||||
if test "$Changed"; then
|
||||
{
|
||||
echo $HANGUP_MSG
|
||||
@F_INSERT_MISSING@
|
||||
Inserts_Total=`wc -c<"$TMP_COUNT"`
|
||||
echo $Inserts_Total $INSERT_MSG2
|
||||
}|mail "$LOGNAME"
|
||||
fi
|
||||
rm -f $TMP_FILE_LIST
|
||||
exit ' 1
|
||||
else
|
||||
trap '
|
||||
if test "$Changed"; then
|
||||
{
|
||||
echo $HANGUP_MSG
|
||||
@F_DELETE_INVALID@
|
||||
Invalid_Total=`wc -l<"$TMP_SED"`
|
||||
echo $Invalid_Total $DELETE_MSG2
|
||||
}|mail $LOGNAME
|
||||
fi
|
||||
rm -f $TMP_FILE_LIST
|
||||
exit ' 1
|
||||
fi
|
||||
|
||||
sed -e "1,/$MENU_BEGIN/d" -e "$MENU_FILTER1" -e "$MENU_FILTER2"<$Info_Node\
|
||||
|tee $TMP_MENU\
|
||||
|sed -n -e '/\* /{
|
||||
s/).*$//g
|
||||
s/\.gz$//
|
||||
s/\.info$//
|
||||
s/^.*(//p
|
||||
}'|sort -u>$TMP_FILE1
|
||||
ls -F|sed -e '/\/$/d' -e '/[-.][0-9]/d'\
|
||||
-e '/:$/d' -e '/^$/d' -e "/^${Info_Node}~\$/d"\
|
||||
-e "/^${Info_Node}\$/d" -e "/^${Info_Node}.old\$/d"\
|
||||
-e 's/\.gz$//' -e 's/\.info$//'|sort>$TMP_FILE2
|
||||
|
||||
if test -z "$Mode"; then
|
||||
#Detect Missing
|
||||
comm -13 $TMP_FILE1 $TMP_FILE2>$TMP_LIST
|
||||
cat</dev/null>$TMP_COUNT
|
||||
#get sections, initialize variables
|
||||
sed -n -e "/$SECTION_TITLE/p" "$TMP_MENU">"$TMP_SECTIONS"
|
||||
Item_Num=`wc -l<"$TMP_SECTIONS"|tr -d ' '`
|
||||
Item_Status=`echo\
|
||||
|awk "BEGIN{for(i=1;i<=${Item_Num};i++)printf(\"_\n\")}"`
|
||||
Item_Dir="$Item_Num"
|
||||
for Info_Name in `cat $TMP_LIST`
|
||||
do
|
||||
if test -r "$Info_Name"; then
|
||||
Info_File="$Info_Name"
|
||||
elif test -r "${Info_Name}.info"; then
|
||||
Info_File="${Info_Name}.info"
|
||||
elif test -r "${Info_Name}.gz"; then
|
||||
Info_File="${Info_Name}.gz"
|
||||
elif test -r "${Info_Name}.info.gz"; then
|
||||
Info_File="${Info_Name}.info.gz"
|
||||
else
|
||||
echo "$0:$LINENO: can't find info file for ${Info_Name}?">&2
|
||||
fi
|
||||
#generate menu item
|
||||
echo|tr -d '\012'>$TMP_FILE1
|
||||
eval $CAT_COMMAND "$Info_File"\
|
||||
|sed -n -e "/$DIR_SECTION/w $TMP_FILE1"\
|
||||
-e "/$ENTRY_START/,/$ENTRY_END/{
|
||||
$MENU_FILTER1
|
||||
p
|
||||
}"|awk "BEGIN{Mode=0}
|
||||
/^$/{if(Mode==1)exit}
|
||||
/^([ ])+([^ ])+/{if(Mode==1)print}
|
||||
/^[^ ]/{if(Mode==1)exit}
|
||||
/${MENU_ITEM}${Info_Name}\)\./{if(Mode==0){Mode++
|
||||
print}
|
||||
else
|
||||
exit}">"$TMP_ITEM"
|
||||
if test ! -s "$TMP_ITEM"; then
|
||||
echo "* $Info_Name: ($Info_Name).">"$TMP_ITEM"
|
||||
fi
|
||||
Item_Status=`echo "$Item_Status"|sed -e '1,$s/^./_/'`
|
||||
if test -s "$TMP_FILE1"; then
|
||||
Item_Section=`sed -e "s/$DIR_SECTION[ ]*//"\
|
||||
<$TMP_FILE1`
|
||||
else
|
||||
Item_Section=`echo "Miscellaneous"`
|
||||
fi
|
||||
Size=`echo "$Item_Section"|wc -l|tr -d ' '`
|
||||
# initialize variables, check for new sections
|
||||
Num1=1
|
||||
while test "$Num1" -le "$Size"
|
||||
do
|
||||
Item=`echo "$Item_Section"|sed -n -e "${Num1}p"`
|
||||
if Num=`grep -in "^$Item$" "$TMP_SECTIONS"`; then
|
||||
Num=`echo "$Num"|sed -e 's/:.*$//g'`
|
||||
##F#Set_Item
|
||||
set "$Num" "X"
|
||||
@SET_ITEM@
|
||||
else
|
||||
set "$Item"
|
||||
@F_ADD_SECTION@
|
||||
fi
|
||||
Num1=`expr "$Num1" + "1"`
|
||||
done
|
||||
if test "$Interactive"; then
|
||||
echo "$Item_Section"
|
||||
cat "$TMP_ITEM"
|
||||
echo "add menu item for $Info_File? "
|
||||
while true
|
||||
do
|
||||
echo "$PROMPT1"|tr -d '\012'
|
||||
read Answer
|
||||
case $Answer in
|
||||
y) break;;
|
||||
e)
|
||||
if test "$FUNCTIONS"; then
|
||||
Select_Sections
|
||||
break
|
||||
else
|
||||
echo "Can't edit. "\
|
||||
"Functions are not loaded.">&2
|
||||
fi;;
|
||||
Y) Interactive=""; break;;
|
||||
n) continue 2;;
|
||||
N) break 2;;
|
||||
*) echo "\"$Answer\" "\
|
||||
"is an invalid response">&2;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
if echo "$Item_Status"|grep '^X'>/dev/null; then
|
||||
# edit $TMP_MENU
|
||||
|
||||
Changed="y"
|
||||
(
|
||||
trap ' ' 1 2 3
|
||||
Tmp_Var=`echo "$Item_Status"|tr -d '\012'`
|
||||
Key=`awk -F':' ' FNR==1{ print $1}' $TMP_ITEM`
|
||||
# add new sections to 'dir' file
|
||||
if test "$Item_Num" -gt "$Item_Dir"; then
|
||||
if test "$Item_Dir" -ne "0"; then
|
||||
sed -e "1,${Item_Dir}d" -e 'i\
|
||||
|
||||
' "$TMP_SECTIONS">>"$TMP_MENU"
|
||||
else
|
||||
sed -e 'i\
|
||||
|
||||
' "$TMP_SECTIONS">>"$TMP_MENU"
|
||||
fi
|
||||
fi
|
||||
# awk determines the insertion points for each section
|
||||
awk -F":" "function Insert(Line){
|
||||
if(Mode==2){
|
||||
Mode=1;if(substr(\"$Tmp_Var\",Item++,1)==\"X\")
|
||||
print Line
|
||||
}
|
||||
}
|
||||
BEGIN{Mode=1;Item=1}
|
||||
/$SECTION_TITLE/{Insert(FNR-1);if(Mode>=1)Mode=2}
|
||||
/${MENU_ITEM}.*\)\./{if(\$1>Item_Name)Insert(FNR-1)}
|
||||
/^$/{Insert(FNR-1)}
|
||||
END{Insert(FNR)}" Item_Name="$Key" "$TMP_MENU"\
|
||||
|sort -nr|sed -e "s%\$% r $TMP_ITEM%"|sed -e '$a\
|
||||
w
|
||||
' -e '$a\
|
||||
q
|
||||
'|ed -s "$TMP_MENU"
|
||||
echo "$Item_Status"|tr -cd "X">>$TMP_COUNT
|
||||
)
|
||||
|
||||
Inserts=`expr "$Inserts" + "1"`
|
||||
echo "$Info_File installed into section(s):"\
|
||||
|tr -d '\012'
|
||||
echo "$Item_Status"|awk '/X/{printf(" %d", FNR)}'
|
||||
echo
|
||||
Item_Dir="$Item_Num"
|
||||
else
|
||||
echo "$Info_File not installed (no section selected)"
|
||||
fi
|
||||
done
|
||||
# print summary
|
||||
trap ' ' 1 2 3
|
||||
if test "$Changed"; then
|
||||
@F_INSERT_MISSING@
|
||||
Inserts_Total=`wc -c<"$TMP_COUNT"|tr -d " "`
|
||||
if test "$Inserts" -ne "$Inserts_Total"; then
|
||||
echo "$Inserts $INSERT_MSG"
|
||||
fi
|
||||
echo "$Inserts_Total $INSERT_MSG2"
|
||||
fi
|
||||
else
|
||||
# Detect Invalid
|
||||
cat</dev/null>"$TMP_SED"
|
||||
comm -23 $TMP_FILE1 $TMP_FILE2>$TMP_LIST
|
||||
for Info_Name in `cat $TMP_LIST`
|
||||
do
|
||||
if test "$Interactive"; then
|
||||
# display invalid menu item(s)
|
||||
awk "BEGIN{Mode=1}
|
||||
/^([ ])+([^ ])+/{if(Mode==2)print}
|
||||
/^$/{if(Mode==2)Mode=1}
|
||||
/$SECTION_TITLE/{Section=\$0}
|
||||
/^[^ ]/{if(Mode==2)Mode=1}
|
||||
/${MENU_ITEM}${Info_Name}\)\./{if(Mode==1){Mode++
|
||||
print Section
|
||||
print}}" $TMP_MENU
|
||||
echo "delete menu item for $Info_Name? "
|
||||
while true
|
||||
do
|
||||
echo\
|
||||
"(y=yes, n=no, Y=yes to all, N=No to all):"\
|
||||
|tr -d '\012'
|
||||
read Answer
|
||||
case "$Answer" in
|
||||
y) break;;
|
||||
Y) Interactive=""; break;;
|
||||
n) continue 2;;
|
||||
N) break 2;;
|
||||
*) echo "\"$Answer\" "\
|
||||
"is an invalid reponse">&2;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
# remove menu item from $TMP_MENU
|
||||
Invalid=`expr "$Invalid" + "1"`
|
||||
Changed="y"
|
||||
(
|
||||
trap ' ' 1 2 3
|
||||
echo\
|
||||
"invalid menu item for $Info_Name removed from section(s):"\
|
||||
|tr -d '\012'
|
||||
awk "function Delete(Last){
|
||||
printf(\"%d,%dd\n\",First,Last-1)>>\"$TMP_SED\"}
|
||||
BEGIN{Mode=1;Section=0}
|
||||
/^$/{if(Mode==2){Delete(FNR);Mode=1}}
|
||||
/$SECTION_TITLE/{Section++}
|
||||
/^[^ ]/{if(Mode==2){Delete(FNR);Mode=1}}
|
||||
/${MENU_ITEM}${Info_Name}\)\./{if(Mode==1){
|
||||
First=FNR;printf(\" %d\",Section);Mode=2}}
|
||||
END{if(Mode==2)Delete(FNR+1)}" $TMP_MENU
|
||||
echo
|
||||
)
|
||||
done
|
||||
|
||||
# display a summary
|
||||
trap ' ' 1 2 3
|
||||
if test "$Changed"; then
|
||||
Invalid_Total=`wc -l<"$TMP_SED"|tr -d ' '`
|
||||
@F_DELETE_INVALID@
|
||||
if test "$Invalid" -ne "$Invalid_Total"; then
|
||||
echo "$Invalid $DELETE_MSG"
|
||||
fi
|
||||
echo "$Invalid_Total $DELETE_MSG2"
|
||||
fi
|
||||
fi
|
||||
if test -z "$Changed"; then
|
||||
echo "Nothing to do"
|
||||
fi
|
||||
rm -f $TMP_FILE_LIST
|
||||
eval "$Debug"
|
||||
exit 0
|
||||
# _file: 'update-info.f'_
|
||||
#update-info.f (GNU texinfo @TEXINFO_VERSION@) @UPDATE_INFO_VERSION@
|
||||
#Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
#update-info comes with NO WARRANTY, to the extent permitted by law.
|
||||
#You may redistribute copies of update-info
|
||||
#under the terms of the GNU General Public License.
|
||||
#For more information about these matters, see the files named COPYING."
|
||||
#Author: Richard L. Hawes
|
||||
|
||||
# update-info.f functions for update-info
|
||||
|
||||
# ###SECTION 1### functions used to insert missing menu items
|
||||
|
||||
Set_Item (){
|
||||
# set item status
|
||||
@SET_ITEM@
|
||||
}
|
||||
|
||||
Add_Section (){
|
||||
# add a section
|
||||
@F_ADD_SECTION@
|
||||
}
|
||||
|
||||
# ###SECTION 2### functions for menu selection of sections
|
||||
|
||||
Print (){
|
||||
# print a line without a linefeed
|
||||
echo "$*"|tr -d '\012'
|
||||
}
|
||||
|
||||
Get_Answer (){
|
||||
# get an answer to question
|
||||
_gs_Valid="$1"
|
||||
_gs_Prompt="$2"
|
||||
set -f
|
||||
Answer=""
|
||||
while test -z "$Answer"
|
||||
do
|
||||
Print "$_gs_Prompt"
|
||||
if read Answer; then
|
||||
:
|
||||
else
|
||||
Answer="$CONTROL_D"
|
||||
echo
|
||||
fi
|
||||
if expr "$Answer" : "[$_gs_Valid]$">/dev/null; then
|
||||
:
|
||||
else
|
||||
Print "\"$Answer\" is not a valid response! --">&2
|
||||
Answer=""
|
||||
fi
|
||||
done
|
||||
set +f
|
||||
}
|
||||
|
||||
Do_Previous (){
|
||||
# go to previous screen
|
||||
if test "$Previous"; then
|
||||
Next="$Top_Item"
|
||||
Top_Item="$Previous"
|
||||
if Previous=`expr "$Top_Item" - "$DISPLAY_NUM"`; then
|
||||
if test "$Previous" -le "0"; then
|
||||
Previous=""
|
||||
fi
|
||||
else
|
||||
Previous=""
|
||||
fi
|
||||
elif test "$Next"; then
|
||||
Last_Page
|
||||
else
|
||||
Print "There is no previous page. ">&2
|
||||
fi
|
||||
}
|
||||
|
||||
Do_Next (){
|
||||
# process go to next
|
||||
if test "$Next"; then
|
||||
Previous="$Top_Item"
|
||||
Top_Item="$Next"
|
||||
Set_Next
|
||||
elif test "$Previous"; then
|
||||
Top_Item="1"
|
||||
Previous=""
|
||||
Set_Next
|
||||
else
|
||||
Print "There is no next page. ">&2
|
||||
fi
|
||||
}
|
||||
|
||||
Do_Add_Section (){
|
||||
# process add section command
|
||||
echo
|
||||
echo "Please enter the name of the new section:"
|
||||
if read Answer; then
|
||||
Answer=`echo "$Answer"\
|
||||
|sed -e 's/^\([ ]\)\{1,\}//g' -e "$MENU_FILTER2"`
|
||||
if test "$Answer"; then
|
||||
Add_Section "$Answer"
|
||||
Last_Page
|
||||
clear
|
||||
fi
|
||||
else
|
||||
Answer=""
|
||||
fi
|
||||
if test -z "$Answer"; then
|
||||
clear
|
||||
Print "no section added. "
|
||||
fi
|
||||
}
|
||||
|
||||
Do_Edit (){
|
||||
# process edit item command
|
||||
if test -t "2"; then
|
||||
_de_Done=""
|
||||
cp "$TMP_ITEM" "$TMP_FILE1"
|
||||
while test -z "$_de_Done"
|
||||
do
|
||||
eval $EDITOR "$TMP_FILE1"
|
||||
clear
|
||||
_de_Done="t"
|
||||
if sed -n -e "$MENU_FILTER1" -e '1p' "$TMP_FILE1"\
|
||||
|egrep "${MENU_ITEM}${Info_Name}\)\.">/dev/null; then
|
||||
:
|
||||
else
|
||||
sed -n -e '1p' "$TMP_FILE1"
|
||||
echo "Pattern mismatch: `echo\
|
||||
"/${MENU_ITEM}${Info_Name}\)\./"\
|
||||
|tr -d "\011"`">&2
|
||||
echo
|
||||
_de_Done=""
|
||||
fi
|
||||
if sed -n -e '2,$p' "$TMP_FILE1"|grep '^[^ ]'>&2; then
|
||||
echo "These lines must have leading spaces">&2
|
||||
echo
|
||||
_de_Done=""
|
||||
fi
|
||||
if test -z "$_de_Done"; then
|
||||
Get_Answer "yn" "Invalid entry, cancel edits? (y or n):"
|
||||
if test "y" = "$Answer"; then
|
||||
clear
|
||||
Print "Canceling edits -- invalid entry ">&2
|
||||
_de_Done="t"
|
||||
fi
|
||||
else
|
||||
sed -e "$MENU_FILTER1" -e "$MENU_FILTER2" -e '/^$/d'\
|
||||
<"$TMP_FILE1">"$TMP_ITEM"
|
||||
fi
|
||||
done
|
||||
else
|
||||
Print "editor cannot run with error path redirected "
|
||||
fi
|
||||
}
|
||||
|
||||
Do_Number (){
|
||||
# process number
|
||||
_dn_Num="$1"
|
||||
if test "$_dn_Num" -ge 1 -a "$_dn_Num" -le "$Item_Num"; then
|
||||
if test `echo "$Item_Status"|sed -n -e "${_dn_Num}p"` = "_"; then
|
||||
Set_Item "$_dn_Num" "X"
|
||||
else
|
||||
Set_Item "$_dn_Num" "_"
|
||||
fi
|
||||
else
|
||||
Print "\"$_dn_Num\" is an invalid section number. ">&2
|
||||
fi
|
||||
}
|
||||
|
||||
Do_Help (){
|
||||
# process menu help
|
||||
echo
|
||||
echo "\
|
||||
Enter the following commands seperated
|
||||
by spaces and terminated by<ENTER>:
|
||||
# : (section number) toggle section
|
||||
a : add a new section
|
||||
e : edit item -- changes will not be
|
||||
accepted if you change the
|
||||
'(info_file_name).' or delete
|
||||
the key parts: '*' 'Menu Name' ':'
|
||||
h : get this help screen
|
||||
n : next page
|
||||
p : previous page
|
||||
q : quit and do not put into menu
|
||||
s : save and put into menu"
|
||||
Print "Press enter to continue:"
|
||||
read junk
|
||||
clear
|
||||
}
|
||||
|
||||
Set_Next (){
|
||||
# determine value of Next
|
||||
Next=`expr "$DISPLAY_NUM" + "$Top_Item"`
|
||||
if test "$Next" -gt "$Item_Num"; then
|
||||
Next=""
|
||||
fi
|
||||
}
|
||||
|
||||
Last_Page (){
|
||||
# go to last page of menu
|
||||
Top_Item=`echo|awk "BEGIN{printf(\"%d\",
|
||||
int((${Item_Num}-1)/${DISPLAY_NUM})*${DISPLAY_NUM}+1)}"`
|
||||
if test "$Top_Item" -gt "$DISPLAY_NUM"; then
|
||||
Previous=`expr "$Top_Item" '-' "$DISPLAY_NUM"`
|
||||
else
|
||||
Previous=""
|
||||
fi
|
||||
Set_Next
|
||||
}
|
||||
|
||||
Select_Sections (){
|
||||
# prompt user for which sections
|
||||
set -f
|
||||
Top_Item="1"
|
||||
Previous=""
|
||||
Set_Next
|
||||
clear
|
||||
echo "Default sections are selected."
|
||||
Done=""
|
||||
while test -z "$Done"
|
||||
do
|
||||
awk "FNR==1{printf(\"%s\n\", substr(\$0,1,${COLUMNS}))}" $TMP_ITEM
|
||||
Tmp_Var=`echo "$Item_Status"|tr -d '\012'`
|
||||
awk "BEGIN{Max=$Top_Item+$DISPLAY_NUM}
|
||||
FNR>=$Top_Item{if(FNR>=Max)exit
|
||||
printf(\"%2d:%s %s\n\",FNR,substr(\"$Tmp_Var\",FNR,1),
|
||||
substr(\$0,1,${COLUMNS}-5))}" "$TMP_SECTIONS"
|
||||
echo "Enter 1-${Item_Num}, add, edit, help,"
|
||||
if test "$Previous" -o "$Next"; then
|
||||
Print "next, previous, "
|
||||
fi
|
||||
Print "quit, save :"
|
||||
read Command_List||Command_List="$CONTROL_D"
|
||||
Command_List=`echo "$Command_List"\
|
||||
|tr '\011' ' '|tr ' ' '\012'|sed -e "/^$/d"`
|
||||
clear
|
||||
if test -z "$Command_List"; then
|
||||
Help="y"
|
||||
else
|
||||
Help=""
|
||||
fi
|
||||
while test "$Command_List"
|
||||
do
|
||||
Command=`echo "$Command_List"|sed -n -e '1p'`
|
||||
Command_List=`echo "$Command_List"|sed -e '1d'`
|
||||
case "$Command" in
|
||||
[0-9]|[0-9][0-9]) Do_Number "$Command";;
|
||||
n*) Do_Next;;
|
||||
p*) Do_Previous;;
|
||||
a*) Do_Add_Section;;
|
||||
e*) Do_Edit; break;;
|
||||
h*) Help="y";;
|
||||
s*) Done="s"; break;;
|
||||
q*) Done="q"
|
||||
Item_Status=`echo "$Item_Status"|sed -e '1,$s/^./_/'`
|
||||
break;;
|
||||
*) Print "$Command is not a valid command. ">&2
|
||||
Help="y";;
|
||||
esac
|
||||
done
|
||||
if test "$Help"; then
|
||||
Do_Help
|
||||
fi
|
||||
echo
|
||||
done
|
||||
set +f
|
||||
# if new sections added, remove unused ones
|
||||
if test "$Item_Num" -gt "$Item_Dir"; then
|
||||
Tmp_Var=`echo "$Item_Status"|awk "FNR>$Item_Dir{
|
||||
if(\\$0==\"_\")printf(\"%d\n\", FNR)}"`
|
||||
if test "$Tmp_Var"; then
|
||||
Tmp_Var1=`echo "$Tmp_Var"|sed -e 's/$/d/'`
|
||||
sed -e "$Tmp_Var1" "$TMP_SECTIONS">$TMP_FILE1
|
||||
cp $TMP_FILE1 "$TMP_SECTIONS"
|
||||
Item_Status=`echo "$Item_Status"|sed -e "$Tmp_Var1"`
|
||||
Tmp_Var=""
|
||||
Tmp_Var1=""
|
||||
Item_Num=`wc -l<"$TMP_SECTIONS"|tr -d ' '`
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# ###SECTION 100### Constants that redefine
|
||||
PROMPT1="(y=yes, e=edit, Y=yes to all, n=no, N=No to all):"
|
||||
FUNCTIONS="y"
|
||||
#
|
||||
echo "update-info.f (GNU texinfo @TEXINFO_VERSION@) @UPDATE_INFO_VERSION@"
|
Loading…
x
Reference in New Issue
Block a user