Commit 1eb3e844 by Jeff Law

Initial revision

From-SVN: r18770
parent 34b6478b
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.
Richard Stallman, Brian Fox, Bob Chassell, Noah Friedman, Paul Rubin,
Karl Berry, and no doubt many others.
## 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
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.)
Thanks to these contributors and many more ...
Dave Love
Donald Knuth
Erick Branderhorst
Karl Eichwalder
Laurent Bourbeau
Stephen Gildea
William Bader
/* 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). */
# 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])
#! /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
/* 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). */
#! /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
# 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:
%$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
@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
#!/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
## 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*
# 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:
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.
%%% ====================================================================
%%% 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
\input texinfo @c -*-texinfo-*-
@comment %**start of header
@setfilename info-stnd.info
@settitle GNU Info
@set InfoProgVer 2.11
@paragraphindent none
@footnotestyle end
@synindex vr cp
@synindex fn cp
@synindex ky cp
@comment %**end of header
@comment $Id: info-stnd.texi,v 1.1 1998/03/23 04:42:12 law Exp $
@dircategory Texinfo documentation system
@direntry
* info program: (info-stnd). Standalone Info-reading program.
@end direntry
@ifinfo
This file documents GNU Info, a program for viewing the on-line formatted
versions of Texinfo files. This documentation is different from the
documentation for the Info reader that is part of GNU Emacs. If you do
not know how to use Info, but have a working Info reader, you should
read that documentation first.
Copyright @copyright{} 1992, 93, 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 a 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 also that the
sections entitled ``Copying'' and ``GNU General Public License'' are
included exactly as in the original, and 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 GNU Info User's Guide
@subtitle For GNU Info version @value{InfoProgVer}
@author Brian J. Fox (bfox@@ai.mit.edu)
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1992, 1993, 1997 Free Software Foundation
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 also that the
sections entitled ``Copying'' and ``GNU General Public License'' are
included exactly as in the original, and 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, What is Info, , (dir)
@top The GNU Info Program
This file documents GNU Info, a program for viewing the on-line
formatted versions of Texinfo files, version @value{InfoProgVer}. This
documentation is different from the documentation for the Info reader
that is part of GNU Emacs.
@end ifinfo
@menu
* What is Info::
* Options:: Options you can pass on the command line.
* Cursor Commands:: Commands which move the cursor within a node.
* Scrolling Commands:: Commands for moving the node around
in a window.
* Node Commands:: Commands for selecting a new node.
* Searching Commands:: Commands for searching an Info file.
* Xref Commands:: Commands for selecting cross references.
* Window Commands:: Commands which manipulate multiple windows.
* Printing Nodes:: How to print out the contents of a node.
* Miscellaneous Commands:: A few commands that defy categories.
* Variables:: How to change the default behavior of Info.
* GNU Info Global Index:: Global index containing keystrokes,
command names, variable names,
and general concepts.
@end menu
@node What is Info, Options, Top, Top
@chapter What is Info?
@iftex
This file documents GNU Info, a program for viewing the on-line formatted
versions of Texinfo files, version @value{InfoProgVer}.
@end iftex
@dfn{Info} is a program which is used to view Info files on an ASCII
terminal. @dfn{Info files} are the result of processing Texinfo files
with the program @code{makeinfo} or with one of the Emacs commands, such
as @code{M-x texinfo-format-buffer}. Texinfo itself is a documentation
system that uses a single source file to produce both on-line
information and printed output. You can typeset and print the
files that you read in Info.@refill
@node Options, Cursor Commands, What is Info, Top
@chapter Command Line Options
@cindex command line options
@cindex arguments, command line
GNU Info accepts several options to control the initial node being
viewed, and to specify which directories to search for Info files. Here
is a template showing an invocation of GNU Info from the shell:
@example
info [--@var{option-name} @var{option-value}] @var{menu-item}@dots{}
@end example
The following @var{option-names} are available when invoking Info from
the shell:
@table @code
@cindex directory path
@item --directory @var{directory-path}
@itemx -d @var{directory-path}
Add @var{directory-path} to the list of directory paths searched when
Info needs to find a file. You may issue @code{--directory} multiple
times; once for each directory which contains Info files.
Alternatively, you may specify a value for the environment variable
@code{INFOPATH}; if @code{--directory} is not given, the value of
@code{INFOPATH} is used. The value of @code{INFOPATH} is a colon
separated list of directory names. If you do not supply @code{INFOPATH}
or @code{--directory-path}, Info uses a default path.
@item --file @var{filename}
@itemx -f @var{filename}
@cindex Info file, selecting
Specify a particular Info file to visit. By default, Info visits
the file @code{dir}; if you use this option, Info will start with
@code{(@var{filename})Top} as the first file and node.
@item --index-search @var{string}
@cindex index search, selecting
@cindex online help, using Info as
Go to the index entry @var{string} in the Info file specified with
@samp{--file}. If no such entry, print @samp{no entries found} and exit
with nonzero status. This can used from another program as a way to
provide online help.
@item --node @var{nodename}
@itemx -n @var{nodename}
@cindex node, selecting
Specify a particular node to visit in the initial file that Info
loads. This is especially useful in conjunction with
@code{--file}@footnote{Of course, you can specify both the file and node
in a @code{--node} command; but don't forget to escape the open and
close parentheses from the shell as in: @code{info --node
"(emacs)Buffers"}}. You may specify @code{--node} multiple times; for
an interactive Info, each @var{nodename} is visited in its own window,
for a non-interactive Info (such as when @code{--output} is given) each
@var{nodename} is processed sequentially.
@item --output @var{filename}
@itemx -o @var{filename}
@cindex file, outputting to
@cindex outputting to a file
Specify @var{filename} as the name of a file to which to direct output.
Each node that Info visits will be output to @var{filename} instead of
interactively viewed. A value of @code{-} for @var{filename} specifies
the standard output.
@item --subnodes
@cindex @code{--subnodes}, command line option
This option only has meaning when given in conjunction with
@code{--output}. It means to recursively output the nodes appearing in
the menus of each node being output. Menu items which resolve to
external Info files are not output, and neither are menu items which are
members of an index. Each node is only output once.
@item --help
@itemx -h
Produces a relatively brief description of the available Info options.
@item --version
@cindex version information
Prints the version information of Info and exits.
@item @var{menu-item}
@cindex menu, following
Info treats its remaining arguments as the names of menu items. The
first argument is a menu item in the initial node visited, while
the second argument is a menu item in the first argument's node.
You can easily move to the node of your choice by specifying the menu
names which describe the path to that node. For example,
@example
info emacs buffers
@end example
@noindent
first selects the menu item @samp{Emacs} in the node @samp{(dir)Top},
and then selects the menu item @samp{Buffers} in the node
@samp{(emacs)Top}.
@end table
@node Cursor Commands, Scrolling Commands, Options, Top
@chapter Moving the Cursor
@cindex cursor, moving
Many people find that reading screens of text page by page is made
easier when one is able to indicate particular pieces of text with some
kind of pointing device. Since this is the case, GNU Info (both the
Emacs and standalone versions) have several commands which allow you to
move the cursor about the screen. The notation used in this manual to
describe keystrokes is identical to the notation used within the Emacs
manual, and the GNU Readline manual. @xref{Characters, , Character
Conventions, emacs, the GNU Emacs Manual}, if you are unfamiliar with the
notation.
The following table lists the basic cursor movement commands in Info.
Each entry consists of the key sequence you should type to execute the
cursor movement, the @code{M-x}@footnote{@code{M-x} is also a command; it
invokes @code{execute-extended-command}. @xref{M-x, , Executing an
extended command, emacs, the GNU Emacs Manual}, for more detailed
information.} command name (displayed in parentheses), and a short
description of what the command does. All of the cursor motion commands
can take an @dfn{numeric} argument (@pxref{Miscellaneous Commands,
@code{universal-argument}}), to find out how to supply them. With a
numeric argument, the motion commands are simply executed that
many times; for example, a numeric argument of 4 given to
@code{next-line} causes the cursor to move down 4 lines. With a
negative numeric argument, the motion is reversed; an argument of -4
given to the @code{next-line} command would cause the cursor to move
@emph{up} 4 lines.
@table @asis
@item @code{C-n} (@code{next-line})
@kindex C-n
@findex next-line
Move the cursor down to the next line.
@item @code{C-p} (@code{prev-line})
@kindex C-p
@findex prev-line
Move the cursor up to the previous line.
@item @code{C-a} (@code{beginning-of-line})
@kindex C-a, in Info windows
@findex beginning-of-line
Move the cursor to the start of the current line.
@item @code{C-e} (@code{end-of-line})
@kindex C-e, in Info windows
@findex end-of-line
Move the cursor to the end of the current line.
@item @code{C-f} (@code{forward-char})
@kindex C-f, in Info windows
@findex forward-char
Move the cursor forward a character.
@item @code{C-b} (@code{backward-char})
@kindex C-b, in Info windows
@findex backward-char
Move the cursor backward a character.
@item @code{M-f} (@code{forward-word})
@kindex M-f, in Info windows
@findex forward-word
Move the cursor forward a word.
@item @code{M-b} (@code{backward-word})
@kindex M-b, in Info windows
@findex backward-word
Move the cursor backward a word.
@item @code{M-<} (@code{beginning-of-node})
@itemx @code{b}
@kindex b, in Info windows
@kindex M-<
@findex beginning-of-node
Move the cursor to the start of the current node.
@item @code{M->} (@code{end-of-node})
@kindex M->
@findex end-of-node
Move the cursor to the end of the current node.
@item @code{M-r} (@code{move-to-window-line})
@kindex M-r
@findex move-to-window-line
Move the cursor to a specific line of the window. Without a numeric
argument, @code{M-r} moves the cursor to the start of the line in the
center of the window. With a numeric argument of @var{n}, @code{M-r}
moves the cursor to the start of the @var{n}th line in the window.
@end table
@node Scrolling Commands, Node Commands, Cursor Commands, Top
@chapter Moving Text Within a Window
@cindex scrolling
Sometimes you are looking at a screenful of text, and only part of the
current paragraph you are reading is visible on the screen. The
commands detailed in this section are used to shift which part of the
current node is visible on the screen.
@table @asis
@item @code{SPC} (@code{scroll-forward})
@itemx @code{C-v}
@kindex SPC, in Info windows
@kindex C-v
@findex scroll-forward
Shift the text in this window up. That is, show more of the node which
is currently below the bottom of the window. With a numeric argument,
show that many more lines at the bottom of the window; a numeric
argument of 4 would shift all of the text in the window up 4 lines
(discarding the top 4 lines), and show you four new lines at the bottom
of the window. Without a numeric argument, @key{SPC} takes the bottom
two lines of the window and places them at the top of the window,
redisplaying almost a completely new screenful of lines.
@item @code{DEL} (@code{scroll-backward})
@itemx @code{M-v}
@kindex DEL, in Info windows
@kindex M-v
@findex scroll-backward
Shift the text in this window down. The inverse of
@code{scroll-forward}.
@end table
@cindex scrolling through node structure
The @code{scroll-forward} and @code{scroll-backward} commands can also
move forward and backward through the node structure of the file. If
you press @key{SPC} while viewing the end of a node, or @key{DEL} while
viewing the beginning of a node, what happens is controlled by the
variable @code{scroll-behavior}. @xref{Variables,
@code{scroll-behavior}}, for more information.
@table @asis
@item @code{C-l} (@code{redraw-display})
@kindex C-l
@findex redraw-display
Redraw the display from scratch, or shift the line containing the cursor
to a specified location. With no numeric argument, @samp{C-l} clears
the screen, and then redraws its entire contents. Given a numeric
argument of @var{n}, the line containing the cursor is shifted so that
it is on the @var{n}th line of the window.
@item @code{C-x w} (@code{toggle-wrap})
@kindex C-w
@findex toggle-wrap
Toggles the state of line wrapping in the current window. Normally,
lines which are longer than the screen width @dfn{wrap}, i.e., they are
continued on the next line. Lines which wrap have a @samp{\} appearing
in the rightmost column of the screen. You can cause such lines to be
terminated at the rightmost column by changing the state of line
wrapping in the window with @code{C-x w}. When a line which needs more
space than one screen width to display is displayed, a @samp{$} appears
in the rightmost column of the screen, and the remainder of the line is
invisible.
@end table
@node Node Commands, Searching Commands, Scrolling Commands, Top
@chapter Selecting a New Node
@cindex nodes, selection of
This section details the numerous Info commands which select a new node
to view in the current window.
The most basic node commands are @samp{n}, @samp{p}, @samp{u}, and
@samp{l}.
When you are viewing a node, the top line of the node contains some Info
@dfn{pointers} which describe where the next, previous, and up nodes
are. Info uses this line to move about the node structure of the file
when you use the following commands:
@table @asis
@item @code{n} (@code{next-node})
@kindex n
@findex next-node
Select the `Next' node.
@item @code{p} (@code{prev-node})
@kindex p
@findex prev-node
Select the `Prev' node.
@item @code{u} (@code{up-node})
@kindex u
@findex up-node
Select the `Up' node.
@end table
You can easily select a node that you have already viewed in this window
by using the @samp{l} command -- this name stands for "last", and
actually moves through the list of already visited nodes for this
window. @samp{l} with a negative numeric argument moves forward through
the history of nodes for this window, so you can quickly step between
two adjacent (in viewing history) nodes.
@table @asis
@item @code{l} (@code{history-node})
@kindex l
@findex history-node
Select the most recently selected node in this window.
@end table
Two additional commands make it easy to select the most commonly
selected nodes; they are @samp{t} and @samp{d}.
@table @asis
@item @code{t} (@code{top-node})
@kindex t
@findex top-node
Select the node @samp{Top} in the current Info file.
@item @code{d} (@code{dir-node})
@kindex d
@findex dir-node
Select the directory node (i.e., the node @samp{(dir)}).
@end table
Here are some other commands which immediately result in the selection
of a different node in the current window:
@table @asis
@item @code{<} (@code{first-node})
@kindex <
@findex first-node
Selects the first node which appears in this file. This node is most
often @samp{Top}, but it does not have to be.
@item @code{>} (@code{last-node})
@kindex >
@findex last-node
Select the last node which appears in this file.
@item @code{]} (@code{global-next-node})
@kindex ]
@findex global-next-node
Move forward or down through node structure. If the node that you are
currently viewing has a @samp{Next} pointer, that node is selected.
Otherwise, if this node has a menu, the first menu item is selected. If
there is no @samp{Next} and no menu, the same process is tried with the
@samp{Up} node of this node.
@item @code{[} (@code{global-prev-node})
@kindex [
@findex global-prev-node
Move backward or up through node structure. If the node that you are
currently viewing has a @samp{Prev} pointer, that node is selected.
Otherwise, if the node has an @samp{Up} pointer, that node is selected,
and if it has a menu, the last item in the menu is selected.
@end table
You can get the same behavior as @code{global-next-node} and
@code{global-prev-node} while simply scrolling through the file with
@key{SPC} and @key{DEL}; @xref{Variables, @code{scroll-behavior}}, for
more information.
@table @asis
@item @code{g} (@code{goto-node})
@kindex g
@findex goto-node
Read the name of a node and select it. No completion is done while
reading the node name, since the desired node may reside in a separate
file. The node must be typed exactly as it appears in the Info file. A
file name may be included as with any node specification, for example
@example
@code{g(emacs)Buffers}
@end example
finds the node @samp{Buffers} in the Info file @file{emacs}.
@item @code{C-x k} (@code{kill-node})
@kindex C-x k
@findex kill-node
Kill a node. The node name is prompted for in the echo area, with a
default of the current node. @dfn{Killing} a node means that Info tries
hard to forget about it, removing it from the list of history nodes kept
for the window where that node is found. Another node is selected in
the window which contained the killed node.
@item @code{C-x C-f} (@code{view-file})
@kindex C-x C-f
@findex view-file
Read the name of a file and selects the entire file. The command
@example
@code{C-x C-f @var{filename}}
@end example
is equivalent to typing
@example
@code{g(@var{filename})*}
@end example
@item @code{C-x C-b} (@code{list-visited-nodes})
@kindex C-x C-b
@findex list-visited-nodes
Make a window containing a menu of all of the currently visited nodes.
This window becomes the selected window, and you may use the standard
Info commands within it.
@item @code{C-x b} (@code{select-visited-node})
@kindex C-x b
@findex select-visited-node
Select a node which has been previously visited in a visible window.
This is similar to @samp{C-x C-b} followed by @samp{m}, but no window is
created.
@end table
@node Searching Commands, Xref Commands, Node Commands, Top
@chapter Searching an Info File
@cindex searching
GNU Info allows you to search for a sequence of characters throughout an
entire Info file, search through the indices of an Info file, or find
areas within an Info file which discuss a particular topic.
@table @asis
@item @code{s} (@code{search})
@kindex s
@findex search
Read a string in the echo area and search for it.
@item @code{C-s} (@code{isearch-forward})
@kindex C-s
@findex isearch-forward
Interactively search forward through the Info file for a string as you
type it.
@item @code{C-r} (@code{isearch-backward})
@kindex C-r
@findex isearch-backward
Interactively search backward through the Info file for a string as
you type it.
@item @code{i} (@code{index-search})
@kindex i
@findex index-search
Look up a string in the indices for this Info file, and select a node
where the found index entry points to.
@item @code{,} (@code{next-index-match})
@kindex ,
@findex next-index-match
Move to the node containing the next matching index item from the last
@samp{i} command.
@end table
The most basic searching command is @samp{s} (@code{search}). The
@samp{s} command prompts you for a string in the echo area, and then
searches the remainder of the Info file for an occurrence of that string.
If the string is found, the node containing it is selected, and the
cursor is left positioned at the start of the found string. Subsequent
@samp{s} commands show you the default search string within @samp{[} and
@samp{]}; pressing @key{RET} instead of typing a new string will use the
default search string.
@dfn{Incremental searching} is similar to basic searching, but the
string is looked up while you are typing it, instead of waiting until
the entire search string has been specified.
@node Xref Commands, Window Commands, Searching Commands, Top
@chapter Selecting Cross References
We have already discussed the @samp{Next}, @samp{Prev}, and @samp{Up}
pointers which appear at the top of a node. In addition to these
pointers, a node may contain other pointers which refer you to a
different node, perhaps in another Info file. Such pointers are called
@dfn{cross references}, or @dfn{xrefs} for short.
@menu
* Parts of an Xref:: What a cross reference is made of.
* Selecting Xrefs:: Commands for selecting menu or note items.
@end menu
@node Parts of an Xref, Selecting Xrefs, , Xref Commands
@section Parts of an Xref
Cross references have two major parts: the first part is called the
@dfn{label}; it is the name that you can use to refer to the cross
reference, and the second is the @dfn{target}; it is the full name of
the node that the cross reference points to.
The target is separated from the label by a colon @samp{:}; first the
label appears, and then the target. For example, in the sample menu
cross reference below, the single colon separates the label from the
target.
@example
* Foo Label: Foo Target. More information about Foo.
@end example
Note the @samp{.} which ends the name of the target. The @samp{.} is
not part of the target; it serves only to let Info know where the target
name ends.
A shorthand way of specifying references allows two adjacent colons to
stand for a target name which is the same as the label name:
@example
* Foo Commands:: Commands pertaining to Foo.
@end example
In the above example, the name of the target is the same as the name of
the label, in this case @code{Foo Commands}.
You will normally see two types of cross reference while viewing nodes:
@dfn{menu} references, and @dfn{note} references. Menu references
appear within a node's menu; they begin with a @samp{*} at the beginning
of a line, and continue with a label, a target, and a comment which
describes what the contents of the node pointed to contains.
Note references appear within the body of the node text; they begin with
@code{*Note}, and continue with a label and a target.
Like @samp{Next}, @samp{Prev}, and @samp{Up} pointers, cross references
can point to any valid node. They are used to refer you to a place
where more detailed information can be found on a particular subject.
Here is a cross reference which points to a node within the Texinfo
documentation: @xref{xref, , Writing an Xref, texinfo, the Texinfo
Manual}, for more information on creating your own texinfo cross
references.
@node Selecting Xrefs, , Parts of an Xref, Xref Commands
@section Selecting Xrefs
The following table lists the Info commands which operate on menu items.
@table @asis
@item @code{1} (@code{menu-digit})
@itemx @code{2} @dots{} @code{9}
@cindex 1 @dots{} 9, in Info windows
@kindex 1 @dots{} 9, in Info windows
@findex menu-digit
Within an Info window, pressing a single digit, (such as @samp{1}),
selects that menu item, and places its node in the current window.
For convenience, there is one exception; pressing @samp{0} selects the
@emph{last} item in the node's menu.
@item @code{0} (@code{last-menu-item})
@kindex 0, in Info windows
@findex last-menu-item
Select the last item in the current node's menu.
@item @code{m} (@code{menu-item})
@kindex m
@findex menu-item
Reads the name of a menu item in the echo area and selects its node.
Completion is available while reading the menu label.
@item @code{M-x find-menu}
@findex find-menu
Move the cursor to the start of this node's menu.
@end table
This table lists the Info commands which operate on note cross references.
@table @asis
@item @code{f} (@code{xref-item})
@itemx @code{r}
@kindex f
@kindex r
@findex xref-item
Reads the name of a note cross reference in the echo area and selects
its node. Completion is available while reading the cross reference
label.
@end table
Finally, the next few commands operate on menu or note references alike:
@table @asis
@item @code{TAB} (@code{move-to-next-xref})
@kindex TAB, in Info windows
@findex move-to-next-xref
Move the cursor to the start of the next nearest menu item or note
reference in this node. You can then use @key{RET}
(@code{select-reference-this-line}) to select the menu or note reference.
@item @code{M-TAB} (@code{move-to-prev-xref})
@kindex M-TAB, in Info windows
@findex move-to-prev-xref
Move the cursor the start of the nearest previous menu item or note
reference in this node.
@item @code{RET} (@code{select-reference-this-line})
@kindex RET, in Info windows
@findex select-reference-this-line
Select the menu item or note reference appearing on this line.
@end table
@node Window Commands, Printing Nodes, Xref Commands, Top
@chapter Manipulating Multiple Windows
@cindex windows, manipulating
A @dfn{window} is a place to show the text of a node. Windows have a
view area where the text of the node is displayed, and an associated
@dfn{mode line}, which briefly describes the node being viewed.
GNU Info supports multiple windows appearing in a single screen; each
window is separated from the next by its modeline. At any time, there
is only one @dfn{active} window, that is, the window in which the cursor
appears. There are commands available for creating windows, changing
the size of windows, selecting which window is active, and for deleting
windows.
@menu
* The Mode Line:: What appears in the mode line?
* Basic Windows:: Manipulating windows in Info.
* The Echo Area:: Used for displaying errors and reading input.
@end menu
@node The Mode Line, Basic Windows, , Window Commands
@section The Mode Line
A @dfn{mode line} is a line of inverse video which appears at the bottom
of an Info window. It describes the contents of the window just above
it; this information includes the name of the file and node appearing in
that window, the number of screen lines it takes to display the node,
and the percentage of text that is above the top of the window. It can
also tell you if the indirect tags table for this Info file needs to be
updated, and whether or not the Info file was compressed when stored on
disk.
Here is a sample mode line for a window containing an uncompressed file
named @file{dir}, showing the node @samp{Top}.
@example
@group
-----Info: (dir)Top, 40 lines --Top---------------------------------------
^^ ^ ^^^ ^^
(file)Node #lines where
@end group
@end example
When a node comes from a file which is compressed on disk, this is
indicated in the mode line with two small @samp{z}'s. In addition, if
the Info file containing the node has been split into subfiles, the name
of the subfile containing the node appears in the modeline as well:
@example
--zz-Info: (emacs)Top, 291 lines --Top-- Subfile: emacs-1.Z---------------
@end example
When Info makes a node internally, such that there is no corresponding
info file on disk, the name of the node is surrounded by asterisks
(@samp{*}). The name itself tells you what the contents of the window
are; the sample mode line below shows an internally constructed node
showing possible completions:
@example
-----Info: *Completions*, 7 lines --All-----------------------------------
@end example
@node Basic Windows, The Echo Area, The Mode Line, Window Commands
@section Window Commands
It can be convenient to view more than one node at a time. To allow
this, Info can display more than one @dfn{window}. Each window has its
own mode line (@pxref{The Mode Line}) and history of nodes viewed in that
window (@pxref{Node Commands, , @code{history-node}}).
@table @asis
@item @code{C-x o} (@code{next-window})
@cindex windows, selecting
@kindex C-x o
@findex next-window
Select the next window on the screen. Note that the echo area can only be
selected if it is already in use, and you have left it temporarily.
Normally, @samp{C-x o} simply moves the cursor into the next window on
the screen, or if you are already within the last window, into the first
window on the screen. Given a numeric argument, @samp{C-x o} moves over
that many windows. A negative argument causes @samp{C-x o} to select
the previous window on the screen.
@item @code{M-x prev-window}
@findex prev-window
Select the previous window on the screen. This is identical to
@samp{C-x o} with a negative argument.
@item @code{C-x 2} (@code{split-window})
@cindex windows, creating
@kindex C-x 2
@findex split-window
Split the current window into two windows, both showing the same node.
Each window is one half the size of the original window, and the cursor
remains in the original window. The variable @code{automatic-tiling}
can cause all of the windows on the screen to be resized for you
automatically, please @pxref{Variables, , automatic-tiling} for more
information.
@item @code{C-x 0} (@code{delete-window})
@cindex windows, deleting
@kindex C-x 0
@findex delete-window
Delete the current window from the screen. If you have made too many
windows and your screen appears cluttered, this is the way to get rid of
some of them.
@item @code{C-x 1} (@code{keep-one-window})
@kindex C-x 1
@findex keep-one-window
Delete all of the windows excepting the current one.
@item @code{ESC C-v} (@code{scroll-other-window})
@kindex ESC C-v, in Info windows
@findex scroll-other-window
Scroll the other window, in the same fashion that @samp{C-v} might
scroll the current window. Given a negative argument, scroll the
"other" window backward.
@item @code{C-x ^} (@code{grow-window})
@kindex C-x ^
@findex grow-window
Grow (or shrink) the current window. Given a numeric argument, grow
the current window that many lines; with a negative numeric argument,
shrink the window instead.
@item @code{C-x t} (@code{tile-windows})
@cindex tiling
@kindex C-x t
@findex tile-windows
Divide the available screen space among all of the visible windows.
Each window is given an equal portion of the screen in which to display
its contents. The variable @code{automatic-tiling} can cause
@code{tile-windows} to be called when a window is created or deleted.
@xref{Variables, , @code{automatic-tiling}}.
@end table
@node The Echo Area, , Basic Windows, Window Commands
@section The Echo Area
@cindex echo area
The @dfn{echo area} is a one line window which appears at the bottom of
the screen. It is used to display informative or error messages, and to
read lines of input from you when that is necessary. Almost all of the
commands available in the echo area are identical to their Emacs
counterparts, so please refer to that documentation for greater depth of
discussion on the concepts of editing a line of text. The following
table briefly lists the commands that are available while input is being
read in the echo area:
@table @asis
@item @code{C-f} (@code{echo-area-forward})
@kindex C-f, in the echo area
@findex echo-area-forward
Move forward a character.
@item @code{C-b} (@code{echo-area-backward})
@kindex C-b, in the echo area
@findex echo-area-backward
Move backward a character.
@item @code{C-a} (@code{echo-area-beg-of-line})
@kindex C-a, in the echo area
@findex echo-area-beg-of-line
Move to the start of the input line.
@item @code{C-e} (@code{echo-area-end-of-line})
@kindex C-e, in the echo area
@findex echo-area-end-of-line
Move to the end of the input line.
@item @code{M-f} (@code{echo-area-forward-word})
@kindex M-f, in the echo area
@findex echo-area-forward-word
Move forward a word.
@item @code{M-b} (@code{echo-area-backward-word})
@kindex M-b, in the echo area
@findex echo-area-backward-word
Move backward a word.
@item @code{C-d} (@code{echo-area-delete})
@kindex C-d, in the echo area
@findex echo-area-delete
Delete the character under the cursor.
@item @code{DEL} (@code{echo-area-rubout})
@kindex DEL, in the echo area
@findex echo-area-rubout
Delete the character behind the cursor.
@item @code{C-g} (@code{echo-area-abort})
@kindex C-g, in the echo area
@findex echo-area-abort
Cancel or quit the current operation. If completion is being read,
@samp{C-g} discards the text of the input line which does not match any
completion. If the input line is empty, @samp{C-g} aborts the calling
function.
@item @code{RET} (@code{echo-area-newline})
@kindex RET, in the echo area
@findex echo-area-newline
Accept (or forces completion of) the current input line.
@item @code{C-q} (@code{echo-area-quoted-insert})
@kindex C-q, in the echo area
@findex echo-area-quoted-insert
Insert the next character verbatim. This is how you can insert control
characters into a search string, for example.
@item @var{printing character} (@code{echo-area-insert})
@kindex printing characters, in the echo area
@findex echo-area-insert
Insert the character.
@item @code{M-TAB} (@code{echo-area-tab-insert})
@kindex M-TAB, in the echo area
@findex echo-area-tab-insert
Insert a TAB character.
@item @code{C-t} (@code{echo-area-transpose-chars})
@kindex C-t, in the echo area
@findex echo-area-transpose-chars
Transpose the characters at the cursor.
@end table
The next group of commands deal with @dfn{killing}, and @dfn{yanking}
text. For an in depth discussion of killing and yanking,
@pxref{Killing, , Killing and Deleting, emacs, the GNU Emacs Manual}
@table @asis
@item @code{M-d} (@code{echo-area-kill-word})
@kindex M-d, in the echo area
@findex echo-area-kill-word
Kill the word following the cursor.
@item @code{M-DEL} (@code{echo-area-backward-kill-word})
@kindex M-DEL, in the echo area
@findex echo-area-backward-kill-word
Kill the word preceding the cursor.
@item @code{C-k} (@code{echo-area-kill-line})
@kindex C-k, in the echo area
@findex echo-area-kill-line
Kill the text from the cursor to the end of the line.
@item @code{C-x DEL} (@code{echo-area-backward-kill-line})
@kindex C-x DEL, in the echo area
@findex echo-area-backward-kill-line
Kill the text from the cursor to the beginning of the line.
@item @code{C-y} (@code{echo-area-yank})
@kindex C-y, in the echo area
@findex echo-area-yank
Yank back the contents of the last kill.
@item @code{M-y} (@code{echo-area-yank-pop})
@kindex M-y, in the echo area
@findex echo-area-yank-pop
Yank back a previous kill, removing the last yanked text first.
@end table
Sometimes when reading input in the echo area, the command that needed
input will only accept one of a list of several choices. The choices
represent the @dfn{possible completions}, and you must respond with one
of them. Since there are a limited number of responses you can make,
Info allows you to abbreviate what you type, only typing as much of the
response as is necessary to uniquely identify it. In addition, you can
request Info to fill in as much of the response as is possible; this
is called @dfn{completion}.
The following commands are available when completing in the echo area:
@table @asis
@item @code{TAB} (@code{echo-area-complete})
@itemx @code{SPC}
@kindex TAB, in the echo area
@kindex SPC, in the echo area
@findex echo-area-complete
Insert as much of a completion as is possible.
@item @code{?} (@code{echo-area-possible-completions})
@kindex ?, in the echo area
@findex echo-area-possible-completions
Display a window containing a list of the possible completions of what
you have typed so far. For example, if the available choices are:
@example
@group
bar
foliate
food
forget
@end group
@end example
@noindent
and you have typed an @samp{f}, followed by @samp{?}, the possible
completions would contain:
@example
@group
foliate
food
forget
@end group
@end example
@noindent
i.e., all of the choices which begin with @samp{f}. Pressing @key{SPC}
or @key{TAB} would result in @samp{fo} appearing in the echo area, since
all of the choices which begin with @samp{f} continue with @samp{o}.
Now, typing @samp{l} followed by @samp{TAB} results in @samp{foliate}
appearing in the echo area, since that is the only choice which begins
with @samp{fol}.
@item @code{ESC C-v} (@code{echo-area-scroll-completions-window})
@kindex ESC C-v, in the echo area
@findex echo-area-scroll-completions-window
Scroll the completions window, if that is visible, or the "other"
window if not.
@end table
@node Printing Nodes, Miscellaneous Commands, Window Commands, Top
@chapter Printing Out Nodes
@cindex printing
You may wish to print out the contents of a node as a quick reference
document for later use. Info provides you with a command for doing
this. In general, we recommend that you use @TeX{} to format the
document and print sections of it, by running @code{tex} on the Texinfo
source file.
@table @asis
@item @code{M-x print-node}
@findex print-node
@cindex INFO_PRINT_COMMAND, environment variable
Pipe the contents of the current node through the command in the
environment variable @code{INFO_PRINT_COMMAND}. If the variable does not
exist, the node is simply piped to @code{lpr}.
@end table
@node Miscellaneous Commands, Variables, Printing Nodes, Top
@chapter Miscellaneous Commands
GNU Info contains several commands which self-document GNU Info:
@table @asis
@item @code{M-x describe-command}
@cindex functions, describing
@cindex commands, describing
@findex describe-command
Read the name of an Info command in the echo area and then display a
brief description of what that command does.
@item @code{M-x describe-key}
@cindex keys, describing
@findex describe-key
Read a key sequence in the echo area, and then display the name and
documentation of the Info command that the key sequence invokes.
@item @code{M-x describe-variable}
Read the name of a variable in the echo area and then display a brief
description of what the variable affects.
@item @code{M-x where-is}
@findex where-is
Read the name of an Info command in the echo area, and then display
a key sequence which can be typed in order to invoke that command.
@item @code{C-h} (@code{get-help-window})
@itemx @code{?}
@kindex C-h
@kindex ?, in Info windows
@findex get-help-window
Create (or Move into) the window displaying @code{*Help*}, and place
a node containing a quick reference card into it. This window displays
the most concise information about GNU Info available.
@item @code{h} (@code{get-info-help-node})
@kindex h
@findex get-info-help-node
Try hard to visit the node @code{(info)Help}. The Info file
@file{info.texi} distributed with GNU Info contains this node. Of
course, the file must first be processed with @code{makeinfo}, and then
placed into the location of your Info directory.
@end table
Here are the commands for creating a numeric argument:
@table @asis
@item @code{C-u} (@code{universal-argument})
@cindex numeric arguments
@kindex C-u
@findex universal-argument
Start (or multiply by 4) the current numeric argument. @samp{C-u} is
a good way to give a small numeric argument to cursor movement or
scrolling commands; @samp{C-u C-v} scrolls the screen 4 lines, while
@samp{C-u C-u C-n} moves the cursor down 16 lines.
@item @code{M-1} (@code{add-digit-to-numeric-arg})
@itemx @code{M-2} @dots{} @code{M-9}
@kindex M-1 @dots{} M-9
@findex add-digit-to-numeric-arg
Add the digit value of the invoking key to the current numeric
argument. Once Info is reading a numeric argument, you may just type
the digits of the argument, without the Meta prefix. For example, you
might give @samp{C-l} a numeric argument of 32 by typing:
@example
@kbd{C-u 3 2 C-l}
@end example
@noindent
or
@example
@kbd{M-3 2 C-l}
@end example
@end table
@samp{C-g} is used to abort the reading of a multi-character key
sequence, to cancel lengthy operations (such as multi-file searches) and
to cancel reading input in the echo area.
@table @asis
@item @code{C-g} (@code{abort-key})
@cindex cancelling typeahead
@cindex cancelling the current operation
@kindex C-g, in Info windows
@findex abort-key
Cancel current operation.
@end table
The @samp{q} command of Info simply quits running Info.
@table @asis
@item @code{q} (@code{quit})
@cindex quitting
@kindex q
@findex quit
Exit GNU Info.
@end table
If the operating system tells GNU Info that the screen is 60 lines tall,
and it is actually only 40 lines tall, here is a way to tell Info that
the operating system is correct.
@table @asis
@item @code{M-x set-screen-height}
@findex set-screen-height
@cindex screen, changing the height of
Read a height value in the echo area and set the height of the
displayed screen to that value.
@end table
Finally, Info provides a convenient way to display footnotes which might
be associated with the current node that you are viewing:
@table @asis
@item @code{ESC C-f} (@code{show-footnotes})
@kindex ESC C-f
@findex show-footnotes
@cindex footnotes, displaying
Show the footnotes (if any) associated with the current node in another
window. You can have Info automatically display the footnotes
associated with a node when the node is selected by setting the variable
@code{automatic-footnotes}. @xref{Variables, , @code{automatic-footnotes}}.
@end table
@node Variables, GNU Info Global Index, Miscellaneous Commands, Top
@chapter Manipulating Variables
GNU Info contains several @dfn{variables} whose values are looked at by
various Info commands. You can change the values of these variables,
and thus change the behavior of Info to more closely match your
environment and Info file reading manner.
@table @asis
@item @code{M-x set-variable}
@cindex variables, setting
@findex set-variable
Read the name of a variable, and the value for it, in the echo area and
then set the variable to that value. Completion is available when
reading the variable name; often, completion is available when reading
the value to give to the variable, but that depends on the variable
itself. If a variable does @emph{not} supply multiple choices to
complete over, it expects a numeric value.
@item @code{M-x describe-variable}
@cindex variables, describing
@findex describe-variable
Read the name of a variable in the echo area and then display a brief
description of what the variable affects.
@end table
Here is a list of the variables that you can set in Info.
@table @code
@item automatic-footnotes
@vindex automatic-footnotes
When set to @code{On}, footnotes appear and disappear automatically.
This variable is @code{On} by default. When a node is selected, a
window containing the footnotes which appear in that node is created,
and the footnotes are displayed within the new window. The window that
Info creates to contain the footnotes is called @samp{*Footnotes*}. If
a node is selected which contains no footnotes, and a @samp{*Footnotes*}
window is on the screen, the @samp{*Footnotes*} window is deleted.
Footnote windows created in this fashion are not automatically tiled so
that they can use as little of the display as is possible.
@item automatic-tiling
@vindex automatic-tiling
When set to @code{On}, creating or deleting a window resizes other
windows. This variable is @code{Off} by default. Normally, typing
@samp{C-x 2} divides the current window into two equal parts. When
@code{automatic-tiling} is set to @code{On}, all of the windows are
resized automatically, keeping an equal number of lines visible in each
window. There are exceptions to the automatic tiling; specifically, the
windows @samp{*Completions*} and @samp{*Footnotes*} are @emph{not}
resized through automatic tiling; they remain their original size.
@item visible-bell
@vindex visible-bell
When set to @code{On}, GNU Info attempts to flash the screen instead of
ringing the bell. This variable is @code{Off} by default. Of course,
Info can only flash the screen if the terminal allows it; in the case
that the terminal does not allow it, the setting of this variable has no
effect. However, you can make Info perform quietly by setting the
@code{errors-ring-bell} variable to @code{Off}.
@item errors-ring-bell
@vindex errors-ring-bell
When set to @code{On}, errors cause the bell to ring. The default
setting of this variable is @code{On}.
@item gc-compressed-files
@vindex gc-compressed-files
When set to @code{On}, Info garbage collects files which had to be
uncompressed. The default value of this variable is @code{Off}.
Whenever a node is visited in Info, the Info file containing that node
is read into core, and Info reads information about the tags and nodes
contained in that file. Once the tags information is read by Info, it
is never forgotten. However, the actual text of the nodes does not need
to remain in core unless a particular Info window needs it. For
non-compressed files, the text of the nodes does not remain in core when
it is no longer in use. But de-compressing a file can be a time
consuming operation, and so Info tries hard not to do it twice.
@code{gc-compressed-files} tells Info it is okay to garbage collect the
text of the nodes of a file which was compressed on disk.
@item show-index-match
@vindex show-index-match
When set to @code{On}, the portion of the matched search string is
highlighted in the message which explains where the matched search
string was found. The default value of this variable is @code{On}.
When Info displays the location where an index match was found,
(@pxref{Searching Commands, , @code{next-index-match}}), the portion of the
string that you had typed is highlighted by displaying it in the inverse
case from its surrounding characters.
@item scroll-behavior
@vindex scroll-behavior
Control what happens when forward scrolling is requested at the end of
a node, or when backward scrolling is requested at the beginning of a
node. The default value for this variable is @code{Continuous}. There
are three possible values for this variable:
@table @code
@item Continuous
Try to get the first item in this node's menu, or failing that, the
@samp{Next} node, or failing that, the @samp{Next} of the @samp{Up}.
This behavior is identical to using the @samp{]}
(@code{global-next-node}) and @samp{[} (@code{global-prev-node})
commands.
@item Next Only
Only try to get the @samp{Next} node.
@item Page Only
Simply give up, changing nothing. If @code{scroll-behavior} is
@code{Page Only}, no scrolling command can change the node that is being
viewed.
@end table
@item scroll-step
@vindex scroll-step
The number of lines to scroll when the cursor moves out of the window.
Scrolling happens automatically if the cursor has moved out of the
visible portion of the node text when it is time to display. Usually
the scrolling is done so as to put the cursor on the center line of the
current window. However, if the variable @code{scroll-step} has a
nonzero value, Info attempts to scroll the node text by that many lines;
if that is enough to bring the cursor back into the window, that is what
is done. The default value of this variable is 0, thus placing the
cursor (and the text it is attached to) in the center of the window.
Setting this variable to 1 causes a kind of "smooth scrolling" which
some people prefer.
@item ISO-Latin
@cindex ISO Latin characters
@vindex ISO-Latin
When set to @code{On}, Info accepts and displays ISO Latin characters.
By default, Info assumes an ASCII character set. @code{ISO-Latin} tells
Info that it is running in an environment where the European standard
character set is in use, and allows you to input such characters to
Info, as well as display them.
@end table
@c the following is incomplete
@ignore
@c node Info for Sys Admins
@c chapter Info for System Administrators
This text describes some common ways of setting up an Info hierarchy
from scratch, and details the various options that are available when
installing Info. This text is designed for the person who is installing
GNU Info on the system; although users may find the information present
in this section interesting, none of it is vital to understanding how to
use GNU Info.
@menu
* Setting the INFOPATH:: Where are my Info files kept?
* Editing the DIR node:: What goes in `DIR', and why?
* Storing Info files:: Alternate formats allow flexibility in setups.
* Using `localdir':: Building DIR on the fly.
* Example setups:: Some common ways to organize Info files.
@end menu
@c node Setting the INFOPATH
@c section Setting the INFOPATH
Where are my Info files kept?
@c node Editing the DIR node
@c section Editing the DIR node
What goes in `DIR', and why?
@c node Storing Info files
@c section Storing Info files
Alternate formats allow flexibility in setups.
@c node Using `localdir'
@c section Using `localdir'
Building DIR on the fly.
@c node Example setups
@c section Example setups
Some common ways to organize Info files.
@end ignore
@node GNU Info Global Index, , Variables, Top
@appendix Global Index
@printindex cp
@contents
@bye
\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
@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
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
@c This file is meant to be included in any arbitrary piece of
@c documentation that wishes to describe the info program. Some day
@c info-stnd.texi should probably use this file instead of duplicating
@c its contents.
@c
@c This file documents the use of the standalone GNU Info program,
@c versions 2.7 and later.
@ifclear InfoProgVer
@set InfoProgVer 2.11
@end ifclear
@synindex vr cp
@synindex fn cp
@synindex ky cp
@heading What is Info?
This text documents the use of the GNU Info program, version
@value{InfoProgVer}.
@dfn{Info} is a program which is used to view info files on an ASCII
terminal. @dfn{info files} are the result of processing texinfo files
with the program @code{makeinfo} or with the Emacs command @code{M-x
texinfo-format-buffer}. Finally, @dfn{texinfo} is a documentation
language which allows a printed manual and online documentation (an info
file) to be produced from a single source file.
@menu
* Options:: Options you can pass on the command line.
* Cursor Commands:: Commands which move the cursor within a node.
* Scrolling Commands:: Commands for moving the node around in a window.
* Node Commands:: Commands for selecting a new node.
* Searching Commands:: Commands for searching an info file.
* Xref Commands:: Commands for selecting cross references.
* Window Commands:: Commands which manipulate multiple windows.
* Printing Nodes:: How to print out the contents of a node.
* Miscellaneous Commands:: A few commands that defy categories.
* Variables:: How to change the default behaviour of Info.
@ifset NOTSET
* Info for Sys Admins:: How to setup Info. Using special options.
@end ifset
@ifset STANDALONE
* GNU Info Global Index:: Global index containing keystrokes, command names,
variable names, and general concepts.
@end ifset
@end menu
@node Options
@chapter Command Line Options
@cindex command line options
@cindex arguments, command line
GNU Info accepts several options to control the initial node being
viewed, and to specify which directories to search for info files. Here
is a template showing an invocation of GNU Info from the shell:
@example
info [--@var{option-name} @var{option-value}] @var{menu-item}@dots{}
@end example
The following @var{option-names} are available when invoking Info from
the shell:
@table @code
@cindex directory path
@item --directory @var{directory-path}
@itemx -d @var{directory-path}
Adds @var{directory-path} to the list of directory paths searched when
Info needs to find a file. You may issue @code{--directory} multiple
times; once for each directory which contains info files.
Alternatively, you may specify a value for the environment variable
@code{INFOPATH}; if @code{--directory} is not given, the value of
@code{INFOPATH} is used. The value of @code{INFOPATH} is a colon
separated list of directory names. If you do not supply
@code{INFOPATH} or @code{--directory-path} a default path is used.
@item --file @var{filename}
@itemx -f @var{filename}
@cindex info file, selecting
Specifies a particular info file to visit. Instead of visiting the file
@code{dir}, Info will start with @code{(@var{filename})Top} as the first
file and node.
@item --node @var{nodename}
@itemx -n @var{nodename}
@cindex node, selecting
Specifies a particular node to visit in the initial file loaded. This
is especially useful in conjunction with @code{--file}@footnote{Of
course, you can specify both the file and node in a @code{--node}
command; but don't forget to escape the open and close parentheses from
the shell as in: @code{info --node '(emacs)Buffers'}}. You may specify
@code{--node} multiple times; for an interactive Info, each
@var{nodename} is visited in its own window, for a non-interactive Info
(such as when @code{--output} is given) each @var{nodename} is processed
sequentially.
@item --output @var{filename}
@itemx -o @var{filename}
@cindex file, outputting to
@cindex outputting to a file
Specify @var{filename} as the name of a file to output to. Each node
that Info visits will be output to @var{filename} instead of
interactively viewed. A value of @code{-} for @var{filename} specifies
the standard output.
@item --subnodes
@cindex @code{--subnodes}, command line option
This option only has meaning when given in conjunction with
@code{--output}. It means to recursively output the nodes appearing in
the menus of each node being output. Menu items which resolve to
external info files are not output, and neither are menu items which are
members of an index. Each node is only output once.
@item --help
@itemx -h
Produces a relatively brief description of the available Info options.
@item --version
@cindex version information
Prints the version information of Info and exits.
@item @var{menu-item}
@cindex menu, following
Remaining arguments to Info are treated as the names of menu items. The
first argument would be a menu item in the initial node visited, while
the second argument would be a menu item in the first argument's node.
You can easily move to the node of your choice by specifying the menu
names which describe the path to that node. For example,
@example
info emacs buffers
@end example
first selects the menu item @samp{Emacs} in the node @samp{(dir)Top},
and then selects the menu item @samp{Buffers} in the node
@samp{(emacs)Top}.
@end table
@node Cursor Commands
@chapter Moving the Cursor
@cindex cursor, moving
Many people find that reading screens of text page by page is made
easier when one is able to indicate particular pieces of text with some
kind of pointing device. Since this is the case, GNU Info (both the
Emacs and standalone versions) have several commands which allow you to
move the cursor about the screen. The notation used in this manual to
describe keystrokes is identical to the notation used within the Emacs
manual, and the GNU Readline manual. @xref{Characters, , Character
Conventions, emacs, the GNU Emacs Manual}, if you are unfamilar with the
notation.
The following table lists the basic cursor movement commands in Info.
Each entry consists of the key sequence you should type to execute the
cursor movement, the @code{M-x}@footnote{@code{M-x} is also a command; it
invokes @code{execute-extended-command}. @xref{M-x, , Executing an
extended command, emacs, the GNU Emacs Manual}, for more detailed
information.} command name (displayed in parentheses), and a short
description of what the command does. All of the cursor motion commands
can take an @dfn{numeric} argument (@pxref{Miscellaneous Commands,
@code{universal-argument}}), to find out how to supply them. With a
numeric argument, the motion commands are simply executed that
many times; for example, a numeric argument of 4 given to
@code{next-line} causes the cursor to move down 4 lines. With a
negative numeric argument, the motion is reversed; an argument of -4
given to the @code{next-line} command would cause the cursor to move
@emph{up} 4 lines.
@table @asis
@item @code{C-n} (@code{next-line})
@kindex C-n
@findex next-line
Moves the cursor down to the next line.
@item @code{C-p} (@code{prev-line})
@kindex C-p
@findex prev-line
Move the cursor up to the previous line.
@item @code{C-a} (@code{beginning-of-line})
@kindex C-a, in Info windows
@findex beginning-of-line
Move the cursor to the start of the current line.
@item @code{C-e} (@code{end-of-line})
@kindex C-e, in Info windows
@findex end-of-line
Moves the cursor to the end of the current line.
@item @code{C-f} (@code{forward-char})
@kindex C-f, in Info windows
@findex forward-char
Move the cursor forward a character.
@item @code{C-b} (@code{backward-char})
@kindex C-b, in Info windows
@findex backward-char
Move the cursor backward a character.
@item @code{M-f} (@code{forward-word})
@kindex M-f, in Info windows
@findex forward-word
Moves the cursor forward a word.
@item @code{M-b} (@code{backward-word})
@kindex M-b, in Info winows
@findex backward-word
Moves the cursor backward a word.
@item @code{M-<} (@code{beginning-of-node})
@itemx @code{b}
@kindex b, in Info winows
@kindex M-<
@findex beginning-of-node
Moves the cursor to the start of the current node.
@item @code{M->} (@code{end-of-node})
@kindex M->
@findex end-of-node
Moves the cursor to the end of the current node.
@item @code{M-r} (@code{move-to-window-line})
@kindex M-r
@findex move-to-window-line
Moves the cursor to a specific line of the window. Without a numeric
argument, @code{M-r} moves the cursor to the start of the line in the
center of the window. With a numeric argument of @var{n}, @code{M-r}
moves the cursor to the start of the @var{n}th line in the window.
@end table
@node Scrolling Commands
@chapter Moving Text Within a Window
@cindex scrolling
Sometimes you are looking at a screenful of text, and only part of the
current paragraph you are reading is visible on the screen. The
commands detailed in this section are used to shift which part of the
current node is visible on the screen.
@table @asis
@item @code{SPC} (@code{scroll-forward})
@itemx @code{C-v}
@kindex SPC, in Info windows
@kindex C-v
@findex scroll-forward
Shift the text in this window up. That is, show more of the node which
is currently below the bottom of the window. With a numeric argument,
show that many more lines at the bottom of the window; a numeric
argument of 4 would shift all of the text in the window up 4 lines
(discarding the top 4 lines), and show you four new lines at the bottom
of the window. Without a numeric argument, @key{SPC} takes the bottom
two lines of the window and places them at the top of the window,
redisplaying almost a completely new screenful of lines.
@item @code{DEL} (@code{scroll-backward})
@itemx @code{M-v}
@kindex DEL, in Info windows
@kindex M-v
@findex scroll-backward
Shift the text in this window down. The inverse of
@code{scroll-forward}.
@end table
@cindex scrolling through node structure
The @code{scroll-forward} and @code{scroll-backward} commands can also
move forward and backward through the node structure of the file. If
you press @key{SPC} while viewing the end of a node, or @key{DEL} while
viewing the beginning of a node, what happens is controlled by the
variable @code{scroll-behaviour}. @xref{Variables,
@code{scroll-behaviour}}, for more information.
@table @asis
@item @code{C-l} (@code{redraw-display})
@kindex C-l
@findex redraw-display
Redraw the display from scratch, or shift the line containing the cursor
to a specified location. With no numeric argument, @samp{C-l} clears
the screen, and then redraws its entire contents. Given a numeric
argument of @var{n}, the line containing the cursor is shifted so that
it is on the @var{n}th line of the window.
@item @code{C-x w} (@code{toggle-wrap})
@kindex C-w
@findex toggle-wrap
Toggles the state of line wrapping in the current window. Normally,
lines which are longer than the screen width @dfn{wrap}, i.e., they are
continued on the next line. Lines which wrap have a @samp{\} appearing
in the rightmost column of the screen. You can cause such lines to be
terminated at the rightmost column by changing the state of line
wrapping in the window with @code{C-x w}. When a line which needs more
space than one screen width to display is displayed, a @samp{$} appears
in the rightmost column of the screen, and the remainder of the line is
invisible.
@end table
@node Node Commands
@chapter Selecting a New Node
@cindex nodes, selection of
This section details the numerous Info commands which select a new node
to view in the current window.
The most basic node commands are @samp{n}, @samp{p}, @samp{u}, and
@samp{l}.
When you are viewing a node, the top line of the node contains some Info
@dfn{pointers} which describe where the next, previous, and up nodes
are. Info uses this line to move about the node structure of the file
when you use the following commands:
@table @asis
@item @code{n} (@code{next-node})
@kindex n
@findex next-node
Selects the `Next' node.
@item @code{p} (@code{prev-node})
@kindex p
@findex prev-node
Selects the `Prev' node.
@item @code{u} (@code{up-node})
@kindex u
@findex up-node
Selects the `Up' node.
@end table
You can easily select a node that you have already viewed in this window
by using the @samp{l} command -- this name stands for "last", and
actually moves through the list of already visited nodes for this
window. @samp{l} with a negative numeric argument moves forward through
the history of nodes for this window, so you can quickly step between
two adjacent (in viewing history) nodes.
@table @asis
@item @code{l} (@code{history-node})
@kindex l
@findex history-node
Selects the most recently selected node in this window.
@end table
Two additional commands make it easy to select the most commonly
selected nodes; they are @samp{t} and @samp{d}.
@table @asis
@item @code{t} (@code{top-node})
@kindex t
@findex top-node
Selects the node @samp{Top} in the current info file.
@item @code{d} (@code{dir-node})
@kindex d
@findex dir-node
Selects the directory node (i.e., the node @samp{(dir)}).
@end table
Here are some other commands which immediately result in the selection
of a different node in the current window:
@table @asis
@item @code{<} (@code{first-node})
@kindex <
@findex first-node
Selects the first node which appears in this file. This node is most
often @samp{Top}, but it doesn't have to be.
@item @code{>} (@code{last-node})
@kindex >
@findex last-node
Selects the last node which appears in this file.
@item @code{]} (@code{global-next-node})
@kindex ]
@findex global-next-node
Moves forward or down through node structure. If the node that you are
currently viewing has a @samp{Next} pointer, that node is selected.
Otherwise, if this node has a menu, the first menu item is selected. If
there is no @samp{Next} and no menu, the same process is tried with the
@samp{Up} node of this node.
@item @code{[} (@code{global-prev-node})
@kindex [
@findex global-prev-node
Moves backward or up through node structure. If the node that you are
currently viewing has a @samp{Prev} pointer, that node is selected.
Otherwise, if the node has an @samp{Up} pointer, that node is selected,
and if it has a menu, the last item in the menu is selected.
@end table
You can get the same behaviour as @code{global-next-node} and
@code{global-prev-node} while simply scrolling through the file with
@key{SPC} and @key{DEL}; @xref{Variables, @code{scroll-behaviour}}, for
more information.
@table @asis
@item @code{g} (@code{goto-node})
@kindex g
@findex goto-node
Reads the name of a node and selects it. No completion is done while
reading the node name, since the desired node may reside in a separate
file. The node must be typed exactly as it appears in the info file. A
file name may be included as with any node specification, for example
@example
@code{g(emacs)Buffers}
@end example
finds the node @samp{Buffers} in the info file @file{emacs}.
@item @code{C-x k} (@code{kill-node})
@kindex C-x k
@findex kill-node
Kills a node. The node name is prompted for in the echo area, with a
default of the current node. @dfn{Killing} a node means that Info tries
hard to forget about it, removing it from the list of history nodes kept
for the window where that node is found. Another node is selected in
the window which contained the killed node.
@item @code{C-x C-f} (@code{view-file})
@kindex C-x C-f
@findex view-file
Reads the name of a file and selects the entire file. The command
@example
@code{C-x C-f @var{filename}}
@end example
is equivalent to typing
@example
@code{g(@var{filename})*}
@end example
@item @code{C-x C-b} (@code{list-visited-nodes})
@kindex C-x C-b
@findex list-visited-nodes
Makes a window containing a menu of all of the currently visited nodes.
This window becomes the selected window, and you may use the standard
Info commands within it.
@item @code{C-x b} (@code{select-visited-node})
@kindex C-x b
@findex select-visited-node
Selects a node which has been previously visited in a visible window.
This is similar to @samp{C-x C-b} followed by @samp{m}, but no window is
created.
@end table
@node Searching Commands
@chapter Searching an Info File
@cindex searching
GNU Info allows you to search for a sequence of characters throughout an
entire info file, search through the indices of an info file, or find
areas within an info file which discuss a particular topic.
@table @asis
@item @code{s} (@code{search})
@kindex s
@findex search
Reads a string in the echo area and searches for it.
@item @code{C-s} (@code{isearch-forward})
@kindex C-s
@findex isearch-forward
Interactively searches forward through the info file for a string as you
type it.
@item @code{C-r} (@code{isearch-backward})
@kindex C-r
@findex isearch-backward
Interactively searches backward through the info file for a string as
you type it.
@item @code{i} (@code{index-search})
@kindex i
@findex index-search
Looks up a string in the indices for this info file, and selects a node
where the found index entry points to.
@item @code{,} (@code{next-index-match})
@kindex ,
@findex next-index-match
Moves to the node containing the next matching index item from the last
@samp{i} command.
@end table
The most basic searching command is @samp{s} (@code{search}). The
@samp{s} command prompts you for a string in the echo area, and then
searches the remainder of the info file for an ocurrence of that string.
If the string is found, the node containing it is selected, and the
cursor is left positioned at the start of the found string. Subsequent
@samp{s} commands show you the default search string within @samp{[} and
@samp{]}; pressing @key{RET} instead of typing a new string will use the
default search string.
@dfn{Incremental searching} is similar to basic searching, but the
string is looked up while you are typing it, instead of waiting until
the entire search string has been specified.
@node Xref Commands
@chapter Selecting Cross References
We have already discussed the @samp{Next}, @samp{Prev}, and @samp{Up}
pointers which appear at the top of a node. In addition to these
pointers, a node may contain other pointers which refer you to a
different node, perhaps in another info file. Such pointers are called
@dfn{cross references}, or @dfn{xrefs} for short.
@menu
* Parts of an Xref:: What a cross reference is made of.
* Selecting Xrefs:: Commands for selecting menu or note items.
@end menu
@node Parts of an Xref
@section Parts of an Xref
Cross references have two major parts: the first part is called the
@dfn{label}; it is the name that you can use to refer to the cross
reference, and the second is the @dfn{target}; it is the full name of
the node that the cross reference points to.
The target is separated from the label by a colon @samp{:}; first the
label appears, and then the target. For example, in the sample menu
cross reference below, the single colon separates the label from the
target.
@example
* Foo Label: Foo Target. More information about Foo.
@end example
Note the @samp{.} which ends the name of the target. The @samp{.} is
not part of the target; it serves only to let Info know where the target
name ends.
A shorthand way of specifying references allows two adjacent colons to
stand for a target name which is the same as the label name:
@example
* Foo Commands:: Commands pertaining to Foo.
@end example
In the above example, the name of the target is the same as the name of
the label, in this case @code{Foo Commands}.
You will normally see two types of cross references while viewing nodes:
@dfn{menu} references, and @dfn{note} references. Menu references
appear within a node's menu; they begin with a @samp{*} at the beginning
of a line, and continue with a label, a target, and a comment which
describes what the contents of the node pointed to contains.
Note references appear within the body of the node text; they begin with
@code{*Note}, and continue with a label and a target.
Like @samp{Next}, @samp{Prev} and @samp{Up} pointers, cross references
can point to any valid node. They are used to refer you to a place
where more detailed information can be found on a particular subject.
Here is a cross reference which points to a node within the Texinfo
documentation: @xref{xref, , Writing an Xref, texinfo, the Texinfo
Manual}, for more information on creating your own texinfo cross
references.
@node Selecting Xrefs
@section Selecting Xrefs
The following table lists the Info commands which operate on menu items.
@table @asis
@item @code{1} (@code{menu-digit})
@itemx @code{2} @dots{} @code{9}
@cindex 1 @dots{} 9, in Info windows
@kindex 1 @dots{} 9, in Info windows
@findex menu-digit
Within an Info window, pressing a single digit, (such as @samp{1}),
selects that menu item, and places its node in the current window.
For convenience, there is one exception; pressing @samp{0} selects the
@emph{last} item in the node's menu.
@item @code{0} (@code{last-menu-item})
@kindex 0, in Info windows
@findex last-menu-item
Select the last item in the current node's menu.
@item @code{m} (@code{menu-item})
@kindex m
@findex menu-item
Reads the name of a menu item in the echo area and selects its node.
Completion is available while reading the menu label.
@item @code{M-x find-menu}
@findex find-menu
Moves the cursor to the start of this node's menu.
@end table
This table lists the Info commands which operate on note cross references.
@table @asis
@item @code{f} (@code{xref-item})
@itemx @code{r}
@kindex f
@kindex r
@findex xref-item
Reads the name of a note cross reference in the echo area and selects
its node. Completion is available while reading the cross reference
label.
@end table
Finally, the next few commands operate on menu or note references alike:
@table @asis
@item @code{TAB} (@code{move-to-next-xref})
@kindex TAB, in Info windows
@findex move-to-next-xref
Moves the cursor to the start of the next nearest menu item or note
reference in this node. You can then use @key{RET}
(@code{select-reference-this-line} to select the menu or note reference.
@item @code{M-TAB} (@code{move-to-prev-xref})
@kindex M-TAB, in Info windows
@findex move-to-prev-xref
Moves the cursor the start of the nearest previous menu item or note
reference in this node.
@item @code{RET} (@code{select-reference-this-line})
@kindex RET, in Info windows
@findex select-reference-this-line
Selects the menu item or note reference appearing on this line.
@end table
@node Window Commands
@chapter Manipulating Multiple Windows
@cindex windows, manipulating
A @dfn{window} is a place to show the text of a node. Windows have a
view area where the text of the node is displayed, and an associated
@dfn{mode line}, which briefly describes the node being viewed.
GNU Info supports multiple windows appearing in a single screen; each
window is separated from the next by its modeline. At any time, there
is only one @dfn{active} window, that is, the window in which the cursor
appears. There are commands available for creating windows, changing
the size of windows, selecting which window is active, and for deleting
windows.
@menu
* The Mode Line:: What appears in the mode line?
* Basic Windows:: Manipulating windows in Info.
* The Echo Area:: Used for displaying errors and reading input.
@end menu
@node The Mode Line
@section The Mode Line
A @dfn{mode line} is a line of inverse video which appears at the bottom
of an info window. It describes the contents of the window just above
it; this information includes the name of the file and node appearing in
that window, the number of screen lines it takes to display the node,
and the percentage of text that is above the top of the window. It can
also tell you if the indirect tags table for this info file needs to be
updated, and whether or not the info file was compressed when stored on
disk.
Here is a sample mode line for a window containing an uncompressed file
named @file{dir}, showing the node @samp{Top}.
@example
-----Info: (dir)Top, 40 lines --Top---------------------------------------
^^ ^ ^^^ ^^
(file)Node #lines where
@end example
When a node comes from a file which is compressed on disk, this is
indicated in the mode line with two small @samp{z}'s. In addition, if
the info file containing the node has been split into subfiles, the name
of the subfile containing the node appears in the modeline as well:
@example
--zz-Info: (emacs)Top, 291 lines --Top-- Subfile: emacs-1.Z---------------
@end example
When Info makes a node internally, such that there is no corresponding
info file on disk, the name of the node is surrounded by asterisks
(@samp{*}). The name itself tells you what the contents of the window
are; the sample mode line below shows an internally constructed node
showing possible completions:
@example
-----Info: *Completions*, 7 lines --All-----------------------------------
@end example
@node Basic Windows
@section Window Commands
It can be convenient to view more than one node at a time. To allow
this, Info can display more than one @dfn{window}. Each window has its
own mode line (@pxref{The Mode Line}) and history of nodes viewed in that
window (@pxref{Node Commands, , @code{history-node}}).
@table @asis
@item @code{C-x o} (@code{next-window})
@cindex windows, selecting
@kindex C-x o
@findex next-window
Selects the next window on the screen. Note that the echo area can only be
selected if it is already in use, and you have left it temporarily.
Normally, @samp{C-x o} simply moves the cursor into the next window on
the screen, or if you are already within the last window, into the first
window on the screen. Given a numeric argument, @samp{C-x o} moves over
that many windows. A negative argument causes @samp{C-x o} to select
the previous window on the screen.
@item @code{M-x prev-window}
@findex prev-window
Selects the previous window on the screen. This is identical to
@samp{C-x o} with a negative argument.
@item @code{C-x 2} (@code{split-window})
@cindex windows, creating
@kindex C-x 2
@findex split-window
Splits the current window into two windows, both showing the same node.
Each window is one half the size of the original window, and the cursor
remains in the original window. The variable @code{automatic-tiling}
can cause all of the windows on the screen to be resized for you
automatically, please @pxref{Variables, , automatic-tiling} for more
information.
@item @code{C-x 0} (@code{delete-window})
@cindex windows, deleting
@kindex C-x 0
@findex delete-window
Deletes the current window from the screen. If you have made too many
windows and your screen appears cluttered, this is the way to get rid of
some of them.
@item @code{C-x 1} (@code{keep-one-window})
@kindex C-x 1
@findex keep-one-window
Deletes all of the windows excepting the current one.
@item @code{ESC C-v} (@code{scroll-other-window})
@kindex ESC C-v, in Info windows
@findex scroll-other-window
Scrolls the other window, in the same fashion that @samp{C-v} might
scroll the current window. Given a negative argument, the "other"
window is scrolled backward.
@item @code{C-x ^} (@code{grow-window})
@kindex C-x ^
@findex grow-window
Grows (or shrinks) the current window. Given a numeric argument, grows
the current window that many lines; with a negative numeric argument,
the window is shrunk instead.
@item @code{C-x t} (@code{tile-windows})
@cindex tiling
@kindex C-x t
@findex tile-windows
Divides the available screen space among all of the visible windows.
Each window is given an equal portion of the screen in which to display
its contents. The variable @code{automatic-tiling} can cause
@code{tile-windows} to be called when a window is created or deleted.
@xref{Variables, , @code{automatic-tiling}}.
@end table
@node The Echo Area
@section The Echo Area
@cindex echo area
The @dfn{echo area} is a one line window which appears at the bottom of
the screen. It is used to display informative or error messages, and to
read lines of input from you when that is necessary. Almost all of the
commands available in the echo area are identical to their Emacs
counterparts, so please refer to that documentation for greater depth of
discussion on the concepts of editing a line of text. The following
table briefly lists the commands that are available while input is being
read in the echo area:
@table @asis
@item @code{C-f} (@code{echo-area-forward})
@kindex C-f, in the echo area
@findex echo-area-forward
Moves forward a character.
@item @code{C-b} (@code{echo-area-backward})
@kindex C-b, in the echo area
@findex echo-area-backward
Moves backward a character.
@item @code{C-a} (@code{echo-area-beg-of-line})
@kindex C-a, in the echo area
@findex echo-area-beg-of-line
Moves to the start of the input line.
@item @code{C-e} (@code{echo-area-end-of-line})
@kindex C-e, in the echo area
@findex echo-area-end-of-line
Moves to the end of the input line.
@item @code{M-f} (@code{echo-area-forward-word})
@kindex M-f, in the echo area
@findex echo-area-forward-word
Moves forward a word.
@item @code{M-b} (@code{echo-area-backward-word})
@kindex M-b, in the echo area
@findex echo-area-backward-word
Moves backward a word.
@item @code{C-d} (@code{echo-area-delete})
@kindex C-d, in the echo area
@findex echo-area-delete
Deletes the character under the cursor.
@item @code{DEL} (@code{echo-area-rubout})
@kindex DEL, in the echo area
@findex echo-area-rubout
Deletes the character behind the cursor.
@item @code{C-g} (@code{echo-area-abort})
@kindex C-g, in the echo area
@findex echo-area-abort
Cancels or quits the current operation. If completion is being read,
@samp{C-g} discards the text of the input line which does not match any
completion. If the input line is empty, @samp{C-g} aborts the calling
function.
@item @code{RET} (@code{echo-area-newline})
@kindex RET, in the echo area
@findex echo-area-newline
Accepts (or forces completion of) the current input line.
@item @code{C-q} (@code{echo-area-quoted-insert})
@kindex C-q, in the echo area
@findex echo-area-quoted-insert
Inserts the next character verbatim. This is how you can insert control
characters into a search string, for example.
@item @var{printing character} (@code{echo-area-insert})
@kindex printing characters, in the echo area
@findex echo-area-insert
Inserts the character.
@item @code{M-TAB} (@code{echo-area-tab-insert})
@kindex M-TAB, in the echo area
@findex echo-area-tab-insert
Inserts a TAB character.
@item @code{C-t} (@code{echo-area-transpose-chars})
@kindex C-t, in the echo area
@findex echo-area-transpose-chars
Transposes the characters at the cursor.
@end table
The next group of commands deal with @dfn{killing}, and @dfn{yanking}
text. For an in depth discussion of killing and yanking,
@pxref{Killing, , Killing and Deleting, emacs, the GNU Emacs Manual}
@table @asis
@item @code{M-d} (@code{echo-area-kill-word})
@kindex M-d, in the echo area
@findex echo-area-kill-word
Kills the word following the cursor.
@item @code{M-DEL} (@code{echo-area-backward-kill-word})
@kindex M-DEL, in the echo area
@findex echo-area-backward-kill-word
Kills the word preceding the cursor.
@item @code{C-k} (@code{echo-area-kill-line})
@kindex C-k, in the echo area
@findex echo-area-kill-line
Kills the text from the cursor to the end of the line.
@item @code{C-x DEL} (@code{echo-area-backward-kill-line})
@kindex C-x DEL, in the echo area
@findex echo-area-backward-kill-line
Kills the text from the cursor to the beginning of the line.
@item @code{C-y} (@code{echo-area-yank})
@kindex C-y, in the echo area
@findex echo-area-yank
Yanks back the contents of the last kill.
@item @code{M-y} (@code{echo-area-yank-pop})
@kindex M-y, in the echo area
@findex echo-area-yank-pop
Yanks back a previous kill, removing the last yanked text first.
@end table
Sometimes when reading input in the echo area, the command that needed
input will only accept one of a list of several choices. The choices
represent the @dfn{possible completions}, and you must respond with one
of them. Since there are a limited number of responses you can make,
Info allows you to abbreviate what you type, only typing as much of the
response as is necessary to uniquely identify it. In addition, you can
request Info to fill in as much of the response as is possible; this
is called @dfn{completion}.
The following commands are available when completing in the echo area:
@table @asis
@item @code{TAB} (@code{echo-area-complete})
@itemx @code{SPC}
@kindex TAB, in the echo area
@kindex SPC, in the echo area
@findex echo-area-complete
Inserts as much of a completion as is possible.
@item @code{?} (@code{echo-area-possible-completions})
@kindex ?, in the echo area
@findex echo-area-possible-completions
Displays a window containing a list of the possible completions of what
you have typed so far. For example, if the available choices are:
@example
bar
foliate
food
forget
@end example
and you have typed an @samp{f}, followed by @samp{?}, the possible
completions would contain:
@example
foliate
food
forget
@end example
i.e., all of the choices which begin with @samp{f}. Pressing @key{SPC}
or @key{TAB} would result in @samp{fo} appearing in the echo area, since
all of the choices which begin with @samp{f} continue with @samp{o}.
Now, typing @samp{l} followed by @samp{TAB} results in @samp{foliate}
appearing in the echo area, since that is the only choice which begins
with @samp{fol}.
@item @code{ESC C-v} (@code{echo-area-scroll-completions-window})
@kindex ESC C-v, in the echo area
@findex echo-area-scroll-completions-window
Scrolls the completions window, if that is visible, or the "other"
window if not.
@end table
@node Printing Nodes
@chapter Printing Out Nodes
@cindex printing
You may wish to print out the contents of a node as a quick reference
document for later use. Info provides you with a command for doing
this. In general, we recommend that you use @TeX{} to format the
document and print sections of it, by running @code{tex} on the texinfo
source file.
@table @asis
@item @code{M-x print-node}
@findex print-node
@cindex INFO_PRINT_COMMAND, environment variable
Pipes the contents of the current node through the command in the
environment variable @code{INFO_PRINT_COMMAND}. If the variable doesn't
exist, the node is simply piped to @code{lpr}.
@end table
@node Miscellaneous Commands
@chapter Miscellaneous Commands
GNU Info contains several commands which self-document GNU Info:
@table @asis
@item @code{M-x describe-command}
@cindex functions, describing
@cindex commands, describing
@findex describe-command
Reads the name of an Info command in the echo area and then displays a
brief description of what that command does.
@item @code{M-x describe-key}
@cindex keys, describing
@findex describe-key
Reads a key sequence in the echo area, and then displays the name and
documentation of the Info command that the key sequence invokes.
@item @code{M-x describe-variable}
Reads the name of a variable in the echo area and then displays a brief
description of what the variable affects.
@item @code{M-x where-is}
@findex where-is
Reads the name of an Info command in the echo area, and then displays
a key sequence which can be typed in order to invoke that command.
@item @code{C-h} (@code{get-help-window})
@itemx @code{?}
@kindex C-h
@kindex ?, in Info windows
@findex get-help-window
Creates (or moves into) the window displaying @code{*Help*}, and places
a node containing a quick reference card into it. This window displays
the most concise information about GNU Info available.
@item @code{h} (@code{get-info-help-node})
@kindex h
@findex get-info-help-node
Tries hard to visit the node @code{(info)Help}. The info file
@file{info.texi} distributed with GNU Info contains this node. Of
course, the file must first be processed with @code{makeinfo}, and then
placed into the location of your info directory.
@end table
Here are the commands for creating a numeric argument:
@table @asis
@item @code{C-u} (@code{universal-argument})
@cindex numeric arguments
@kindex C-u
@findex universal-argument
Starts (or multiplies by 4) the current numeric argument. @samp{C-u} is
a good way to give a small numeric argument to cursor movement or
scrolling commands; @samp{C-u C-v} scrolls the screen 4 lines, while
@samp{C-u C-u C-n} moves the cursor down 16 lines.
@item @code{M-1} (@code{add-digit-to-numeric-arg})
@itemx @code{M-2} @dots{} @code{M-9}
@kindex M-1 @dots{} M-9
@findex add-digit-to-numeric-arg
Adds the digit value of the invoking key to the current numeric
argument. Once Info is reading a numeric argument, you may just type
the digits of the argument, without the Meta prefix. For example, you
might give @samp{C-l} a numeric argument of 32 by typing:
@example
@kbd{C-u 3 2 C-l}
@end example
or
@example
@kbd{M-3 2 C-l}
@end example
@end table
@samp{C-g} is used to abort the reading of a multi-character key
sequence, to cancel lengthy operations (such as multi-file searches) and
to cancel reading input in the echo area.
@table @asis
@item @code{C-g} (@code{abort-key})
@cindex cancelling typeahead
@cindex cancelling the current operation
@kindex C-g, in Info windows
@findex abort-key
Cancels current operation.
@end table
The @samp{q} command of Info simply quits running Info.
@table @asis
@item @code{q} (@code{quit})
@cindex quitting
@kindex q
@findex quit
Exits GNU Info.
@end table
If the operating system tells GNU Info that the screen is 60 lines tall,
and it is actually only 40 lines tall, here is a way to tell Info that
the operating system is correct.
@table @asis
@item @code{M-x set-screen-height}
@findex set-screen-height
@cindex screen, changing the height of
Reads a height value in the echo area and sets the height of the
displayed screen to that value.
@end table
Finally, Info provides a convenient way to display footnotes which might
be associated with the current node that you are viewing:
@table @asis
@item @code{ESC C-f} (@code{show-footnotes})
@kindex ESC C-f
@findex show-footnotes
@cindex footnotes, displaying
Shows the footnotes (if any) associated with the current node in another
window. You can have Info automatically display the footnotes
associated with a node when the node is selected by setting the variable
@code{automatic-footnotes}. @xref{Variables, , @code{automatic-footnotes}}.
@end table
@node Variables
@chapter Manipulating Variables
GNU Info contains several @dfn{variables} whose values are looked at by various
Info commands. You can change the values of these variables, and thus
change the behaviour of Info to more closely match your environment and
info file reading manner.
@table @asis
@item @code{M-x set-variable}
@cindex variables, setting
@findex set-variable
Reads the name of a variable, and the value for it, in the echo area and
then sets the variable to that value. Completion is available when
reading the variable name; often, completion is available when reading
the value to give to the variable, but that depends on the variable
itself. If a variable does @emph{not} supply multiple choices to
complete over, it expects a numeric value.
@item @code{M-x describe-variable}
@cindex variables, describing
@findex describe-variable
Reads the name of a variable in the echo area and then displays a brief
description of what the variable affects.
@end table
Here is a list of the variables that you can set in Info.
@table @code
@item automatic-footnotes
@vindex automatic-footnotes
When set to @code{On}, footnotes appear and disappear automatically.
This variable is @code{On} by default. When a node is selected, a
window containing the footnotes which appear in that node is created,
and the footnotes are displayed within the new window. The window that
Info creates to contain the footnotes is called @samp{*Footnotes*}. If
a node is selected which contains no footnotes, and a @samp{*Footnotes*}
window is on the screen, the @samp{*Footnotes*} window is deleted.
Footnote windows created in this fashion are not automatically tiled so
that they can use as little of the display as is possible.
@item automatic-tiling
@vindex automatic-tiling
When set to @code{On}, creating or deleting a window resizes other
windows. This variable is @code{Off} by default. Normally, typing
@samp{C-x 2} divides the current window into two equal parts. When
@code{automatic-tiling} is set to @code{On}, all of the windows are
resized automatically, keeping an equal number of lines visible in each
window. There are exceptions to the automatic tiling; specifically, the
windows @samp{*Completions*} and @samp{*Footnotes*} are @emph{not}
resized through automatic tiling; they remain their original size.
@item visible-bell
@vindex visible-bell
When set to @code{On}, GNU Info attempts to flash the screen instead of
ringing the bell. This variable is @code{Off} by default. Of course,
Info can only flash the screen if the terminal allows it; in the case
that the terminal does not allow it, the setting of this variable has no
effect. However, you can make Info perform quietly by setting the
@code{errors-ring-bell} variable to @code{Off}.
@item errors-ring-bell
@vindex errors-ring-bell
When set to @code{On}, errors cause the bell to ring. The default
setting of this variable is @code{On}.
@item gc-compressed-files
@vindex gc-compressed-files
When set to @code{On}, Info garbage collects files which had to be
uncompressed. The default value of this variable is @code{Off}.
Whenever a node is visited in Info, the info file containing that node
is read into core, and Info reads information about the tags and nodes
contained in that file. Once the tags information is read by Info, it
is never forgotten. However, the actual text of the nodes does not need
to remain in core unless a particular info window needs it. For
non-compressed files, the text of the nodes does not remain in core when
it is no longer in use. But de-compressing a file can be a time
consuming operation, and so Info tries hard not to do it twice.
@code{gc-compressed-files} tells Info it is okay to garbage collect the
text of the nodes of a file which was compressed on disk.
@item show-index-match
@vindex show-index-match
When set to @code{On}, the portion of the matched search string is
highlighted in the message which explains where the matched search
string was found. The default value of this variable is @code{On}.
When Info displays the location where an index match was found,
(@pxref{Searching Commands, , @code{next-index-match}}), the portion of the
string that you had typed is highlighted by displaying it in the inverse
case from its surrounding characters.
@item scroll-behaviour
@vindex scroll-behaviour
Controls what happens when forward scrolling is requested at the end of
a node, or when backward scrolling is requested at the beginning of a
node. The default value for this variable is @code{Continuous}. There
are three possible values for this variable:
@table @code
@item Continuous
Tries to get the first item in this node's menu, or failing that, the
@samp{Next} node, or failing that, the @samp{Next} of the @samp{Up}.
This behaviour is identical to using the @samp{]}
(@code{global-next-node}) and @samp{[} (@code{global-prev-node})
commands.
@item Next Only
Only tries to get the @samp{Next} node.
@item Page Only
Simply gives up, changing nothing. If @code{scroll-behaviour} is
@code{Page Only}, no scrolling command can change the node that is being
viewed.
@end table
@item scroll-step
@vindex scroll-step
The number of lines to scroll when the cursor moves out of the window.
Scrolling happens automatically if the cursor has moved out of the
visible portion of the node text when it is time to display. Usually
the scrolling is done so as to put the cursor on the center line of the
current window. However, if the variable @code{scroll-step} has a
nonzero value, Info attempts to scroll the node text by that many lines;
if that is enough to bring the cursor back into the window, that is what
is done. The default value of this variable is 0, thus placing the
cursor (and the text it is attached to) in the center of the window.
Setting this variable to 1 causes a kind of "smooth scrolling" which
some people prefer.
@item ISO-Latin
@cindex ISO Latin characters
@vindex ISO-Latin
When set to @code{On}, Info accepts and displays ISO Latin characters.
By default, Info assumes an ASCII character set. @code{ISO-Latin} tells
Info that it is running in an environment where the European standard
character set is in use, and allows you to input such characters to
Info, as well as display them.
@end table
@c The following node and its children are currently unfinished. Please feel
@c free to finish it!
@ifset NOTSET
@node Info for Sys Admins
@chapter Info for System Administrators
This text describes some common ways of setting up an Info heierarchy
from scratch, and details the various options that are available when
installing Info. This text is designed for the person who is installing
GNU Info on the system; although users may find the information present
in this section interesting, none of it is vital to understanding how to
use GNU Info.
@menu
* Setting the INFOPATH:: Where are my Info files kept?
* Editing the DIR node:: What goes in `DIR', and why?
* Storing Info files:: Alternate formats allow flexibilty in setups.
* Using `localdir':: Building DIR on the fly.
* Example setups:: Some common ways to origanize Info files.
@end menu
@node Setting the INFOPATH
@section Setting the INFOPATH
Where are my Info files kept?
@node Editing the DIR node
@section Editing the DIR node
What goes in `DIR', and why?
@node Storing Info files
@section Storing Info files
Alternate formats allow flexibilty in setups.
@node Using `localdir'
@section Using `localdir'
Building DIR on the fly.
@node Example setups
@section Example setups
Some common ways to origanize Info files.
@end ifset
@ifset STANDALONE
@node GNU Info Global Index
@appendix Global Index
@printindex cp
@end ifset
## 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:
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.
## 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)
/* 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 }
};
/* echo-area.c -- How to read a line in the echo area.
$Id: echo-area.c,v 1.1 1998/03/23 04:42:27 law Exp $
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). */
#include "info.h"
#if defined (FD_SET)
# if defined (hpux)
# define fd_set_cast(x) (int *)(x)
# else
# define fd_set_cast(x) (fd_set *)(x)
# endif /* !hpux */
#endif /* FD_SET */
/* Non-zero means that C-g was used to quit reading input. */
int info_aborted_echo_area = 0;
/* Non-zero means that the echo area is being used to read input. */
int echo_area_is_active = 0;
/* The address of the last command executed in the echo area. */
VFunction *ea_last_executed_command = (VFunction *)NULL;
/* Non-zero means that the last command executed while reading input
killed some text. */
int echo_area_last_command_was_kill = 0;
/* Variables which hold on to the current state of the input line. */
static char input_line[1 + EA_MAX_INPUT];
static char *input_line_prompt;
static int input_line_point;
static int input_line_beg;
static int input_line_end;
static NODE input_line_node = {
(char *)NULL, (char *)NULL, (char *)NULL, input_line, EA_MAX_INPUT, 0
};
static void echo_area_initialize_node ();
static void push_echo_area (), pop_echo_area ();
static int echo_area_stack_contains_completions_p ();
static void ea_kill_text ();
/* Non-zero means we force the user to complete. */
static int echo_area_must_complete_p = 0;
static int completions_window_p ();
/* If non-null, this is a window which was specifically created to display
possible completions output. We remember it so we can delete it when
appropriate. */
static WINDOW *echo_area_completions_window = (WINDOW *)NULL;
/* Variables which keep track of the window which was active prior to
entering the echo area. */
static WINDOW *calling_window = (WINDOW *)NULL;
static NODE *calling_window_node = (NODE *)NULL;
static long calling_window_point = 0;
static long calling_window_pagetop = 0;
/* Remember the node and pertinent variables of the calling window. */
static void
remember_calling_window (window)
WINDOW *window;
{
/* Only do this if the calling window is not the completions window, or,
if it is the completions window and there is no other window. */
if (!completions_window_p (window) ||
((window == windows) && !(window->next)))
{
calling_window = window;
calling_window_node = window->node;
calling_window_point = window->point;
calling_window_pagetop = window->pagetop;
}
}
/* Restore the caller's window so that it shows the node that it was showing
on entry to info_read_xxx_echo_area (). */
static void
restore_calling_window ()
{
register WINDOW *win, *compwin = (WINDOW *)NULL;
/* If the calling window is still visible, and it is the window that
we used for completions output, then restore the calling window. */
for (win = windows; win; win = win->next)
{
if (completions_window_p (win))
compwin = win;
if (win == calling_window && win == compwin)
{
window_set_node_of_window (calling_window, calling_window_node);
calling_window->point = calling_window_point;
calling_window->pagetop = calling_window_pagetop;
compwin = (WINDOW *)NULL;
break;
}
}
/* Delete the completions window if it is still present, it isn't the
last window on the screen, and there aren't any prior echo area reads
pending which created a completions window. */
if (compwin)
{
if ((compwin != windows || windows->next) &&
!echo_area_stack_contains_completions_p ())
{
WINDOW *next;
int pagetop, start, end, amount;
next = compwin->next;
if (next)
{
start = next->first_row;
end = start + next->height;
amount = - (compwin->height + 1);
pagetop = next->pagetop;
}
info_delete_window_internal (compwin);
/* This is not necessary because info_delete_window_internal ()
calls echo_area_inform_of_deleted_window (), which does the
right thing. */
#if defined (UNNECESSARY)
echo_area_completions_window = (WINDOW *)NULL;
#endif /* UNNECESSARY */
if (next)
{
display_scroll_display (start, end, amount);
next->pagetop = pagetop;
display_update_display (windows);
}
}
}
}
/* Set up a new input line with PROMPT. */
static void
initialize_input_line (prompt)
char *prompt;
{
input_line_prompt = prompt;
if (prompt)
strcpy (input_line, prompt);
else
input_line[0] = '\0';
input_line_beg = input_line_end = input_line_point = strlen (prompt);
}
static char *
echo_area_after_read ()
{
char *return_value;
if (info_aborted_echo_area)
{
info_aborted_echo_area = 0;
return_value = (char *)NULL;
}
else
{
if (input_line_beg == input_line_end)
return_value = xstrdup ("");
else
{
int line_len = input_line_end - input_line_beg;
return_value = (char *) xmalloc (1 + line_len);
strncpy (return_value, &input_line[input_line_beg], line_len);
return_value[line_len] = '\0';
}
}
return (return_value);
}
/* 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. */
char *
info_read_in_echo_area (window, prompt)
WINDOW *window;
char *prompt;
{
char *line;
/* If the echo area is already active, remember the current state. */
if (echo_area_is_active)
push_echo_area ();
/* Initialize our local variables. */
initialize_input_line (prompt);
/* Initialize the echo area for the first (but maybe not the last) time. */
echo_area_initialize_node ();
/* Save away the original node of this window, and the window itself,
so echo area commands can temporarily use this window. */
remember_calling_window (window);
/* Let the rest of Info know that the echo area is active. */
echo_area_is_active++;
active_window = the_echo_area;
/* Read characters in the echo area. */
info_read_and_dispatch ();
echo_area_is_active--;
/* Restore the original active window and show point in it. */
active_window = calling_window;
restore_calling_window ();
display_cursor_at_point (active_window);
fflush (stdout);
/* Get the value of the line. */
line = echo_area_after_read ();
/* If there is a previous loop waiting for us, restore it now. */
if (echo_area_is_active)
pop_echo_area ();
/* Return the results to the caller. */
return (line);
}
/* (re) Initialize the echo area node. */
static void
echo_area_initialize_node ()
{
register int i;
for (i = input_line_end; i < sizeof (input_line); i++)
input_line[i] = ' ';
input_line[i - 1] = '\n';
window_set_node_of_window (the_echo_area, &input_line_node);
input_line[input_line_end] = '\n';
}
/* Prepare to read characters in the echo area. This can initialize the
echo area node, but its primary purpose is to side effect the input
line buffer contents. */
void
echo_area_prep_read ()
{
if (the_echo_area->node != &input_line_node)
echo_area_initialize_node ();
the_echo_area->point = input_line_point;
input_line[input_line_end] = '\n';
display_update_one_window (the_echo_area);
display_cursor_at_point (active_window);
}
/* **************************************************************** */
/* */
/* Echo Area Movement Commands */
/* */
/* **************************************************************** */
DECLARE_INFO_COMMAND (ea_forward, _("Move forward a character"))
{
if (count < 0)
ea_backward (window, -count, key);
else
{
input_line_point += count;
if (input_line_point > input_line_end)
input_line_point = input_line_end;
}
}
DECLARE_INFO_COMMAND (ea_backward, _("Move backward a character"))
{
if (count < 0)
ea_forward (window, -count, key);
else
{
input_line_point -= count;
if (input_line_point < input_line_beg)
input_line_point = input_line_beg;
}
}
DECLARE_INFO_COMMAND (ea_beg_of_line, _("Move to the start of this line"))
{
input_line_point = input_line_beg;
}
DECLARE_INFO_COMMAND (ea_end_of_line, _("Move to the end of this line"))
{
input_line_point = input_line_end;
}
#define alphabetic(c) (islower (c) || isupper (c) || isdigit (c))
/* Move forward a word in the input line. */
DECLARE_INFO_COMMAND (ea_forward_word, _("Move forward a word"))
{
int c;
if (count < 0)
ea_backward_word (window, -count, key);
else
{
while (count--)
{
if (input_line_point == input_line_end)
return;
/* If we are not in a word, move forward until we are in one.
Then, move forward until we hit a non-alphabetic character. */
c = input_line[input_line_point];
if (!alphabetic (c))
{
while (++input_line_point < input_line_end)
{
c = input_line[input_line_point];
if (alphabetic (c))
break;
}
}
if (input_line_point == input_line_end)
return;
while (++input_line_point < input_line_end)
{
c = input_line[input_line_point];
if (!alphabetic (c))
break;
}
}
}
}
DECLARE_INFO_COMMAND (ea_backward_word, _("Move backward a word"))
{
int c;
if (count < 0)
ea_forward_word (window, -count, key);
else
{
while (count--)
{
if (input_line_point == input_line_beg)
return;
/* Like ea_forward_word (), except that we look at the
characters just before point. */
c = input_line[input_line_point - 1];
if (!alphabetic (c))
{
while ((--input_line_point) != input_line_beg)
{
c = input_line[input_line_point - 1];
if (alphabetic (c))
break;
}
}
while (input_line_point != input_line_beg)
{
c = input_line[input_line_point - 1];
if (!alphabetic (c))
break;
else
--input_line_point;
}
}
}
}
DECLARE_INFO_COMMAND (ea_delete, _("Delete the character under the cursor"))
{
register int i;
if (count < 0)
ea_rubout (window, -count, key);
else
{
if (input_line_point == input_line_end)
return;
if (info_explicit_arg || count > 1)
{
int orig_point;
orig_point = input_line_point;
ea_forward (window, count, key);
ea_kill_text (orig_point, input_line_point);
input_line_point = orig_point;
}
else
{
for (i = input_line_point; i < input_line_end; i++)
input_line[i] = input_line[i + 1];
input_line_end--;
}
}
}
DECLARE_INFO_COMMAND (ea_rubout, _("Delete the character behind the cursor"))
{
if (count < 0)
ea_delete (window, -count, key);
else
{
int start;
if (input_line_point == input_line_beg)
return;
start = input_line_point;
ea_backward (window, count, key);
if (info_explicit_arg || count > 1)
ea_kill_text (start, input_line_point);
else
ea_delete (window, count, key);
}
}
DECLARE_INFO_COMMAND (ea_abort, _("Cancel or quit operation"))
{
/* If any text, just discard it, and restore the calling window's node.
If no text, quit. */
if (input_line_end != input_line_beg)
{
terminal_ring_bell ();
input_line_end = input_line_point = input_line_beg;
if (calling_window->node != calling_window_node)
restore_calling_window ();
}
else
info_aborted_echo_area = 1;
}
DECLARE_INFO_COMMAND (ea_newline, _("Accept (or force completion of) this line"))
{
/* Stub does nothing. Simply here to see if it has been executed. */
}
DECLARE_INFO_COMMAND (ea_quoted_insert, _("Insert next character verbatim"))
{
unsigned char character;
character = info_get_another_input_char ();
ea_insert (window, count, character);
}
DECLARE_INFO_COMMAND (ea_insert, _("Insert this character"))
{
register int i;
if ((input_line_end + 1) == EA_MAX_INPUT)
{
terminal_ring_bell ();
return;
}
for (i = input_line_end + 1; i != input_line_point; i--)
input_line[i] = input_line[i - 1];
input_line[input_line_point] = key;
input_line_point++;
input_line_end++;
}
DECLARE_INFO_COMMAND (ea_tab_insert, _("Insert a TAB character"))
{
ea_insert (window, count, '\t');
}
/* Transpose the characters at point. If point is at the end of the line,
then transpose the characters before point. */
DECLARE_INFO_COMMAND (ea_transpose_chars, _("Transpose characters at point"))
{
/* Handle conditions that would make it impossible to transpose
characters. */
if (!count || !input_line_point || (input_line_end - input_line_beg) < 2)
return;
while (count)
{
int t;
if (input_line_point == input_line_end)
{
t = input_line[input_line_point - 1];
input_line[input_line_point - 1] = input_line[input_line_point - 2];
input_line[input_line_point - 2] = t;
}
else
{
t = input_line[input_line_point];
input_line[input_line_point] = input_line[input_line_point - 1];
input_line[input_line_point - 1] = t;
if (count < 0 && input_line_point != input_line_beg)
input_line_point--;
else
input_line_point++;
}
if (count < 0)
count++;
else
count--;
}
}
/* **************************************************************** */
/* */
/* Echo Area Killing and Yanking */
/* */
/* **************************************************************** */
static char **kill_ring = (char **)NULL;
static int kill_ring_index = 0; /* Number of kills appearing in KILL_RING. */
static int kill_ring_slots = 0; /* Number of slots allocated to KILL_RING. */
static int kill_ring_loc = 0; /* Location of current yank pointer. */
/* The largest number of kills that we remember at one time. */
static int max_retained_kills = 15;
DECLARE_INFO_COMMAND (ea_yank, _("Yank back the contents of the last kill"))
{
register int i;
register char *text;
if (!kill_ring_index)
{
inform_in_echo_area (_("Kill ring is empty"));
return;
}
text = kill_ring[kill_ring_loc];
for (i = 0; text[i]; i++)
ea_insert (window, 1, text[i]);
}
/* If the last command was yank, or yank_pop, and the text just before
point is identical to the current kill item, then delete that text
from the line, rotate the index down, and yank back some other text. */
DECLARE_INFO_COMMAND (ea_yank_pop, _("Yank back a previous kill"))
{
register int len;
if (((ea_last_executed_command != ea_yank) &&
(ea_last_executed_command != ea_yank_pop)) ||
(kill_ring_index == 0))
return;
len = strlen (kill_ring[kill_ring_loc]);
/* Delete the last yanked item from the line. */
{
register int i, counter;
counter = input_line_end - input_line_point;
for (i = input_line_point - len; counter; i++, counter--)
input_line[i] = input_line[i + len];
input_line_end -= len;
input_line_point -= len;
}
/* Get a previous kill, and yank that. */
kill_ring_loc--;
if (kill_ring_loc < 0)
kill_ring_loc = kill_ring_index - 1;
ea_yank (window, count, key);
}
/* Delete the text from point to end of line. */
DECLARE_INFO_COMMAND (ea_kill_line, _("Kill to the end of the line"))
{
if (count < 0)
{
ea_kill_text (input_line_point, input_line_beg);
input_line_point = input_line_beg;
}
else
ea_kill_text (input_line_point, input_line_end);
}
/* Delete the text from point to beg of line. */
DECLARE_INFO_COMMAND (ea_backward_kill_line,
_("Kill to the beginning of the line"))
{
if (count < 0)
ea_kill_text (input_line_point, input_line_end);
else
{
ea_kill_text (input_line_point, input_line_beg);
input_line_point = input_line_beg;
}
}
/* Delete from point to the end of the current word. */
DECLARE_INFO_COMMAND (ea_kill_word, _("Kill the word following the cursor"))
{
int orig_point = input_line_point;
if (count < 0)
ea_backward_kill_word (window, -count, key);
else
{
ea_forward_word (window, count, key);
if (input_line_point != orig_point)
ea_kill_text (orig_point, input_line_point);
input_line_point = orig_point;
}
}
/* Delete from point to the start of the current word. */
DECLARE_INFO_COMMAND (ea_backward_kill_word,
_("Kill the word preceding the cursor"))
{
int orig_point = input_line_point;
if (count < 0)
ea_kill_word (window, -count, key);
else
{
ea_backward_word (window, count, key);
if (input_line_point != orig_point)
ea_kill_text (orig_point, input_line_point);
}
}
/* The way to kill something. This appends or prepends to the last
kill, if the last command was a kill command. If FROM is less
than TO, then the killed text is appended to the most recent kill,
otherwise it is prepended. If the last command was not a kill command,
then a new slot is made for this kill. */
static void
ea_kill_text (from, to)
int from, to;
{
register int i, counter, distance;
int killing_backwards, slot;
char *killed_text;
killing_backwards = (from > to);
/* If killing backwards, reverse the values of FROM and TO. */
if (killing_backwards)
{
int temp = from;
from = to;
to = temp;
}
/* Remember the text that we are about to delete. */
distance = to - from;
killed_text = (char *)xmalloc (1 + distance);
strncpy (killed_text, &input_line[from], distance);
killed_text[distance] = '\0';
/* Actually delete the text from the line. */
counter = input_line_end - to;
for (i = from; counter; i++, counter--)
input_line[i] = input_line[i + distance];
input_line_end -= distance;
/* If the last command was a kill, append or prepend the killed text to
the last command's killed text. */
if (echo_area_last_command_was_kill)
{
char *old, *new;
slot = kill_ring_loc;
old = kill_ring[slot];
new = (char *)xmalloc (1 + strlen (old) + strlen (killed_text));
if (killing_backwards)
{
/* Prepend TEXT to current kill. */
strcpy (new, killed_text);
strcat (new, old);
}
else
{
/* Append TEXT to current kill. */
strcpy (new, old);
strcat (new, killed_text);
}
free (old);
free (killed_text);
kill_ring[slot] = new;
}
else
{
/* Try to store the kill in a new slot, unless that would cause there
to be too many remembered kills. */
slot = kill_ring_index;
if (slot == max_retained_kills)
slot = 0;
if (slot + 1 > kill_ring_slots)
kill_ring = (char **) xrealloc
(kill_ring,
(kill_ring_slots += max_retained_kills) * sizeof (char *));
if (slot != kill_ring_index)
free (kill_ring[slot]);
else
kill_ring_index++;
kill_ring[slot] = killed_text;
kill_ring_loc = slot;
}
/* Notice that the last command was a kill. */
echo_area_last_command_was_kill++;
}
/* **************************************************************** */
/* */
/* Echo Area Completion */
/* */
/* **************************************************************** */
/* Pointer to an array of REFERENCE to complete over. */
static REFERENCE **echo_area_completion_items = (REFERENCE **)NULL;
/* Sorted array of REFERENCE * which is the possible completions found in
the variable echo_area_completion_items. If there is only one element,
it is the only possible completion. */
static REFERENCE **completions_found = (REFERENCE **)NULL;
static int completions_found_index = 0;
static int completions_found_slots = 0;
/* The lowest common denominator found while completing. */
static REFERENCE *LCD_completion;
/* Internal functions used by the user calls. */
static void build_completions (), completions_must_be_rebuilt ();
/* Variable which holds the output of completions. */
static NODE *possible_completions_output_node = (NODE *)NULL;
static char *compwin_name = "*Completions*";
/* Return non-zero if WINDOW is a window used for completions output. */
static int
completions_window_p (window)
WINDOW *window;
{
int result = 0;
if (internal_info_node_p (window->node) &&
(strcmp (window->node->nodename, compwin_name) == 0))
result = 1;
return (result);
}
/* Workhorse for completion readers. If FORCE is non-zero, the user cannot
exit unless the line read completes, or is empty. */
char *
info_read_completing_internal (window, prompt, completions, force)
WINDOW *window;
char *prompt;
REFERENCE **completions;
int force;
{
char *line;
/* If the echo area is already active, remember the current state. */
if (echo_area_is_active)
push_echo_area ();
echo_area_must_complete_p = force;
/* Initialize our local variables. */
initialize_input_line (prompt);
/* Initialize the echo area for the first (but maybe not the last) time. */
echo_area_initialize_node ();
/* Save away the original node of this window, and the window itself,
so echo area commands can temporarily use this window. */
remember_calling_window (window);
/* Save away the list of items to complete over. */
echo_area_completion_items = completions;
completions_must_be_rebuilt ();
active_window = the_echo_area;
echo_area_is_active++;
/* Read characters in the echo area. */
while (1)
{
info_read_and_dispatch ();
line = echo_area_after_read ();
/* Force the completion to take place if the user hasn't accepted
a default or aborted, and if FORCE is active. */
if (force && line && *line && completions)
{
register int i;
build_completions ();
/* If there is only one completion, then make the line be that
completion. */
if (completions_found_index == 1)
{
free (line);
line = xstrdup (completions_found[0]->label);
break;
}
/* If one of the completions matches exactly, then that is okay, so
return the current line. */
for (i = 0; i < completions_found_index; i++)
if (strcasecmp (completions_found[i]->label, line) == 0)
{
free (line);
line = xstrdup (completions_found[i]->label);
break;
}
/* If no match, go back and try again. */
if (i == completions_found_index)
{
inform_in_echo_area (_("Not complete"));
continue;
}
}
break;
}
echo_area_is_active--;
/* Restore the original active window and show point in it. */
active_window = calling_window;
restore_calling_window ();
display_cursor_at_point (active_window);
fflush (stdout);
echo_area_completion_items = (REFERENCE **)NULL;
completions_must_be_rebuilt ();
/* If there is a previous loop waiting for us, restore it now. */
if (echo_area_is_active)
pop_echo_area ();
return (line);
}
/* Read a line in the echo area with completion over COMPLETIONS. */
char *
info_read_completing_in_echo_area (window, prompt, completions)
WINDOW *window;
char *prompt;
REFERENCE **completions;
{
return (info_read_completing_internal (window, prompt, completions, 1));
}
/* Read a line in the echo area allowing completion over COMPLETIONS, but
not requiring it. */
char *
info_read_maybe_completing (window, prompt, completions)
WINDOW *window;
char *prompt;
REFERENCE **completions;
{
return (info_read_completing_internal (window, prompt, completions, 0));
}
DECLARE_INFO_COMMAND (ea_possible_completions, _("List possible completions"))
{
if (!echo_area_completion_items)
{
ea_insert (window, count, key);
return;
}
build_completions ();
if (!completions_found_index)
{
terminal_ring_bell ();
inform_in_echo_area (_("No completions"));
}
else if ((completions_found_index == 1) && (key != '?'))
{
inform_in_echo_area (_("Sole completion"));
}
else
{
register int i, l;
int limit, count, max_label = 0;
initialize_message_buffer ();
printf_to_message_buffer
(_("There %s %d "), completions_found_index == 1 ? _("is") : _("are"),
completions_found_index);
printf_to_message_buffer
(_("completion%s:\n"), completions_found_index == 1 ? "" : "s");
/* Find the maximum length of a label. */
for (i = 0; i < completions_found_index; i++)
{
int len = strlen (completions_found[i]->label);
if (len > max_label)
max_label = len;
}
max_label += 4;
/* Find out how many columns we should print in. */
limit = calling_window->width / max_label;
if (limit != 1 && (limit * max_label == calling_window->width))
limit--;
/* Avoid a possible floating exception. If max_label > width then
the limit will be 0 and a divide-by-zero fault will result. */
if (limit == 0)
limit = 1;
/* How many iterations of the printing loop? */
count = (completions_found_index + (limit - 1)) / limit;
/* Watch out for special case. If the number of completions is less
than LIMIT, then just do the inner printing loop. */
if (completions_found_index < limit)
count = 1;
/* Print the sorted items, up-and-down alphabetically. */
for (i = 0; i < count; i++)
{
register int j;
for (j = 0, l = i; j < limit; j++)
{
if (l >= completions_found_index)
break;
else
{
char *label;
int printed_length, k;
label = completions_found[l]->label;
printed_length = strlen (label);
printf_to_message_buffer ("%s", label);
if (j + 1 < limit)
{
for (k = 0; k < max_label - printed_length; k++)
printf_to_message_buffer (" ");
}
}
l += count;
}
printf_to_message_buffer ("\n");
}
/* Make a new node to hold onto possible completions. Don't destroy
dangling pointers. */
{
NODE *temp;
temp = message_buffer_to_node ();
add_gcable_pointer (temp->contents);
name_internal_node (temp, compwin_name);
possible_completions_output_node = temp;
}
/* Find a suitable window for displaying the completions output.
First choice is an existing window showing completions output.
If there is only one window, and it is large, make another
(smaller) window, and use that one. Otherwise, use the caller's
window. */
{
WINDOW *compwin;
compwin = get_internal_info_window (compwin_name);
if (!compwin)
{
/* If we can split the window to display most of the completion
items, then do so. */
if (calling_window->height > (count * 2)
&& calling_window->height / 2 >= WINDOW_MIN_SIZE)
{
int start, pagetop;
#ifdef SPLIT_BEFORE_ACTIVE
int end;
#endif
active_window = calling_window;
/* Perhaps we can scroll this window on redisplay. */
start = calling_window->first_row;
pagetop = calling_window->pagetop;
compwin =
window_make_window (possible_completions_output_node);
active_window = the_echo_area;
window_change_window_height
(compwin, -(compwin->height - (count + 2)));
window_adjust_pagetop (calling_window);
remember_calling_window (calling_window);
#if defined (SPLIT_BEFORE_ACTIVE)
/* If the pagetop hasn't changed, scrolling the calling
window is a reasonable thing to do. */
if (pagetop == calling_window->pagetop)
{
end = start + calling_window->height;
display_scroll_display
(start, end, calling_window->prev->height + 1);
}
#else /* !SPLIT_BEFORE_ACTIVE */
/* If the pagetop has changed, set the new pagetop here. */
if (pagetop != calling_window->pagetop)
{
int newtop = calling_window->pagetop;
calling_window->pagetop = pagetop;
set_window_pagetop (calling_window, newtop);
}
#endif /* !SPLIT_BEFORE_ACTIVE */
echo_area_completions_window = compwin;
remember_window_and_node (compwin, compwin->node);
}
else
compwin = calling_window;
}
if (compwin->node != possible_completions_output_node)
{
window_set_node_of_window
(compwin, possible_completions_output_node);
remember_window_and_node (compwin, compwin->node);
}
display_update_display (windows);
}
}
}
DECLARE_INFO_COMMAND (ea_complete, _("Insert completion"))
{
if (!echo_area_completion_items)
{
ea_insert (window, count, key);
return;
}
/* If KEY is SPC, and we are not forcing completion to take place, simply
insert the key. */
if (!echo_area_must_complete_p && key == SPC)
{
ea_insert (window, count, key);
return;
}
if (ea_last_executed_command == ea_complete)
{
/* If the keypress is a SPC character, and we have already tried
completing once, and there are several completions, then check
the batch of completions to see if any continue with a space.
If there are some, insert the space character and continue. */
if (key == SPC && completions_found_index > 1)
{
register int i, offset;
offset = input_line_end - input_line_beg;
for (i = 0; i < completions_found_index; i++)
if (completions_found[i]->label[offset] == ' ')
break;
if (completions_found[i])
ea_insert (window, 1, ' ');
else
{
ea_possible_completions (window, count, key);
return;
}
}
else
{
ea_possible_completions (window, count, key);
return;
}
}
input_line_point = input_line_end;
build_completions ();
if (!completions_found_index)
terminal_ring_bell ();
else if (LCD_completion->label[0] == '\0')
ea_possible_completions (window, count, key);
else
{
register int i;
input_line_point = input_line_end = input_line_beg;
for (i = 0; LCD_completion->label[i]; i++)
ea_insert (window, 1, LCD_completion->label[i]);
}
}
/* Utility REFERENCE used to store possible LCD. */
static REFERENCE LCD_reference = { (char *)NULL, (char *)NULL, (char *)NULL };
static void remove_completion_duplicates ();
/* Variables which remember the state of the most recent call
to build_completions (). */
static char *last_completion_request = (char *)NULL;
static REFERENCE **last_completion_items = (REFERENCE **)NULL;
/* How to tell the completion builder to reset internal state. */
static void
completions_must_be_rebuilt ()
{
maybe_free (last_completion_request);
last_completion_request = (char *)NULL;
last_completion_items = (REFERENCE **)NULL;
}
/* Build a list of possible completions from echo_area_completion_items,
and the contents of input_line. */
static void
build_completions ()
{
register int i, len;
register REFERENCE *entry;
char *request;
int informed_of_lengthy_job = 0;
/* If there are no items to complete over, exit immediately. */
if (!echo_area_completion_items)
{
completions_found_index = 0;
LCD_completion = (REFERENCE *)NULL;
return;
}
/* Check to see if this call to build completions is the same as the last
call to build completions. */
len = input_line_end - input_line_beg;
request = (char *)xmalloc (1 + len);
strncpy (request, &input_line[input_line_beg], len);
request[len] = '\0';
if (last_completion_request && last_completion_items &&
last_completion_items == echo_area_completion_items &&
(strcmp (last_completion_request, request) == 0))
{
free (request);
return;
}
maybe_free (last_completion_request);
last_completion_request = request;
last_completion_items = echo_area_completion_items;
/* Always start at the beginning of the list. */
completions_found_index = 0;
LCD_completion = (REFERENCE *)NULL;
for (i = 0; (entry = echo_area_completion_items[i]); i++)
{
if (strncasecmp (request, entry->label, len) == 0)
add_pointer_to_array (entry, completions_found_index,
completions_found, completions_found_slots,
20, REFERENCE *);
if (!informed_of_lengthy_job && completions_found_index > 100)
{
informed_of_lengthy_job = 1;
window_message_in_echo_area (_("Building completions..."));
}
}
if (!completions_found_index)
return;
/* Sort and prune duplicate entries from the completions array. */
remove_completion_duplicates ();
/* If there is only one completion, just return that. */
if (completions_found_index == 1)
{
LCD_completion = completions_found[0];
return;
}
/* Find the least common denominator. */
{
long shortest = 100000;
for (i = 1; i < completions_found_index; i++)
{
register int j;
int c1, c2;
for (j = 0;
(c1 = info_tolower (completions_found[i - 1]->label[j])) &&
(c2 = info_tolower (completions_found[i]->label[j]));
j++)
if (c1 != c2)
break;
if (shortest > j)
shortest = j;
}
maybe_free (LCD_reference.label);
LCD_reference.label = (char *)xmalloc (1 + shortest);
strncpy (LCD_reference.label, completions_found[0]->label, shortest);
LCD_reference.label[shortest] = '\0';
LCD_completion = &LCD_reference;
}
if (informed_of_lengthy_job)
echo_area_initialize_node ();
}
/* Function called by qsort. */
static int
compare_references (entry1, entry2)
REFERENCE **entry1, **entry2;
{
return (strcasecmp ((*entry1)->label, (*entry2)->label));
}
/* Prune duplicate entries from COMPLETIONS_FOUND. */
static void
remove_completion_duplicates ()
{
register int i, j;
REFERENCE **temp;
int newlen;
if (!completions_found_index)
return;
/* Sort the items. */
qsort (completions_found, completions_found_index, sizeof (REFERENCE *),
compare_references);
for (i = 0, newlen = 1; i < completions_found_index - 1; i++)
{
if (strcmp (completions_found[i]->label,
completions_found[i + 1]->label) == 0)
completions_found[i] = (REFERENCE *)NULL;
else
newlen++;
}
/* We have marked all the dead slots. It is faster to copy the live slots
twice than to prune the dead slots one by one. */
temp = (REFERENCE **)xmalloc ((1 + newlen) * sizeof (REFERENCE *));
for (i = 0, j = 0; i < completions_found_index; i++)
if (completions_found[i])
temp[j++] = completions_found[i];
for (i = 0; i < newlen; i++)
completions_found[i] = temp[i];
completions_found[i] = (REFERENCE *)NULL;
completions_found_index = newlen;
free (temp);
}
/* Scroll the "other" window. If there is a window showing completions, scroll
that one, otherwise scroll the window which was active on entering the read
function. */
DECLARE_INFO_COMMAND (ea_scroll_completions_window, _("Scroll the completions window"))
{
WINDOW *compwin;
int old_pagetop;
compwin = get_internal_info_window (compwin_name);
if (!compwin)
compwin = calling_window;
old_pagetop = compwin->pagetop;
/* Let info_scroll_forward () do the work, and print any messages that
need to be displayed. */
info_scroll_forward (compwin, count, key);
}
/* Function which gets called when an Info window is deleted while the
echo area is active. WINDOW is the window which has just been deleted. */
void
echo_area_inform_of_deleted_window (window)
WINDOW *window;
{
/* If this is the calling_window, forget what we remembered about it. */
if (window == calling_window)
{
if (active_window != the_echo_area)
remember_calling_window (active_window);
else
remember_calling_window (windows);
}
/* If this window was the echo_area_completions_window, then notice that
the window has been deleted. */
if (window == echo_area_completions_window)
echo_area_completions_window = (WINDOW *)NULL;
}
/* **************************************************************** */
/* */
/* Pushing and Popping the Echo Area */
/* */
/* **************************************************************** */
/* Push and Pop the echo area. */
typedef struct {
char *line;
char *prompt;
REFERENCE **comp_items;
int point, beg, end;
int must_complete;
NODE node;
WINDOW *compwin;
} PUSHED_EA;
static PUSHED_EA **pushed_echo_areas = (PUSHED_EA **)NULL;
static int pushed_echo_areas_index = 0;
static int pushed_echo_areas_slots = 0;
/* Pushing the echo_area has a side effect of zeroing the completion_items. */
static void
push_echo_area ()
{
PUSHED_EA *pushed;
pushed = (PUSHED_EA *)xmalloc (sizeof (PUSHED_EA));
pushed->line = xstrdup (input_line);
pushed->prompt = input_line_prompt;
pushed->point = input_line_point;
pushed->beg = input_line_beg;
pushed->end = input_line_end;
pushed->node = input_line_node;
pushed->comp_items = echo_area_completion_items;
pushed->must_complete = echo_area_must_complete_p;
pushed->compwin = echo_area_completions_window;
add_pointer_to_array (pushed, pushed_echo_areas_index, pushed_echo_areas,
pushed_echo_areas_slots, 4, PUSHED_EA *);
echo_area_completion_items = (REFERENCE **)NULL;
}
static void
pop_echo_area ()
{
PUSHED_EA *popped;
popped = pushed_echo_areas[--pushed_echo_areas_index];
strcpy (input_line, popped->line);
free (popped->line);
input_line_prompt = popped->prompt;
input_line_point = popped->point;
input_line_beg = popped->beg;
input_line_end = popped->end;
input_line_node = popped->node;
echo_area_completion_items = popped->comp_items;
echo_area_must_complete_p = popped->must_complete;
echo_area_completions_window = popped->compwin;
completions_must_be_rebuilt ();
/* If the completion window no longer exists, forget about it. */
if (echo_area_completions_window)
{
register WINDOW *win;
for (win = windows; win; win = win->next)
if (echo_area_completions_window == win)
break;
/* If the window wasn't found, then it has already been deleted. */
if (!win)
echo_area_completions_window = (WINDOW *)NULL;
}
free (popped);
}
/* Returns non-zero if any of the prior stacked calls to read in the echo
area produced a completions window. */
static int
echo_area_stack_contains_completions_p ()
{
register int i;
for (i = 0; i < pushed_echo_areas_index; i++)
if (pushed_echo_areas[i]->compwin)
return (1);
return (0);
}
/* **************************************************************** */
/* */
/* Error Messages While Reading in Echo Area */
/* */
/* **************************************************************** */
#if defined (HAVE_SYS_TIME_H)
# include <sys/time.h>
# define HAVE_STRUCT_TIMEVAL
#endif /* HAVE_SYS_TIME_H */
static void
pause_or_input ()
{
#if defined (FD_SET)
struct timeval timer;
fd_set readfds;
int ready;
FD_ZERO (&readfds);
FD_SET (fileno (stdin), &readfds);
timer.tv_sec = 2;
timer.tv_usec = 750;
ready = select (fileno (stdin) + 1, &readfds, (fd_set *) NULL,
(fd_set *) NULL, &timer);
#endif /* FD_SET */
}
/* Print MESSAGE right after the end of the current line, and wait
for input or 2.75 seconds, whichever comes first. Then flush the
informational message that was printed. */
void
inform_in_echo_area (message)
char *message;
{
register int i;
char *text;
text = xstrdup (message);
for (i = 0; text[i] && text[i] != '\n'; i++);
text[i] = '\0';
echo_area_initialize_node ();
sprintf (&input_line[input_line_end], "%s[%s]\n",
echo_area_is_active ? " ": "", text);
free (text);
the_echo_area->point = input_line_point;
display_update_one_window (the_echo_area);
display_cursor_at_point (active_window);
fflush (stdout);
pause_or_input ();
echo_area_initialize_node ();
}
/* 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 */
/* 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 ();
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-HvardAksnes <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.
# 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:
GNU gettext library from gettext-0.10.27
/* 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
/* 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
/* 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
/* 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
/* 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;
}
/* 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
/* 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
/* 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 */
/* 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 */
/* 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;
}
/* 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);
}
/* 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
/* 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
# 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
#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));
/* 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;
}
/* 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
}
# 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
/* 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
# 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
## 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
# 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:
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.)
/* 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 */
/* Getopt for GNU.
NOTE: getopt is now part of the C library, so if you don't know what
"Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
before changing it!
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 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. */
/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
Ditto for AIX 3.2 and <stdlib.h>. */
#ifndef _NO_PROTO
#define _NO_PROTO
#endif
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#if !defined (__STDC__) || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
#ifndef const
#define const
#endif
#endif
#include <stdio.h>
/* Comment out all this code if we are using the GNU C Library, and are not
actually compiling the library itself. This code is part of the GNU C
Library, but also included in many other GNU distributions. Compiling
and linking in this code is a waste when using the GNU C library
(especially if it is a shared library). Rather than having every GNU
program understand `configure --with-gnu-libc' and omit the object files,
it is simpler to just do this in the source for each such file. */
#define GETOPT_INTERFACE_VERSION 2
#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
#include <gnu-versions.h>
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
#define ELIDE_CODE
#endif
#endif
#ifndef ELIDE_CODE
/* This needs to come after some library #include
to get __GNU_LIBRARY__ defined. */
#ifdef __GNU_LIBRARY__
/* Don't include stdlib.h for non-GNU C libraries because some of them
contain conflicting prototypes for getopt. */
#include <stdlib.h>
#include <unistd.h>
#endif /* GNU C library. */
#ifdef VMS
#include <unixlib.h>
#if HAVE_STRING_H - 0
#include <string.h>
#endif
#endif
#if defined (WIN32) && !defined (__CYGWIN32__)
/* It's not Unix, really. See? Capital letters. */
#include <windows.h>
#define getpid() GetCurrentProcessId()
#endif
#ifndef _
/* This is for other GNU distributions with internationalized messages.
When compiling libc, the _ macro is predefined. */
#ifdef HAVE_LIBINTL_H
# include <libintl.h>
# define _(msgid) gettext (msgid)
#else
# define _(msgid) (msgid)
#endif
#endif
/* This version of `getopt' appears to the caller like standard Unix `getopt'
but it behaves differently for the user, since it allows the user
to intersperse the options with the other arguments.
As `getopt' works, it permutes the elements of ARGV so that,
when it is done, all the options precede everything else. Thus
all application programs are extended to handle flexible argument order.
Setting the environment variable POSIXLY_CORRECT disables permutation.
Then the behavior is completely standard.
GNU application programs can use a third alternative mode in which
they can distinguish the relative order of options and other arguments. */
#include "getopt.h"
/* For communication from `getopt' to the caller.
When `getopt' finds an option that takes an argument,
the argument value is returned here.
Also, when `ordering' is RETURN_IN_ORDER,
each non-option ARGV-element is returned here. */
char *optarg = NULL;
/* Index in ARGV of the next element to be scanned.
This is used for communication to and from the caller
and for communication between successive calls to `getopt'.
On entry to `getopt', zero means this is the first call; initialize.
When `getopt' returns -1, this is the index of the first of the
non-option elements that the caller should itself scan.
Otherwise, `optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
/* 1003.2 says this must be 1 before any call. */
int optind = 1;
/* Formerly, initialization of getopt depended on optind==0, which
causes problems with re-calling getopt as programs generally don't
know that. */
int __getopt_initialized = 0;
/* The next char to be scanned in the option-element
in which the last option character we returned was found.
This allows us to pick up the scan where we left off.
If this is zero, or a null string, it means resume the scan
by advancing to the next ARGV-element. */
static char *nextchar;
/* Callers store zero here to inhibit the error message
for unrecognized options. */
int opterr = 1;
/* Set to an option character which was unrecognized.
This must be initialized on some systems to avoid linking in the
system's own getopt implementation. */
int optopt = '?';
/* Describe how to deal with options that follow non-option ARGV-elements.
If the caller did not specify anything,
the default is REQUIRE_ORDER if the environment variable
POSIXLY_CORRECT is defined, PERMUTE otherwise.
REQUIRE_ORDER means don't recognize them as options;
stop option processing when the first non-option is seen.
This is what Unix does.
This mode of operation is selected by either setting the environment
variable POSIXLY_CORRECT, or using `+' as the first character
of the list of option characters.
PERMUTE is the default. We permute the contents of ARGV as we scan,
so that eventually all the non-options are at the end. This allows options
to be given in any order, even with programs that were not written to
expect this.
RETURN_IN_ORDER is an option available to programs that were written
to expect options and other ARGV-elements in any order and that care about
the ordering of the two. We describe each non-option ARGV-element
as if it were the argument of an option with character code 1.
Using `-' as the first character of the list of option characters
selects this mode of operation.
The special argument `--' forces an end of option-scanning regardless
of the value of `ordering'. In the case of RETURN_IN_ORDER, only
`--' can cause `getopt' to return -1 with `optind' != ARGC. */
static enum
{
REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
} ordering;
/* Value of POSIXLY_CORRECT environment variable. */
static char *posixly_correct;
#ifdef __GNU_LIBRARY__
/* We want to avoid inclusion of string.h with non-GNU libraries
because there are many ways it can cause trouble.
On some systems, it contains special magic macros that don't work
in GCC. */
#include <string.h>
#define my_index strchr
#else
/* Avoid depending on library functions or files
whose names are inconsistent. */
char *getenv ();
static char *
my_index (str, chr)
const char *str;
int chr;
{
while (*str)
{
if (*str == chr)
return (char *) str;
str++;
}
return 0;
}
/* If using GCC, we can safely declare strlen this way.
If not using GCC, it is ok not to declare it. */
#ifdef __GNUC__
/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
That was relevant to code that was here before. */
#if !defined (__STDC__) || !__STDC__
/* gcc with -traditional declares the built-in strlen to return int,
and has done so at least since version 2.4.5. -- rms. */
extern int strlen (const char *);
#endif /* not __STDC__ */
#endif /* __GNUC__ */
#endif /* not __GNU_LIBRARY__ */
/* Handle permutation of arguments. */
/* Describe the part of ARGV that contains non-options that have
been skipped. `first_nonopt' is the index in ARGV of the first of them;
`last_nonopt' is the index after the last of them. */
static int first_nonopt;
static int last_nonopt;
#ifdef _LIBC
/* Bash 2.0 gives us an environment variable containing flags
indicating ARGV elements that should not be considered arguments. */
/* Defined in getopt_init.c */
extern char *__getopt_nonoption_flags;
static int nonoption_flags_max_len;
static int nonoption_flags_len;
static int original_argc;
static char *const *original_argv;
extern pid_t __libc_pid;
/* Make sure the environment variable bash 2.0 puts in the environment
is valid for the getopt call we must make sure that the ARGV passed
to getopt is that one passed to the process. */
static void
__attribute__ ((unused))
store_args_and_env (int argc, char *const *argv)
{
/* XXX This is no good solution. We should rather copy the args so
that we can compare them later. But we must not use malloc(3). */
original_argc = argc;
original_argv = argv;
}
text_set_element (__libc_subinit, store_args_and_env);
# define SWAP_FLAGS(ch1, ch2) \
if (nonoption_flags_len > 0) \
{ \
char __tmp = __getopt_nonoption_flags[ch1]; \
__getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \
__getopt_nonoption_flags[ch2] = __tmp; \
}
#else /* !_LIBC */
# define SWAP_FLAGS(ch1, ch2)
#endif /* _LIBC */
/* Exchange two adjacent subsequences of ARGV.
One subsequence is elements [first_nonopt,last_nonopt)
which contains all the non-options that have been skipped so far.
The other is elements [last_nonopt,optind), which contains all
the options processed since those non-options were skipped.
`first_nonopt' and `last_nonopt' are relocated so that they describe
the new indices of the non-options in ARGV after they are moved. */
#if defined (__STDC__) && __STDC__
static void exchange (char **);
#endif
static void
exchange (argv)
char **argv;
{
int bottom = first_nonopt;
int middle = last_nonopt;
int top = optind;
char *tem;
/* Exchange the shorter segment with the far end of the longer segment.
That puts the shorter segment into the right place.
It leaves the longer segment in the right place overall,
but it consists of two parts that need to be swapped next. */
#ifdef _LIBC
/* First make sure the handling of the `__getopt_nonoption_flags'
string can work normally. Our top argument must be in the range
of the string. */
if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
{
/* We must extend the array. The user plays games with us and
presents new arguments. */
char *new_str = malloc (top + 1);
if (new_str == NULL)
nonoption_flags_len = nonoption_flags_max_len = 0;
else
{
memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len);
memset (&new_str[nonoption_flags_max_len], '\0',
top + 1 - nonoption_flags_max_len);
nonoption_flags_max_len = top + 1;
__getopt_nonoption_flags = new_str;
}
}
#endif
while (top > middle && middle > bottom)
{
if (top - middle > middle - bottom)
{
/* Bottom segment is the short one. */
int len = middle - bottom;
register int i;
/* Swap it with the top part of the top segment. */
for (i = 0; i < len; i++)
{
tem = argv[bottom + i];
argv[bottom + i] = argv[top - (middle - bottom) + i];
argv[top - (middle - bottom) + i] = tem;
SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
}
/* Exclude the moved bottom segment from further swapping. */
top -= len;
}
else
{
/* Top segment is the short one. */
int len = top - middle;
register int i;
/* Swap it with the bottom part of the bottom segment. */
for (i = 0; i < len; i++)
{
tem = argv[bottom + i];
argv[bottom + i] = argv[middle + i];
argv[middle + i] = tem;
SWAP_FLAGS (bottom + i, middle + i);
}
/* Exclude the moved top segment from further swapping. */
bottom += len;
}
}
/* Update records for the slots the non-options now occupy. */
first_nonopt += (optind - last_nonopt);
last_nonopt = optind;
}
/* Initialize the internal data when the first call is made. */
#if defined (__STDC__) && __STDC__
static const char *_getopt_initialize (int, char *const *, const char *);
#endif
static const char *
_getopt_initialize (argc, argv, optstring)
int argc;
char *const *argv;
const char *optstring;
{
/* Start processing options with ARGV-element 1 (since ARGV-element 0
is the program name); the sequence of previously skipped
non-option ARGV-elements is empty. */
first_nonopt = last_nonopt = optind;
nextchar = NULL;
posixly_correct = getenv ("POSIXLY_CORRECT");
/* Determine how to handle the ordering of options and nonoptions. */
if (optstring[0] == '-')
{
ordering = RETURN_IN_ORDER;
++optstring;
}
else if (optstring[0] == '+')
{
ordering = REQUIRE_ORDER;
++optstring;
}
else if (posixly_correct != NULL)
ordering = REQUIRE_ORDER;
else
ordering = PERMUTE;
#ifdef _LIBC
if (posixly_correct == NULL
&& argc == original_argc && argv == original_argv)
{
if (nonoption_flags_max_len == 0)
{
if (__getopt_nonoption_flags == NULL
|| __getopt_nonoption_flags[0] == '\0')
nonoption_flags_max_len = -1;
else
{
const char *orig_str = __getopt_nonoption_flags;
int len = nonoption_flags_max_len = strlen (orig_str);
if (nonoption_flags_max_len < argc)
nonoption_flags_max_len = argc;
__getopt_nonoption_flags =
(char *) malloc (nonoption_flags_max_len);
if (__getopt_nonoption_flags == NULL)
nonoption_flags_max_len = -1;
else
{
memcpy (__getopt_nonoption_flags, orig_str, len);
memset (&__getopt_nonoption_flags[len], '\0',
nonoption_flags_max_len - len);
}
}
}
nonoption_flags_len = nonoption_flags_max_len;
}
else
nonoption_flags_len = 0;
#endif
return optstring;
}
/* Scan elements of ARGV (whose length is ARGC) for option characters
given in OPTSTRING.
If an element of ARGV starts with '-', and is not exactly "-" or "--",
then it is an option element. The characters of this element
(aside from the initial '-') are option characters. If `getopt'
is called repeatedly, it returns successively each of the option characters
from each of the option elements.
If `getopt' finds another option character, it returns that character,
updating `optind' and `nextchar' so that the next call to `getopt' can
resume the scan with the following option character or ARGV-element.
If there are no more option characters, `getopt' returns -1.
Then `optind' is the index in ARGV of the first ARGV-element
that is not an option. (The ARGV-elements have been permuted
so that those that are not options now come last.)
OPTSTRING is a string containing the legitimate option characters.
If an option character is seen that is not listed in OPTSTRING,
return '?' after printing an error message. If you set `opterr' to
zero, the error message is suppressed but we still return '?'.
If a char in OPTSTRING is followed by a colon, that means it wants an arg,
so the following text in the same ARGV-element, or the text of the following
ARGV-element, is returned in `optarg'. Two colons mean an option that
wants an optional arg; if there is text in the current ARGV-element,
it is returned in `optarg', otherwise `optarg' is set to zero.
If OPTSTRING starts with `-' or `+', it requests different methods of
handling the non-option ARGV-elements.
See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
Long-named options begin with `--' instead of `-'.
Their names may be abbreviated as long as the abbreviation is unique
or is an exact match for some defined option. If they have an
argument, it follows the option name in the same ARGV-element, separated
from the option name by a `=', or else the in next ARGV-element.
When `getopt' finds a long-named option, it returns 0 if that option's
`flag' field is nonzero, the value of the option's `val' field
if the `flag' field is zero.
The elements of ARGV aren't really const, because we permute them.
But we pretend they're const in the prototype to be compatible
with other systems.
LONGOPTS is a vector of `struct option' terminated by an
element containing a name which is zero.
LONGIND returns the index in LONGOPT of the long-named option found.
It is only valid when a long-named option has been found by the most
recent call.
If LONG_ONLY is nonzero, '-' as well as '--' can introduce
long-named options. */
int
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
int argc;
char *const *argv;
const char *optstring;
const struct option *longopts;
int *longind;
int long_only;
{
optarg = NULL;
if (optind == 0 || !__getopt_initialized)
{
if (optind == 0)
optind = 1; /* Don't scan ARGV[0], the program name. */
optstring = _getopt_initialize (argc, argv, optstring);
__getopt_initialized = 1;
}
/* Test whether ARGV[optind] points to a non-option argument.
Either it does not have option syntax, or there is an environment flag
from the shell indicating it is not an option. The later information
is only used when the used in the GNU libc. */
#ifdef _LIBC
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|| (optind < nonoption_flags_len \
&& __getopt_nonoption_flags[optind] == '1'))
#else
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
#endif
if (nextchar == NULL || *nextchar == '\0')
{
/* Advance to the next ARGV-element. */
/* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
moved back by the user (who may also have changed the arguments). */
if (last_nonopt > optind)
last_nonopt = optind;
if (first_nonopt > optind)
first_nonopt = optind;
if (ordering == PERMUTE)
{
/* If we have just processed some options following some non-options,
exchange them so that the options come first. */
if (first_nonopt != last_nonopt && last_nonopt != optind)
exchange ((char **) argv);
else if (last_nonopt != optind)
first_nonopt = optind;
/* Skip any additional non-options
and extend the range of non-options previously skipped. */
while (optind < argc && NONOPTION_P)
optind++;
last_nonopt = optind;
}
/* The special ARGV-element `--' means premature end of options.
Skip it like a null option,
then exchange with previous non-options as if it were an option,
then skip everything else like a non-option. */
if (optind != argc && !strcmp (argv[optind], "--"))
{
optind++;
if (first_nonopt != last_nonopt && last_nonopt != optind)
exchange ((char **) argv);
else if (first_nonopt == last_nonopt)
first_nonopt = optind;
last_nonopt = argc;
optind = argc;
}
/* If we have done all the ARGV-elements, stop the scan
and back over any non-options that we skipped and permuted. */
if (optind == argc)
{
/* Set the next-arg-index to point at the non-options
that we previously skipped, so the caller will digest them. */
if (first_nonopt != last_nonopt)
optind = first_nonopt;
return -1;
}
/* If we have come to a non-option and did not permute it,
either stop the scan or describe it to the caller and pass it by. */
if (NONOPTION_P)
{
if (ordering == REQUIRE_ORDER)
return -1;
optarg = argv[optind++];
return 1;
}
/* We have found another option-ARGV-element.
Skip the initial punctuation. */
nextchar = (argv[optind] + 1
+ (longopts != NULL && argv[optind][1] == '-'));
}
/* Decode the current option-ARGV-element. */
/* Check whether the ARGV-element is a long option.
If long_only and the ARGV-element has the form "-f", where f is
a valid short option, don't consider it an abbreviated form of
a long option that starts with f. Otherwise there would be no
way to give the -f short option.
On the other hand, if there's a long option "fubar" and
the ARGV-element is "-fu", do consider that an abbreviation of
the long option, just like "--fu", and not "-f" with arg "u".
This distinction seems to be the most useful approach. */
if (longopts != NULL
&& (argv[optind][1] == '-'
|| (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
{
char *nameend;
const struct option *p;
const struct option *pfound = NULL;
int exact = 0;
int ambig = 0;
int indfound = -1;
int option_index;
for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
/* Do nothing. */ ;
/* Test all long options for either exact match
or abbreviated matches. */
for (p = longopts, option_index = 0; p->name; p++, option_index++)
if (!strncmp (p->name, nextchar, nameend - nextchar))
{
if ((unsigned int) (nameend - nextchar)
== (unsigned int) strlen (p->name))
{
/* Exact match found. */
pfound = p;
indfound = option_index;
exact = 1;
break;
}
else if (pfound == NULL)
{
/* First nonexact match found. */
pfound = p;
indfound = option_index;
}
else
/* Second or later nonexact match found. */
ambig = 1;
}
if (ambig && !exact)
{
if (opterr)
fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
argv[0], argv[optind]);
nextchar += strlen (nextchar);
optind++;
optopt = 0;
return '?';
}
if (pfound != NULL)
{
option_index = indfound;
optind++;
if (*nameend)
{
/* Don't test has_arg with >, because some C compilers don't
allow it to be used on enums. */
if (pfound->has_arg)
optarg = nameend + 1;
else
{
if (opterr)
if (argv[optind - 1][1] == '-')
/* --option */
fprintf (stderr,
_("%s: option `--%s' doesn't allow an argument\n"),
argv[0], pfound->name);
else
/* +option or -option */
fprintf (stderr,
_("%s: option `%c%s' doesn't allow an argument\n"),
argv[0], argv[optind - 1][0], pfound->name);
nextchar += strlen (nextchar);
optopt = pfound->val;
return '?';
}
}
else if (pfound->has_arg == 1)
{
if (optind < argc)
optarg = argv[optind++];
else
{
if (opterr)
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
nextchar += strlen (nextchar);
optopt = pfound->val;
return optstring[0] == ':' ? ':' : '?';
}
}
nextchar += strlen (nextchar);
if (longind != NULL)
*longind = option_index;
if (pfound->flag)
{
*(pfound->flag) = pfound->val;
return 0;
}
return pfound->val;
}
/* Can't find it as a long option. If this is not getopt_long_only,
or the option starts with '--' or is not a valid short
option, then it's an error.
Otherwise interpret it as a short option. */
if (!long_only || argv[optind][1] == '-'
|| my_index (optstring, *nextchar) == NULL)
{
if (opterr)
{
if (argv[optind][1] == '-')
/* --option */
fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
argv[0], nextchar);
else
/* +option or -option */
fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
argv[0], argv[optind][0], nextchar);
}
nextchar = (char *) "";
optind++;
optopt = 0;
return '?';
}
}
/* Look at and handle the next short option-character. */
{
char c = *nextchar++;
char *temp = my_index (optstring, c);
/* Increment `optind' when we start to process its last character. */
if (*nextchar == '\0')
++optind;
if (temp == NULL || c == ':')
{
if (opterr)
{
if (posixly_correct)
/* 1003.2 specifies the format of this message. */
fprintf (stderr, _("%s: illegal option -- %c\n"),
argv[0], c);
else
fprintf (stderr, _("%s: invalid option -- %c\n"),
argv[0], c);
}
optopt = c;
return '?';
}
/* Convenience. Treat POSIX -W foo same as long option --foo */
if (temp[0] == 'W' && temp[1] == ';')
{
char *nameend;
const struct option *p;
const struct option *pfound = NULL;
int exact = 0;
int ambig = 0;
int indfound = 0;
int option_index;
/* This is an option that requires an argument. */
if (*nextchar != '\0')
{
optarg = nextchar;
/* If we end this ARGV-element by taking the rest as an arg,
we must advance to the next element now. */
optind++;
}
else if (optind == argc)
{
if (opterr)
{
/* 1003.2 specifies the format of this message. */
fprintf (stderr, _("%s: option requires an argument -- %c\n"),
argv[0], c);
}
optopt = c;
if (optstring[0] == ':')
c = ':';
else
c = '?';
return c;
}
else
/* We already incremented `optind' once;
increment it again when taking next ARGV-elt as argument. */
optarg = argv[optind++];
/* optarg is now the argument, see if it's in the
table of longopts. */
for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
/* Do nothing. */ ;
/* Test all long options for either exact match
or abbreviated matches. */
for (p = longopts, option_index = 0; p->name; p++, option_index++)
if (!strncmp (p->name, nextchar, nameend - nextchar))
{
if ((unsigned int) (nameend - nextchar) == strlen (p->name))
{
/* Exact match found. */
pfound = p;
indfound = option_index;
exact = 1;
break;
}
else if (pfound == NULL)
{
/* First nonexact match found. */
pfound = p;
indfound = option_index;
}
else
/* Second or later nonexact match found. */
ambig = 1;
}
if (ambig && !exact)
{
if (opterr)
fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
argv[0], argv[optind]);
nextchar += strlen (nextchar);
optind++;
return '?';
}
if (pfound != NULL)
{
option_index = indfound;
if (*nameend)
{
/* Don't test has_arg with >, because some C compilers don't
allow it to be used on enums. */
if (pfound->has_arg)
optarg = nameend + 1;
else
{
if (opterr)
fprintf (stderr, _("\
%s: option `-W %s' doesn't allow an argument\n"),
argv[0], pfound->name);
nextchar += strlen (nextchar);
return '?';
}
}
else if (pfound->has_arg == 1)
{
if (optind < argc)
optarg = argv[optind++];
else
{
if (opterr)
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
nextchar += strlen (nextchar);
return optstring[0] == ':' ? ':' : '?';
}
}
nextchar += strlen (nextchar);
if (longind != NULL)
*longind = option_index;
if (pfound->flag)
{
*(pfound->flag) = pfound->val;
return 0;
}
return pfound->val;
}
nextchar = NULL;
return 'W'; /* Let the application handle it. */
}
if (temp[1] == ':')
{
if (temp[2] == ':')
{
/* This is an option that accepts an argument optionally. */
if (*nextchar != '\0')
{
optarg = nextchar;
optind++;
}
else
optarg = NULL;
nextchar = NULL;
}
else
{
/* This is an option that requires an argument. */
if (*nextchar != '\0')
{
optarg = nextchar;
/* If we end this ARGV-element by taking the rest as an arg,
we must advance to the next element now. */
optind++;
}
else if (optind == argc)
{
if (opterr)
{
/* 1003.2 specifies the format of this message. */
fprintf (stderr,
_("%s: option requires an argument -- %c\n"),
argv[0], c);
}
optopt = c;
if (optstring[0] == ':')
c = ':';
else
c = '?';
}
else
/* We already incremented `optind' once;
increment it again when taking next ARGV-elt as argument. */
optarg = argv[optind++];
nextchar = NULL;
}
}
return c;
}
}
int
getopt (argc, argv, optstring)
int argc;
char *const *argv;
const char *optstring;
{
return _getopt_internal (argc, argv, optstring,
(const struct option *) 0,
(int *) 0,
0);
}
#endif /* Not ELIDE_CODE. */
#ifdef TEST
/* Compile with -DTEST to make an executable for use in testing
the above definition of `getopt'. */
int
main (argc, argv)
int argc;
char **argv;
{
int c;
int digit_optind = 0;
while (1)
{
int this_option_optind = optind ? optind : 1;
c = getopt (argc, argv, "abc:d:0123456789");
if (c == -1)
break;
switch (c)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (digit_optind != 0 && digit_optind != this_option_optind)
printf ("digits occur in two different argv-elements.\n");
digit_optind = this_option_optind;
printf ("option %c\n", c);
break;
case 'a':
printf ("option a\n");
break;
case 'b':
printf ("option b\n");
break;
case 'c':
printf ("option c with value `%s'\n", optarg);
break;
case '?':
break;
default:
printf ("?? getopt returned character code 0%o ??\n", c);
}
}
if (optind < argc)
{
printf ("non-option ARGV-elements: ");
while (optind < argc)
printf ("%s ", argv[optind++]);
printf ("\n");
}
exit (0);
}
#endif /* TEST */
/* 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 */
/* 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 */
/* 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;
}
/* 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++;
}
/* 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;
}
/*
* 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];
}
/* 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 */
/* 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 */
/* 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);
}
## 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
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.
#! /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
#! /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
Thu Sep 4 15:01:33 1997 Jeffrey A Law (law@cygnus.com)
* Makefile.in.in (install-info): Add dummy target.
# 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:
# 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
/* 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},
};
# German messages for the GNU Texinfo package.
# Copyright (C) 1996 Free Software Foundation, Inc.
# Karl Eichwalder <ke@ke.central.de>, 1996.
#
msgid ""
msgstr ""
"Project-Id-Version: GNU Texinfo 3.9bPOT-Creation-Date: 1997-07-11 "
"11:21-0400PO-Revision-Date: 1996-12-17 21:27 METLast-Translator: Karl "
"Eichwalder <ke@ke.central.de>Language-Team: German <de@li.org>MIME-Version: "
"1.0Content-Type: text/plain; charset=ISO-8859-1Content-Transfer-Encoding: "
"8-bitPOT-Creation-Date: 1997-07-13 17:12-0400POT-Creation-Date: 1997-07-13 "
"17:12-0400POT-Creation-Date: 1997-07-13 17:12-0400POT-Creation-Date: "
"1997-07-13 17:12-0400POT-Creation-Date: 1997-07-15 "
"14:50-0400POT-Creation-Date: 1997-07-15 14:50-0400POT-Creation-Date: "
"1997-07-15 15:35-0400POT-Creation-Date: 1997-07-15 "
"15:35-0400POT-Creation-Date: 1997-07-17 17:50-0400POT-Creation-Date: "
"1997-07-18 10:40-0400POT-Creation-Date: 1997-07-19 "
"17:19-0400POT-Creation-Date: 1997-07-20 08:19-0400POT-Creation-Date: "
"1997-07-20 08:19-0400POT-Creation-Date: 1997-07-20 "
"08:19-0400POT-Creation-Date: 1997-07-25 17:57-0400POT-Creation-Date: "
"1997-07-25 17:57-0400POT-Creation-Date: 1997-07-29 "
"18:04-0400POT-Creation-Date: 1997-07-31 17:43-0400POT-Creation-Date: "
"1997-07-31 17:43-0400\n"
#. Commands found in "./session.c".
#: info/doc.c:27 info/session.c:629
#, fuzzy
msgid "Move down to the next line"
msgstr "Zum Ende dieser Zeile bewegen"
#. Move WINDOW's point up to the previous line if possible.
#: info/doc.c:28 info/session.c:644
#, fuzzy
msgid "Move up to the previous line"
msgstr "Zum Ende dieser Zeile bewegen"
#. Move WINDOW's point to the end of the true line.
#: info/doc.c:29 info/session.c:659
#, fuzzy
msgid "Move to the end of the line"
msgstr "Zum Ende dieser Zeile bewegen"
#. Move WINDOW's point to the beginning of the true line.
#: info/doc.c:30 info/session.c:679
#, fuzzy
msgid "Move to the start of the line"
msgstr "Zum Anfang dieser Zeile bewegen"
#. Commands found in "./echo-area.c".
#: info/doc.c:31 info/doc.c:84 info/echo-area.c:283 info/session.c:698
msgid "Move forward a character"
msgstr "Ein Zeichen vorwärts bewegen"
#. Move point backward in the node.
#: info/doc.c:32 info/doc.c:85 info/echo-area.c:295 info/session.c:714
msgid "Move backward a character"
msgstr "Ein Zeichen rückwärts bewegen"
#. Move forward a word in the input line.
#: info/doc.c:33 info/doc.c:88 info/echo-area.c:320 info/session.c:732
msgid "Move forward a word"
msgstr "Ein Wort vorwärts bewegen"
#: info/doc.c:34 info/doc.c:89 info/echo-area.c:360 info/session.c:781
msgid "Move backward a word"
msgstr "Ein Wort rückwärts bewegen"
#: info/doc.c:35 info/session.c:1121
msgid "Move forwards or down through node structure"
msgstr ""
#: info/doc.c:36 info/session.c:1137
msgid "Move backwards or up through node structure"
msgstr ""
# checkit
#. Show the next screen of WINDOW's node.
#: info/doc.c:37 info/session.c:1152
#, fuzzy
msgid "Scroll forward in this window"
msgstr "Vervollständigungs-Fenster »scrollen«"
# checkit
#. Show the previous screen of WINDOW's node.
#: info/doc.c:38 info/session.c:1197
#, fuzzy
msgid "Scroll backward in this window"
msgstr "Vervollständigungs-Fenster »scrollen«"
#. Move to the beginning of the node.
#: info/doc.c:39 info/session.c:1237
#, fuzzy
msgid "Move to the start of this node"
msgstr "Zum Anfang dieser Zeile bewegen"
#. Move to the end of the node.
#: info/doc.c:40 info/session.c:1244
#, fuzzy
msgid "Move to the end of this node"
msgstr "Zum Ende dieser Zeile bewegen"
# checkit
#. ****************************************************************
#.
#. Commands for Manipulating Windows
#.
#. ****************************************************************
#. Make the next window in the chain be the active window.
#: info/doc.c:41 info/session.c:1257
#, fuzzy
msgid "Select the next window"
msgstr "Vervollständigungs-Fenster »scrollen«"
# checkit
#. Make the previous window in the chain be the active window.
#: info/doc.c:42 info/session.c:1296
#, fuzzy
msgid "Select the previous window"
msgstr "Vervollständigungs-Fenster »scrollen«"
# checkit
#. Split WINDOW into two windows, both showing the same node. If we
#. are automatically tiling windows, re-tile after the split.
#: info/doc.c:43 info/session.c:1347
#, fuzzy
msgid "Split the current window"
msgstr "Vervollständigungs-Fenster »scrollen«"
# checkit
#. Delete WINDOW, forgetting the list of last visited nodes. If we are
#. automatically displaying footnotes, show or remove the footnotes
#. window. If we are automatically tiling windows, re-tile after the
#. deletion.
#: info/doc.c:44 info/session.c:1428
#, fuzzy
msgid "Delete the current window"
msgstr "Das Zeichen hinter dem Cursor löschen"
#. Just keep WINDOW, deleting all others.
#: info/doc.c:45 info/session.c:1469
msgid "Delete all other windows"
msgstr ""
# checkit
#. Scroll the "other" window of WINDOW.
#: info/doc.c:46 info/session.c:1515
#, fuzzy
msgid "Scroll the other window"
msgstr "Vervollständigungs-Fenster »scrollen«"
#. Change the size of WINDOW by AMOUNT.
#: info/doc.c:47 info/session.c:1535
msgid "Grow (or shrink) this window"
msgstr ""
#: info/doc.c:48 info/session.c:1546
msgid "Divide the available screen space among the visible windows"
msgstr ""
#: info/doc.c:49 info/session.c:1553
msgid "Toggle the state of line wrapping in the current window"
msgstr ""
#. Make WINDOW display the "Next:" node of the node currently being
#. displayed.
#: info/doc.c:50 info/session.c:1714
msgid "Select the `Next' node"
msgstr ""
#. Make WINDOW display the "Prev:" node of the node currently being
#. displayed.
#: info/doc.c:51 info/session.c:1722
msgid "Select the `Prev' node"
msgstr ""
#. Make WINDOW display the "Up:" node of the node currently being
#. displayed.
#: info/doc.c:52 info/session.c:1730
msgid "Select the `Up' node"
msgstr ""
#. Make WINDOW display the last node of this info file.
#: info/doc.c:53 info/session.c:1737
#, fuzzy
msgid "Select the last node in this file"
msgstr "Zum Anfang dieser Zeile bewegen"
#. Make WINDOW display the first node of this info file.
#: info/doc.c:54 info/session.c:1759
msgid "Select the first node in this file"
msgstr ""
#: info/doc.c:55 info/session.c:2401
msgid "Select the most recently selected node"
msgstr ""
#: info/doc.c:56 info/session.c:1778
#, fuzzy
msgid "Select the last item in this node's menu"
msgstr "Es sind keine %d Punkte in diesem Menu."
#. Use KEY (a digit) to select the Nth menu item in WINDOW->node.
#: info/doc.c:57 info/session.c:1784
#, fuzzy
msgid "Select this menu item"
msgstr "Ersten Menupunkt auswählen..."
#. Read a line (with completion) which is the name of a menu item,
#. and select that item.
#: info/doc.c:58 info/session.c:2042
#, fuzzy
msgid "Read a menu item and select its node"
msgstr "Es gibt keinen Menupunkt »%s« in diesem Node."
#: info/doc.c:59 info/session.c:2050
msgid "Read a footnote or cross reference and select its node"
msgstr ""
#. Position the cursor at the start of this node's menu.
#: info/doc.c:60 info/session.c:2056
#, fuzzy
msgid "Move to the start of this node's menu"
msgstr "Zum Anfang dieser Zeile bewegen"
#: info/doc.c:61 info/session.c:2080
msgid "Visit as many menu items at once as possible"
msgstr ""
#. Read a line of input which is a node name, and go to that node.
#: info/doc.c:62 info/session.c:2108
#, fuzzy
msgid "Read a node name and select it"
msgstr "Lies einen Befehlsnamen in der »Echo-Area« und führe ihn aus"
#: info/doc.c:63 info/session.c:2194
#, fuzzy
msgid "Read a manpage reference and select it"
msgstr "Lies einen Befehlsnamen in der »Echo-Area« und führe ihn aus"
#. Move to the "Top" node in this file.
#: info/doc.c:64 info/session.c:2228
#, fuzzy
msgid "Select the node `Top' in this file"
msgstr "Zum Ende dieser Zeile bewegen"
#. Move to the node "(dir)Top".
#: info/doc.c:65 info/session.c:2234
msgid "Select the node `(dir)'"
msgstr ""
#. Kill named node.
#: info/doc.c:66 info/session.c:2407
msgid "Kill this node"
msgstr ""
#. Read the name of a file and select the entire file.
#: info/doc.c:67 info/session.c:2415
#, fuzzy
msgid "Read the name of a file and select it"
msgstr "Lese den Namen eines Info-Befehls und beschreibe ihn"
#: info/doc.c:68 info/session.c:2634
msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
msgstr ""
#: info/doc.c:69 info/session.c:2946
msgid "Read a string and search for it"
msgstr ""
#: info/doc.c:70 info/doc.c:71 info/session.c:3020 info/session.c:3026
msgid "Search interactively for a string as you type it"
msgstr ""
#: info/doc.c:72 info/session.c:3579
msgid "Move to the previous cross reference"
msgstr ""
#: info/doc.c:73 info/session.c:3588
#, fuzzy
msgid "Move to the next cross reference"
msgstr "Zum Ende dieser Zeile bewegen"
#: info/doc.c:74 info/session.c:3598
msgid "Select reference or menu item appearing on this line"
msgstr ""
# checkit
#. ****************************************************************
#.
#. Miscellaneous Info Commands
#.
#. ****************************************************************
#. What to do when C-g is pressed in a window.
#: info/doc.c:75 info/session.c:3620
msgid "Cancel current operation"
msgstr "Momentane Operation abbrechen"
#: info/doc.c:76 info/session.c:3636
msgid "Move to the cursor to a specific line of the window"
msgstr ""
#. Clear the screen and redraw its contents. Given a numeric argument,
#. move the line the cursor is on to the COUNT'th line of the window.
#: info/doc.c:77 info/session.c:3668
msgid "Redraw the display"
msgstr ""
#. This command does nothing. It is the fact that a key is bound to it
#. that has meaning. See the code at the top of info_session ().
#: info/doc.c:78 info/session.c:3705
msgid "Quit using Info"
msgstr ""
#: info/doc.c:80 info/session.c:3958
msgid "Add this digit to the current numeric argument"
msgstr ""
#: info/doc.c:81
msgid "universal-argument"
msgstr ""
#: info/doc.c:81 info/session.c:3967
msgid "Start (or multiply by 4) the current numeric argument"
msgstr ""
#: info/doc.c:82 info/session.c:3982
msgid "Internally used by \\[universal-argument]"
msgstr ""
#: info/doc.c:86 info/echo-area.c:307
msgid "Move to the start of this line"
msgstr "Zum Anfang dieser Zeile bewegen"
#: info/doc.c:87 info/echo-area.c:312
msgid "Move to the end of this line"
msgstr "Zum Ende dieser Zeile bewegen"
#: info/doc.c:90 info/echo-area.c:400
msgid "Delete the character under the cursor"
msgstr "Das Zeichen unter dem Cursor löschen"
# checkit
#: info/doc.c:91 info/echo-area.c:430
msgid "Delete the character behind the cursor"
msgstr "Das Zeichen hinter dem Cursor löschen"
#: info/doc.c:92 info/echo-area.c:451
msgid "Cancel or quit operation"
msgstr "Operation abbrechen oder beenden"
#: info/doc.c:93 info/echo-area.c:466
msgid "Accept (or force completion of) this line"
msgstr "Akzeptiere diese Zeile (oder erzwinge ihre Vervollständigung)"
#: info/doc.c:94 info/echo-area.c:471
msgid "Insert next character verbatim"
msgstr "Das nächste Zeichen wörtlich eingeben"
#: info/doc.c:95 info/echo-area.c:479
msgid "Insert this character"
msgstr "Dieses Zeichen eingeben"
# checkit
#: info/doc.c:96 info/echo-area.c:497
msgid "Insert a TAB character"
msgstr "Ein TAB-Zeichen eingeben"
#. Transpose the characters at point. If point is at the end of the line,
#. then transpose the characters before point.
#: info/doc.c:97 info/echo-area.c:504
msgid "Transpose characters at point"
msgstr "Zeichen am Point umstellen"
#: info/doc.c:98 info/echo-area.c:555
msgid "Yank back the contents of the last kill"
msgstr "Füge den Inhalt des letzten Killens ein"
#. If the last command was yank, or yank_pop, and the text just before
#. point is identical to the current kill item, then delete that text
#. from the line, rotate the index down, and yank back some other text.
#: info/doc.c:99 info/echo-area.c:575
msgid "Yank back a previous kill"
msgstr "Füge ein vorangehendes Killen ein"
#. Delete the text from point to end of line.
#: info/doc.c:100 info/echo-area.c:608
msgid "Kill to the end of the line"
msgstr "Bis zum Ende der Zeile killen"
#: info/doc.c:101 info/echo-area.c:621
msgid "Kill to the beginning of the line"
msgstr "Bis zum Anfang der Zeile killen"
#. Delete from point to the end of the current word.
#: info/doc.c:102 info/echo-area.c:633
msgid "Kill the word following the cursor"
msgstr "Das dem Cursor folgende Wort killen"
#: info/doc.c:103 info/echo-area.c:652
msgid "Kill the word preceding the cursor"
msgstr "Das dem Cursor vorangehende Wort killen"
#: info/doc.c:104 info/echo-area.c:916
msgid "List possible completions"
msgstr "Mögliche Vervollständigungen listen"
#: info/doc.c:105 info/echo-area.c:1090
msgid "Insert completion"
msgstr "Vervollständigung einfügen"
# checkit
#. Scroll the "other" window. If there is a window showing completions, scroll
#. that one, otherwise scroll the window which was active on entering the read
#. function.
#: info/doc.c:106 info/echo-area.c:1321
msgid "Scroll the completions window"
msgstr "Vervollständigungs-Fenster »scrollen«"
#. Commands found in "./infodoc.c".
#: info/doc.c:108 info/infodoc.c:328
msgid "Display help message"
msgstr "Diesen Hilfe-Text anzeigen"
#. Show the Info help node. This means that the "info" file is installed
#. where it can easily be found on your system.
#: info/doc.c:109 info/infodoc.c:346
msgid "Visit Info node `(info)Help'"
msgstr "Info-Node »(info)Help« besuchen"
#: info/doc.c:110 info/infodoc.c:470
msgid "Print documentation for KEY"
msgstr "Dokumentation für KEY ausgeben"
#: info/doc.c:111
msgid "Show what to type to execute a given command"
msgstr "Zeige an, was einzugeben ist, um einen gegebenen Befehl auszuführen"
#. Commands found in "./m-x.c".
#: info/doc.c:113 info/m-x.c:69
msgid "Read the name of an Info command and describe it"
msgstr "Lese den Namen eines Info-Befehls und beschreibe ihn"
#: info/doc.c:114 info/m-x.c:96
msgid "Read a command name in the echo area and execute it"
msgstr "Lies einen Befehlsnamen in der »Echo-Area« und führe ihn aus"
#: info/doc.c:115 info/m-x.c:150
msgid "Set the height of the displayed window"
msgstr "Setze die Höhe des angezeigten Fensters"
#. Commands found in "./indices.c".
#: info/doc.c:117 info/indices.c:175
msgid "Look up a string in the index for this file"
msgstr "Sieh eine Zeichenkette im Index dieser Datei nach"
#: info/doc.c:118 info/indices.c:332
msgid ""
"Go to the next matching index item from the last `\\[index-search]' command"
msgstr ""
"Geh zum nächsten übereinstimmenden Index-Eintrag vom letzten "
\\[index-search]«-Befehl"
#: info/doc.c:119 info/indices.c:616
msgid "Grovel all known info file's indices for a string and build a menu"
msgstr ""
"Durchsuche durch alle bekannten Info-Datei-Indices nach einer Zeichenkette "
"und bilde ein Menu"
#. Commands found in "./nodemenu.c".
#: info/doc.c:121 info/nodemenu.c:217
msgid "Make a window containing a menu of all of the currently visited nodes"
msgstr ""
#: info/doc.c:122 info/nodemenu.c:297
msgid "Select a node which has been previously visited in a visible window"
msgstr ""
#. Commands found in "./footnotes.c".
#: info/doc.c:124 info/footnotes.c:232
msgid "Show the footnotes associated with this node in another window"
msgstr "Zeige die mit diesem Node verbundenen Fußnoten im anderen Fenster"
#. Commands found in "./variables.c".
#: info/doc.c:126 info/variables.c:77
msgid "Explain the use of a variable"
msgstr ""
#: info/doc.c:127 info/variables.c:102
#, fuzzy
msgid "Set the value of an Info variable"
msgstr "Lese den Namen eines Info-Befehls und beschreibe ihn"
# IMO muss "kill" auch im Folgenden wörtlich üs werden -ke-
#: info/echo-area.c:562
msgid "Kill ring is empty"
msgstr "Der Kill-Ring ist leer"
# checkit
#: info/echo-area.c:871
msgid "Not complete"
msgstr "Nicht vollständig"
#: info/echo-area.c:929
msgid "No completions"
msgstr "Keine Vervollständigungen"
#: info/echo-area.c:933
msgid "Sole completion"
msgstr "Einzige Vervollständigung"
#: info/echo-area.c:942
#, c-format
msgid "There %s %d "
msgstr "Da %s %d "
#: info/echo-area.c:942
msgid "is"
msgstr "ist"
#: info/echo-area.c:942
msgid "are"
msgstr "sind"
#: info/echo-area.c:945
#, fuzzy, c-format
msgid "completion%s:\n"
msgstr "Keine Vervollständigungen"
#: info/echo-area.c:1223
msgid "Building completions..."
msgstr "Bilde Vervollständigungen..."
#: info/footnotes.c:206
msgid "Footnotes could not be displayed"
msgstr "Fußnoten können nicht angezeigt werden"
#: info/indices.c:205
msgid "Finding index entries..."
msgstr "Suche Index-Einträge..."
# checkit
# oder sind "Einträge" gemeint? -ke-
#: info/indices.c:212
msgid "No indices found."
msgstr "Keine Indices gefunden."
#: info/indices.c:222
msgid "Index entry: "
msgstr "Index-Eintrag: "
#: info/indices.c:342
msgid "No previous index search string."
msgstr "Keine vorangehende zu suchende Index-Zeichenkette."
#: info/indices.c:349
msgid "No index entries."
msgstr "Keine Index-Einträge."
# checkit
# kann im Deutschen nachgebildet werden, aber... -ke-
#: info/indices.c:382
#, c-format
msgid "No %sindex entries containing \"%s\"."
msgstr "Keine %sIndex-Einträge beinhalten »%s«."
#: info/indices.c:383
msgid "more "
msgstr "weiteren "
#: info/indices.c:393
msgid "CAN'T SEE THIS"
msgstr "DIES IST NICHT ZU SEHEN"
#: info/indices.c:429
#, c-format
msgid "Found \"%s\" in %s. (`\\[next-index-match]' tries to find next.)"
msgstr ""
"»%s« in %s gefunden. (»\\[next-index-match]« versucht nächsten Eintrag zu "
"finden.)"
#: info/indices.c:533
#, c-format
msgid "Scanning indices of \"%s\"..."
msgstr "Index von »%s« wird durchsucht..."
#: info/indices.c:620
msgid "Index apropos: "
msgstr "Index apropos: "
#: info/indices.c:650
#, c-format
msgid ""
"\n"
"* Menu: Nodes whoses indices contain \"%s\":\n"
msgstr ""
"\n"
"* Menu: Nodes, deren Indices »%s« beinhalten:\n"
# checkit
# oder sind "Einträge" gemeint? -ke-
#: info/info.c:347
#, fuzzy
msgid "no entries found\n"
msgstr "Keine Indices gefunden."
#: info/info.c:390
msgid "There is no menu in this node."
msgstr "Es gibt kein Menu in diesem Node."
#: info/info.c:421
#, c-format
msgid "There is no menu item \"%s\" in this node."
msgstr "Es gibt keinen Menupunkt »%s« in diesem Node."
#: info/info.c:485
#, c-format
msgid "Unable to find the node referenced by \"%s\"."
msgstr "Kann keinen von »%s« referenzierten Node finden."
# Dieser und die folgenden Strings wird nur gebraucht, wenn Fehleingabe vorliegt;
# muss durch `Try `%s --help' ...' ersetzt werden. -ke-
#: info/info.c:595
msgid ""
"Usage: info [-d dir-path] [-f info-file] [-o output-file] [-n node-name]..."
msgstr ""
"Aufruf: info [-d dir-path] [-f info-file] [-o output-file] [-n node-name]..."
#: info/info.c:596
msgid ""
" [--directory dir-path] [--file info-file] [--node node-name]..."
msgstr ""
" [--directory dir-path] [--file info-file] [--node node-name]..."
#: info/info.c:597
msgid " [--help] [--output output-file] [--subnodes] [--version]"
msgstr " [--help] [--output output-file] [--subnodes] [--version]"
#: info/info.c:598
msgid " [--dribble dribble-file] [--restore from-file]"
msgstr " [--dribble dribble-file] [--restore from-file]"
#: info/info.c:599
msgid " [menu-selection ...]"
msgstr " [menu-selection ...]"
#: info/info.c:607
#, fuzzy
msgid ""
"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."
msgstr ""
"Für eine ausführlichere Anleitung, wie Info zu benutzen ist, gib\n"
"»info info options« ein.\n"
"\n"
" --directory=VERZ VERZ zu INFOPATH hinzufügen\n"
" --dribble=DATEI Tasteneingaben des Benutzers in DATEI merken\n"
" --file=DATEI zu besuchende Info-DATEI angeben\n"
" --node=NODENAME \"node\" in der ersten zu besuchenden Info-Datei "
"angeben\n"
" --output=DATEI ausgewählte \"nodes\" einer Datei nach DATEI ausgeben\n"
" --restore=DATEI einleitende Tasteneingaben von DATEI lesen\n"
" --subnodes Menupunkte rekursiv ausgeben\n"
" --help diese Hilfe anzeigen\n"
" --version Programmversion anzeigen\n"
"\n"
"Verbleibende Parameter werden als Namen von Menupunkten des zuerst "
"besuchten\n"
"\"nodes\" angesehen. Man kann sich einfach zum gewünschten \"node\" "
"bewegen,\n"
"indem man die Namen der Menupunkte angibt, die den Weg dorthin bezeichnen;\n"
"z. B. »info emacs buffers«.\n"
"\n"
"Fehler (\"bugs\") bitte an <bug-texinfo@prep.ai.mit.edu> melden."
#: info/infodoc.c:50
#, fuzzy
msgid "Basic Commands in Info Windows"
msgstr ""
"Verfügbare Befehle im Info-Fenster:\n"
"\n"
#: info/infodoc.c:211
msgid ""
"The following commands can only be invoked via M-x:\n"
"\n"
msgstr "Die folgenden Befehle können nur via M-x aufgerufen werden:\n"
#: info/infodoc.c:228
msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
msgstr ""
"--- »\\[history-node]« oder »\\[kill-node]« benutzen, um zu beenden ---\n"
#: info/infodoc.c:483
#, c-format
msgid "Describe key: %s"
msgstr "Beschreibe Taste: %s"
#: info/infodoc.c:492
#, c-format
msgid "ESC %s is undefined."
msgstr "ESC %s ist nicht definiert."
#: info/infodoc.c:509
#, c-format
msgid "%s is undefined."
msgstr "%s ist nicht definiert."
#: info/infodoc.c:535
#, fuzzy, c-format
msgid "%s is defined to %s."
msgstr "%s ist nicht definiert."
#: info/infodoc.c:731
msgid "Where is command: "
msgstr "Wo ist der Befehl: "
#: info/infodoc.c:753
#, c-format
msgid "`%s' is not on any keys"
msgstr "»%s« liegt auf keiner Taste"
#: info/infodoc.c:759
#, c-format
msgid "%s can only be invoked via %s."
msgstr "%s kann nur via %s aufgerufen werden."
#: info/infodoc.c:762
#, c-format
msgid "%s can be invoked via %s."
msgstr "%s kann via %s aufgerufen werden."
#: info/infodoc.c:766
#, c-format
msgid "There is no function named `%s'"
msgstr "Es gibt keine Funktion mit Namen »%s«"
#: info/m-x.c:73
msgid "Describe command: "
msgstr "Beschreibe den Befehl: "
#: info/m-x.c:134
msgid "Cannot execute an `echo-area' command here."
msgstr "Kann hier keinen »echo-area«-Befehl ausführen."
# checkit
#: info/m-x.c:163
#, c-format
msgid "Set screen height to (%d): "
msgstr "Bildschirm-Höhe auf (%d) setzen: "
#: info/makedoc.c:126
msgid ""
" Source files groveled to make this file include:\n"
"\n"
msgstr ""
#: info/makedoc.c:450
#, c-format
msgid "Couldn't manipulate the file %s.\n"
msgstr "Datei »%s« ist nicht zu verändern.\n"
#: info/nodemenu.c:28
msgid ""
"\n"
"* Menu:\n"
" (File)Node Lines Size Containing File\n"
" ---------- ----- ---- ---------------"
msgstr ""
"\n"
"* Menu:\n"
" (Datei)Node Zeilen Größe Beinhaltet Datei\n"
" ----------- ----- ---- ----------------"
#: info/nodemenu.c:197
msgid ""
"Here is the menu of nodes you have recently visited.\n"
"Select one from this menu, or use `\\[history-node]' in another window.\n"
msgstr ""
#: info/nodemenu.c:309
msgid "Select visited node: "
msgstr ""
#: info/nodemenu.c:329 info/session.c:1996
#, c-format
msgid "The reference disappeared! (%s)."
msgstr ""
#: info/session.c:162
#, c-format
msgid ""
"Welcome to Info version %s. \"\\[get-help-window]\" for help, "
"\"\\[menu-item]\" for menu item."
msgstr ""
#: info/session.c:855
msgid " times"
msgstr ""
#: info/session.c:857
#, c-format
msgid "%d times"
msgstr ""
#: info/session.c:895
msgid "No \"Next\" pointer for this node."
msgstr ""
#: info/session.c:898
msgid "Following \"Next\" node..."
msgstr ""
#: info/session.c:899 info/session.c:927 info/session.c:999
#: info/session.c:1717
msgid "Next"
msgstr ""
#: info/session.c:915
msgid "Selecting first menu item..."
msgstr "Ersten Menupunkt auswählen..."
#: info/session.c:926
#, fuzzy
msgid "Selecting \"Next\" node..."
msgstr "Ersten Menupunkt auswählen..."
#: info/session.c:950 info/session.c:1063 info/session.c:1733
msgid "Up"
msgstr ""
#: info/session.c:1020
msgid "No more nodes."
msgstr "Keine \"Nodes\" mehr"
#: info/session.c:1044
msgid "No \"Prev\" for this node."
msgstr ""
#. Move to the previous node. If this node now contains a menu,
#. and we have not inhibited movement to it, move to the node
#. corresponding to the last menu item.
#: info/session.c:1047 info/session.c:1100
msgid "Moving \"Prev\" in this window."
msgstr ""
#: info/session.c:1048 info/session.c:1101 info/session.c:1725
msgid "Prev"
msgstr ""
#: info/session.c:1059
msgid "No \"Prev\" or \"Up\" for this node."
msgstr ""
#: info/session.c:1062
msgid "Moving \"Up\" in this window."
msgstr ""
#: info/session.c:1110
msgid "Moving to \"Prev\"'s last menu item."
msgstr ""
#: info/session.c:1436
msgid "Cannot delete a permanent window"
msgstr ""
#: info/session.c:1750 info/session.c:1768
msgid "This window has no additional nodes"
msgstr ""
#: info/session.c:1813
#, c-format
msgid "There aren't %d items in this menu."
msgstr "Es sind keine %d Punkte in diesem Menu."
#: info/session.c:1944
#, c-format
msgid "Menu item (%s): "
msgstr "Menupunkt (%s): "
#: info/session.c:1946
msgid "Menu item: "
msgstr "Menupunkt: "
#: info/session.c:1951
#, c-format
msgid "Follow xref (%s): "
msgstr ""
#: info/session.c:1953
msgid "Follow xref: "
msgstr ""
#: info/session.c:2169 info/session.c:2173
msgid "Goto Node: "
msgstr ""
#: info/session.c:2198
msgid "Get Manpage: "
msgstr ""
#. Notice that the node "Top" is special, and doesn't have to
#. be referenced.
#: info/session.c:2230 makeinfo/makeinfo.c:5135 makeinfo/makeinfo.c:5218
msgid "Top"
msgstr "Top"
#: info/session.c:2254
#, c-format
msgid "Kill node (%s): "
msgstr ""
#: info/session.c:2307
#, fuzzy, c-format
msgid "Cannot kill node `%s'"
msgstr "Kann »%s« nicht finden."
#: info/session.c:2317
msgid "Cannot kill the last node"
msgstr ""
#: info/session.c:2419
#, fuzzy
msgid "Find file: "
msgstr " Unterdatei: %s"
#: info/session.c:2436
#, c-format
msgid "Cannot find \"%s\"."
msgstr "Kann »%s« nicht finden."
#: info/session.c:2483 info/session.c:2608
#, fuzzy, c-format
msgid "Could not create output file \"%s\"."
msgstr "Datei »%s« ist nicht zu verändern.\n"
#: info/session.c:2496 info/session.c:2625 info/session.c:2671
msgid "Done."
msgstr "Fertig."
#: info/session.c:2553
#, c-format
msgid "Writing node \"(%s)%s\"..."
msgstr ""
#: info/session.c:2556
#, fuzzy, c-format
msgid "Writing node \"%s\"..."
msgstr "Index von »%s« wird durchsucht..."
#: info/session.c:2654
#, fuzzy, c-format
msgid "Cannot open pipe to \"%s\"."
msgstr "Kann »%s« nicht finden."
#: info/session.c:2661
#, fuzzy, c-format
msgid "Printing node \"(%s)%s\"..."
msgstr "Index von »%s« wird durchsucht..."
#: info/session.c:2664
#, fuzzy, c-format
msgid "Printing node \"%s\"..."
msgstr "Index von »%s« wird durchsucht..."
#: info/session.c:2896
#, fuzzy, c-format
msgid "Searching subfile \"%s\"..."
msgstr "Index von »%s« wird durchsucht..."
#: info/session.c:2966
#, c-format
msgid "%s for string [%s]: "
msgstr ""
#: info/session.c:2967
msgid "Search backward"
msgstr ""
#: info/session.c:2967
msgid "Search"
msgstr ""
#: info/session.c:2994
msgid "Search failed."
msgstr ""
#: info/session.c:3120
msgid "I-search backward: "
msgstr ""
#: info/session.c:3122
msgid "I-search: "
msgstr ""
#: info/session.c:3147
msgid "Failing "
msgstr ""
#: info/session.c:3512
#, fuzzy
msgid "No cross references in this node."
msgstr "Es gibt kein Menu in diesem Node."
#: info/session.c:3627
msgid "Quit"
msgstr ""
#: info/session.c:3728
#, fuzzy, c-format
msgid "Unknown command (%s)."
msgstr "Unbekannter Befehl (%s)."
#: info/session.c:3733
msgid "\"\" is invalid"
msgstr "\"\" ist ungültig"
#: info/session.c:3735
#, c-format
msgid "\"%s\" is invalid"
msgstr "\"%s\" ist ungültig"
#: info/variables.c:40
msgid "When \"On\", footnotes appear and disappear automatically"
msgstr ""
#: info/variables.c:44
msgid "When \"On\", creating or deleting a window resizes other windows"
msgstr ""
#: info/variables.c:48
msgid "When \"On\", flash the screen instead of ringing the bell"
msgstr ""
#: info/variables.c:52
msgid "When \"On\", errors cause the bell to ring"
msgstr ""
#: info/variables.c:56
msgid "When \"On\", Info garbage collects files which had to be uncompressed"
msgstr ""
#: info/variables.c:59
msgid "When \"On\", the portion of the matched search string is highlighted"
msgstr ""
#: info/variables.c:63
msgid "Controls what happens when scrolling is requested at the end of a node"
msgstr ""
#: info/variables.c:67
msgid "The number lines to scroll when the cursor moves out of the window"
msgstr ""
#: info/variables.c:71
msgid "When \"On\", Info accepts and displays ISO Latin characters"
msgstr ""
#. Get the variable's name.
#: info/variables.c:83
#, fuzzy
msgid "Describe variable: "
msgstr "Beschreibe Taste: %s"
#. Get the variable's name and value.
#: info/variables.c:108
msgid "Set variable: "
msgstr ""
# checkit
#: info/variables.c:126
#, fuzzy, c-format
msgid "Set %s to value (%d): "
msgstr "Bildschirm-Höhe auf (%d) setzen: "
#: info/variables.c:167
#, c-format
msgid "Set %s to value (%s): "
msgstr ""
#: info/window.c:1102
msgid "--*** Tags out of Date ***"
msgstr ""
#. strlen (location_indicator).
#. 10 for the decimal representation of the number of lines in this
#. node, and the remainder of the text that can appear in the line.
#: info/window.c:1113
msgid "-----Info: (), lines ----, "
msgstr "-----Info: (), Zeilen ----, "
#: info/window.c:1120
#, c-format
msgid "-%s---Info: %s, %d lines --%s--"
msgstr "-%s---Info: %s, %d Zeilen --%s--"
#: info/window.c:1124
#, c-format
msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
msgstr "-%s%s-Info: (%s)%s, %d Zeilen --%s--"
#: info/window.c:1131
#, c-format
msgid " Subfile: %s"
msgstr " Unterdatei: %s"
#: makeinfo/makeinfo.c:889
#, fuzzy, c-format
msgid "%s:%d: warning: "
msgstr "%s:%d: Warnung: "
#: makeinfo/makeinfo.c:912
msgid "Too many errors! Gave up.\n"
msgstr "Zu viele Fehler! Abbruch.\n"
#: makeinfo/makeinfo.c:971 makeinfo/makeinfo.c:996 makeinfo/makeinfo.c:1064
#, fuzzy, c-format
msgid "%s: %s arg must be numeric, not `%s'.\n"
msgstr "%s: Argument für --error-limit muss numerisch sein, nicht »%s«.\n"
#: makeinfo/makeinfo.c:985
#, fuzzy, c-format
msgid "Couldn't open macro expansion output `%s'"
msgstr ""
"Für die Macro-Auflösung kann die Ausgabe nach »%s« nicht geöffnet werden"
#: makeinfo/makeinfo.c:988
msgid "Cannot specify more than one macro expansion output"
msgstr "Mehr als eine Ausgabedatei darf nicht angegeben werden"
#: makeinfo/makeinfo.c:1032
#, fuzzy, c-format
msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
msgstr ""
"%s: Argument für --paragraph-indent muss numerisch/»none«/»asis«, sein, "
"nicht »%s«.\n"
#: makeinfo/makeinfo.c:1075
#, c-format
msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
msgstr ""
"%s: Argument für --footnote-style muss »separate« oder »end« sein, nicht "
"»%s«.\n"
# Hier de-Standard-Formulierung einsetzen!
#: makeinfo/makeinfo.c:1085 util/install-info.c:522 util/texindex.c:348
msgid ""
"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."
msgstr ""
"Copyright © %s Free Software Foundation, Inc.\n"
"Dies ist freie Software; in den Quellen befindet sich die Lizenz- und\n"
"Kopierbedingung. Es gibt KEINERLEI Garantie, nicht einmal für die\n"
"TAUGLICHKEIT oder die VERWENDBARKEIT ZU EINEM ANGEGEBENEN ZWECK."
#: makeinfo/makeinfo.c:1105
#, c-format
msgid "%s: missing file argument.\n"
msgstr "%s: Datei-Angabe fehlt.\n"
#: makeinfo/makeinfo.c:1146
#, fuzzy, c-format
msgid "makeinfo (GNU %s %s) %d.%d\n"
msgstr "GNU Makeinfo (Texinfo 3.9) %d.%d\n"
# checkit
#: makeinfo/makeinfo.c:1158
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "»%s --help« gibt weitere Informationen.\n"
# checkit
# Die "." am Zeilenende habe ich entfernt. -ke-
#: makeinfo/makeinfo.c:1160
#, fuzzy, c-format
msgid ""
"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"
msgstr ""
"Aufruf: %s [OPTION]... TEXINFO-DATEI...\n"
"\n"
"Texinfo-Quelltext in ein Format übersetzen, das mit GNU Info gelesen werden\n"
"kann.\n"
"\n"
"Optionen:\n"
"-D VAR eine Variable definieren, wie mit @set.\n"
"-E MACRO-AUSGABEDATEI nur die Macros auflösen, Texinfo-Quelltext ausgeben\n"
"-I VERZ VERZ in die Verzeichnis-Suchliste für @include "
"aufnehmen\n"
"-U VAR eine Variable aufheben, wie mit @clear\n"
"--error-limit ZAHL nach ZAHL Fehlern beenden (Standard %d)\n"
"--fill-column ZAHL Zeilen nach ZAHL Zeichen umbrechen (Standard %d)\n"
"--footnote-style STYLE Fußnoten gemäß STYLE ausgeben:\n"
" »separate«: Fußnoten in einen eigenen \"node\" "
"plazieren;\n"
" »end«: Fußnoten an das Ende des \"nodes\" "
"setzen, in\n"
" dem sie definiert sind (Standard)\n"
"--help diese Hilfe zeigen\n"
"--no-validate Überprüfen der \"node\"-Querverweise unterdrücken\n"
"--no-warn Warnungen unterdrücken (aber keine Fehler)\n"
"--no-split Aufteilen langer Dateien unterdrücken\n"
"--no-headers \"node\"-Unterteiler und \"Node\" unterdrücken: Foo "
"headers\n"
"--output DATEI, -o DATEI Ausgabe nach DATEI und @setfilename ignorieren\n"
"--paragraph-indent ZAHL/»none«/»asis«\n"
" Absätze mit ZAHL Leerräumen einziehen (Standard %d);\n"
" »none«: keine Leerräume\n"
" »asis«: keine Veränderung hinsichtlich der Leerräume\n"
"--reference-limit ZAHL bei wenigstens ZAHL Verweise melden (Standard %d)\n"
"--verbose ausführlich die Bearbeitungschritte anzeigen\n"
"--version Programmversion anzeigen\n"
"\n"
"Fehlerberichte (\"bugs\") bitte an <bug-texinfo@prep.ai.mit.edu> schicken.\n"
#: makeinfo/makeinfo.c:1545
#, c-format
msgid "%s: getwd: %s, %s\n"
msgstr ""
#: makeinfo/makeinfo.c:1741
#, c-format
msgid "Expected `%s'"
msgstr ""
#: makeinfo/makeinfo.c:2072
#, fuzzy, c-format
msgid "No `%s' found in `%s'"
msgstr "%s; für Datei »%s«.\n"
#: makeinfo/makeinfo.c:2122
#, c-format
msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
msgstr ""
#: makeinfo/makeinfo.c:2141
#, c-format
msgid "Making %s file `%s' from `%s'.\n"
msgstr ""
#: makeinfo/makeinfo.c:2171
#, c-format
msgid "This is Info file %s, produced by Makeinfo version %d.%d"
msgstr ""
#: makeinfo/makeinfo.c:2173
#, c-format
msgid " from the input file %s.\n"
msgstr ""
#: makeinfo/makeinfo.c:2192
#, c-format
msgid ""
"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
msgstr ""
#. If there were errors, and no --force, remove the output.
#: makeinfo/makeinfo.c:2224
#, c-format
msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
msgstr ""
#. Special case. I'm not supposed to see this character by itself.
#. If I do, it means there is a syntax error in the input text.
#. Report the error here, but remember this brace on the stack so
#. you can ignore its partner.
#: makeinfo/makeinfo.c:2364 makeinfo/makeinfo.c:7624
#, fuzzy, c-format
msgid "Misplaced %c"
msgstr "Fehlplazierte »}«"
#: makeinfo/makeinfo.c:2451
#, fuzzy, c-format
msgid "Unknown command `%s'"
msgstr "Unbekannter Befehl (%s)."
#: makeinfo/makeinfo.c:2471
msgid "NO_NAME!"
msgstr ""
#: makeinfo/makeinfo.c:2485
#, c-format
msgid "%c%s expected `{...}'"
msgstr ""
#: makeinfo/makeinfo.c:2518
#, fuzzy
msgid "Unmatched }"
msgstr "Nicht übereinstimmende »%c%s«"
#: makeinfo/makeinfo.c:2566
#, fuzzy, c-format
msgid "%c%s missing close brace"
msgstr "%s: Datei-Angabe fehlt.\n"
#: makeinfo/makeinfo.c:3362
msgid "Broken-Type in insertion_type_pname"
msgstr ""
#: makeinfo/makeinfo.c:3428
msgid "Enumeration stack overflow"
msgstr ""
#: makeinfo/makeinfo.c:3460
#, c-format
msgid "lettering overflow, restarting at %c"
msgstr ""
#: makeinfo/makeinfo.c:3499
#, fuzzy
msgid "* Menu:\n"
msgstr "Menu"
#: makeinfo/makeinfo.c:3583
#, fuzzy, c-format
msgid "%s requires an argument: the formatter for %citem"
msgstr "%s erfordert einen Buchstaben oder eine Zahl"
#: makeinfo/makeinfo.c:3687
#, c-format
msgid "`%cend' expected `%s', but saw `%s'"
msgstr ""
#: makeinfo/makeinfo.c:3800
#, fuzzy, c-format
msgid "No matching `%cend %s'"
msgstr "Nicht übereinstimmende »%c%s«"
#: makeinfo/makeinfo.c:3939
#, c-format
msgid "How did @%s end up in cm_special_char?\n"
msgstr ""
#. This error message isn't perfect if the argument is multiple
#. characters, but it doesn't seem worth getting right.
#: makeinfo/makeinfo.c:3953
#, c-format
msgid "%c%s expects `i' or `j' as argument, not `%c'"
msgstr ""
#: makeinfo/makeinfo.c:3957
#, c-format
msgid "%c%s expects a single character `i' or `j' as argument"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "January"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "February"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "March"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "April"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "May"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "June"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "July"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "August"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "September"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "October"
msgstr ""
#: makeinfo/makeinfo.c:3971
msgid "November"
msgstr ""
#: makeinfo/makeinfo.c:3971
msgid "December"
msgstr ""
#: makeinfo/makeinfo.c:3976
#, c-format
msgid "%d %s %d"
msgstr ""
#: makeinfo/makeinfo.c:4029
#, c-format
msgid "%c%s expects a single character as an argument"
msgstr ""
#: makeinfo/makeinfo.c:4143
#, c-format
msgid "%c%s is obsolete"
msgstr ""
#: makeinfo/makeinfo.c:4315
#, c-format
msgid "There already is a node having %ctop as a section"
msgstr ""
#: makeinfo/makeinfo.c:4327
#, c-format
msgid "Here is the %ctop node"
msgstr ""
#: makeinfo/makeinfo.c:4346
#, c-format
msgid "%ctop used before %cnode, defaulting to %s"
msgstr ""
#: makeinfo/makeinfo.c:4421
#, c-format
msgid "%c%s is obsolete; use %c%s instead"
msgstr ""
#: makeinfo/makeinfo.c:4670
#, fuzzy, c-format
msgid "Node `%s' multiply defined (line %d is first definition at)"
msgstr "\"Node\" »%s« mehrfach definiert (%d ist erste Definition)"
#: makeinfo/makeinfo.c:4743
#, c-format
msgid "Formatting node %s...\n"
msgstr ""
#: makeinfo/makeinfo.c:4792
#, c-format
msgid "Node `%s' requires a sectioning command (e.g. %c%s)"
msgstr "\"Node\" »s« erfordert eine Unterteilungs-Angabe, z.B. »%c%s«"
#: makeinfo/makeinfo.c:5075
#, c-format
msgid "Node `%s''s Next field not pointed back to"
msgstr "\"Next field\" des \"Nodes\" »%s« verweist nicht zurück nach"
# checkit
#: makeinfo/makeinfo.c:5080
#, c-format
msgid "This node (`%s') is the one with the bad `Prev'"
msgstr "Dieser \"node\" (»%s«) hat schlechten(?) \"Prev\"-Eintrag"
#: makeinfo/makeinfo.c:5120
#, fuzzy, c-format
msgid "Node `%s's Prev field not pointed back to"
msgstr "Das \"Prev field\" des \"nodes\" »%s« verweist nicht zurück nach"
# checkit
#: makeinfo/makeinfo.c:5124
#, fuzzy, c-format
msgid "This node (`%s') has the bad Next"
msgstr "Dieser \"node\" (»%s«) hat schlechten(?) \"Next\"-Eintrag"
#: makeinfo/makeinfo.c:5136
#, fuzzy, c-format
msgid "Node `%s' missing Up field"
msgstr "Dem \"node\" »%s« fehlt ein \"Up field\""
#: makeinfo/makeinfo.c:5176
#, c-format
msgid "`%s' has an Up field of `%s', but `%s' has no menu item for `%s'"
msgstr ""
"»%s« hat ein \"Up field\" von »%s«, aber »%s« hat keinen Menu-Eintrag für "
"»%s«"
#: makeinfo/makeinfo.c:5207
#, fuzzy, c-format
msgid "node `%s' has been referenced %d times"
msgstr "Auf \"node\" »%s« wird %d mal verwiesen"
# checkit
#: makeinfo/makeinfo.c:5219
#, fuzzy, c-format
msgid "unreferenced node `%s'"
msgstr "Auf \"node\" »%s« wird nicht verwiesen"
# checkit
#: makeinfo/makeinfo.c:5246
#, fuzzy, c-format
msgid "%s reference to nonexistent node `%s'"
msgstr "Auf \"node\" »%s« wird nicht verwiesen"
# checkit
#: makeinfo/makeinfo.c:5658 makeinfo/makeinfo.c:5670
#, fuzzy, c-format
msgid "%cmenu seen before first node"
msgstr "%cmenu festgestellt, bevor ein \"node\" definiert wurde."
# checkit
#: makeinfo/makeinfo.c:5659 makeinfo/makeinfo.c:5671
#, fuzzy
msgid "creating `Top' node"
msgstr "»TOP«-\"node\" wird angelegt."
#: makeinfo/makeinfo.c:5784
#, c-format
msgid "`.' or `,' must follow cross reference, not %c"
msgstr ""
#: makeinfo/makeinfo.c:5952
#, c-format
msgid "@image file `%s' unreadable: %s"
msgstr ""
#: makeinfo/makeinfo.c:5956
#, fuzzy
msgid "@image missing filename argument"
msgstr "%s: Datei-Angabe fehlt.\n"
#: makeinfo/makeinfo.c:6057
#, fuzzy, c-format
msgid "%s requires letter or digit"
msgstr "%s erfordert einen Buchstaben oder eine Zahl"
#: makeinfo/makeinfo.c:6142
#, c-format
msgid "Unmatched `%c%s'"
msgstr "Nicht übereinstimmende »%c%s«"
#: makeinfo/makeinfo.c:6149
#, c-format
msgid "`%c%s' needs something after it"
msgstr "»%c%s« braucht etwas Nachfolgendes"
# checkit
#: makeinfo/makeinfo.c:6155
#, c-format
msgid "Bad argument to `%s', `%s', using `%s'"
msgstr "Falsches Argument für »%s«, »%s«, wenn »%s« benutzt wird"
#: makeinfo/makeinfo.c:6328
#, c-format
msgid "{No Value For \"%s\"}"
msgstr ""
#: makeinfo/makeinfo.c:6378
#, c-format
msgid "%c%s requires a name"
msgstr "%c%s erfordert einen Namen"
#: makeinfo/makeinfo.c:6486
#, c-format
msgid "Reached eof before matching @end %s"
msgstr ""
#: makeinfo/makeinfo.c:6715
#, c-format
msgid "The `%c%s' command is meaningless within a `@%s' block"
msgstr "Der »%c%s«-Befehl ist sinnlos innerhalb eines »@%s«-Blocks"
#: makeinfo/makeinfo.c:6724
#, c-format
msgid "%citemx is not meaningful inside of a `%s' block"
msgstr "%citemx ist nicht sinnvoll innerhalb eines »@%s«-Blocks"
# checkit
#: makeinfo/makeinfo.c:6837
#, c-format
msgid "%c%s found outside of an insertion block"
msgstr "%c%s außerhalb eines Einfügungsblocks gefunden"
# checkit
#: makeinfo/makeinfo.c:6928
#, c-format
msgid "Missing `}' in %cdef arg"
msgstr "Fehlende »}« in »%cdef«-Argument"
#: makeinfo/makeinfo.c:7137 makeinfo/makeinfo.c:7157
msgid "Function"
msgstr ""
#: makeinfo/makeinfo.c:7141
msgid "Macro"
msgstr ""
#: makeinfo/makeinfo.c:7145
msgid "Special Form"
msgstr ""
#: makeinfo/makeinfo.c:7149 makeinfo/makeinfo.c:7161
msgid "Variable"
msgstr ""
#: makeinfo/makeinfo.c:7153
#, fuzzy
msgid "User Option"
msgstr "Vervollständigung einfügen"
#: makeinfo/makeinfo.c:7165
#, fuzzy
msgid "Instance Variable"
msgstr "Beschreibe Taste: %s"
#: makeinfo/makeinfo.c:7169 makeinfo/makeinfo.c:7173
msgid "Method"
msgstr ""
# checkit
#: makeinfo/makeinfo.c:7330
#, c-format
msgid "Must be in a `%s' insertion in order to use `%s'x"
msgstr "Muss in einer »%s«-Einfügung sein, wenn »%s«x benutzt werden soll"
# checkit
#: makeinfo/makeinfo.c:7402
#, c-format
msgid "%csp requires a positive numeric argument"
msgstr "»%csp« erfordert ein positives numerisches Argument"
#: makeinfo/makeinfo.c:7645
#, fuzzy
msgid "asis"
msgstr "ist"
# checkit
#: makeinfo/makeinfo.c:7647
#, fuzzy
msgid "none"
msgstr "(keine)"
#: makeinfo/makeinfo.c:7669
#, c-format
msgid "Bad argument to %c%s"
msgstr "Falsches Argument für »%c%s«"
#: makeinfo/makeinfo.c:7961
#, fuzzy, c-format
msgid "Unknown index `%s'"
msgstr "Unbekannter Index-Name »%s«"
#: makeinfo/makeinfo.c:8026
#, c-format
msgid "Index `%s' already exists"
msgstr "Index »%s« ist schon vorhanden"
#: makeinfo/makeinfo.c:8057
#, fuzzy, c-format
msgid "Unknown index `%s' and/or `%s' in @synindex"
msgstr "Unbekannter Index-Name »%s«"
#: makeinfo/makeinfo.c:8246
#, fuzzy, c-format
msgid "Unknown index `%s' in @printindex"
msgstr "Unbekannter Index-Name »%s«"
#: makeinfo/makeinfo.c:8261
#, fuzzy
msgid ""
"* Menu:\n"
"\n"
msgstr "Menu"
#: makeinfo/makeinfo.c:8448
#, c-format
msgid "`%c%s' needs an argument `{...}', not just `%s'"
msgstr ""
#: makeinfo/makeinfo.c:8463
#, c-format
msgid "No closing brace for footnote `%s'"
msgstr "Keine schließende Klammer für Fußnote »%s«"
# checkit
#: makeinfo/makeinfo.c:8502
msgid "Footnote defined without parent node"
msgstr "Fußnote definiert ohne einen Eltern-\"node\""
#: makeinfo/makeinfo.c:8534
#, fuzzy
msgid "-Footnotes"
msgstr "*Fußnoten*"
#: makeinfo/makeinfo.c:8589
#, fuzzy
msgid ""
"---------- Footnotes ----------\n"
"\n"
msgstr ""
"---------------------\n"
"\n"
#: makeinfo/makeinfo.c:8685
#, fuzzy, c-format
msgid "macro `%s' previously defined"
msgstr "Macro »%s« ist bereits definiert"
#: makeinfo/makeinfo.c:8689
#, fuzzy, c-format
msgid "here is the previous definition of `%s'"
msgstr "Hier ist die vorangehende Definition von »%s«"
#: makeinfo/makeinfo.c:8903
#, c-format
msgid "Macro `%s' called with too many args"
msgstr "Macro »%s« mit zu vielen Argumenten aufgerufen"
#: makeinfo/makeinfo.c:9055
#, c-format
msgid "%cend macro not found"
msgstr "»%cend«-Macro nicht gefunden"
# checkit
#: makeinfo/makeinfo.c:9095
#, c-format
msgid "%cquote-arg only useful when the macro takes a single argument"
msgstr ""
"»%cquote«-Argument ist nur sinnvoll, wenn das Macro ein einziges Argument hat"
#: makeinfo/multi.c:206
#, c-format
msgid "ignoring stray text `%s' after @multitable"
msgstr "irriger Text »%s« nach @multitable wird ignoriert"
#: makeinfo/multi.c:277
#, c-format
msgid "Too many columns in multitable item (max %d)"
msgstr "zu viele Spalten im \"multitable\"-Eintrag (maximal %d)"
# checkit
#. impossible, I think.
#: makeinfo/multi.c:304
msgid "multitable item not in active multitable"
msgstr "\"multitable\"-Eintrag nicht in der aktiven \"multitable\""
#: makeinfo/multi.c:313
#, c-format
msgid "Cannot select column #%d in multitable"
msgstr "Spalte #%d kann in der \"multitable\" nicht ausgewählt werden"
#: makeinfo/multi.c:404
msgid "ignoring @tab outside of multitable"
msgstr "@tab außerhalb der \"multitable\" wird übergangen"
# checkit
#: makeinfo/multi.c:428
msgid "** Multicolumn output from last row:\n"
msgstr "** Mehrspalten-Ausgabe von der letzten Zeile:\n"
# checkit
#: makeinfo/multi.c:431
#, c-format
msgid "* column #%d: output = %s\n"
msgstr "* Spalte #%d: Ausgabe = %s\n"
# checkit
#: util/install-info.c:119 util/install-info.c:132
msgid "virtual memory exhausted"
msgstr "virtual memory exhausted"
#: util/install-info.c:188
#, fuzzy, c-format
msgid "%s: warning: "
msgstr "%s: Warnung: "
#: util/install-info.c:209
#, c-format
msgid " for %s"
msgstr " für %s"
#: util/install-info.c:278
#, fuzzy, c-format
msgid "\tTry `%s --help' for a complete list of options.\n"
msgstr "»%s --help« gibt weitere Informationen.\n"
# checkit
#: util/install-info.c:286
#, fuzzy, c-format
msgid ""
"%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"
msgstr ""
"%s [OPTION]... [INFO-DATEI [VERZ-DATEI]]\n"
" Installiere die INFO-DATEI in dem Info-Verzeichnis VERZ-DATEI.\n"
"\n"
"Optionen:\n"
"--delete entferne vorhandene Einträge aus INFO-DATEI; keine neuen\n"
" Einträge einfügen\n"
"--dir-file=NAME Namen der Info-Verzeichnis-Datei angeben. "
"Gleichbedeutend\n"
" mit dem VERZ-DATEI-Argument\n"
"--entry=TEXT TEXT als einen Info-Verzeichnis-Eintrag einfügen. TEXT "
"soll\n"
" die Form einer Zeile eines Info-Menupunkts haben,\n"
" zuzüglich null oder mehrerer Extra-Zeilen, die mit "
"Leerraum\n"
" (\"whitespace\") beginnen. Wenn mehr als ein Eintrag "
"angegeben\n"
" wird, werden alle hinzugefügt. Wenn gar kein Eintrag "
"angege-\n"
" ben wird, wird der Eintragstext der Info-Datei selbst "
"ent-\n"
" nommen.\n"
"--help diese Hilfe zeigen\n"
"--info-file=DATEI Info-Datei angeben, die im Verzeichnis zu installieren "
"ist.\n"
" Gleichbedeutend mit dem INFO-DATEI-Argument\n"
"--info-dir=VERZ wie --dir-file=VERZ/dir.\n"
"--item=TEXT wie --entry TEXT. Ein Info-Verzeichnis-Eintrag ist "
"nämlich\n"
" ein Menupunkt\n"
"--quiet Warnungen unterdrücken\n"
"--remove wie --delete\n"
"--section=ABSCHNITT stelle die Einträge dieser Datei in den Abschnitt "
"ABSCHNITT\n"
" des Verzeichnisses. Wenn mehr als ein --section "
"angegeben\n"
" wird, werden alle Einträge in jedem der Abschnitte\n"
" hinzugefügt. Wenn gar kein --section angegeben wird, "
"wird\n"
" der Eintragstext der Info-Datei selbst entnommen.\n"
"--version Programmversion anzeigen\n"
"\n"
"Fehlerberichte (\"bugs\") bitte an <bug-texinfo@prep.ai.mit.edu> schicken.\n"
#: util/install-info.c:334
msgid ""
"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"
msgstr ""
#: util/install-info.c:357
#, c-format
msgid "%s: could not read (%s) and could not create (%s)\n"
msgstr ""
#: util/install-info.c:456 util/install-info.c:466
#, c-format
msgid "%s: Specify the Info directory only once.\n"
msgstr "%s: Info-Verzeichnis nur einmal angeben.\n"
#: util/install-info.c:494
#, c-format
msgid "%s: Specify the Info file only once.\n"
msgstr "%s: Info-Datei nur einmal angeben.\n"
#: util/install-info.c:521
#, c-format
msgid "install-info (GNU %s) %s\n"
msgstr ""
# checkit
#: util/install-info.c:541
#, c-format
msgid "excess command line argument `%s'"
msgstr "Kommandozeilen-Argument »%s« wird übergangen"
# checkit
#: util/install-info.c:545
#, fuzzy
msgid "No input file specified; try --help for more information."
msgstr "»%s --help« gibt weitere Informationen.\n"
# checkit
#: util/install-info.c:547
#, fuzzy
msgid "No dir file specified; try --help for more information."
msgstr "»%s --help« gibt weitere Informationen.\n"
#: util/install-info.c:599 util/install-info.c:622
msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
msgstr "START-INFO-DIR-ENTRY ohne END-INFO-DIR-ENTRY"
#: util/install-info.c:618
msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
msgstr "END-INFO-DIR-ENTRY ohne START-INFO-DIR-ENTRY"
#. No need to abort here, the original info file may not have
#. the requisite Texinfo commands. This is not something an
#. installer should have to correct (it's a problem for the
#. maintainer), and there's no need to cause subsequent parts of
#. `make install' to fail.
#: util/install-info.c:632
#, fuzzy, c-format
msgid "no info dir entry in `%s'"
msgstr "Kein Info-Verzeichnis-Eintrag in »%s«"
#: util/install-info.c:843
#, c-format
msgid "menu item `%s' already exists, for file `%s'"
msgstr "Menupunkt »%s« bereits vorhanden, für Datei »%s«"
#: util/install-info.c:866
#, c-format
msgid "no entries found for `%s'; nothing deleted"
msgstr "keine Einträge für »%s« gefunden; nichts entfernt"
#: util/texindex.c:263
msgid "keep temporary files around after processing"
msgstr "temporäre Dateien bis nach der Verarbeitung aufheben"
#: util/texindex.c:265
msgid "do not keep temporary files around after processing (default)"
msgstr "keine temporäre Dateien bis nach der Verarbeitung aufheben (Standard)"
#: util/texindex.c:267
msgid "send output to FILE"
msgstr "Ausgabe nach DATEI schicken"
#: util/texindex.c:269
msgid "display version information and exit"
msgstr "Programmversion anzeigen"
#: util/texindex.c:271
msgid "display this help and exit"
msgstr "diese Hilfe anzeigen"
#: util/texindex.c:282
#, c-format
msgid "Usage: %s [OPTION]... FILE...\n"
msgstr "Aufruf: %s [OPTION]... DATEI...\n"
#: util/texindex.c:283
msgid "Generate a sorted index for each TeX output FILE.\n"
msgstr "Erzeuge einen sortierten Index für jede TeX-Ausgabedatei.\n"
#. Avoid trigraph nonsense.
#: util/texindex.c:285
msgid "Usually FILE... is `foo.??' for a document `foo.texi'.\n"
msgstr "DATEI... ist normalerweise »foo.??« für ein Dokument »foo.texi«.\n"
#: util/texindex.c:286
msgid ""
"\n"
"Options:\n"
msgstr ""
"\n"
"Optionen:\n"
#: util/texindex.c:300
msgid ""
"\n"
"Email bug reports to bug-texinfo@prep.ai.mit.edu."
msgstr ""
"\n"
"Fehler (\"bugs\") bitte an <bug-texinfo@prep.ai.mit.edu> melden."
#: util/texindex.c:347
#, fuzzy, c-format
msgid "texindex (GNU %s %s) 2.1\n"
msgstr "GNU Makeinfo (Texinfo 3.9) %d.%d\n"
#: util/texindex.c:926 util/texindex.c:960 util/texindex.c:1036
#: util/texindex.c:1064
#, c-format
msgid "%s: not a texinfo index file"
msgstr "%s: keine Texinfo-Indexdatei"
#: util/texindex.c:1021
#, c-format
msgid "failure reopening %s"
msgstr "Fehler beim Wiederöffnen von »%s«"
# checkit
#: util/texindex.c:1334
#, c-format
msgid "entry %s follows an entry with a secondary name"
msgstr "Eintrag »%s« folgt einem Eintrag mit einem Zweitnamen"
#: util/texindex.c:1672
#, fuzzy, c-format
msgid "%s; for file `%s'.\n"
msgstr "%s; für Datei »%s«.\n"
# checkit
#: util/texindex.c:1733
#, c-format
msgid "Virtual memory exhausted in %s ()! Needed %d bytes."
msgstr "Virtual memory exhausted in %s ()! Needed %d bytes."
#~ msgid "%s: --fill-column arg must be numeric, not `%s'.\n"
#~ msgstr "%s: Argument für --fill-column muss numerisch sein, nicht »%s«.\n"
#~ msgid "%s: --reference-limit arg must be numeric, not `%s'.\n"
#~ msgstr ""
#~ "%s: Argument für --reference-limit muss numerisch sein, nicht »%s«.\n"
#~ msgid "Misplaced `}'"
#~ msgstr "Fehlplazierte »}«"
#~ msgid "No input file specified"
#~ msgstr "Keine Eingabedatei angegeben"
#~ msgid "No dir file specified"
#~ msgstr "Keine »dir«-Datei angegeben"
#, fuzzy
#~ msgid "No earlier nodes in this window."
#~ msgstr "Es gibt kein Menu in diesem Node."
#~ msgid "Cross-reference must be terminated with a period or a comma"
#~ msgstr "Querverweis muss mit einem Punkt oder Komma beendet werden."
#~ msgid "stdin"
#~ msgstr "Standard-Eingabe"
#~ msgid "noname.texi"
#~ msgstr "noname.texi"
#~ msgid "No node name specified for `%c%s' command"
#~ msgstr "Keinen \"node\"-Namen für »%c%s«-Befehl angegeben"
#~ msgid ""
#~ "Validation error. `%s' field points to node `%s', which doesn't exist"
#~ msgstr ""
#~ "Fehler beim Überprüfen. Feld »%s« verweist auf \"node\" »%s«, den es nicht "
#~ "gibt."
# checkit
#~ msgid "Unknown file system error"
#~ msgstr "Unbekannt file system Fehler"
#~ msgid "Unknown index reference `%s'"
#~ msgstr "Unbekannter Index-Verweis »%s«"
#~ msgid "Unknown index reference"
#~ msgstr "Unbekannter Index-Verweis"
#~ msgid "`%c%s' expected more than just `%s'. It needs something in `{...}'"
#~ msgstr "»%c%s« erwartet mehr als nur »%s«. Es verlangt etwas in »{...}«"
#~ msgid "%s: can not open: %s\n"
#~ msgstr "%s: kann nicht geöffnet werden: %s\n"
#~ msgid "%s: %s: %d: mismatched braces\n"
#~ msgstr "%s: %s: %d: nicht übereinstimmende Klammern\n"
#~ msgid "unknown error %d"
#~ msgstr "unbekannter Fehler %d"
#~ msgid "Unknown error"
#~ msgstr "Unbekannter Fehler"
#~ msgid "--version"
#~ msgstr "--version"
#~ msgid "--keep"
#~ msgstr "--keep"
#~ msgid "-k"
#~ msgstr "-k"
#~ msgid "--help"
#~ msgstr "--help"
#~ msgid "-h"
#~ msgstr "-h"
#~ msgid "--output"
#~ msgstr "--output"
#~ msgid "-o"
#~ msgstr "-o"
#~ msgid "Index"
#~ msgstr "Index"
#~ msgid "GNU Info (Texinfo 3.9) %s\n"
#~ msgstr "GNU Info (Texinfo 3.9) %s\n"
#~ msgid "The current search path is:\n"
#~ msgstr "Der aktuelle Suchpfad ist:\n"
#~ msgid ""
#~ "Commands available in the echo area:\n"
#~ "\n"
#~ msgstr "Verfügbare Befehle im Echo-Bereich:\n"
# darf derzeit nicht übersetzt werden! -ke-
#~ msgid "Help"
#~ msgstr "Help"
# darf derzeit nicht übersetzt werden! -ke-
#~ msgid "Help-Small-Screen"
#~ msgstr "Help-Small-Screen"
#~ msgid "Info"
#~ msgstr "Info"
#~ msgid "ESC "
#~ msgstr "ESC "
#~ msgid "%s (%s): %s."
#~ msgstr "%s (%s): %s."
#~ msgid "ESC %s"
#~ msgstr "ESC %s"
#~ msgid "LFD"
#~ msgstr "LFD"
#~ msgid "TAB"
#~ msgstr "TAB"
#~ msgid "RET"
#~ msgstr "RET"
#~ msgid "ESC"
#~ msgstr "ESC"
#~ msgid "SPC"
#~ msgstr "SPC"
#~ msgid "DEL"
#~ msgstr "DEL"
# nicht üs -ke-
#~ msgid "echo-area-"
#~ msgstr "echo-area-"
#~ msgid "/* %s -- Generated declarations for Info commands. */\n"
#~ msgstr "/* %s -- Erzeugte Deklarationen für Info-Befehle. */\n"
# checkit
#~ msgid "done"
#~ msgstr "fertig"
# checkit
#~ msgid "%s: Out of virtual memory!\n"
#~ msgstr "%s: Hauptspeicher erschöpft!\n"
#~ msgid "Multitables cannot be nested"
#~ msgstr "\"Multitables\" können nicht verschachtelt sein"
#~ msgid "--no-keep"
#~ msgstr "--no-keep"
#~ msgid "*Apropos*"
#~ msgstr "*Apropos*"
# checkit
#~ msgid "******************************"
#~ msgstr "******************************"
# Version française du progiciel Texinfo-3.9
# Copyright (C) 1996 Free Software Foundation, Inc.
# Laurent Bourbeau <bourbeau@progiciels-bpi.ca>, 1996.
#
msgid ""
msgstr ""
"Project-Id-Version: texinfo 3.9POT-Creation-Date: 1997-07-13 "
"17:12-0400PO-Revision-Date: 1997-03-11 00:47 ESTLast-Translator: Laurent "
"Bourbeau <bourbeau@progiciels-bpi.ca>Language-Team: French "
"<fr@li.org>MIME-Version: 1.0Content-Type: text/plain; "
"charset=ISO-8859-1Content-Transfer-Encoding: 8-bitPOT-Creation-Date: "
"1997-07-13 17:12-0400POT-Creation-Date: 1997-07-13 "
"17:12-0400POT-Creation-Date: 1997-07-13 17:12-0400POT-Creation-Date: "
"1997-07-15 14:50-0400POT-Creation-Date: 1997-07-15 "
"14:50-0400POT-Creation-Date: 1997-07-15 15:35-0400POT-Creation-Date: "
"1997-07-15 15:35-0400POT-Creation-Date: 1997-07-17 "
"17:50-0400POT-Creation-Date: 1997-07-18 10:40-0400POT-Creation-Date: "
"1997-07-19 17:19-0400POT-Creation-Date: 1997-07-20 "
"08:19-0400POT-Creation-Date: 1997-07-20 08:19-0400POT-Creation-Date: "
"1997-07-20 08:19-0400POT-Creation-Date: 1997-07-25 "
"17:57-0400POT-Creation-Date: 1997-07-25 17:57-0400 POT-Creation-Date: "
"1997-07-29 18:04-0400POT-Creation-Date: 1997-07-31 "
"17:43-0400gPOT-Creation-Date: 1997-07-31 17:43-0400\n"
"m"
#. Commands found in "./session.c".
#: info/doc.c:27 info/session.c:629
msgid "Move down to the next line"
msgstr "Descendre à la ligne suivante"
#. Move WINDOW's point up to the previous line if possible.
#: info/doc.c:28 info/session.c:644
msgid "Move up to the previous line"
msgstr "Monter à la ligne précédente"
#. Move WINDOW's point to the end of the true line.
#: info/doc.c:29 info/session.c:659
msgid "Move to the end of the line"
msgstr "Aller à la fin de la ligne"
#. Move WINDOW's point to the beginning of the true line.
#: info/doc.c:30 info/session.c:679
msgid "Move to the start of the line"
msgstr "Aller au début de la ligne"
#. Commands found in "./echo-area.c".
#: info/doc.c:31 info/doc.c:84 info/echo-area.c:283 info/session.c:698
msgid "Move forward a character"
msgstr "Avancer d'un caractère"
#. Move point backward in the node.
#: info/doc.c:32 info/doc.c:85 info/echo-area.c:295 info/session.c:714
msgid "Move backward a character"
msgstr "Reculer d'un caractère"
#. Move forward a word in the input line.
#: info/doc.c:33 info/doc.c:88 info/echo-area.c:320 info/session.c:732
msgid "Move forward a word"
msgstr "Avancer d'un mot"
#: info/doc.c:34 info/doc.c:89 info/echo-area.c:360 info/session.c:781
msgid "Move backward a word"
msgstr "Reculer d'un mot"
#: info/doc.c:35 info/session.c:1121
msgid "Move forwards or down through node structure"
msgstr "Avancer ou descendre à travers la structure de noeuds"
#: info/doc.c:36 info/session.c:1137
#, fuzzy
msgid "Move backwards or up through node structure"
msgstr "Avancer ou descendre à travers la structure de noeuds"
#. Show the next screen of WINDOW's node.
#: info/doc.c:37 info/session.c:1152
msgid "Scroll forward in this window"
msgstr "Défiler vers l'avant dans cette fenêtre"
#. Show the previous screen of WINDOW's node.
#: info/doc.c:38 info/session.c:1197
msgid "Scroll backward in this window"
msgstr "Défiler vers l'arrière dans cette fenêtre"
#. Move to the beginning of the node.
#: info/doc.c:39 info/session.c:1237
msgid "Move to the start of this node"
msgstr "Aller au noeud de départ de ce noeud"
#. Move to the end of the node.
#: info/doc.c:40 info/session.c:1244
msgid "Move to the end of this node"
msgstr "Aller au noeud terminal de ce noeud"
#. ****************************************************************
#.
#. Commands for Manipulating Windows
#.
#. ****************************************************************
#. Make the next window in the chain be the active window.
#: info/doc.c:41 info/session.c:1257
msgid "Select the next window"
msgstr "Sélectionner la fenêtre suivante"
#. Make the previous window in the chain be the active window.
#: info/doc.c:42 info/session.c:1296
msgid "Select the previous window"
msgstr "Sélectionner la fenêtre précédente"
#. Split WINDOW into two windows, both showing the same node. If we
#. are automatically tiling windows, re-tile after the split.
#: info/doc.c:43 info/session.c:1347
msgid "Split the current window"
msgstr "Diviser en deux la fenêtre courante"
#. Delete WINDOW, forgetting the list of last visited nodes. If we are
#. automatically displaying footnotes, show or remove the footnotes
#. window. If we are automatically tiling windows, re-tile after the
#. deletion.
#: info/doc.c:44 info/session.c:1428
msgid "Delete the current window"
msgstr "Éliminer la fenêtre courante"
#. Just keep WINDOW, deleting all others.
#: info/doc.c:45 info/session.c:1469
msgid "Delete all other windows"
msgstr "Éliminer toutes les autres fenêtres"
#. Scroll the "other" window of WINDOW.
#: info/doc.c:46 info/session.c:1515
msgid "Scroll the other window"
msgstr "Défiler l'autre fenêtre"
#. Change the size of WINDOW by AMOUNT.
#: info/doc.c:47 info/session.c:1535
msgid "Grow (or shrink) this window"
msgstr "Agrandir (ou réduire) cette fenêtre"
#: info/doc.c:48 info/session.c:1546
msgid "Divide the available screen space among the visible windows"
msgstr "Répartir l'espace écran disponible parmi les fenêtres visibles"
#: info/doc.c:49 info/session.c:1553
msgid "Toggle the state of line wrapping in the current window"
msgstr "Basculer l'état du remplissage de ligne dans la fenêtre courante"
#. Make WINDOW display the "Next:" node of the node currently being
#. displayed.
#: info/doc.c:50 info/session.c:1714
#, fuzzy
msgid "Select the `Next' node"
msgstr "Sélectionner la fenêtre suivante"
#. Make WINDOW display the "Prev:" node of the node currently being
#. displayed.
#: info/doc.c:51 info/session.c:1722
#, fuzzy
msgid "Select the `Prev' node"
msgstr "Sélection des autres noeuds:"
#. Make WINDOW display the "Up:" node of the node currently being
#. displayed.
#: info/doc.c:52 info/session.c:1730
#, fuzzy
msgid "Select the `Up' node"
msgstr "Sélection des autres noeuds:"
#. Make WINDOW display the last node of this info file.
#: info/doc.c:53 info/session.c:1737
#, fuzzy
msgid "Select the last node in this file"
msgstr "Sélectionner le premier noeud dans ce fichier"
#. Make WINDOW display the first node of this info file.
#: info/doc.c:54 info/session.c:1759
msgid "Select the first node in this file"
msgstr "Sélectionner le premier noeud dans ce fichier"
#: info/doc.c:55 info/session.c:2401
msgid "Select the most recently selected node"
msgstr "Choisir le noeud qui a été le plus récemment sélectionné"
#: info/doc.c:56 info/session.c:1778
msgid "Select the last item in this node's menu"
msgstr "Sélectionner le dernier item dans ce menu de noeuds"
#. Use KEY (a digit) to select the Nth menu item in WINDOW->node.
#: info/doc.c:57 info/session.c:1784
msgid "Select this menu item"
msgstr "Sélectionner cet item menu"
#. Read a line (with completion) which is the name of a menu item,
#. and select that item.
#: info/doc.c:58 info/session.c:2042
msgid "Read a menu item and select its node"
msgstr "Lire un item menu et sélectionner son noeud"
#: info/doc.c:59 info/session.c:2050
msgid "Read a footnote or cross reference and select its node"
msgstr ""
"Lire une note en bas de page ou une référence croisée et\n"
"sélectionner son noeud."
#. Position the cursor at the start of this node's menu.
#: info/doc.c:60 info/session.c:2056
msgid "Move to the start of this node's menu"
msgstr "Aller au point de départ de ce menu de noeud."
#: info/doc.c:61 info/session.c:2080
msgid "Visit as many menu items at once as possible"
msgstr "Visiter d'un seul coup autant d'items menu que possible"
#. Read a line of input which is a node name, and go to that node.
#: info/doc.c:62 info/session.c:2108
msgid "Read a node name and select it"
msgstr "Lire un nom de noeud et sélectionner ce noeud"
#: info/doc.c:63 info/session.c:2194
msgid "Read a manpage reference and select it"
msgstr "Lire une référence de page-manuel et la sélectionner"
#. Move to the "Top" node in this file.
#: info/doc.c:64 info/session.c:2228
msgid "Select the node `Top' in this file"
msgstr "Sélectionner le noeud «Top» dans ce fichier"
#. Move to the node "(dir)Top".
#: info/doc.c:65 info/session.c:2234
msgid "Select the node `(dir)'"
msgstr "Sélectionner le noeud «(dir)»"
#. Kill named node.
#: info/doc.c:66 info/session.c:2407
msgid "Kill this node"
msgstr "Effacer ce noeud"
#. Read the name of a file and select the entire file.
#: info/doc.c:67 info/session.c:2415
msgid "Read the name of a file and select it"
msgstr "Lire le nom d'un fichier et le sélectionner"
#: info/doc.c:68 info/session.c:2634
msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
msgstr "Acheminer les contenus de ce noeud à travers INFO_PRINT_COMMAND"
#: info/doc.c:69 info/session.c:2946
msgid "Read a string and search for it"
msgstr "Lire une chaîne et en faire la fouille"
#: info/doc.c:70 info/doc.c:71 info/session.c:3020 info/session.c:3026
msgid "Search interactively for a string as you type it"
msgstr "Fouiller interactivement pour une chaîne telle que vous la tapez"
#: info/doc.c:72 info/session.c:3579
msgid "Move to the previous cross reference"
msgstr "Aller à la référence croisée précédente"
#: info/doc.c:73 info/session.c:3588
msgid "Move to the next cross reference"
msgstr "Aller à la prochaine référence croisée"
#: info/doc.c:74 info/session.c:3598
msgid "Select reference or menu item appearing on this line"
msgstr "Sélectionner la référence ou l'item menu apparaissant sur cette ligne"
#. ****************************************************************
#.
#. Miscellaneous Info Commands
#.
#. ****************************************************************
#. What to do when C-g is pressed in a window.
#: info/doc.c:75 info/session.c:3620
msgid "Cancel current operation"
msgstr "Annuler l'opération courante"
#: info/doc.c:76 info/session.c:3636
msgid "Move to the cursor to a specific line of the window"
msgstr "Déplacer le curseur sur une ligne spécifique de la fenêtre."
#. Clear the screen and redraw its contents. Given a numeric argument,
#. move the line the cursor is on to the COUNT'th line of the window.
#: info/doc.c:77 info/session.c:3668
msgid "Redraw the display"
msgstr "Redessiner l'affichage écran."
#. This command does nothing. It is the fact that a key is bound to it
#. that has meaning. See the code at the top of info_session ().
#: info/doc.c:78 info/session.c:3705
msgid "Quit using Info"
msgstr "Quitter en utilisant Info"
#: info/doc.c:80 info/session.c:3958
msgid "Add this digit to the current numeric argument"
msgstr "Ajouter ce chiffre à l'argument numérique courant"
#: info/doc.c:81
#, fuzzy
msgid "universal-argument"
msgstr "Utilisé internement par \\[universal-argument]"
#: info/doc.c:81 info/session.c:3967
msgid "Start (or multiply by 4) the current numeric argument"
msgstr "Enclencher (ou multipler par 4) l'argument numérique courant"
#: info/doc.c:82 info/session.c:3982
msgid "Internally used by \\[universal-argument]"
msgstr "Utilisé internement par \\[universal-argument]"
#: info/doc.c:86 info/echo-area.c:307
msgid "Move to the start of this line"
msgstr "Se déplacer au début de cette ligne"
#: info/doc.c:87 info/echo-area.c:312
msgid "Move to the end of this line"
msgstr "Se déplacer à la fin de cette ligne"
#: info/doc.c:90 info/echo-area.c:400
msgid "Delete the character under the cursor"
msgstr "Éliminer le caractère sous le curseur"
#: info/doc.c:91 info/echo-area.c:430
msgid "Delete the character behind the cursor"
msgstr "Éliminer le caractère précédent le curseur"
#: info/doc.c:92 info/echo-area.c:451
msgid "Cancel or quit operation"
msgstr "Annuler ou opération de quitter"
#: info/doc.c:93 info/echo-area.c:466
msgid "Accept (or force completion of) this line"
msgstr "Accepter cette ligne (ou en forcer la complétion)"
#: info/doc.c:94 info/echo-area.c:471
msgid "Insert next character verbatim"
msgstr "Insérer le prochain caractère textuellement"
#: info/doc.c:95 info/echo-area.c:479
msgid "Insert this character"
msgstr "Insérer ce caractère"
#: info/doc.c:96 info/echo-area.c:497
msgid "Insert a TAB character"
msgstr "Insérer un caractère de tabulation"
#. Transpose the characters at point. If point is at the end of the line,
#. then transpose the characters before point.
#: info/doc.c:97 info/echo-area.c:504
msgid "Transpose characters at point"
msgstr "Transposer les caractères en position du point courant"
#: info/doc.c:98 info/echo-area.c:555
msgid "Yank back the contents of the last kill"
msgstr "Recoller le contenu du dernier effacement"
#. If the last command was yank, or yank_pop, and the text just before
#. point is identical to the current kill item, then delete that text
#. from the line, rotate the index down, and yank back some other text.
#: info/doc.c:99 info/echo-area.c:575
msgid "Yank back a previous kill"
msgstr "Recoller un effacement antérieur"
#. Delete the text from point to end of line.
#: info/doc.c:100 info/echo-area.c:608
msgid "Kill to the end of the line"
msgstr "Effacer du point courant jusqu'à la fin de la ligne"
#: info/doc.c:101 info/echo-area.c:621
msgid "Kill to the beginning of the line"
msgstr "Effacer du point courant jusqu'au début de la ligne"
#. Delete from point to the end of the current word.
#: info/doc.c:102 info/echo-area.c:633
msgid "Kill the word following the cursor"
msgstr "Effacer le mot suivant le curseur"
#: info/doc.c:103 info/echo-area.c:652
msgid "Kill the word preceding the cursor"
msgstr "Effacer le mot précédent le curseur"
#: info/doc.c:104 info/echo-area.c:916
msgid "List possible completions"
msgstr "Énumérer les complétions possibles"
#: info/doc.c:105 info/echo-area.c:1090
msgid "Insert completion"
msgstr "Insérer la complétion"
#. Scroll the "other" window. If there is a window showing completions, scroll
#. that one, otherwise scroll the window which was active on entering the read
#. function.
#: info/doc.c:106 info/echo-area.c:1321
msgid "Scroll the completions window"
msgstr "Dérouler la fenêtre des complétions"
#. Commands found in "./infodoc.c".
#: info/doc.c:108 info/infodoc.c:328
msgid "Display help message"
msgstr "Afficher le message d'aide"
#. Show the Info help node. This means that the "info" file is installed
#. where it can easily be found on your system.
#: info/doc.c:109 info/infodoc.c:346
msgid "Visit Info node `(info)Help'"
msgstr "Visiter le noeud Info «(info)Aide»"
#: info/doc.c:110 info/infodoc.c:470
msgid "Print documentation for KEY"
msgstr "Imprimer la documentation pour KEY."
#: info/doc.c:111
msgid "Show what to type to execute a given command"
msgstr "Montrer quoi écrire afin d'exécuter une commande donnée."
#. Commands found in "./m-x.c".
#: info/doc.c:113 info/m-x.c:69
msgid "Read the name of an Info command and describe it"
msgstr "Lire le nom d'une commande Info et la décrire"
#: info/doc.c:114 info/m-x.c:96
msgid "Read a command name in the echo area and execute it"
msgstr "Lire le nom d'une commande dans la zone écho et l'exécuter"
#: info/doc.c:115 info/m-x.c:150
msgid "Set the height of the displayed window"
msgstr "Ajuster la hauteur de la fenêtre affichée"
#. Commands found in "./indices.c".
#: info/doc.c:117 info/indices.c:175
msgid "Look up a string in the index for this file"
msgstr "Rechercher une chaîne dans l'index pour ce fichier"
#: info/doc.c:118 info/indices.c:332
msgid ""
"Go to the next matching index item from the last `\\[index-search]' command"
msgstr ""
"Aller au prochain item d'appariement d'index à partir de la dernière\n"
"commande `\\[index-search]'"
#: info/doc.c:119 info/indices.c:616
msgid "Grovel all known info file's indices for a string and build a menu"
msgstr ""
"Aplatir tous les indices de fichier info connus pour une chaîne\n"
"et construire un menu"
#. Commands found in "./nodemenu.c".
#: info/doc.c:121 info/nodemenu.c:217
msgid "Make a window containing a menu of all of the currently visited nodes"
msgstr "Faire une fenêtre contenant un menu de tout noeud actuellement visité."
#: info/doc.c:122 info/nodemenu.c:297
msgid "Select a node which has been previously visited in a visible window"
msgstr "Sélectionner un noeud qui a déjà été visité dans une fenêtre visible."
#. Commands found in "./footnotes.c".
#: info/doc.c:124 info/footnotes.c:232
msgid "Show the footnotes associated with this node in another window"
msgstr ""
"Montrer les notes en bas de page associées à ce noeud dans\n"
"une autre fenêtre"
#. Commands found in "./variables.c".
#: info/doc.c:126 info/variables.c:77
msgid "Explain the use of a variable"
msgstr "Expliquer l'usage d'une variable"
#: info/doc.c:127 info/variables.c:102
msgid "Set the value of an Info variable"
msgstr "Fixer la valeur d'une variable Info"
#: info/echo-area.c:562
msgid "Kill ring is empty"
msgstr "L'anneau des effacements temporaires est vide"
#: info/echo-area.c:871
msgid "Not complete"
msgstr "Non complet"
#: info/echo-area.c:929
msgid "No completions"
msgstr "Aucune complétion"
#: info/echo-area.c:933
msgid "Sole completion"
msgstr "Une seule complétion"
#: info/echo-area.c:942
#, c-format
msgid "There %s %d "
msgstr "Comme complétion(s) %s %d "
#: info/echo-area.c:942
msgid "is"
msgstr "il y a"
#: info/echo-area.c:942
msgid "are"
msgstr "il y a"
#: info/echo-area.c:945
#, fuzzy, c-format
msgid "completion%s:\n"
msgstr "Aucune complétion"
#: info/echo-area.c:1223
msgid "Building completions..."
msgstr "Construction des complétions..."
#: info/footnotes.c:206
msgid "Footnotes could not be displayed"
msgstr "Les notes en bas de page ne peuvent pas être affichées"
#: info/indices.c:205
msgid "Finding index entries..."
msgstr "Recherche des entrées d'index..."
#: info/indices.c:212
msgid "No indices found."
msgstr "Aucun indice retrouvé."
#: info/indices.c:222
msgid "Index entry: "
msgstr "Entrée d'index: "
#: info/indices.c:342
msgid "No previous index search string."
msgstr "Aucune autre chaîne de fouille d'index."
#: info/indices.c:349
msgid "No index entries."
msgstr "Aucune entrée d'index."
#: info/indices.c:382
#, c-format
msgid "No %sindex entries containing \"%s\"."
msgstr "Aucune entrée %sindex contenant «%s»."
#: info/indices.c:383
msgid "more "
msgstr "plus "
#: info/indices.c:393
msgid "CAN'T SEE THIS"
msgstr "NE PEUT PAS VOIR CECI"
#: info/indices.c:429
#, c-format
msgid "Found \"%s\" in %s. (`\\[next-index-match]' tries to find next.)"
msgstr ""
"Trouver «%s» dans %s. (`\\[next-index-match]' tente de trouver\n"
"le prochain.)"
#: info/indices.c:533
#, c-format
msgid "Scanning indices of \"%s\"..."
msgstr "Fouille des indices de «%s»..."
#: info/indices.c:620
msgid "Index apropos: "
msgstr "Index à-propos: "
#: info/indices.c:650
#, c-format
msgid ""
"\n"
"* Menu: Nodes whoses indices contain \"%s\":\n"
msgstr ""
"\n"
"* Menu: Noeuds dont les indices contiennent «%s»:\n"
#: info/info.c:347
#, fuzzy
msgid "no entries found\n"
msgstr "Aucun indice retrouvé."
#: info/info.c:390
msgid "There is no menu in this node."
msgstr "Il n'y a pas de menu dans ce noeud."
#: info/info.c:421
#, c-format
msgid "There is no menu item \"%s\" in this node."
msgstr "Il n'y a pas d'item menu «%s» dans ce noeud."
#: info/info.c:485
#, c-format
msgid "Unable to find the node referenced by \"%s\"."
msgstr "Incappable de trouver le noeud référencé par «%s»."
# Est-ce vraiment un message à traduire? NON.
#: info/info.c:595
msgid ""
"Usage: info [-d dir-path] [-f info-file] [-o output-file] [-n node-name]..."
msgstr ""
"Usage: info [-d dir-path] [-f info-file] [-o output-file] [-n node-name]..."
# Est-ce vraiment un message à traduire? NON.
#: info/info.c:596
msgid ""
" [--directory dir-path] [--file info-file] [--node node-name]..."
msgstr ""
" [--directory dir-path] [--file info-file] [--node node-name]..."
# Est-ce vraiment un message à traduire? NON.
#: info/info.c:597
msgid " [--help] [--output output-file] [--subnodes] [--version]"
msgstr " [--help] [--output output-file] [--subnodes] [--version]"
# Est-ce vraiment un message à traduire? NON.
#: info/info.c:598
msgid " [--dribble dribble-file] [--restore from-file]"
msgstr " [--dribble dribble-file] [--restore from-file]"
# Est-ce vraiment un message à traduire? NON.
#: info/info.c:599
msgid " [menu-selection ...]"
msgstr " [menu-selection ...]"
#: info/info.c:607
#, fuzzy
msgid ""
"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."
msgstr ""
"Voici une brève description des options en mode Info.\n"
"Pour une description plus détaillée sur le comment utiliser le mode Info,\n"
"tapper «info info options».\n"
"\n"
" --directory RÉP Ajouter le RÉPertoire à INFOPATH.\n"
" --dribble FICHIER Mémoriser les touches de l'usager dans FICHIER.\n"
" --file FICHIER Spécifier le FICHIER Info à visiter.\n"
" --node NOEUD Spécifier les noms de NOEUD à visiter en premier.\n"
" --output FICHIER Sortir les noeuds sélectionnés dans FICHIER.\n"
" --restore FICHIER Lire les touches initiales à partir de FICHIER.\n"
" --subnodes Sortir récursivement les items menu.\n"
" --help Afficher l'aide-mémoire.\n"
" --version Afficher le nom et la version du logiciel.\n"
"\n"
"Les arguments résiduels à Info sont traités comme étant les noms des items\n"
"menu dans le noeud initial visité. Vous pouvez aisément rejoindre le\n"
"noeud de votre choix en spécifiant les noms de menu lesquels décrivent\n"
"le chemin de ce noeud. Par exemple, «info emacs buffers».\n"
"\n"
"Rapporter toute anomalie à bug-texinfo@prep.ai.mit.edu."
#: info/infodoc.c:50
msgid "Basic Commands in Info Windows"
msgstr "Commandes de base en Info Windows"
#: info/infodoc.c:211
msgid ""
"The following commands can only be invoked via M-x:\n"
"\n"
msgstr ""
"Les commandes suivantes peuvent être invoquées seulement via M-x:\n"
"\n"
#: info/infodoc.c:228
msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
msgstr "--- Utiliser `\\[history-node]' ou `\\[kill-node]' pour sortir ---\n"
#: info/infodoc.c:483
#, c-format
msgid "Describe key: %s"
msgstr "Décrire la clé: %s"
#: info/infodoc.c:492
#, c-format
msgid "ESC %s is undefined."
msgstr "ESC %s est non défini."
#: info/infodoc.c:509
#, c-format
msgid "%s is undefined."
msgstr "%s est non défini."
#: info/infodoc.c:535
#, c-format
msgid "%s is defined to %s."
msgstr "%s est défini à %s."
#: info/infodoc.c:731
msgid "Where is command: "
msgstr "Où se trouve la commande: "
#: info/infodoc.c:753
#, c-format
msgid "`%s' is not on any keys"
msgstr "`%s' ne se trouve pas sur n'importe quelle clé"
#: info/infodoc.c:759
#, c-format
msgid "%s can only be invoked via %s."
msgstr "%s peut être invoqué seulement via %s."
#: info/infodoc.c:762
#, c-format
msgid "%s can be invoked via %s."
msgstr "%s peut être invoqué via %s."
#: info/infodoc.c:766
#, c-format
msgid "There is no function named `%s'"
msgstr "Il n'y a pas de fonction nommée `%s'"
#: info/m-x.c:73
msgid "Describe command: "
msgstr "Décrire la commande: "
#: info/m-x.c:134
msgid "Cannot execute an `echo-area' command here."
msgstr "Ne peut pas exécuter une commande «echo-area» en cet endroit."
#: info/m-x.c:163
#, c-format
msgid "Set screen height to (%d): "
msgstr "Ajuster la hauteur de l'écran à (%d): "
#: info/makedoc.c:126
msgid ""
" Source files groveled to make this file include:\n"
"\n"
msgstr ""
" Les fichiers sources aplatis pour faire ce fichier incluent:\n"
"\n"
#: info/makedoc.c:450
#, c-format
msgid "Couldn't manipulate the file %s.\n"
msgstr "Ne peut pas manipuler le fichier %s.\n"
#: info/nodemenu.c:28
msgid ""
"\n"
"* Menu:\n"
" (File)Node Lines Size Containing File\n"
" ---------- ----- ---- ---------------"
msgstr ""
"\n"
"* Menu:\n"
" (Fichier)Noeud Lignes Taille Contenant Fichier(s)\n"
" -------------- ------ ------ --------------------"
#: info/nodemenu.c:197
msgid ""
"Here is the menu of nodes you have recently visited.\n"
"Select one from this menu, or use `\\[history-node]' in another window.\n"
msgstr ""
"Voici le menu de noeuds que vous avez visité récemment.\n"
"Sélectionner un noeud de ce menu, ou utiliser `\\[history-node]' dans\n"
"une autre fenêtre.\n"
#: info/nodemenu.c:309
msgid "Select visited node: "
msgstr "Sélectionner un noeud visité: "
#: info/nodemenu.c:329 info/session.c:1996
#, c-format
msgid "The reference disappeared! (%s)."
msgstr "La référence est disparue! (%s)."
#: info/session.c:162
#, c-format
msgid ""
"Welcome to Info version %s. \"\\[get-help-window]\" for help, "
"\"\\[menu-item]\" for menu item."
msgstr ""
"Bienvenue au mode Info version %s.\n"
" \"\\[get-help-window]\" pour obtenir de l'aide,\n"
" \"\\[menu-item]\" pour obtenir l'item menu."
#: info/session.c:855
msgid " times"
msgstr " fois"
#: info/session.c:857
#, c-format
msgid "%d times"
msgstr "%d fois"
#: info/session.c:895
msgid "No \"Next\" pointer for this node."
msgstr "Aucun pointeur «Next» pour ce noeud."
#: info/session.c:898
msgid "Following \"Next\" node..."
msgstr "En suivant le noeud «Next»..."
#: info/session.c:899 info/session.c:927 info/session.c:999
#: info/session.c:1717
msgid "Next"
msgstr "Noeud Next"
#: info/session.c:915
msgid "Selecting first menu item..."
msgstr "Sélection du premier item menu..."
#: info/session.c:926
msgid "Selecting \"Next\" node..."
msgstr "Sélection du noeud «Next»..."
# Est-ce vraiment un message à traduire?
#: info/session.c:950 info/session.c:1063 info/session.c:1733
msgid "Up"
msgstr "Noeud «Up»"
#: info/session.c:1020
msgid "No more nodes."
msgstr "Aucun autre noeud."
#: info/session.c:1044
msgid "No \"Prev\" for this node."
msgstr "Aucun noeud «Prev» pour ce noeud."
#. Move to the previous node. If this node now contains a menu,
#. and we have not inhibited movement to it, move to the node
#. corresponding to the last menu item.
#: info/session.c:1047 info/session.c:1100
msgid "Moving \"Prev\" in this window."
msgstr "Monter au noeud «Prev» dans cette fenêtre."
# Est-ce vraiment un message à traduire?
#: info/session.c:1048 info/session.c:1101 info/session.c:1725
msgid "Prev"
msgstr "Noeud «Prev»"
#: info/session.c:1059
msgid "No \"Prev\" or \"Up\" for this node."
msgstr "Aucun noeud «Prev» ou «Up» pour ce noeud."
#: info/session.c:1062
msgid "Moving \"Up\" in this window."
msgstr "Aller au noeud «Up» dans cette fenêtre."
#: info/session.c:1110
msgid "Moving to \"Prev\"'s last menu item."
msgstr "Aller au dernier item menu du noeud «Prev»."
#: info/session.c:1436
msgid "Cannot delete a permanent window"
msgstr "Ne peut pas éliminer une fenêtre permanente"
#: info/session.c:1750 info/session.c:1768
msgid "This window has no additional nodes"
msgstr "Cette fenêtre a aucun noeud additionnel"
#: info/session.c:1813
#, c-format
msgid "There aren't %d items in this menu."
msgstr "Il n'y a pas %d items dans ce menu."
#: info/session.c:1944
#, c-format
msgid "Menu item (%s): "
msgstr "Item menu (%s): "
#: info/session.c:1946
msgid "Menu item: "
msgstr "Item menu: "
#: info/session.c:1951
#, c-format
msgid "Follow xref (%s): "
msgstr "Suivre xref (%s): "
#: info/session.c:1953
msgid "Follow xref: "
msgstr "Suivre xref: "
#: info/session.c:2169 info/session.c:2173
msgid "Goto Node: "
msgstr "Aller au Noeud: "
#: info/session.c:2198
msgid "Get Manpage: "
msgstr "Obtenir la Page-manuel: "
#. Notice that the node "Top" is special, and doesn't have to
#. be referenced.
#: info/session.c:2230 makeinfo/makeinfo.c:5135 makeinfo/makeinfo.c:5218
msgid "Top"
msgstr "Noeud «Top»"
#: info/session.c:2254
#, fuzzy, c-format
msgid "Kill node (%s): "
msgstr "Suivre xref (%s): "
#: info/session.c:2307
#, fuzzy, c-format
msgid "Cannot kill node `%s'"
msgstr "Ne peut pas effacer le dernier noeud"
#: info/session.c:2317
msgid "Cannot kill the last node"
msgstr "Ne peut pas effacer le dernier noeud"
#: info/session.c:2419
msgid "Find file: "
msgstr "Trouver le fichier: "
#: info/session.c:2436
#, c-format
msgid "Cannot find \"%s\"."
msgstr "Ne peut pas trouver le fichier «%s»."
#: info/session.c:2483 info/session.c:2608
#, c-format
msgid "Could not create output file \"%s\"."
msgstr "Ne peut pas créer le fichier de sortie «%s»."
#: info/session.c:2496 info/session.c:2625 info/session.c:2671
msgid "Done."
msgstr "Terminé."
#: info/session.c:2553
#, c-format
msgid "Writing node \"(%s)%s\"..."
msgstr "Écriture du noeud «(%s)%s»..."
#: info/session.c:2556
#, c-format
msgid "Writing node \"%s\"..."
msgstr "Écriture du noeud «%s»..."
#: info/session.c:2654
#, c-format
msgid "Cannot open pipe to \"%s\"."
msgstr "Ne peut pas ouvrir un tube de communication à «%s»."
#: info/session.c:2661
#, c-format
msgid "Printing node \"(%s)%s\"..."
msgstr "Impression du noeud «(%s)%s»..."
#: info/session.c:2664
#, c-format
msgid "Printing node \"%s\"..."
msgstr "Impression du noeud «%s»..."
#: info/session.c:2896
#, c-format
msgid "Searching subfile \"%s\"..."
msgstr "Fouille du sous-fichier «%s»..."
#: info/session.c:2966
#, c-format
msgid "%s for string [%s]: "
msgstr "%s pour la chaîne [%s]: "
#: info/session.c:2967
msgid "Search backward"
msgstr "Fouiller vers l'arrière"
#: info/session.c:2967
msgid "Search"
msgstr "Fouiller"
#: info/session.c:2994
msgid "Search failed."
msgstr "Fouille infructueuse."
#: info/session.c:3120
msgid "I-search backward: "
msgstr "Fouille I-search vers l'arrière: "
#: info/session.c:3122
msgid "I-search: "
msgstr "Fouille I-search: "
#: info/session.c:3147
msgid "Failing "
msgstr "Échec "
#: info/session.c:3512
msgid "No cross references in this node."
msgstr "Aucune référence croisée dans ce noeud."
#: info/session.c:3627
msgid "Quit"
msgstr "Quitter"
#: info/session.c:3728
#, c-format
msgid "Unknown command (%s)."
msgstr "Commande inconnue (%s)."
# Est-ce que c'est " " ou « » comme caractères?
#: info/session.c:3733
msgid "\"\" is invalid"
msgstr "\"\" est invalide"
#: info/session.c:3735
#, c-format
msgid "\"%s\" is invalid"
msgstr "«%s» est invalide"
#: info/variables.c:40
msgid "When \"On\", footnotes appear and disappear automatically"
msgstr ""
"Lorsque «On» est en fonction, les notes en bas de page apparaissent\n"
"et disparaissent automatiquement"
#: info/variables.c:44
msgid "When \"On\", creating or deleting a window resizes other windows"
msgstr ""
"Lorsque «On» est en fonction, la création ou l'effacement d'une fenêtre\n"
"réajuste la dimension des autres fenêtres"
#: info/variables.c:48
msgid "When \"On\", flash the screen instead of ringing the bell"
msgstr ""
"Lorsque «On» est en fonction, un clignotement d'écran est utilisé plutôt\n"
"qu'un bruit de cloche"
#: info/variables.c:52
msgid "When \"On\", errors cause the bell to ring"
msgstr ""
"Lorsque «On» est en fonction, les erreurs sont signalées par un\n"
"bruit de cloche"
#: info/variables.c:56
msgid "When \"On\", Info garbage collects files which had to be uncompressed"
msgstr ""
"Lorsque «On» est en fonction, le ramasse-miette Info récolte les fichiers\n"
"qui devaient être décomprimés"
#: info/variables.c:59
msgid "When \"On\", the portion of the matched search string is highlighted"
msgstr ""
"Lorsque «On» est en fonction, la portion de la chaîne de fouille appariée\n"
"est mise en surbrillance"
#: info/variables.c:63
msgid "Controls what happens when scrolling is requested at the end of a node"
msgstr ""
"Contrôler ce qui arrive lorsqu'un défilement d'écran est requis à la fin\n"
"d'un noeud"
#: info/variables.c:67
msgid "The number lines to scroll when the cursor moves out of the window"
msgstr "Le nombre de lignes à défiler quand le curseur va hors de la fenêtre"
#: info/variables.c:71
msgid "When \"On\", Info accepts and displays ISO Latin characters"
msgstr ""
"Lorsque «On» est en fonction, Info accepte et affiche les caractères\n"
"ISO Latin"
#. Get the variable's name.
#: info/variables.c:83
msgid "Describe variable: "
msgstr "Décrire la variable: "
#. Get the variable's name and value.
#: info/variables.c:108
msgid "Set variable: "
msgstr "Fixer la variable: "
#: info/variables.c:126
#, c-format
msgid "Set %s to value (%d): "
msgstr "Fixer %s à la valeur (%d): "
#: info/variables.c:167
#, c-format
msgid "Set %s to value (%s): "
msgstr "Fixer %s à la valeur (%s): "
# Est-ce vraiment un message à traduire?
#: info/window.c:1102
msgid "--*** Tags out of Date ***"
msgstr "--*** Étiquettes passées Date ***"
#. strlen (location_indicator).
#. 10 for the decimal representation of the number of lines in this
#. node, and the remainder of the text that can appear in the line.
#: info/window.c:1113
msgid "-----Info: (), lines ----, "
msgstr "-----Info: (), lignes ----, "
#: info/window.c:1120
#, c-format
msgid "-%s---Info: %s, %d lines --%s--"
msgstr "-%s---Info: %s, %d lignes --%s--"
#: info/window.c:1124
#, c-format
msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
msgstr "-%s%s-Info: (%s)%s, %d lignes --%s--"
#: info/window.c:1131
#, c-format
msgid " Subfile: %s"
msgstr " Sous-fichier: %s"
#: makeinfo/makeinfo.c:889
#, fuzzy, c-format
msgid "%s:%d: warning: "
msgstr "%s:%d: AVERTISSEMENT: "
#: makeinfo/makeinfo.c:912
msgid "Too many errors! Gave up.\n"
msgstr "Beaucoup trop d'erreurs! Abandon.\n"
#: makeinfo/makeinfo.c:971 makeinfo/makeinfo.c:996 makeinfo/makeinfo.c:1064
#, fuzzy, c-format
msgid "%s: %s arg must be numeric, not `%s'.\n"
msgstr ""
"Le paramètre %s de l'option --error-limit doit être numérique,\n"
"et non pas `%s'.\n"
#: makeinfo/makeinfo.c:985
#, fuzzy, c-format
msgid "Couldn't open macro expansion output `%s'"
msgstr "Ne peut ouvrir la sortie d'expansion de macro «%s»\""
#: makeinfo/makeinfo.c:988
msgid "Cannot specify more than one macro expansion output"
msgstr "Ne peut spécifier plus d'une sortie d'expansion de macro"
#: makeinfo/makeinfo.c:1032
#, fuzzy, c-format
msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
msgstr ""
"Le paramètre %s de l'option --paragraph-indent doit être numérique\n"
"ou nul ou «asis», et non pas `%s'.\n"
#: makeinfo/makeinfo.c:1075
#, c-format
msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
msgstr ""
"Le paramètre %s de l'option --footnote-style doit être «separate»\n"
"ou «end», et non pas `%s'.\n"
#: makeinfo/makeinfo.c:1085 util/install-info.c:522 util/texindex.c:348
msgid ""
"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."
msgstr ""
"Copyright (C) 1996 Free Software Foundation, Inc.\n"
"AUCUNE garantie n'est donnée; tant pour des raisons COMMERCIALES que\n"
"pour RÉPONDRE À UN BESOIN PARTICULIER. Vous pouvez redistribuer des copies\n"
"de ce logiciel selon les termes de la licence GNU General Public License.\n"
"Pour plus d'informations, consultez le fichier COPYING."
#: makeinfo/makeinfo.c:1105
#, c-format
msgid "%s: missing file argument.\n"
msgstr "%s: absence d'un argument fichier.\n"
#: makeinfo/makeinfo.c:1146
#, c-format
msgid "makeinfo (GNU %s %s) %d.%d\n"
msgstr ""
#: makeinfo/makeinfo.c:1158
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Pour en savoir davantage, faites: `%s --help'.\n"
#: makeinfo/makeinfo.c:1160
#, fuzzy, c-format
msgid ""
"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"
msgstr ""
"Usage: %s [OPTION]... TEXINFO-FILE...\n"
"\n"
"Traduire une documentation source en format Texinfo vers un format "
"approprié\n"
"pour une lecture avec GNU Info.\n"
"\n"
"Options:\n"
"-D VAR Définir une variable, comme avec @set.\n"
"-E MACRO-OFILE Exécuter les macros seulement, sortir un source "
"texinfo.\n"
"-I DIR Ajouter DIR dans la fouille de répertoires pour "
"@include.\n"
"-U VAR Rendre indéfinie une variable, comme avec @clear.\n"
"--error-limit NUM Quitter après NUM erreurs (par défaut %d).\n"
"--fill-column NUM Tronquer les lignes à NUM caractères (par défaut "
"%d).\n"
"--footnote-style STYLE Sortir les notes en bas de page selon l'option "
"STYLE:\n"
" «separate» pour placer les notes dans leur propre "
"noeud,\n"
" «end» pour les placer à la fin du noeud dans lequel\n"
" elles ont été définies (valeur par défaut).\n"
"--help Afficher l'aide-mémoire.\n"
"--no-validate Supprimer la validation de la table de référence\n"
" des noeuds.\n"
"--no-warn Supprimer les avertissements (mais pas les erreurs).\n"
"--no-split Supprimer la troncation de fichiers volumineux.\n"
"--no-headers Supprimer les séparateurs de noeud et Node: Foo "
"headers.\n"
"--output FICHIER, -o FICHIER Écrire dans le FICHIER, et ignorer tous\n"
" les @setfilename.\n"
"--paragraph-indent NUM Indenter les paragraphes de NUM espaces (%d par "
"défaut).\n"
"--reference-limit NUM Avertir après plus de NUM références (%d par "
"défaut).\n"
"--verbose Utiliser le mode bavard et indiquer ce qui a été "
"fait.\n"
"--version Afficher le nom et la version du logiciel.\n"
"\n"
"Rapporter toute anomalie à bug-texinfo@prep.ai.mit.edu.\n"
#: makeinfo/makeinfo.c:1545
#, c-format
msgid "%s: getwd: %s, %s\n"
msgstr ""
#: makeinfo/makeinfo.c:1741
#, c-format
msgid "Expected `%s'"
msgstr ""
#: makeinfo/makeinfo.c:2072
#, c-format
msgid "No `%s' found in `%s'"
msgstr ""
#: makeinfo/makeinfo.c:2122
#, c-format
msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
msgstr ""
#: makeinfo/makeinfo.c:2141
#, c-format
msgid "Making %s file `%s' from `%s'.\n"
msgstr ""
#: makeinfo/makeinfo.c:2171
#, c-format
msgid "This is Info file %s, produced by Makeinfo version %d.%d"
msgstr ""
#: makeinfo/makeinfo.c:2173
#, fuzzy, c-format
msgid " from the input file %s.\n"
msgstr "Ne peut pas créer le fichier de sortie «%s»."
#: makeinfo/makeinfo.c:2192
#, c-format
msgid ""
"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
msgstr ""
#. If there were errors, and no --force, remove the output.
#: makeinfo/makeinfo.c:2224
#, c-format
msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
msgstr ""
#. Special case. I'm not supposed to see this character by itself.
#. If I do, it means there is a syntax error in the input text.
#. Report the error here, but remember this brace on the stack so
#. you can ignore its partner.
#: makeinfo/makeinfo.c:2364 makeinfo/makeinfo.c:7624
#, fuzzy, c-format
msgid "Misplaced %c"
msgstr "Accolade «}» égarée ou mal placée"
#: makeinfo/makeinfo.c:2451
#, fuzzy, c-format
msgid "Unknown command `%s'"
msgstr "Commande inconnue (%s)."
#: makeinfo/makeinfo.c:2471
msgid "NO_NAME!"
msgstr ""
#: makeinfo/makeinfo.c:2485
#, c-format
msgid "%c%s expected `{...}'"
msgstr ""
#: makeinfo/makeinfo.c:2518
#, fuzzy
msgid "Unmatched }"
msgstr "`%c%s' non apparié"
#: makeinfo/makeinfo.c:2566
#, fuzzy, c-format
msgid "%c%s missing close brace"
msgstr "%s: absence d'un argument fichier.\n"
#: makeinfo/makeinfo.c:3362
msgid "Broken-Type in insertion_type_pname"
msgstr ""
#: makeinfo/makeinfo.c:3428
msgid "Enumeration stack overflow"
msgstr ""
#: makeinfo/makeinfo.c:3460
#, c-format
msgid "lettering overflow, restarting at %c"
msgstr ""
#: makeinfo/makeinfo.c:3499
#, fuzzy
msgid "* Menu:\n"
msgstr "Menu"
#: makeinfo/makeinfo.c:3583
#, fuzzy, c-format
msgid "%s requires an argument: the formatter for %citem"
msgstr "%s nécessite une lettre ou un chiffre"
#: makeinfo/makeinfo.c:3687
#, c-format
msgid "`%cend' expected `%s', but saw `%s'"
msgstr ""
#: makeinfo/makeinfo.c:3800
#, fuzzy, c-format
msgid "No matching `%cend %s'"
msgstr "`%c%s' non apparié"
#: makeinfo/makeinfo.c:3939
#, c-format
msgid "How did @%s end up in cm_special_char?\n"
msgstr ""
#. This error message isn't perfect if the argument is multiple
#. characters, but it doesn't seem worth getting right.
#: makeinfo/makeinfo.c:3953
#, c-format
msgid "%c%s expects `i' or `j' as argument, not `%c'"
msgstr ""
#: makeinfo/makeinfo.c:3957
#, c-format
msgid "%c%s expects a single character `i' or `j' as argument"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "January"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "February"
msgstr ""
#: makeinfo/makeinfo.c:3969
#, fuzzy
msgid "March"
msgstr "Fouiller"
#: makeinfo/makeinfo.c:3969
msgid "April"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "May"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "June"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "July"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "August"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "September"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "October"
msgstr ""
#: makeinfo/makeinfo.c:3971
msgid "November"
msgstr ""
#: makeinfo/makeinfo.c:3971
msgid "December"
msgstr ""
#: makeinfo/makeinfo.c:3976
#, c-format
msgid "%d %s %d"
msgstr ""
#: makeinfo/makeinfo.c:4029
#, c-format
msgid "%c%s expects a single character as an argument"
msgstr ""
#: makeinfo/makeinfo.c:4143
#, c-format
msgid "%c%s is obsolete"
msgstr ""
#: makeinfo/makeinfo.c:4315
#, c-format
msgid "There already is a node having %ctop as a section"
msgstr ""
#: makeinfo/makeinfo.c:4327
#, c-format
msgid "Here is the %ctop node"
msgstr ""
#: makeinfo/makeinfo.c:4346
#, c-format
msgid "%ctop used before %cnode, defaulting to %s"
msgstr ""
#: makeinfo/makeinfo.c:4421
#, c-format
msgid "%c%s is obsolete; use %c%s instead"
msgstr ""
#: makeinfo/makeinfo.c:4670
#, fuzzy, c-format
msgid "Node `%s' multiply defined (line %d is first definition at)"
msgstr ""
"Le noeud `%s' a de multiples définitions (%d est la première\n"
"définition)"
#: makeinfo/makeinfo.c:4743
#, fuzzy, c-format
msgid "Formatting node %s...\n"
msgstr "Écriture du noeud «%s»..."
#: makeinfo/makeinfo.c:4792
#, c-format
msgid "Node `%s' requires a sectioning command (e.g. %c%s)"
msgstr "Le noeud `%s' nécessite une commande de subdivision (e.g. %c%s)"
#: makeinfo/makeinfo.c:5075
#, c-format
msgid "Node `%s''s Next field not pointed back to"
msgstr "Le champ Next du noeud `%s' n'a pas de pointeur de retour en amont"
#: makeinfo/makeinfo.c:5080
#, c-format
msgid "This node (`%s') is the one with the bad `Prev'"
msgstr "Ce noeud (`%s') est celui dont le champ «Prev» est erroné"
#: makeinfo/makeinfo.c:5120
#, fuzzy, c-format
msgid "Node `%s's Prev field not pointed back to"
msgstr "Le champ Prev du noeud `%s' n'a pas de pointeur de retour en amont"
#: makeinfo/makeinfo.c:5124
#, fuzzy, c-format
msgid "This node (`%s') has the bad Next"
msgstr "Ce noeud (`%s') est celui dont le champ «Next» est erroné"
#: makeinfo/makeinfo.c:5136
#, fuzzy, c-format
msgid "Node `%s' missing Up field"
msgstr "Le noeud `%s' a un champ «Up» manquant"
#: makeinfo/makeinfo.c:5176
#, c-format
msgid "`%s' has an Up field of `%s', but `%s' has no menu item for `%s'"
msgstr ""
"Le noeud `%s' a un champ Up de `%s', mais `%s' n'a aucun item menu\n"
"pour `%s'"
#: makeinfo/makeinfo.c:5207
#, fuzzy, c-format
msgid "node `%s' has been referenced %d times"
msgstr "Le noeud `%s' a été référencé %d fois"
#: makeinfo/makeinfo.c:5219
#, fuzzy, c-format
msgid "unreferenced node `%s'"
msgstr "Noeud `%s' non référencé"
#: makeinfo/makeinfo.c:5246
#, fuzzy, c-format
msgid "%s reference to nonexistent node `%s'"
msgstr "Noeud `%s' non référencé"
#: makeinfo/makeinfo.c:5658 makeinfo/makeinfo.c:5670
#, fuzzy, c-format
msgid "%cmenu seen before first node"
msgstr "%cmenu apparu avant qu'un noeud n'ait été défini"
#: makeinfo/makeinfo.c:5659 makeinfo/makeinfo.c:5671
#, fuzzy
msgid "creating `Top' node"
msgstr "Création du noeud «TOP»."
#: makeinfo/makeinfo.c:5784
#, c-format
msgid "`.' or `,' must follow cross reference, not %c"
msgstr ""
#: makeinfo/makeinfo.c:5952
#, c-format
msgid "@image file `%s' unreadable: %s"
msgstr ""
#: makeinfo/makeinfo.c:5956
#, fuzzy
msgid "@image missing filename argument"
msgstr "%s: absence d'un argument fichier.\n"
#: makeinfo/makeinfo.c:6057
#, fuzzy, c-format
msgid "%s requires letter or digit"
msgstr "%s nécessite une lettre ou un chiffre"
#: makeinfo/makeinfo.c:6142
#, c-format
msgid "Unmatched `%c%s'"
msgstr "`%c%s' non apparié"
#: makeinfo/makeinfo.c:6149
#, c-format
msgid "`%c%s' needs something after it"
msgstr "`%c%s' a besoin de quelque chose après lui"
#: makeinfo/makeinfo.c:6155
#, c-format
msgid "Bad argument to `%s', `%s', using `%s'"
msgstr "Mauvais argument à `%s', `%s', utilisant `%s'"
#: makeinfo/makeinfo.c:6328
#, c-format
msgid "{No Value For \"%s\"}"
msgstr ""
#: makeinfo/makeinfo.c:6378
#, c-format
msgid "%c%s requires a name"
msgstr "%c%s nécessite un nom"
#: makeinfo/makeinfo.c:6486
#, c-format
msgid "Reached eof before matching @end %s"
msgstr ""
#: makeinfo/makeinfo.c:6715
#, c-format
msgid "The `%c%s' command is meaningless within a `@%s' block"
msgstr "La commande `%c%s' est inactive dans un bloc `@%s'"
#: makeinfo/makeinfo.c:6724
#, c-format
msgid "%citemx is not meaningful inside of a `%s' block"
msgstr "%citemx est inactif à l'intérieur d'un bloc `%s'"
#: makeinfo/makeinfo.c:6837
#, c-format
msgid "%c%s found outside of an insertion block"
msgstr "%c%s est trouvé à l'extérieur d'un bloc d'insertion"
#: makeinfo/makeinfo.c:6928
#, c-format
msgid "Missing `}' in %cdef arg"
msgstr "Accolade «}» manquante dans le paramètre %cdef"
#: makeinfo/makeinfo.c:7137 makeinfo/makeinfo.c:7157
msgid "Function"
msgstr ""
#: makeinfo/makeinfo.c:7141
msgid "Macro"
msgstr ""
#: makeinfo/makeinfo.c:7145
msgid "Special Form"
msgstr ""
#: makeinfo/makeinfo.c:7149 makeinfo/makeinfo.c:7161
#, fuzzy
msgid "Variable"
msgstr "Fixer la variable: "
#: makeinfo/makeinfo.c:7153
#, fuzzy
msgid "User Option"
msgstr "Insérer la complétion"
#: makeinfo/makeinfo.c:7165
#, fuzzy
msgid "Instance Variable"
msgstr "Décrire la variable: "
#: makeinfo/makeinfo.c:7169 makeinfo/makeinfo.c:7173
msgid "Method"
msgstr ""
#: makeinfo/makeinfo.c:7330
#, c-format
msgid "Must be in a `%s' insertion in order to use `%s'x"
msgstr "Doit être dans une insertion `%s' afin d'utiliser `%s'x."
#: makeinfo/makeinfo.c:7402
#, c-format
msgid "%csp requires a positive numeric argument"
msgstr "%csp nécessite un argument numérique positif"
#: makeinfo/makeinfo.c:7645
#, fuzzy
msgid "asis"
msgstr "il y a"
#: makeinfo/makeinfo.c:7647
#, fuzzy
msgid "none"
msgstr "(vide)"
#: makeinfo/makeinfo.c:7669
#, c-format
msgid "Bad argument to %c%s"
msgstr "Mauvais argument à %c%s"
#: makeinfo/makeinfo.c:7961
#, fuzzy, c-format
msgid "Unknown index `%s'"
msgstr "Nom d'index inconnu `%s'"
#: makeinfo/makeinfo.c:8026
#, c-format
msgid "Index `%s' already exists"
msgstr "L'index `%s' existe toujours"
#: makeinfo/makeinfo.c:8057
#, fuzzy, c-format
msgid "Unknown index `%s' and/or `%s' in @synindex"
msgstr "Nom d'index inconnu `%s'"
#: makeinfo/makeinfo.c:8246
#, fuzzy, c-format
msgid "Unknown index `%s' in @printindex"
msgstr "Nom d'index inconnu `%s'"
#: makeinfo/makeinfo.c:8261
#, fuzzy
msgid ""
"* Menu:\n"
"\n"
msgstr "Menu"
#: makeinfo/makeinfo.c:8448
#, c-format
msgid "`%c%s' needs an argument `{...}', not just `%s'"
msgstr ""
#: makeinfo/makeinfo.c:8463
#, c-format
msgid "No closing brace for footnote `%s'"
msgstr "Aucune accolade fermante «}» pour la note en bas de page `%s'"
#: makeinfo/makeinfo.c:8502
msgid "Footnote defined without parent node"
msgstr "La note en bas de page est définie sans noeud parent"
# Est-ce vraiement un message à traduire?
#: makeinfo/makeinfo.c:8534
#, fuzzy
msgid "-Footnotes"
msgstr "*Notes en bas de page*"
# Est-ce vraiment un message à traduire? NON.
#: makeinfo/makeinfo.c:8589
#, fuzzy
msgid ""
"---------- Footnotes ----------\n"
"\n"
msgstr ""
"---------------------\n"
"\n"
#: makeinfo/makeinfo.c:8685
#, fuzzy, c-format
msgid "macro `%s' previously defined"
msgstr "La macro `%s' a déjà été définie précédemment"
#: makeinfo/makeinfo.c:8689
#, fuzzy, c-format
msgid "here is the previous definition of `%s'"
msgstr "Ici se trouve la définition précédente de `%s'"
#: makeinfo/makeinfo.c:8903
#, c-format
msgid "Macro `%s' called with too many args"
msgstr "La macro `%s' est appelée avec trop d'arguments"
#: makeinfo/makeinfo.c:9055
#, c-format
msgid "%cend macro not found"
msgstr "Macro %cend non trouvée"
#: makeinfo/makeinfo.c:9095
#, c-format
msgid "%cquote-arg only useful when the macro takes a single argument"
msgstr "%cquote-arg utile seulement lorsque la macro prend un seul argument"
#: makeinfo/multi.c:206
#, c-format
msgid "ignoring stray text `%s' after @multitable"
msgstr "abandon du texte orphelin `%s' après la commande @multitable"
#: makeinfo/multi.c:277
#, c-format
msgid "Too many columns in multitable item (max %d)"
msgstr "Trop de colonnes dans un item de multitable (%d max)"
#. impossible, I think.
#: makeinfo/multi.c:304
msgid "multitable item not in active multitable"
msgstr "item de multitable qui n'est pas dans une multitable active"
#: makeinfo/multi.c:313
#, c-format
msgid "Cannot select column #%d in multitable"
msgstr "Ne peut pas sélectionner la colonne #%d dans une multitable."
#: makeinfo/multi.c:404
msgid "ignoring @tab outside of multitable"
msgstr "ignorer une commande @tab qui est à l'extérieur d'une multitable"
#: makeinfo/multi.c:428
msgid "** Multicolumn output from last row:\n"
msgstr "** Sortie en multicolonnes à partir de la dernière rangée:\n"
#: makeinfo/multi.c:431
#, c-format
msgid "* column #%d: output = %s\n"
msgstr "* colonne #%d: sortie = %s\n"
#: util/install-info.c:119 util/install-info.c:132
msgid "virtual memory exhausted"
msgstr "mémoire virtuelle épuisée"
#: util/install-info.c:188
#, fuzzy, c-format
msgid "%s: warning: "
msgstr "%s: AVERTISSEMENT: "
#: util/install-info.c:209
#, c-format
msgid " for %s"
msgstr " pour %s"
#: util/install-info.c:278
#, fuzzy, c-format
msgid "\tTry `%s --help' for a complete list of options.\n"
msgstr "Pour avoir la liste complète des options, faites: `%s --help'.\n"
#: util/install-info.c:286
#, c-format
msgid ""
"%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"
msgstr ""
"%s [OPTION]... [INFO-FICHIER [DIR-FICHIER]]\n"
" Installer INFO-FICHIER dans le répertoire DIR-FICHIER de fichiers Info.\n"
"\n"
"Options:\n"
"--delete Éliminer les entrées existantes dans INFO-FICHIER;\n"
" ne pas insérer une quelconque nouvelle entrée.\n"
"--dir-file=NOM Spécifier le NOM du répertoire de fichiers Info.\n"
" Ceci équivaut à utiliser l'argument DIR-FICHIER.\n"
"--entry=TEXTE Insérer TEXTE comme une entrée du répertoire Info.\n"
" TEXTE doit avoir la forme d'une ligne d'item de menu\n"
" Info avec zéro ou plusieurs lignes en extra commençant\n"
" par un blanc. Si plus d'une entrée est spécifiée,\n"
" elles seront toutes ajoutées. Si aucune entrée n'est\n"
" spécifiée, elles seront déterminées à partir de\n"
" l'information dans le fichier Info lui-même.\n"
"--help Afficher l'aide-mémoire.\n"
"--info-file=FICHIER Spécifier le FICHIER Info à installer dans le\n"
" répertoire de fichiers Info. Ceci équivaut à utiliser\n"
" l'argument INFO-FICHIER.\n"
"--info-dir=RÉP Identique à l'option --dir-file=RÉP/dir.\n"
"--item=TEXTE Identique à l'option --entry=TEXTE\n"
" Une entrée de répertoire Info est en fait un item menu.\n"
"--quiet Supprimer les avertissements.\n"
"--remove Identique à l'option --delete.\n"
"--section=SEC Mettre cette entrée de fichier dans la section SEC du\n"
" répertoire. Si plus d'une section est spécifiée, "
"toutes\n"
" les entrées sont ajoutées dans chacune des sections. "
"Si\n"
" aucune section n'est spécifiée, elles seront "
"déterminées\n"
" à partir de l'information dans le fichier Info "
"lui-même.\n"
"--version Afficher le nom et la version du logiciel.\n"
"\n"
"Rapporter toute anomalie à bug-texinfo@prep.ai.mit.edu.\n"
#: util/install-info.c:334
msgid ""
"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"
msgstr ""
#: util/install-info.c:357
#, c-format
msgid "%s: could not read (%s) and could not create (%s)\n"
msgstr ""
#: util/install-info.c:456 util/install-info.c:466
#, c-format
msgid "%s: Specify the Info directory only once.\n"
msgstr "%s: Spécifier le répertoire Info une seule fois seulement.\n"
#: util/install-info.c:494
#, c-format
msgid "%s: Specify the Info file only once.\n"
msgstr "%s: Spécifier le fichier Info une seule fois seulement.\n"
#: util/install-info.c:521
#, c-format
msgid "install-info (GNU %s) %s\n"
msgstr ""
#: util/install-info.c:541
#, c-format
msgid "excess command line argument `%s'"
msgstr "excédent d'argument de ligne de commande `%s'"
#: util/install-info.c:545
#, fuzzy
msgid "No input file specified; try --help for more information."
msgstr "Pour en savoir davantage, faites: `%s --help'.\n"
#: util/install-info.c:547
#, fuzzy
msgid "No dir file specified; try --help for more information."
msgstr "Pour en savoir davantage, faites: `%s --help'.\n"
#: util/install-info.c:599 util/install-info.c:622
msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
msgstr "START-INFO-DIR-ENTRY non apparié avec END-INFO-DIR-ENTRY"
#: util/install-info.c:618
msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
msgstr "END-INFO-DIR-ENTRY non apparié avec START-INFO-DIR-ENTRY"
#. No need to abort here, the original info file may not have
#. the requisite Texinfo commands. This is not something an
#. installer should have to correct (it's a problem for the
#. maintainer), and there's no need to cause subsequent parts of
#. `make install' to fail.
#: util/install-info.c:632
#, c-format
msgid "no info dir entry in `%s'"
msgstr "aucune entrée répertoire info dans `%s'"
#: util/install-info.c:843
#, c-format
msgid "menu item `%s' already exists, for file `%s'"
msgstr "item menu `%s' déjà existant, pour le fichier `%s'"
#: util/install-info.c:866
#, c-format
msgid "no entries found for `%s'; nothing deleted"
msgstr "aucune entrée trouvée pour `%s'; rien n'a été éliminé"
#: util/texindex.c:263
msgid "keep temporary files around after processing"
msgstr "conserver les fichiers temporaires après le traitement"
#: util/texindex.c:265
msgid "do not keep temporary files around after processing (default)"
msgstr "ne pas conserver les fichiers temporaires après le traitement (défaut)"
#: util/texindex.c:267
msgid "send output to FILE"
msgstr "envoyer la sortie dans FICHIER"
#: util/texindex.c:269
msgid "display version information and exit"
msgstr "afficher la version en usage"
#: util/texindex.c:271
msgid "display this help and exit"
msgstr "afficher l'aide-mémoire"
#: util/texindex.c:282
#, c-format
msgid "Usage: %s [OPTION]... FILE...\n"
msgstr "Usage: %s [OPTION]... FICHIER...\n"
#: util/texindex.c:283
msgid "Generate a sorted index for each TeX output FILE.\n"
msgstr "Générer un index trié pour chaque FICHIER de sortie TeX.\n"
#. Avoid trigraph nonsense.
#: util/texindex.c:285
msgid "Usually FILE... is `foo.??' for a document `foo.texi'.\n"
msgstr "Habituellement FICHIER... est «foo.??» pour un document «foo.texi».\n"
#: util/texindex.c:286
msgid ""
"\n"
"Options:\n"
msgstr ""
"\n"
"Options:\n"
#: util/texindex.c:300
msgid ""
"\n"
"Email bug reports to bug-texinfo@prep.ai.mit.edu."
msgstr ""
"\n"
"Rapporter toute anomalie à bug-texinfo@prep.ai.mit.edu."
#: util/texindex.c:347
#, c-format
msgid "texindex (GNU %s %s) 2.1\n"
msgstr ""
#: util/texindex.c:926 util/texindex.c:960 util/texindex.c:1036
#: util/texindex.c:1064
#, c-format
msgid "%s: not a texinfo index file"
msgstr "%s: pas un fichier index en format texinfo"
#: util/texindex.c:1021
#, c-format
msgid "failure reopening %s"
msgstr "échec lors de la réouverture de %s"
#: util/texindex.c:1334
#, c-format
msgid "entry %s follows an entry with a secondary name"
msgstr "l'entrée %s suit une entrée ayant un nom secondaire"
#: util/texindex.c:1672
#, c-format
msgid "%s; for file `%s'.\n"
msgstr "%s; pour le fichier `%s'.\n"
#: util/texindex.c:1733
#, c-format
msgid "Virtual memory exhausted in %s ()! Needed %d bytes."
msgstr "Mémoire virtuelle épuisée dans %s ()! Besoin de %d octets."
#~ msgid "%s: --fill-column arg must be numeric, not `%s'.\n"
#~ msgstr ""
#~ "Le paramètre %s de l'option --fill-column doit être numérique,\n"
#~ "et non pas `%s'.\n"
#~ msgid "%s: --reference-limit arg must be numeric, not `%s'.\n"
#~ msgstr ""
#~ "Le paramètre %s de l'option --reference-limit doit être numérique,\n"
#~ "et non pas `%s'.\n"
#~ msgid "Misplaced `}'"
#~ msgstr "Accolade «}» égarée ou mal placée"
#~ msgid "No input file specified"
#~ msgstr "Aucun fichier d'entrée spécifié"
#~ msgid "No dir file specified"
#~ msgstr "Aucun fichier répertoire spécifié"
#~ msgid "stdin"
#~ msgstr "entrée standard «stdin»"
#~ msgid "GNU Makeinfo (Texinfo 3.9) %d.%d\n"
#~ msgstr "GNU Makeinfo (Texinfo 3.9) %d.%d\n"
# Est-ce vraiment un message à traduire?
#~ msgid "noname.texi"
#~ msgstr "noname.texi"
#~ msgid "No node name specified for `%c%s' command"
#~ msgstr "Aucun nom de noeud spécifié pour la commande `%c%s'"
#~ msgid ""
#~ "Validation error. `%s' field points to node `%s', which doesn't exist"
#~ msgstr ""
#~ "Erreur de validation.\n"
#~ "Le champ `%s' pointe sur le noeud `%s', qui n'existe pas"
#~ msgid "Cross-reference must be terminated with a period or a comma"
#~ msgstr "La référence croisée doit se terminer par un point ou une virgule"
#~ msgid "Unknown file system error"
#~ msgstr "Erreur de système de fichiers inconnue"
#~ msgid "Unknown index reference `%s'"
#~ msgstr "Référence d'index `%s' inconnue"
#~ msgid "Unknown index reference"
#~ msgstr "Référence d'index inconnue"
#~ msgid "`%c%s' expected more than just `%s'. It needs something in `{...}'"
#~ msgstr ""
#~ "`%c%s' s'attend à plus que `%s'. Besoin de quelque chose dans «{...}»."
#~ msgid "Multitables cannot be nested"
#~ msgstr "Les multitables ne peuvent pas être imbriquées"
#~ msgid "%s: can not open: %s\n"
#~ msgstr "%s: ne peut pas ouvrir: %s\n"
#~ msgid "%s: %s: %d: mismatched braces\n"
#~ msgstr "%s: %s: %d: accolades non balancées\n"
#~ msgid "unknown error %d"
#~ msgstr "erreur inconnue %d"
#~ msgid "Unknown error"
#~ msgstr "Erreur inconnue"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "--keep"
#~ msgstr "--keep"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "-k"
#~ msgstr "-k"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "--no-keep"
#~ msgstr "--no-keep"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "--output"
#~ msgstr "--output"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "-o"
#~ msgstr "-o"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "--version"
#~ msgstr "--version"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "--help"
#~ msgstr "--help"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "-h"
#~ msgstr "-h"
#~ msgid "Index"
#~ msgstr "Index"
# Est-ce vraiment un message à traduire?
#~ msgid "*Apropos*"
#~ msgstr "*À-propos*"
#~ msgid "GNU Info (Texinfo 3.9) %s\n"
#~ msgstr "GNU Info (Texinfo 3.9) %s\n"
# Est-ce vraiment un commentaire de message à traduire?
#~ msgid "*Info Help*"
#~ msgstr "*Info Aide*"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "******************************"
#~ msgstr "******************************"
#~ msgid " h Invoke the Info tutorial."
#~ msgstr " h Invoquer le guide de travaux pratiques Info."
# Est-ce vraiment un message à traduire? NON.
#~ msgid "----------------------"
#~ msgstr "----------------------"
#~ msgid " n Move to the \"next\" node of this node."
#~ msgstr " n Avancer au noeud «next» de ce noeud."
#~ msgid " p Move to the \"previous\" node of this node."
#~ msgstr " p Reculer au noeud «previous» de ce noeud."
#~ msgid " u Move \"up\" from this node."
#~ msgstr " u Monter au noeud «up» à partir de ce noeud."
#~ msgid " m Pick menu item specified by name."
#~ msgstr " m Choisir l'item «menu» spécifié par le nom."
#~ msgid " Picking a menu item causes another node to be selected."
#~ msgstr ""
#~ " Choisir un item menu implique qu'un autre noeud est sélectionné."
#~ msgid " f Follow a cross reference. Reads name of reference."
#~ msgstr ""
#~ " f Suivre une référence croisée («f»ollow). Lire le nom de la référence."
#~ msgid " l Move to the last node seen in this window."
#~ msgstr " l Aller au dernier noeud affiché dans cette fenêtre («l»ast)."
#~ msgid " d Move to the `directory' node. Equivalent to `g(DIR)'."
#~ msgstr ""
#~ " d Aller au noeud répertoire («d»irectory). Équivalent à «g(RÉP)»."
#~ msgid "Moving within a node:"
#~ msgstr "Déplacements dans l'arborescence d'un noeud:"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "---------------------"
#~ msgstr "---------------------"
#~ msgid " SPC Scroll forward a page."
#~ msgstr " SPC Défiler une page en avançant."
#~ msgid " DEL Scroll backward a page."
#~ msgstr " DEL Défiler une page en reculant."
#~ msgid " b Go to the beginning of this node."
#~ msgstr " b Aller au tout début de ce noeud («b»eginning)."
#~ msgid " e Go to the end of this node."
#~ msgstr " e Aller à la toute fin de ce noeud («e»nd)."
#~ msgid "\"Advanced\" commands:"
#~ msgstr "Commandes «avancées»:"
# Est-ce vraiment un message à traduire?
#~ msgid "--------------------"
#~ msgstr "--------------------"
#~ msgid " q Quit Info."
#~ msgstr " q Quitter le mode Info."
#~ msgid " 1 Pick first item in node's menu."
#~ msgstr " 1 Choisir le premier item dans le menu de noeuds."
#~ msgid " 2-9 Pick second ... ninth item in node's menu."
#~ msgstr " 2-9 Choisir le 2ième ... 9ième item dans le menu de noeuds."
#~ msgid " 0 Pick last item in node's menu."
#~ msgstr " 0 Choisir le dernier item dans le menu de noeuds."
#~ msgid " g Move to node specified by name."
#~ msgstr " g Aller au noeud spécifié par le nom."
#~ msgid " You may include a filename as well, as in (FILENAME)NODENAME."
#~ msgstr ""
#~ " Vous pouvez inclure aussi un nom de fichier, comme dans (FICHIER)NOEUD."
#~ msgid " s Search through this Info file for a specified string,"
#~ msgstr " s Fouiller à travers ce fichier Info pour une chaîne spécifiée,"
#~ msgid " and select the node in which the next occurrence is found."
#~ msgstr ""
#~ " et sélectionner le noeud dans lequel la prochaine occurrence est "
#~ "trouvée."
#~ msgid "The current search path is:\n"
#~ msgstr "Le chemin répertoire de fouille courant est:\n"
#~ msgid ""
#~ "Commands available in Info windows:\n"
#~ "\n"
#~ msgstr ""
#~ "Commandes disponibles en Info windows:\n"
#~ "\n"
#~ msgid ""
#~ "Commands available in the echo area:\n"
#~ "\n"
#~ msgstr ""
#~ "Commandes disponibles dans la zone écho:\n"
#~ "\n"
#~ msgid "Help"
#~ msgstr "Aide"
#~ msgid "Help-Small-Screen"
#~ msgstr "Petit-Écran-Aide"
#~ msgid "Info"
#~ msgstr "Info"
# Est-ce vraiment un message à traduire? NON.
#~ msgid "ESC "
#~ msgstr "ESC "
#~ msgid "%s (%s): %s."
#~ msgstr "%s (%s): %s."
# Est-ce vraiment un message à traduire?
#~ msgid "ESC %s"
#~ msgstr "ESC %s"
# Est-ce vraiment un message à traduire?
#~ msgid "LFD"
#~ msgstr "LFD"
# Est-ce vraiment un message à traduire?
#~ msgid "TAB"
#~ msgstr "TAB"
# Est-ce vraiment un message à traduire?
#~ msgid "RET"
#~ msgstr "RET"
# Est-ce vraiment un message à traduire?
#~ msgid "ESC"
#~ msgstr "ESC"
# Est-ce vraiment un message à traduire?
#~ msgid "SPC"
#~ msgstr "SPC"
# Est-ce vraiment un message à traduire?
#~ msgid "DEL"
#~ msgstr "DEL"
# Est-ce vraiment un message à traduire?
#~ msgid "echo-area-"
#~ msgstr "echo-area-"
#~ msgid ""
#~ "/* doc.c -- Generated structure containing function names and doc strings."
#~ msgstr ""
#~ "/* doc.c -- Structure générée contenant les noms de fonction et les chaînes "
#~ "doc."
#~ msgid ""
#~ " This file was automatically made from various source files with the"
#~ msgstr ""
#~ " Ce fichier a été produit automatiquement à partir de fichiers sources\n"
#~ " variés avec la"
#~ msgid " command \"%s\". DO NOT EDIT THIS FILE, only \"%s.c\"."
#~ msgstr " commande «%s». NE PAS ÉDITER CE FICHIER, seulement «%s.c»."
#~ msgid " An entry in the array FUNCTION_DOC_ARRAY is made for each command"
#~ msgstr ""
#~ " Une entrée dans le vecteur FUNCTION_DOC_ARRAY est faite pour chaque "
#~ "commande"
#~ msgid ""
#~ " found in the above files; each entry consists of a function pointer,"
#~ msgstr ""
#~ " trouvée dans les fichiers ci-haut; chaque entrée consiste en un pointeur "
#~ "de fonction,"
#~ msgid " a string which is the user-visible name of the function,"
#~ msgstr ""
#~ " une chaîne laquelle est le nom visible-à-l'usager de la fonction,"
#~ msgid " and a string which documents its purpose. */"
#~ msgstr " et une chaîne laquelle fournit une documentation de ses buts. */"
#~ msgid "/* %s -- Generated declarations for Info commands. */\n"
#~ msgstr "/* %s -- Déclarations générées pour les commandes Info. */\n"
#~ msgid "/* Commands found in \"%s\". */\n"
#~ msgstr "/* Commandes trouvées dans «%s». */\n"
#~ msgid ""
#~ "\n"
#~ "/* Functions declared in \"%s\". */\n"
#~ msgstr ""
#~ "\n"
#~ "/* Fonctions déclarées dans «%s». */\n"
# Est-ce vraiment un message à traduire?
#~ msgid "*Node Menu*"
#~ msgstr "*Noeud Menu*"
#~ msgid "not at all"
#~ msgstr "sans aucune"
#~ msgid "once"
#~ msgstr "une seule"
#~ msgid "twice"
#~ msgstr "deux"
#~ msgid "three"
#~ msgstr "trois"
#~ msgid "four"
#~ msgstr "quatre"
#~ msgid "five"
#~ msgstr "cinq"
#~ msgid "six"
#~ msgstr "six"
#~ msgid "Continuous"
#~ msgstr "Continu"
#~ msgid "Next Only"
#~ msgstr "«Next» Seulement"
#~ msgid "Page Only"
#~ msgstr "Page Seulement"
#~ msgid "Moving \"Up\" %s, then \"Next\"."
#~ msgstr "Monter vers «Up» %s, puis aller à «Next»."
#~ msgid "Requested window is not present!"
#~ msgstr "La fenêtre demandée n'est pas présente!"
#~ msgid "Now wrapped around to beginning of history."
#~ msgstr ""
#~ "Maintenant enroulé autour jusqu'au début de l'histoire des parcours."
#~ msgid "No earlier nodes in this window."
#~ msgstr "Aucun noeud antérieur dans cette fenêtre."
# Est-ce vraiment un message à traduire?
#~ msgid "(dir)Top"
#~ msgstr "(dir)Top"
# Est-ce vraiment un message à traduire?
#~ msgid "~expand: "
#~ msgstr "~expand: "
#~ msgid "done"
#~ msgstr "terminé"
#~ msgid "quit"
#~ msgstr "quitter"
#~ msgid "exit"
#~ msgstr "sortir"
#~ msgid "readline: Out of virtual memory!\n"
#~ msgstr "lire-ligne: Mémoire virtuelle insuffisante!\n"
# Est-ce vraiment un commentaire de message à traduire?
#~ msgid "Off"
#~ msgstr "«Off» hors fonction"
#~ msgid "On"
#~ msgstr "«On» en fonction"
#~ msgid "All"
#~ msgstr "Toute"
#~ msgid "Bot"
#~ msgstr "Bas"
#~ msgid "*no file*"
#~ msgstr "*aucun fichier*"
#~ msgid "*no node*"
#~ msgstr "*aucun noeud*"
#~ msgid "Subfile: "
#~ msgstr "Sous-fichier: "
#~ msgid "%s: Out of virtual memory!\n"
#~ msgstr "%s: Mémoire virtuelle insuffisante!\n"
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 1997-07-31 17:43-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
#. Commands found in "./session.c".
#: info/doc.c:27 info/session.c:629
msgid "Move down to the next line"
msgstr ""
#. Move WINDOW's point up to the previous line if possible.
#: info/doc.c:28 info/session.c:644
msgid "Move up to the previous line"
msgstr ""
#. Move WINDOW's point to the end of the true line.
#: info/doc.c:29 info/session.c:659
msgid "Move to the end of the line"
msgstr ""
#. Move WINDOW's point to the beginning of the true line.
#: info/doc.c:30 info/session.c:679
msgid "Move to the start of the line"
msgstr ""
#. Commands found in "./echo-area.c".
#: info/doc.c:31 info/doc.c:84 info/echo-area.c:283 info/session.c:698
msgid "Move forward a character"
msgstr ""
#. Move point backward in the node.
#: info/doc.c:32 info/doc.c:85 info/echo-area.c:295 info/session.c:714
msgid "Move backward a character"
msgstr ""
#. Move forward a word in the input line.
#: info/doc.c:33 info/doc.c:88 info/echo-area.c:320 info/session.c:732
msgid "Move forward a word"
msgstr ""
#: info/doc.c:34 info/doc.c:89 info/echo-area.c:360 info/session.c:781
msgid "Move backward a word"
msgstr ""
#: info/doc.c:35 info/session.c:1121
msgid "Move forwards or down through node structure"
msgstr ""
#: info/doc.c:36 info/session.c:1137
msgid "Move backwards or up through node structure"
msgstr ""
#. Show the next screen of WINDOW's node.
#: info/doc.c:37 info/session.c:1152
msgid "Scroll forward in this window"
msgstr ""
#. Show the previous screen of WINDOW's node.
#: info/doc.c:38 info/session.c:1197
msgid "Scroll backward in this window"
msgstr ""
#. Move to the beginning of the node.
#: info/doc.c:39 info/session.c:1237
msgid "Move to the start of this node"
msgstr ""
#. Move to the end of the node.
#: info/doc.c:40 info/session.c:1244
msgid "Move to the end of this node"
msgstr ""
#. ****************************************************************
#.
#. Commands for Manipulating Windows
#.
#. ****************************************************************
#. Make the next window in the chain be the active window.
#: info/doc.c:41 info/session.c:1257
msgid "Select the next window"
msgstr ""
#. Make the previous window in the chain be the active window.
#: info/doc.c:42 info/session.c:1296
msgid "Select the previous window"
msgstr ""
#. Split WINDOW into two windows, both showing the same node. If we
#. are automatically tiling windows, re-tile after the split.
#: info/doc.c:43 info/session.c:1347
msgid "Split the current window"
msgstr ""
#. Delete WINDOW, forgetting the list of last visited nodes. If we are
#. automatically displaying footnotes, show or remove the footnotes
#. window. If we are automatically tiling windows, re-tile after the
#. deletion.
#: info/doc.c:44 info/session.c:1428
msgid "Delete the current window"
msgstr ""
#. Just keep WINDOW, deleting all others.
#: info/doc.c:45 info/session.c:1469
msgid "Delete all other windows"
msgstr ""
#. Scroll the "other" window of WINDOW.
#: info/doc.c:46 info/session.c:1515
msgid "Scroll the other window"
msgstr ""
#. Change the size of WINDOW by AMOUNT.
#: info/doc.c:47 info/session.c:1535
msgid "Grow (or shrink) this window"
msgstr ""
#: info/doc.c:48 info/session.c:1546
msgid "Divide the available screen space among the visible windows"
msgstr ""
#: info/doc.c:49 info/session.c:1553
msgid "Toggle the state of line wrapping in the current window"
msgstr ""
#. Make WINDOW display the "Next:" node of the node currently being
#. displayed.
#: info/doc.c:50 info/session.c:1714
msgid "Select the `Next' node"
msgstr ""
#. Make WINDOW display the "Prev:" node of the node currently being
#. displayed.
#: info/doc.c:51 info/session.c:1722
msgid "Select the `Prev' node"
msgstr ""
#. Make WINDOW display the "Up:" node of the node currently being
#. displayed.
#: info/doc.c:52 info/session.c:1730
msgid "Select the `Up' node"
msgstr ""
#. Make WINDOW display the last node of this info file.
#: info/doc.c:53 info/session.c:1737
msgid "Select the last node in this file"
msgstr ""
#. Make WINDOW display the first node of this info file.
#: info/doc.c:54 info/session.c:1759
msgid "Select the first node in this file"
msgstr ""
#: info/doc.c:55 info/session.c:2401
msgid "Select the most recently selected node"
msgstr ""
#: info/doc.c:56 info/session.c:1778
msgid "Select the last item in this node's menu"
msgstr ""
#. Use KEY (a digit) to select the Nth menu item in WINDOW->node.
#: info/doc.c:57 info/session.c:1784
msgid "Select this menu item"
msgstr ""
#. Read a line (with completion) which is the name of a menu item,
#. and select that item.
#: info/doc.c:58 info/session.c:2042
msgid "Read a menu item and select its node"
msgstr ""
#: info/doc.c:59 info/session.c:2050
msgid "Read a footnote or cross reference and select its node"
msgstr ""
#. Position the cursor at the start of this node's menu.
#: info/doc.c:60 info/session.c:2056
msgid "Move to the start of this node's menu"
msgstr ""
#: info/doc.c:61 info/session.c:2080
msgid "Visit as many menu items at once as possible"
msgstr ""
#. Read a line of input which is a node name, and go to that node.
#: info/doc.c:62 info/session.c:2108
msgid "Read a node name and select it"
msgstr ""
#: info/doc.c:63 info/session.c:2194
msgid "Read a manpage reference and select it"
msgstr ""
#. Move to the "Top" node in this file.
#: info/doc.c:64 info/session.c:2228
msgid "Select the node `Top' in this file"
msgstr ""
#. Move to the node "(dir)Top".
#: info/doc.c:65 info/session.c:2234
msgid "Select the node `(dir)'"
msgstr ""
#. Kill named node.
#: info/doc.c:66 info/session.c:2407
msgid "Kill this node"
msgstr ""
#. Read the name of a file and select the entire file.
#: info/doc.c:67 info/session.c:2415
msgid "Read the name of a file and select it"
msgstr ""
#: info/doc.c:68 info/session.c:2634
msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
msgstr ""
#: info/doc.c:69 info/session.c:2946
msgid "Read a string and search for it"
msgstr ""
#: info/doc.c:70 info/doc.c:71 info/session.c:3020 info/session.c:3026
msgid "Search interactively for a string as you type it"
msgstr ""
#: info/doc.c:72 info/session.c:3579
msgid "Move to the previous cross reference"
msgstr ""
#: info/doc.c:73 info/session.c:3588
msgid "Move to the next cross reference"
msgstr ""
#: info/doc.c:74 info/session.c:3598
msgid "Select reference or menu item appearing on this line"
msgstr ""
#. ****************************************************************
#.
#. Miscellaneous Info Commands
#.
#. ****************************************************************
#. What to do when C-g is pressed in a window.
#: info/doc.c:75 info/session.c:3620
msgid "Cancel current operation"
msgstr ""
#: info/doc.c:76 info/session.c:3636
msgid "Move to the cursor to a specific line of the window"
msgstr ""
#. Clear the screen and redraw its contents. Given a numeric argument,
#. move the line the cursor is on to the COUNT'th line of the window.
#: info/doc.c:77 info/session.c:3668
msgid "Redraw the display"
msgstr ""
#. This command does nothing. It is the fact that a key is bound to it
#. that has meaning. See the code at the top of info_session ().
#: info/doc.c:78 info/session.c:3705
msgid "Quit using Info"
msgstr ""
#: info/doc.c:80 info/session.c:3958
msgid "Add this digit to the current numeric argument"
msgstr ""
#: info/doc.c:81
msgid "universal-argument"
msgstr ""
#: info/doc.c:81 info/session.c:3967
msgid "Start (or multiply by 4) the current numeric argument"
msgstr ""
#: info/doc.c:82 info/session.c:3982
msgid "Internally used by \\[universal-argument]"
msgstr ""
#: info/doc.c:86 info/echo-area.c:307
msgid "Move to the start of this line"
msgstr ""
#: info/doc.c:87 info/echo-area.c:312
msgid "Move to the end of this line"
msgstr ""
#: info/doc.c:90 info/echo-area.c:400
msgid "Delete the character under the cursor"
msgstr ""
#: info/doc.c:91 info/echo-area.c:430
msgid "Delete the character behind the cursor"
msgstr ""
#: info/doc.c:92 info/echo-area.c:451
msgid "Cancel or quit operation"
msgstr ""
#: info/doc.c:93 info/echo-area.c:466
msgid "Accept (or force completion of) this line"
msgstr ""
#: info/doc.c:94 info/echo-area.c:471
msgid "Insert next character verbatim"
msgstr ""
#: info/doc.c:95 info/echo-area.c:479
msgid "Insert this character"
msgstr ""
#: info/doc.c:96 info/echo-area.c:497
msgid "Insert a TAB character"
msgstr ""
#. Transpose the characters at point. If point is at the end of the line,
#. then transpose the characters before point.
#: info/doc.c:97 info/echo-area.c:504
msgid "Transpose characters at point"
msgstr ""
#: info/doc.c:98 info/echo-area.c:555
msgid "Yank back the contents of the last kill"
msgstr ""
#. If the last command was yank, or yank_pop, and the text just before
#. point is identical to the current kill item, then delete that text
#. from the line, rotate the index down, and yank back some other text.
#: info/doc.c:99 info/echo-area.c:575
msgid "Yank back a previous kill"
msgstr ""
#. Delete the text from point to end of line.
#: info/doc.c:100 info/echo-area.c:608
msgid "Kill to the end of the line"
msgstr ""
#: info/doc.c:101 info/echo-area.c:621
msgid "Kill to the beginning of the line"
msgstr ""
#. Delete from point to the end of the current word.
#: info/doc.c:102 info/echo-area.c:633
msgid "Kill the word following the cursor"
msgstr ""
#: info/doc.c:103 info/echo-area.c:652
msgid "Kill the word preceding the cursor"
msgstr ""
#: info/doc.c:104 info/echo-area.c:916
msgid "List possible completions"
msgstr ""
#: info/doc.c:105 info/echo-area.c:1090
msgid "Insert completion"
msgstr ""
#. Scroll the "other" window. If there is a window showing completions, scroll
#. that one, otherwise scroll the window which was active on entering the read
#. function.
#: info/doc.c:106 info/echo-area.c:1321
msgid "Scroll the completions window"
msgstr ""
#. Commands found in "./infodoc.c".
#: info/doc.c:108 info/infodoc.c:328
msgid "Display help message"
msgstr ""
#. Show the Info help node. This means that the "info" file is installed
#. where it can easily be found on your system.
#: info/doc.c:109 info/infodoc.c:346
msgid "Visit Info node `(info)Help'"
msgstr ""
#: info/doc.c:110 info/infodoc.c:470
msgid "Print documentation for KEY"
msgstr ""
#: info/doc.c:111
msgid "Show what to type to execute a given command"
msgstr ""
#. Commands found in "./m-x.c".
#: info/doc.c:113 info/m-x.c:69
msgid "Read the name of an Info command and describe it"
msgstr ""
#: info/doc.c:114 info/m-x.c:96
msgid "Read a command name in the echo area and execute it"
msgstr ""
#: info/doc.c:115 info/m-x.c:150
msgid "Set the height of the displayed window"
msgstr ""
#. Commands found in "./indices.c".
#: info/doc.c:117 info/indices.c:175
msgid "Look up a string in the index for this file"
msgstr ""
#: info/doc.c:118 info/indices.c:332
msgid ""
"Go to the next matching index item from the last `\\[index-search]' command"
msgstr ""
#: info/doc.c:119 info/indices.c:616
msgid "Grovel all known info file's indices for a string and build a menu"
msgstr ""
#. Commands found in "./nodemenu.c".
#: info/doc.c:121 info/nodemenu.c:217
msgid "Make a window containing a menu of all of the currently visited nodes"
msgstr ""
#: info/doc.c:122 info/nodemenu.c:297
msgid "Select a node which has been previously visited in a visible window"
msgstr ""
#. Commands found in "./footnotes.c".
#: info/doc.c:124 info/footnotes.c:232
msgid "Show the footnotes associated with this node in another window"
msgstr ""
#. Commands found in "./variables.c".
#: info/doc.c:126 info/variables.c:77
msgid "Explain the use of a variable"
msgstr ""
#: info/doc.c:127 info/variables.c:102
msgid "Set the value of an Info variable"
msgstr ""
#: info/echo-area.c:562
msgid "Kill ring is empty"
msgstr ""
#: info/echo-area.c:871
msgid "Not complete"
msgstr ""
#: info/echo-area.c:929
msgid "No completions"
msgstr ""
#: info/echo-area.c:933
msgid "Sole completion"
msgstr ""
#: info/echo-area.c:942
#, c-format
msgid "There %s %d "
msgstr ""
#: info/echo-area.c:942
msgid "is"
msgstr ""
#: info/echo-area.c:942
msgid "are"
msgstr ""
#: info/echo-area.c:945
#, c-format
msgid "completion%s:\n"
msgstr ""
#: info/echo-area.c:1223
msgid "Building completions..."
msgstr ""
#: info/footnotes.c:206
msgid "Footnotes could not be displayed"
msgstr ""
#: info/indices.c:205
msgid "Finding index entries..."
msgstr ""
#: info/indices.c:212
msgid "No indices found."
msgstr ""
#: info/indices.c:222
msgid "Index entry: "
msgstr ""
#: info/indices.c:342
msgid "No previous index search string."
msgstr ""
#: info/indices.c:349
msgid "No index entries."
msgstr ""
#: info/indices.c:382
#, c-format
msgid "No %sindex entries containing \"%s\"."
msgstr ""
#: info/indices.c:383
msgid "more "
msgstr ""
#: info/indices.c:393
msgid "CAN'T SEE THIS"
msgstr ""
#: info/indices.c:429
#, c-format
msgid "Found \"%s\" in %s. (`\\[next-index-match]' tries to find next.)"
msgstr ""
#: info/indices.c:533
#, c-format
msgid "Scanning indices of \"%s\"..."
msgstr ""
#: info/indices.c:620
msgid "Index apropos: "
msgstr ""
#: info/indices.c:650
#, c-format
msgid ""
"\n"
"* Menu: Nodes whoses indices contain \"%s\":\n"
msgstr ""
#: info/info.c:347
msgid "no entries found\n"
msgstr ""
#: info/info.c:390
msgid "There is no menu in this node."
msgstr ""
#: info/info.c:421
#, c-format
msgid "There is no menu item \"%s\" in this node."
msgstr ""
#: info/info.c:485
#, c-format
msgid "Unable to find the node referenced by \"%s\"."
msgstr ""
#: info/info.c:595
msgid ""
"Usage: info [-d dir-path] [-f info-file] [-o output-file] [-n node-name]..."
msgstr ""
#: info/info.c:596
msgid ""
" [--directory dir-path] [--file info-file] [--node node-name]..."
msgstr ""
#: info/info.c:597
msgid " [--help] [--output output-file] [--subnodes] [--version]"
msgstr ""
#: info/info.c:598
msgid " [--dribble dribble-file] [--restore from-file]"
msgstr ""
#: info/info.c:599
msgid " [menu-selection ...]"
msgstr ""
#: info/info.c:607
msgid ""
"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."
msgstr ""
#: info/infodoc.c:50
msgid "Basic Commands in Info Windows"
msgstr ""
#: info/infodoc.c:211
msgid ""
"The following commands can only be invoked via M-x:\n"
"\n"
msgstr ""
#: info/infodoc.c:228
msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
msgstr ""
#: info/infodoc.c:483
#, c-format
msgid "Describe key: %s"
msgstr ""
#: info/infodoc.c:492
#, c-format
msgid "ESC %s is undefined."
msgstr ""
#: info/infodoc.c:509
#, c-format
msgid "%s is undefined."
msgstr ""
#: info/infodoc.c:535
#, c-format
msgid "%s is defined to %s."
msgstr ""
#: info/infodoc.c:731
msgid "Where is command: "
msgstr ""
#: info/infodoc.c:753
#, c-format
msgid "`%s' is not on any keys"
msgstr ""
#: info/infodoc.c:759
#, c-format
msgid "%s can only be invoked via %s."
msgstr ""
#: info/infodoc.c:762
#, c-format
msgid "%s can be invoked via %s."
msgstr ""
#: info/infodoc.c:766
#, c-format
msgid "There is no function named `%s'"
msgstr ""
#: info/m-x.c:73
msgid "Describe command: "
msgstr ""
#: info/m-x.c:134
msgid "Cannot execute an `echo-area' command here."
msgstr ""
#: info/m-x.c:163
#, c-format
msgid "Set screen height to (%d): "
msgstr ""
#: info/makedoc.c:126
msgid ""
" Source files groveled to make this file include:\n"
"\n"
msgstr ""
#: info/makedoc.c:450
#, c-format
msgid "Couldn't manipulate the file %s.\n"
msgstr ""
#: info/nodemenu.c:28
msgid ""
"\n"
"* Menu:\n"
" (File)Node Lines Size Containing File\n"
" ---------- ----- ---- ---------------"
msgstr ""
#: info/nodemenu.c:197
msgid ""
"Here is the menu of nodes you have recently visited.\n"
"Select one from this menu, or use `\\[history-node]' in another window.\n"
msgstr ""
#: info/nodemenu.c:309
msgid "Select visited node: "
msgstr ""
#: info/nodemenu.c:329 info/session.c:1996
#, c-format
msgid "The reference disappeared! (%s)."
msgstr ""
#: info/session.c:162
#, c-format
msgid ""
"Welcome to Info version %s. \"\\[get-help-window]\" for help, "
"\"\\[menu-item]\" for menu item."
msgstr ""
#: info/session.c:855
msgid " times"
msgstr ""
#: info/session.c:857
#, c-format
msgid "%d times"
msgstr ""
#: info/session.c:895
msgid "No \"Next\" pointer for this node."
msgstr ""
#: info/session.c:898
msgid "Following \"Next\" node..."
msgstr ""
#: info/session.c:899 info/session.c:927 info/session.c:999
#: info/session.c:1717
msgid "Next"
msgstr ""
#: info/session.c:915
msgid "Selecting first menu item..."
msgstr ""
#: info/session.c:926
msgid "Selecting \"Next\" node..."
msgstr ""
#: info/session.c:950 info/session.c:1063 info/session.c:1733
msgid "Up"
msgstr ""
#: info/session.c:1020
msgid "No more nodes."
msgstr ""
#: info/session.c:1044
msgid "No \"Prev\" for this node."
msgstr ""
#. Move to the previous node. If this node now contains a menu,
#. and we have not inhibited movement to it, move to the node
#. corresponding to the last menu item.
#: info/session.c:1047 info/session.c:1100
msgid "Moving \"Prev\" in this window."
msgstr ""
#: info/session.c:1048 info/session.c:1101 info/session.c:1725
msgid "Prev"
msgstr ""
#: info/session.c:1059
msgid "No \"Prev\" or \"Up\" for this node."
msgstr ""
#: info/session.c:1062
msgid "Moving \"Up\" in this window."
msgstr ""
#: info/session.c:1110
msgid "Moving to \"Prev\"'s last menu item."
msgstr ""
#: info/session.c:1436
msgid "Cannot delete a permanent window"
msgstr ""
#: info/session.c:1750 info/session.c:1768
msgid "This window has no additional nodes"
msgstr ""
#: info/session.c:1813
#, c-format
msgid "There aren't %d items in this menu."
msgstr ""
#: info/session.c:1944
#, c-format
msgid "Menu item (%s): "
msgstr ""
#: info/session.c:1946
msgid "Menu item: "
msgstr ""
#: info/session.c:1951
#, c-format
msgid "Follow xref (%s): "
msgstr ""
#: info/session.c:1953
msgid "Follow xref: "
msgstr ""
#: info/session.c:2169 info/session.c:2173
msgid "Goto Node: "
msgstr ""
#: info/session.c:2198
msgid "Get Manpage: "
msgstr ""
#. Notice that the node "Top" is special, and doesn't have to
#. be referenced.
#: info/session.c:2230 makeinfo/makeinfo.c:5135 makeinfo/makeinfo.c:5218
msgid "Top"
msgstr ""
#: info/session.c:2254
#, c-format
msgid "Kill node (%s): "
msgstr ""
#: info/session.c:2307
#, c-format
msgid "Cannot kill node `%s'"
msgstr ""
#: info/session.c:2317
msgid "Cannot kill the last node"
msgstr ""
#: info/session.c:2419
msgid "Find file: "
msgstr ""
#: info/session.c:2436
#, c-format
msgid "Cannot find \"%s\"."
msgstr ""
#: info/session.c:2483 info/session.c:2608
#, c-format
msgid "Could not create output file \"%s\"."
msgstr ""
#: info/session.c:2496 info/session.c:2625 info/session.c:2671
msgid "Done."
msgstr ""
#: info/session.c:2553
#, c-format
msgid "Writing node \"(%s)%s\"..."
msgstr ""
#: info/session.c:2556
#, c-format
msgid "Writing node \"%s\"..."
msgstr ""
#: info/session.c:2654
#, c-format
msgid "Cannot open pipe to \"%s\"."
msgstr ""
#: info/session.c:2661
#, c-format
msgid "Printing node \"(%s)%s\"..."
msgstr ""
#: info/session.c:2664
#, c-format
msgid "Printing node \"%s\"..."
msgstr ""
#: info/session.c:2896
#, c-format
msgid "Searching subfile \"%s\"..."
msgstr ""
#: info/session.c:2966
#, c-format
msgid "%s for string [%s]: "
msgstr ""
#: info/session.c:2967
msgid "Search backward"
msgstr ""
#: info/session.c:2967
msgid "Search"
msgstr ""
#: info/session.c:2994
msgid "Search failed."
msgstr ""
#: info/session.c:3120
msgid "I-search backward: "
msgstr ""
#: info/session.c:3122
msgid "I-search: "
msgstr ""
#: info/session.c:3147
msgid "Failing "
msgstr ""
#: info/session.c:3512
msgid "No cross references in this node."
msgstr ""
#: info/session.c:3627
msgid "Quit"
msgstr ""
#: info/session.c:3728
#, c-format
msgid "Unknown command (%s)."
msgstr ""
#: info/session.c:3733
msgid "\"\" is invalid"
msgstr ""
#: info/session.c:3735
#, c-format
msgid "\"%s\" is invalid"
msgstr ""
#: info/variables.c:40
msgid "When \"On\", footnotes appear and disappear automatically"
msgstr ""
#: info/variables.c:44
msgid "When \"On\", creating or deleting a window resizes other windows"
msgstr ""
#: info/variables.c:48
msgid "When \"On\", flash the screen instead of ringing the bell"
msgstr ""
#: info/variables.c:52
msgid "When \"On\", errors cause the bell to ring"
msgstr ""
#: info/variables.c:56
msgid "When \"On\", Info garbage collects files which had to be uncompressed"
msgstr ""
#: info/variables.c:59
msgid "When \"On\", the portion of the matched search string is highlighted"
msgstr ""
#: info/variables.c:63
msgid "Controls what happens when scrolling is requested at the end of a node"
msgstr ""
#: info/variables.c:67
msgid "The number lines to scroll when the cursor moves out of the window"
msgstr ""
#: info/variables.c:71
msgid "When \"On\", Info accepts and displays ISO Latin characters"
msgstr ""
#. Get the variable's name.
#: info/variables.c:83
msgid "Describe variable: "
msgstr ""
#. Get the variable's name and value.
#: info/variables.c:108
msgid "Set variable: "
msgstr ""
#: info/variables.c:126
#, c-format
msgid "Set %s to value (%d): "
msgstr ""
#: info/variables.c:167
#, c-format
msgid "Set %s to value (%s): "
msgstr ""
#: info/window.c:1102
msgid "--*** Tags out of Date ***"
msgstr ""
#. strlen (location_indicator).
#. 10 for the decimal representation of the number of lines in this
#. node, and the remainder of the text that can appear in the line.
#: info/window.c:1113
msgid "-----Info: (), lines ----, "
msgstr ""
#: info/window.c:1120
#, c-format
msgid "-%s---Info: %s, %d lines --%s--"
msgstr ""
#: info/window.c:1124
#, c-format
msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
msgstr ""
#: info/window.c:1131
#, c-format
msgid " Subfile: %s"
msgstr ""
#: makeinfo/makeinfo.c:889
#, c-format
msgid "%s:%d: warning: "
msgstr ""
#: makeinfo/makeinfo.c:912
msgid "Too many errors! Gave up.\n"
msgstr ""
#: makeinfo/makeinfo.c:971 makeinfo/makeinfo.c:996 makeinfo/makeinfo.c:1064
#, c-format
msgid "%s: %s arg must be numeric, not `%s'.\n"
msgstr ""
#: makeinfo/makeinfo.c:985
#, c-format
msgid "Couldn't open macro expansion output `%s'"
msgstr ""
#: makeinfo/makeinfo.c:988
msgid "Cannot specify more than one macro expansion output"
msgstr ""
#: makeinfo/makeinfo.c:1032
#, c-format
msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
msgstr ""
#: makeinfo/makeinfo.c:1075
#, c-format
msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
msgstr ""
#: makeinfo/makeinfo.c:1085 util/install-info.c:522 util/texindex.c:348
msgid ""
"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."
msgstr ""
#: makeinfo/makeinfo.c:1105
#, c-format
msgid "%s: missing file argument.\n"
msgstr ""
#: makeinfo/makeinfo.c:1146
#, c-format
msgid "makeinfo (GNU %s %s) %d.%d\n"
msgstr ""
#: makeinfo/makeinfo.c:1158
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr ""
#: makeinfo/makeinfo.c:1160
#, c-format
msgid ""
"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"
msgstr ""
#: makeinfo/makeinfo.c:1545
#, c-format
msgid "%s: getwd: %s, %s\n"
msgstr ""
#: makeinfo/makeinfo.c:1741
#, c-format
msgid "Expected `%s'"
msgstr ""
#: makeinfo/makeinfo.c:2072
#, c-format
msgid "No `%s' found in `%s'"
msgstr ""
#: makeinfo/makeinfo.c:2122
#, c-format
msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
msgstr ""
#: makeinfo/makeinfo.c:2141
#, c-format
msgid "Making %s file `%s' from `%s'.\n"
msgstr ""
#: makeinfo/makeinfo.c:2171
#, c-format
msgid "This is Info file %s, produced by Makeinfo version %d.%d"
msgstr ""
#: makeinfo/makeinfo.c:2173
#, c-format
msgid " from the input file %s.\n"
msgstr ""
#: makeinfo/makeinfo.c:2192
#, c-format
msgid ""
"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
msgstr ""
#. If there were errors, and no --force, remove the output.
#: makeinfo/makeinfo.c:2224
#, c-format
msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
msgstr ""
#. Special case. I'm not supposed to see this character by itself.
#. If I do, it means there is a syntax error in the input text.
#. Report the error here, but remember this brace on the stack so
#. you can ignore its partner.
#: makeinfo/makeinfo.c:2364 makeinfo/makeinfo.c:7624
#, c-format
msgid "Misplaced %c"
msgstr ""
#: makeinfo/makeinfo.c:2451
#, c-format
msgid "Unknown command `%s'"
msgstr ""
#: makeinfo/makeinfo.c:2471
msgid "NO_NAME!"
msgstr ""
#: makeinfo/makeinfo.c:2485
#, c-format
msgid "%c%s expected `{...}'"
msgstr ""
#: makeinfo/makeinfo.c:2518
msgid "Unmatched }"
msgstr ""
#: makeinfo/makeinfo.c:2566
#, c-format
msgid "%c%s missing close brace"
msgstr ""
#: makeinfo/makeinfo.c:3362
msgid "Broken-Type in insertion_type_pname"
msgstr ""
#: makeinfo/makeinfo.c:3428
msgid "Enumeration stack overflow"
msgstr ""
#: makeinfo/makeinfo.c:3460
#, c-format
msgid "lettering overflow, restarting at %c"
msgstr ""
#: makeinfo/makeinfo.c:3499
msgid "* Menu:\n"
msgstr ""
#: makeinfo/makeinfo.c:3583
#, c-format
msgid "%s requires an argument: the formatter for %citem"
msgstr ""
#: makeinfo/makeinfo.c:3687
#, c-format
msgid "`%cend' expected `%s', but saw `%s'"
msgstr ""
#: makeinfo/makeinfo.c:3800
#, c-format
msgid "No matching `%cend %s'"
msgstr ""
#: makeinfo/makeinfo.c:3939
#, c-format
msgid "How did @%s end up in cm_special_char?\n"
msgstr ""
#. This error message isn't perfect if the argument is multiple
#. characters, but it doesn't seem worth getting right.
#: makeinfo/makeinfo.c:3953
#, c-format
msgid "%c%s expects `i' or `j' as argument, not `%c'"
msgstr ""
#: makeinfo/makeinfo.c:3957
#, c-format
msgid "%c%s expects a single character `i' or `j' as argument"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "January"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "February"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "March"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "April"
msgstr ""
#: makeinfo/makeinfo.c:3969
msgid "May"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "June"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "July"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "August"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "September"
msgstr ""
#: makeinfo/makeinfo.c:3970
msgid "October"
msgstr ""
#: makeinfo/makeinfo.c:3971
msgid "November"
msgstr ""
#: makeinfo/makeinfo.c:3971
msgid "December"
msgstr ""
#: makeinfo/makeinfo.c:3976
#, c-format
msgid "%d %s %d"
msgstr ""
#: makeinfo/makeinfo.c:4029
#, c-format
msgid "%c%s expects a single character as an argument"
msgstr ""
#: makeinfo/makeinfo.c:4143
#, c-format
msgid "%c%s is obsolete"
msgstr ""
#: makeinfo/makeinfo.c:4315
#, c-format
msgid "There already is a node having %ctop as a section"
msgstr ""
#: makeinfo/makeinfo.c:4327
#, c-format
msgid "Here is the %ctop node"
msgstr ""
#: makeinfo/makeinfo.c:4346
#, c-format
msgid "%ctop used before %cnode, defaulting to %s"
msgstr ""
#: makeinfo/makeinfo.c:4421
#, c-format
msgid "%c%s is obsolete; use %c%s instead"
msgstr ""
#: makeinfo/makeinfo.c:4670
#, c-format
msgid "Node `%s' multiply defined (line %d is first definition at)"
msgstr ""
#: makeinfo/makeinfo.c:4743
#, c-format
msgid "Formatting node %s...\n"
msgstr ""
#: makeinfo/makeinfo.c:4792
#, c-format
msgid "Node `%s' requires a sectioning command (e.g. %c%s)"
msgstr ""
#: makeinfo/makeinfo.c:5075
#, c-format
msgid "Node `%s''s Next field not pointed back to"
msgstr ""
#: makeinfo/makeinfo.c:5080
#, c-format
msgid "This node (`%s') is the one with the bad `Prev'"
msgstr ""
#: makeinfo/makeinfo.c:5120
#, c-format
msgid "Node `%s's Prev field not pointed back to"
msgstr ""
#: makeinfo/makeinfo.c:5124
#, c-format
msgid "This node (`%s') has the bad Next"
msgstr ""
#: makeinfo/makeinfo.c:5136
#, c-format
msgid "Node `%s' missing Up field"
msgstr ""
#: makeinfo/makeinfo.c:5176
#, c-format
msgid "`%s' has an Up field of `%s', but `%s' has no menu item for `%s'"
msgstr ""
#: makeinfo/makeinfo.c:5207
#, c-format
msgid "node `%s' has been referenced %d times"
msgstr ""
#: makeinfo/makeinfo.c:5219
#, c-format
msgid "unreferenced node `%s'"
msgstr ""
#: makeinfo/makeinfo.c:5246
#, c-format
msgid "%s reference to nonexistent node `%s'"
msgstr ""
#: makeinfo/makeinfo.c:5658 makeinfo/makeinfo.c:5670
#, c-format
msgid "%cmenu seen before first node"
msgstr ""
#: makeinfo/makeinfo.c:5659 makeinfo/makeinfo.c:5671
msgid "creating `Top' node"
msgstr ""
#: makeinfo/makeinfo.c:5784
#, c-format
msgid "`.' or `,' must follow cross reference, not %c"
msgstr ""
#: makeinfo/makeinfo.c:5952
#, c-format
msgid "@image file `%s' unreadable: %s"
msgstr ""
#: makeinfo/makeinfo.c:5956
msgid "@image missing filename argument"
msgstr ""
#: makeinfo/makeinfo.c:6057
#, c-format
msgid "%s requires letter or digit"
msgstr ""
#: makeinfo/makeinfo.c:6142
#, c-format
msgid "Unmatched `%c%s'"
msgstr ""
#: makeinfo/makeinfo.c:6149
#, c-format
msgid "`%c%s' needs something after it"
msgstr ""
#: makeinfo/makeinfo.c:6155
#, c-format
msgid "Bad argument to `%s', `%s', using `%s'"
msgstr ""
#: makeinfo/makeinfo.c:6328
#, c-format
msgid "{No Value For \"%s\"}"
msgstr ""
#: makeinfo/makeinfo.c:6378
#, c-format
msgid "%c%s requires a name"
msgstr ""
#: makeinfo/makeinfo.c:6486
#, c-format
msgid "Reached eof before matching @end %s"
msgstr ""
#: makeinfo/makeinfo.c:6715
#, c-format
msgid "The `%c%s' command is meaningless within a `@%s' block"
msgstr ""
#: makeinfo/makeinfo.c:6724
#, c-format
msgid "%citemx is not meaningful inside of a `%s' block"
msgstr ""
#: makeinfo/makeinfo.c:6837
#, c-format
msgid "%c%s found outside of an insertion block"
msgstr ""
#: makeinfo/makeinfo.c:6928
#, c-format
msgid "Missing `}' in %cdef arg"
msgstr ""
#: makeinfo/makeinfo.c:7137 makeinfo/makeinfo.c:7157
msgid "Function"
msgstr ""
#: makeinfo/makeinfo.c:7141
msgid "Macro"
msgstr ""
#: makeinfo/makeinfo.c:7145
msgid "Special Form"
msgstr ""
#: makeinfo/makeinfo.c:7149 makeinfo/makeinfo.c:7161
msgid "Variable"
msgstr ""
#: makeinfo/makeinfo.c:7153
msgid "User Option"
msgstr ""
#: makeinfo/makeinfo.c:7165
msgid "Instance Variable"
msgstr ""
#: makeinfo/makeinfo.c:7169 makeinfo/makeinfo.c:7173
msgid "Method"
msgstr ""
#: makeinfo/makeinfo.c:7330
#, c-format
msgid "Must be in a `%s' insertion in order to use `%s'x"
msgstr ""
#: makeinfo/makeinfo.c:7402
#, c-format
msgid "%csp requires a positive numeric argument"
msgstr ""
#: makeinfo/makeinfo.c:7645
msgid "asis"
msgstr ""
#: makeinfo/makeinfo.c:7647
msgid "none"
msgstr ""
#: makeinfo/makeinfo.c:7669
#, c-format
msgid "Bad argument to %c%s"
msgstr ""
#: makeinfo/makeinfo.c:7961
#, c-format
msgid "Unknown index `%s'"
msgstr ""
#: makeinfo/makeinfo.c:8026
#, c-format
msgid "Index `%s' already exists"
msgstr ""
#: makeinfo/makeinfo.c:8057
#, c-format
msgid "Unknown index `%s' and/or `%s' in @synindex"
msgstr ""
#: makeinfo/makeinfo.c:8246
#, c-format
msgid "Unknown index `%s' in @printindex"
msgstr ""
#: makeinfo/makeinfo.c:8261
msgid ""
"* Menu:\n"
"\n"
msgstr ""
#: makeinfo/makeinfo.c:8448
#, c-format
msgid "`%c%s' needs an argument `{...}', not just `%s'"
msgstr ""
#: makeinfo/makeinfo.c:8463
#, c-format
msgid "No closing brace for footnote `%s'"
msgstr ""
#: makeinfo/makeinfo.c:8502
msgid "Footnote defined without parent node"
msgstr ""
#: makeinfo/makeinfo.c:8534
msgid "-Footnotes"
msgstr ""
#: makeinfo/makeinfo.c:8589
msgid ""
"---------- Footnotes ----------\n"
"\n"
msgstr ""
#: makeinfo/makeinfo.c:8685
#, c-format
msgid "macro `%s' previously defined"
msgstr ""
#: makeinfo/makeinfo.c:8689
#, c-format
msgid "here is the previous definition of `%s'"
msgstr ""
#: makeinfo/makeinfo.c:8903
#, c-format
msgid "Macro `%s' called with too many args"
msgstr ""
#: makeinfo/makeinfo.c:9055
#, c-format
msgid "%cend macro not found"
msgstr ""
#: makeinfo/makeinfo.c:9095
#, c-format
msgid "%cquote-arg only useful when the macro takes a single argument"
msgstr ""
#: makeinfo/multi.c:206
#, c-format
msgid "ignoring stray text `%s' after @multitable"
msgstr ""
#: makeinfo/multi.c:277
#, c-format
msgid "Too many columns in multitable item (max %d)"
msgstr ""
#. impossible, I think.
#: makeinfo/multi.c:304
msgid "multitable item not in active multitable"
msgstr ""
#: makeinfo/multi.c:313
#, c-format
msgid "Cannot select column #%d in multitable"
msgstr ""
#: makeinfo/multi.c:404
msgid "ignoring @tab outside of multitable"
msgstr ""
#: makeinfo/multi.c:428
msgid "** Multicolumn output from last row:\n"
msgstr ""
#: makeinfo/multi.c:431
#, c-format
msgid "* column #%d: output = %s\n"
msgstr ""
#: util/install-info.c:119 util/install-info.c:132
msgid "virtual memory exhausted"
msgstr ""
#: util/install-info.c:188
#, c-format
msgid "%s: warning: "
msgstr ""
#: util/install-info.c:209
#, c-format
msgid " for %s"
msgstr ""
#: util/install-info.c:278
#, c-format
msgid "\tTry `%s --help' for a complete list of options.\n"
msgstr ""
#: util/install-info.c:286
#, c-format
msgid ""
"%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"
msgstr ""
#: util/install-info.c:334
msgid ""
"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"
msgstr ""
#: util/install-info.c:357
#, c-format
msgid "%s: could not read (%s) and could not create (%s)\n"
msgstr ""
#: util/install-info.c:456 util/install-info.c:466
#, c-format
msgid "%s: Specify the Info directory only once.\n"
msgstr ""
#: util/install-info.c:494
#, c-format
msgid "%s: Specify the Info file only once.\n"
msgstr ""
#: util/install-info.c:521
#, c-format
msgid "install-info (GNU %s) %s\n"
msgstr ""
#: util/install-info.c:541
#, c-format
msgid "excess command line argument `%s'"
msgstr ""
#: util/install-info.c:545
msgid "No input file specified; try --help for more information."
msgstr ""
#: util/install-info.c:547
msgid "No dir file specified; try --help for more information."
msgstr ""
#: util/install-info.c:599 util/install-info.c:622
msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
msgstr ""
#: util/install-info.c:618
msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
msgstr ""
#. No need to abort here, the original info file may not have
#. the requisite Texinfo commands. This is not something an
#. installer should have to correct (it's a problem for the
#. maintainer), and there's no need to cause subsequent parts of
#. `make install' to fail.
#: util/install-info.c:632
#, c-format
msgid "no info dir entry in `%s'"
msgstr ""
#: util/install-info.c:843
#, c-format
msgid "menu item `%s' already exists, for file `%s'"
msgstr ""
#: util/install-info.c:866
#, c-format
msgid "no entries found for `%s'; nothing deleted"
msgstr ""
#: util/texindex.c:263
msgid "keep temporary files around after processing"
msgstr ""
#: util/texindex.c:265
msgid "do not keep temporary files around after processing (default)"
msgstr ""
#: util/texindex.c:267
msgid "send output to FILE"
msgstr ""
#: util/texindex.c:269
msgid "display version information and exit"
msgstr ""
#: util/texindex.c:271
msgid "display this help and exit"
msgstr ""
#: util/texindex.c:282
#, c-format
msgid "Usage: %s [OPTION]... FILE...\n"
msgstr ""
#: util/texindex.c:283
msgid "Generate a sorted index for each TeX output FILE.\n"
msgstr ""
#. Avoid trigraph nonsense.
#: util/texindex.c:285
msgid "Usually FILE... is `foo.??' for a document `foo.texi'.\n"
msgstr ""
#: util/texindex.c:286
msgid ""
"\n"
"Options:\n"
msgstr ""
#: util/texindex.c:300
msgid ""
"\n"
"Email bug reports to bug-texinfo@prep.ai.mit.edu."
msgstr ""
#: util/texindex.c:347
#, c-format
msgid "texindex (GNU %s %s) 2.1\n"
msgstr ""
#: util/texindex.c:926 util/texindex.c:960 util/texindex.c:1036
#: util/texindex.c:1064
#, c-format
msgid "%s: not a texinfo index file"
msgstr ""
#: util/texindex.c:1021
#, c-format
msgid "failure reopening %s"
msgstr ""
#: util/texindex.c:1334
#, c-format
msgid "entry %s follows an entry with a secondary name"
msgstr ""
#: util/texindex.c:1672
#, c-format
msgid "%s; for file `%s'.\n"
msgstr ""
#: util/texindex.c:1733
#, c-format
msgid "Virtual memory exhausted in %s ()! Needed %d bytes."
msgstr ""
## 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)'`; \
Assorted Texinfo-related programs and scripts.
texindex, texi2dvi, and install-info get installed.
The other programs are for your amusement.
#!/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@"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment