import texinfo-4.8a

This commit is contained in:
christos 2016-01-14 00:11:27 +00:00
parent 8c986671c8
commit 29619d2afe
383 changed files with 222608 additions and 0 deletions

768
external/gpl2/texinfo/dist/ABOUT-NLS vendored Normal file
View File

@ -0,0 +1,768 @@
Notes on the Free Translation Project
*************************************
Free software is going international! The Free Translation Project is
a way to get maintainers of free software, translators, and users all
together, so that will gradually become able to speak many languages.
A few packages already provide translations for their messages.
If you found this `ABOUT-NLS' file inside a distribution, you may
assume that the distributed package does use GNU `gettext' internally,
itself available at your nearest GNU archive site. But you do _not_
need to install GNU `gettext' prior to configuring, installing or using
this package with messages translated.
Installers will find here some useful hints. These notes also
explain how users should proceed for getting the programs to use the
available translations. They tell how people wanting to contribute and
work 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.
Quick configuration advice
==========================
If you want to exploit the full power of internationalization, you
should configure it using
./configure --with-included-gettext
to force usage of internationalizing routines provided within this
package, despite the existence of internationalizing capabilities in the
operating system where this package is being installed. So far, only
the `gettext' implementation in the GNU C library version 2 provides as
many features (such as locale alias, message inheritance, automatic
charset conversion or plural form handling) as the implementation here.
It is also not possible to offer this additional functionality on top
of a `catgets' implementation. Future versions of GNU `gettext' will
very likely convey even more functionality. So it might be a good idea
to change to GNU `gettext' as soon as possible.
So you need _not_ provide this option if you are using GNU libc 2 or
you have installed a recent copy of the GNU gettext package with the
included `libintl'.
INSTALL Matters
===============
Some packages are "localizable" when properly installed; the programs
they contain can be made to speak your own native language. Most such
packages use GNU `gettext'. Other packages have their own ways to
internationalization, predating GNU `gettext'.
By default, this package will be installed to allow translation of
messages. It will automatically detect whether the system already
provides the GNU `gettext' functions. If not, the 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 --disable-nls
will respectively bypass any pre-existing `gettext' to use the
internationalizing routines provided within this package, or else,
_totally_ disable translation of messages.
When you already have GNU `gettext' installed on your system and run
configure without an option for your new package, `configure' will
probably detect the previously built and installed `libintl.a' file and
will decide to use this. This might 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.
The configuration process will not test for the `catgets' function
and therefore it will not be used. The reason is that even an
emulation of `gettext' on top of `catgets' could not provide all the
extensions of the GNU `gettext' library.
Internationalized packages 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
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
and `CC' is an ISO 3166 two-letter country code. For example, let's
suppose that you speak German and live in Germany. At the shell
prompt, merely execute `setenv LANG de_DE' (in `csh'),
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
This can be done from your `.login' or `.profile' file, once and for
all.
You might think that the country code specification is redundant.
But in fact, some languages have dialects in different countries. For
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
country code serves to distinguish the dialects.
The locale naming convention of `LL_CC', with `LL' denoting the
language and `CC' denoting the country, is the one use on systems based
on GNU libc. On other systems, some variations of this scheme are
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
locales supported by your system for your country by running the command
`locale -a | grep '^LL''.
Not all programs have translations for all languages. By default, an
English message is shown in place of a nonexistent translation. If you
understand other languages, you can set up a priority list of languages.
This is done through a different environment variable, called
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
for the purpose of message handling, but you still need to have `LANG'
set to the primary language; this is required by other parts of the
system libraries. For example, some Swedish users who would rather
read translations in German than English for when Swedish is not
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
Special advice for Norwegian users: The language code for Norwegian
bokma*l changed from `no' to `nb' recently (in 2003). During the
transition period, while some message catalogs for this language are
installed under `nb' and some older ones under `no', it's recommended
for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
older translations are used.
In the `LANGUAGE' environment variable, but not in the `LANG'
environment variable, `LL_CC' combinations can be abbreviated as `LL'
to denote the language's main dialect. For example, `de' is equivalent
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
(Portuguese as spoken in Portugal) in this context.
Translating Teams
=================
For the Free Translation Project to be a success, we need interested
people who like their own language and write it well, and who are also
able to synergize with other translators speaking the same language.
Each translation team has its own mailing list. The up-to-date list of
teams can be found at the Free Translation Project's homepage,
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
area.
If you'd like to volunteer to _work_ at translating messages, you
should become a member of the translating team for your own language.
The subscribing address is _not_ the same as the list itself, it has
`-request' appended. For example, speakers of Swedish can send a
message to `sv-request@li.org', having this message body:
subscribe
Keep in mind that team members are expected to participate
_actively_ in translations, or at solving translational difficulties,
rather than merely lurking around. If your team does not exist yet and
you want to start one, or if you are unsure about what to do or how to
get started, please write to `translation@iro.umontreal.ca' to reach the
coordinator for all translator teams.
The English team is special. It works at improving and uniformizing
the terminology in use. Proven linguistic skill are praised more than
programming skill, here.
Available Packages
==================
Languages are not equally supported in all packages. The following
matrix shows the current state of internationalization, as of January
2004. The matrix shows, in regard of each package, for which languages
PO files have been submitted to translation coordination, with a
translation percentage of at least 50%.
Ready PO files af am ar az be bg bs ca cs da de el en en_GB eo es
+----------------------------------------------------+
a2ps | [] [] [] [] |
aegis | () |
ant-phone | () |
anubis | |
ap-utils | |
aspell | [] |
bash | [] [] [] [] |
batchelor | |
bfd | [] [] |
binutils | [] [] |
bison | [] [] [] |
bluez-pin | [] [] [] |
clisp | |
clisp | [] [] [] |
console-tools | [] [] |
coreutils | [] [] [] [] |
cpio | [] [] [] |
darkstat | [] () [] |
diffutils | [] [] [] [] [] [] [] |
e2fsprogs | [] [] [] |
enscript | [] [] [] [] |
error | [] [] [] [] [] |
fetchmail | [] () [] [] [] [] |
fileutils | [] [] [] |
findutils | [] [] [] [] [] [] [] |
flex | [] [] [] [] |
fslint | |
gas | [] |
gawk | [] [] [] [] |
gbiff | [] |
gcal | [] |
gcc | [] [] |
gettext | [] [] [] [] [] |
gettext-examples | [] [] [] [] |
gettext-runtime | [] [] [] [] [] |
gettext-tools | [] [] [] |
gimp-print | [] [] [] [] [] |
gliv | |
glunarclock | [] [] |
gnubiff | [] |
gnucash | [] () [] [] |
gnucash-glossary | [] () [] |
gnupg | [] () [] [] [] [] |
gpe-aerial | [] |
gpe-beam | [] [] |
gpe-calendar | [] [] |
gpe-clock | [] [] |
gpe-conf | [] [] |
gpe-contacts | [] [] |
gpe-edit | [] |
gpe-go | [] |
gpe-login | [] [] |
gpe-ownerinfo | [] [] |
gpe-sketchbook | [] [] |
gpe-su | [] [] |
gpe-taskmanager | [] [] |
gpe-timesheet | [] |
gpe-today | [] [] |
gpe-todo | [] [] |
gphoto2 | [] [] [] [] |
gprof | [] [] [] |
gpsdrive | () () () |
gramadoir | [] |
grep | [] [] [] [] [] [] |
gretl | [] |
gtick | [] () |
hello | [] [] [] [] [] [] |
id-utils | [] [] |
indent | [] [] [] [] |
iso_3166 | [] [] [] [] [] [] [] [] [] [] |
iso_3166_1 | [] [] [] [] [] [] |
iso_3166_2 | |
iso_3166_3 | [] |
iso_4217 | [] [] [] [] |
iso_639 | |
jpilot | [] [] [] |
jtag | |
jwhois | [] |
kbd | [] [] [] [] [] |
latrine | () |
ld | [] [] |
libc | [] [] [] [] [] [] |
libgpewidget | [] [] |
libiconv | [] [] [] [] [] |
lifelines | [] () |
lilypond | [] |
lingoteach | |
lingoteach_lessons | () () |
lynx | [] [] [] [] |
m4 | [] [] [] [] |
mailutils | [] [] |
make | [] [] [] |
man-db | [] () [] [] () |
minicom | [] [] [] |
mysecretdiary | [] [] [] |
nano | [] () [] [] [] |
nano_1_0 | [] () [] [] [] |
opcodes | [] |
parted | [] [] [] [] [] |
ptx | [] [] [] [] [] |
python | |
radius | [] |
recode | [] [] [] [] [] [] [] |
rpm | [] [] |
screem | |
scrollkeeper | [] [] [] [] [] [] |
sed | [] [] [] [] [] [] |
sh-utils | [] [] [] |
shared-mime-info | |
sharutils | [] [] [] [] [] [] |
silky | () |
skencil | [] () [] |
sketch | [] () [] |
soundtracker | [] [] [] |
sp | [] |
tar | [] [] [] [] |
texinfo | [] [] [] |
textutils | [] [] [] [] |
tin | () () |
tp-robot | |
tuxpaint | [] [] [] [] [] [] [] |
unicode-han-tra... | |
unicode-transla... | |
util-linux | [] [] [] [] [] |
vorbis-tools | [] [] [] [] |
wastesedge | () |
wdiff | [] [] [] [] |
wget | [] [] [] [] [] [] |
xchat | [] [] [] [] |
xfree86_xkb_xml | [] [] |
xpad | [] |
+----------------------------------------------------+
af am ar az be bg bs ca cs da de el en en_GB eo es
4 0 0 1 9 4 1 40 41 60 78 17 1 5 13 68
et eu fa fi fr ga gl he hr hu id is it ja ko lg
+-------------------------------------------------+
a2ps | [] [] [] () () |
aegis | |
ant-phone | [] |
anubis | [] |
ap-utils | [] |
aspell | [] [] |
bash | [] [] |
batchelor | [] [] |
bfd | [] |
binutils | [] [] |
bison | [] [] [] [] |
bluez-pin | [] [] [] [] [] |
clisp | |
clisp | [] |
console-tools | |
coreutils | [] [] [] [] [] [] |
cpio | [] [] [] [] |
darkstat | () [] [] [] |
diffutils | [] [] [] [] [] [] [] |
e2fsprogs | |
enscript | [] [] |
error | [] [] [] [] |
fetchmail | [] |
fileutils | [] [] [] [] [] [] |
findutils | [] [] [] [] [] [] [] [] [] [] [] |
flex | [] [] [] |
fslint | [] |
gas | [] |
gawk | [] [] [] |
gbiff | [] |
gcal | [] |
gcc | [] |
gettext | [] [] [] |
gettext-examples | [] [] |
gettext-runtime | [] [] [] [] [] |
gettext-tools | [] [] [] |
gimp-print | [] [] |
gliv | () |
glunarclock | [] [] [] [] |
gnubiff | [] |
gnucash | () [] |
gnucash-glossary | [] |
gnupg | [] [] [] [] [] [] [] |
gpe-aerial | [] |
gpe-beam | [] |
gpe-calendar | [] [] [] |
gpe-clock | [] |
gpe-conf | [] |
gpe-contacts | [] [] |
gpe-edit | [] [] |
gpe-go | [] |
gpe-login | [] [] |
gpe-ownerinfo | [] [] [] |
gpe-sketchbook | [] |
gpe-su | [] |
gpe-taskmanager | [] |
gpe-timesheet | [] [] [] |
gpe-today | [] [] |
gpe-todo | [] [] |
gphoto2 | [] [] [] |
gprof | [] [] |
gpsdrive | () () () |
gramadoir | [] [] |
grep | [] [] [] [] [] [] [] [] [] [] [] |
gretl | [] [] |
gtick | [] [] [] |
hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
id-utils | [] [] [] [] |
indent | [] [] [] [] [] [] [] [] [] |
iso_3166 | [] [] [] [] [] [] [] |
iso_3166_1 | [] [] [] [] [] |
iso_3166_2 | |
iso_3166_3 | |
iso_4217 | [] [] [] [] [] [] |
iso_639 | |
jpilot | [] () |
jtag | [] |
jwhois | [] [] [] [] |
kbd | [] |
latrine | [] |
ld | [] |
libc | [] [] [] [] [] [] |
libgpewidget | [] [] [] [] |
libiconv | [] [] [] [] [] [] [] [] [] |
lifelines | () |
lilypond | [] |
lingoteach | [] [] |
lingoteach_lessons | |
lynx | [] [] [] [] |
m4 | [] [] [] [] |
mailutils | |
make | [] [] [] [] [] [] |
man-db | () () |
minicom | [] [] [] [] |
mysecretdiary | [] [] |
nano | [] [] [] [] |
nano_1_0 | [] [] [] [] |
opcodes | [] |
parted | [] [] [] |
ptx | [] [] [] [] [] [] [] |
python | |
radius | [] |
recode | [] [] [] [] [] [] |
rpm | [] [] |
screem | |
scrollkeeper | [] |
sed | [] [] [] [] [] [] [] [] [] |
sh-utils | [] [] [] [] [] [] [] |
shared-mime-info | [] [] [] |
sharutils | [] [] [] [] [] |
silky | () [] () () |
skencil | [] |
sketch | [] |
soundtracker | [] [] |
sp | [] () |
tar | [] [] [] [] [] [] [] [] [] |
texinfo | [] [] [] [] |
textutils | [] [] [] [] [] [] |
tin | [] () |
tp-robot | [] |
tuxpaint | [] [] [] [] [] [] [] [] [] |
unicode-han-tra... | |
unicode-transla... | [] [] |
util-linux | [] [] [] [] () [] |
vorbis-tools | [] |
wastesedge | () |
wdiff | [] [] [] [] [] [] |
wget | [] [] [] [] [] [] [] |
xchat | [] [] [] |
xfree86_xkb_xml | [] [] |
xpad | [] [] |
+-------------------------------------------------+
et eu fa fi fr ga gl he hr hu id is it ja ko lg
22 2 1 26 106 28 24 8 10 41 33 1 26 33 12 0
lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
+-----------------------------------------------------+
a2ps | [] [] () () [] [] [] |
aegis | () () () |
ant-phone | [] [] |
anubis | [] [] [] [] [] [] |
ap-utils | [] () [] |
aspell | [] |
bash | [] [] [] |
batchelor | [] |
bfd | [] |
binutils | [] |
bison | [] [] [] [] [] |
bluez-pin | [] [] [] |
clisp | |
clisp | [] |
console-tools | [] |
coreutils | [] [] |
cpio | [] [] [] [] [] |
darkstat | [] [] [] [] |
diffutils | [] [] [] [] [] [] |
e2fsprogs | [] |
enscript | [] [] [] [] |
error | [] [] [] |
fetchmail | [] [] () [] |
fileutils | [] [] [] |
findutils | [] [] [] [] [] |
flex | [] [] [] [] |
fslint | [] [] |
gas | |
gawk | [] [] [] |
gbiff | [] [] |
gcal | |
gcc | |
gettext | [] [] [] |
gettext-examples | [] [] [] |
gettext-runtime | [] [] [] [] |
gettext-tools | [] [] |
gimp-print | [] |
gliv | [] [] [] |
glunarclock | [] [] [] [] |
gnubiff | [] |
gnucash | [] [] () [] |
gnucash-glossary | [] [] |
gnupg | [] |
gpe-aerial | [] [] [] [] |
gpe-beam | [] [] [] [] |
gpe-calendar | [] [] [] [] |
gpe-clock | [] [] [] [] |
gpe-conf | [] [] [] [] |
gpe-contacts | [] [] [] [] |
gpe-edit | [] [] [] [] |
gpe-go | [] [] [] |
gpe-login | [] [] [] [] |
gpe-ownerinfo | [] [] [] [] |
gpe-sketchbook | [] [] [] [] |
gpe-su | [] [] [] [] |
gpe-taskmanager | [] [] [] [] |
gpe-timesheet | [] [] [] [] |
gpe-today | [] [] [] [] |
gpe-todo | [] [] [] [] |
gphoto2 | [] |
gprof | [] [] |
gpsdrive | () () [] |
gramadoir | () [] |
grep | [] [] [] [] [] |
gretl | |
gtick | [] [] [] |
hello | [] [] [] [] [] [] [] [] [] [] |
id-utils | [] [] [] [] |
indent | [] [] [] [] |
iso_3166 | [] [] [] |
iso_3166_1 | [] [] |
iso_3166_2 | |
iso_3166_3 | [] |
iso_4217 | [] [] [] [] [] [] [] [] |
iso_639 | [] |
jpilot | () () |
jtag | |
jwhois | [] [] [] [] () |
kbd | [] [] [] |
latrine | [] |
ld | |
libc | [] [] [] [] |
libgpewidget | [] [] [] |
libiconv | [] [] [] [] [] |
lifelines | |
lilypond | |
lingoteach | |
lingoteach_lessons | |
lynx | [] [] [] |
m4 | [] [] [] [] [] |
mailutils | [] [] [] |
make | [] [] [] [] |
man-db | [] |
minicom | [] [] [] [] |
mysecretdiary | [] [] [] |
nano | [] [] [] [] [] |
nano_1_0 | [] [] [] [] [] [] |
opcodes | [] [] |
parted | [] [] [] [] |
ptx | [] [] [] [] [] [] [] [] |
python | |
radius | [] [] |
recode | [] [] [] [] |
rpm | [] [] [] |
screem | |
scrollkeeper | [] [] [] [] [] |
sed | [] [] [] |
sh-utils | [] [] |
shared-mime-info | [] [] |
sharutils | [] [] |
silky | () |
skencil | [] [] |
sketch | [] [] |
soundtracker | |
sp | |
tar | [] [] [] [] [] [] |
texinfo | [] [] [] [] |
textutils | [] [] |
tin | |
tp-robot | [] |
tuxpaint | [] [] [] [] [] [] [] [] |
unicode-han-tra... | |
unicode-transla... | |
util-linux | [] [] [] |
vorbis-tools | [] [] [] |
wastesedge | |
wdiff | [] [] [] [] [] |
wget | [] [] [] |
xchat | [] [] [] |
xfree86_xkb_xml | [] [] |
xpad | [] [] |
+-----------------------------------------------------+
lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
1 2 0 3 12 0 10 69 6 7 1 40 26 36 76 63
sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
+-----------------------------------------------------+
a2ps | [] [] [] [] | 16
aegis | | 0
ant-phone | | 3
anubis | [] [] | 9
ap-utils | () | 3
aspell | | 4
bash | | 9
batchelor | | 3
bfd | [] [] | 6
binutils | [] [] [] | 8
bison | [] [] | 14
bluez-pin | [] [] [] | 14
clisp | | 0
clisp | | 5
console-tools | | 3
coreutils | [] [] [] [] | 16
cpio | [] [] | 14
darkstat | [] [] [] () () | 12
diffutils | [] [] [] | 23
e2fsprogs | [] [] | 6
enscript | [] [] | 12
error | [] [] [] | 15
fetchmail | [] [] | 11
fileutils | [] [] [] [] [] | 17
findutils | [] [] [] [] [] [] | 29
flex | [] [] | 13
fslint | | 3
gas | [] | 3
gawk | [] [] | 12
gbiff | | 4
gcal | [] [] | 4
gcc | [] | 4
gettext | [] [] [] [] [] | 16
gettext-examples | [] [] [] [] [] | 14
gettext-runtime | [] [] [] [] [] [] [] [] | 22
gettext-tools | [] [] [] [] [] [] | 14
gimp-print | [] [] | 10
gliv | | 3
glunarclock | [] [] [] | 13
gnubiff | | 3
gnucash | [] [] | 9
gnucash-glossary | [] [] [] | 8
gnupg | [] [] [] [] | 17
gpe-aerial | [] | 7
gpe-beam | [] | 8
gpe-calendar | [] [] [] [] | 13
gpe-clock | [] [] [] | 10
gpe-conf | [] [] | 9
gpe-contacts | [] [] [] | 11
gpe-edit | [] [] [] [] [] | 12
gpe-go | | 5
gpe-login | [] [] [] [] [] | 13
gpe-ownerinfo | [] [] [] [] | 13
gpe-sketchbook | [] [] | 9
gpe-su | [] [] [] | 10
gpe-taskmanager | [] [] [] | 10
gpe-timesheet | [] [] [] [] | 12
gpe-today | [] [] [] [] [] | 13
gpe-todo | [] [] [] [] | 12
gphoto2 | [] [] [] | 11
gprof | [] [] | 9
gpsdrive | [] [] | 3
gramadoir | [] | 5
grep | [] [] [] [] | 26
gretl | | 3
gtick | | 7
hello | [] [] [] [] [] | 34
id-utils | [] [] | 12
indent | [] [] [] [] | 21
iso_3166 | [] [] [] [] [] [] [] | 27
iso_3166_1 | [] [] [] | 16
iso_3166_2 | | 0
iso_3166_3 | | 2
iso_4217 | [] [] [] [] [] [] | 24
iso_639 | | 1
jpilot | [] [] [] [] [] | 9
jtag | [] | 2
jwhois | () [] [] | 11
kbd | [] [] | 11
latrine | | 2
ld | [] [] | 5
libc | [] [] [] [] | 20
libgpewidget | [] [] [] [] | 13
libiconv | [] [] [] [] [] [] [] [] | 27
lifelines | [] | 2
lilypond | [] | 3
lingoteach | | 2
lingoteach_lessons | () | 0
lynx | [] [] [] | 14
m4 | [] [] | 15
mailutils | | 5
make | [] [] [] | 16
man-db | [] | 5
minicom | | 11
mysecretdiary | [] [] | 10
nano | [] [] [] [] | 17
nano_1_0 | [] [] [] | 17
opcodes | [] [] | 6
parted | [] [] [] | 15
ptx | [] [] | 22
python | | 0
radius | | 4
recode | [] [] [] | 20
rpm | [] [] | 9
screem | [] [] | 2
scrollkeeper | [] [] [] | 15
sed | [] [] [] [] [] [] | 24
sh-utils | [] [] | 14
shared-mime-info | [] [] | 7
sharutils | [] [] [] [] | 17
silky | () | 3
skencil | [] | 6
sketch | [] | 6
soundtracker | [] [] | 7
sp | [] | 3
tar | [] [] [] [] [] | 24
texinfo | [] [] [] | 14
textutils | [] [] [] [] | 16
tin | | 1
tp-robot | | 2
tuxpaint | [] [] [] [] [] | 29
unicode-han-tra... | | 0
unicode-transla... | | 2
util-linux | [] [] | 15
vorbis-tools | | 8
wastesedge | | 0
wdiff | [] [] [] | 18
wget | [] [] [] [] [] [] [] [] | 24
xchat | [] [] [] [] [] | 15
xfree86_xkb_xml | [] [] [] [] [] | 11
xpad | | 5
+-----------------------------------------------------+
63 teams sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
131 domains 47 19 28 83 0 0 59 13 1 1 11 0 22 22 0 1373
Some counters in the preceding matrix are higher than the number of
visible blocks let us expect. This is because a few extra PO files are
used for implementing regional variants of languages, or language
dialects.
For a PO file in the matrix above to be effective, the package to
which it applies should also have been internationalized and
distributed as such by its maintainer. There might be an observable
lag between the mere existence a PO file and its wide availability in a
distribution.
If January 2004 seems to be old, you may fetch a more recent copy of
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
matrix with full percentage details can be found at
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
Using `gettext' in new packages
===============================
If you are writing a freely available program and want to
internationalize it you are welcome to use GNU `gettext' in your
package. Of course you have to respect the GNU Library General Public
License which covers the use of the GNU `gettext' library. This means
in particular that even non-free programs can use `libintl' as a shared
library, whereas only free software can use `libintl' as a static
library or use modified versions of `libintl'.
Once the sources are changed appropriately and the setup can handle
the use of `gettext' the only thing missing are the translations. The
Free Translation Project is also available for packages which are not
developed inside the GNU project. Therefore the information given above
applies also for every other Free Software Project. Contact
`translation@iro.umontreal.ca' to make the `.pot' files available to
the translation teams.

31
external/gpl2/texinfo/dist/AUTHORS vendored Normal file
View File

@ -0,0 +1,31 @@
Id: AUTHORS,v 1.10 2004/04/11 17:56:45 karl Exp
Texinfo authors.
Copyright (C) 2003 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
Akim Demaille texi2dvi.
Alper Ersoy makeinfo: enhancements in all files, especially
html-, xml-, and docbook-related.
Andreas Schwab texinfo.tex, configure.ac, most makeinfo files.
Bob Chassell texinfo.tex, original texinfo.txi.
Brian Fox all makeinfo/* and info/* files, info-stnd.texi.
Dave Love original makeinfo/html.[ch].
Eli Zaretskii all files.
Karl Berry all files.
Karl Heinz Marbaise original makeinfo language support, most files.
Noah Friedman original texi2dvi.
Paul Rubin original makeinfo/multi.c.
Philippe Martin original makeinfo xml/docbook output.
Richard Stallman original texinfo.tex, install-info.c,
texindex.c, texinfo.txi.
Zack Weinberg texinfo.tex: @macro implementation.
See http://www.iro.umontreal.ca/contrib/po/HTML/team-LL.html for the
translation teams for a given language LL.
Many files included in the Texinfo distribution are copied from other
locations, no author information is given for those. See util/srclist*.

340
external/gpl2/texinfo/dist/COPYING vendored Normal file
View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 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
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

5008
external/gpl2/texinfo/dist/ChangeLog vendored Normal file

File diff suppressed because it is too large Load Diff

12516
external/gpl2/texinfo/dist/ChangeLog.46 vendored Normal file

File diff suppressed because it is too large Load Diff

45
external/gpl2/texinfo/dist/INSTALL vendored Normal file
View File

@ -0,0 +1,45 @@
Id: INSTALL,v 1.5 2004/11/19 13:08:47 karl Exp
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
For generic installation instructions on compiling and installing this
Automake-based distribution, please read the file `INSTALL.generic'.
Installation notes specific to Texinfo:
* texinfo.tex and the other *.tex files are not installed by `make
install'. This is because there is no reliable way to know where to
install them. Instead, you have to run an additional make command
after the normal make install:
make TEXMF=/your/texmf install-tex
texinfo.tex is installed in ${TEXMF}/tex/texinfo/texinfo.tex, etc.
* On the other hand, if you're maintaining a TeX distribution, you don't
want your users to see the installation warnings, because you already
have the files installed. (And you're keeping them up to date, right?)
In this case, run configure --disable-install-warnings, or set
enable_install_warnings=no in the environment.
* On MacOSX, if configure fails with the error:
ac_cv_build='config.sub: invalid option -apple-darwin7.2.0
this is probably because your uname -p is returning "unknown". Use
/usr/bin/uname instead.
* For instructions on compiling this distribution with DJGPP tools
for MS-DOS and MS-Windows, see the file djgpp/README.
* The Info tree uses a file `dir' as its root node; the `dir-example'
file in this distribution is included as a possible starting point.
Use it, modify it, or ignore it just as you like.
* You can create a file texinfo.cnf to be read by TeX when
processing Texinfo manuals. For example, you might like to use
@afourpaper by default. See the `Preparing for TeX' node in
texinfo.txi for more details. You don't have to create the file if
you have nothing to put in it.
* If your info files are not in $prefix/info, you may wish to add a line
#define DEFAULT_INFOPATH "/mydir1:/mydir2:..."
to config.h after running configure.

View File

@ -0,0 +1,231 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PREFIX', the package will
use PREFIX as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the `--target=TYPE' option to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
will cause the specified gcc to be used as the C compiler (unless it is
overridden in the site shell script).
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

108
external/gpl2/texinfo/dist/INTRODUCTION vendored Normal file
View File

@ -0,0 +1,108 @@
Id: INTRODUCTION,v 1.3 2004/04/11 17:56:45 karl Exp
Getting started with Texinfo.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
Getting Started with Texinfo
============================
"Texinfo" is a documentation system that uses a single source file to
produce both on-line information and printed output. Using Texinfo,
you can create a printed document with the normal features of a book,
including chapters, sections, cross references, and indices. From the
same Texinfo source file, you can create a menu-driven, on-line Info
file with nodes, menus, cross references, and indices.
The name of the Texinfo source documentation file is `texinfo.txi'.
You can produce both on-line information and printed output from this
source file. The documentation describes Texinfo in detail, including
how to write Texinfo files, how to format them for both hard copy and
Info, and how to install Info files.
To get started, you need to create either a printed manual or an
on-line Info file from the `texinfo.txi' file. You do not need to
create both, although you will probably want both eventually.
To learn how to use Info, read the info documentation. You can do this in
one of two ways: using the standalone `info' program, or using Info mode in
GNU Emacs.
* If you want to use the `info' program, run
info -f info-stnd
* If you want to use Emacs, start up emacs and type `C-h i' [M-x info].
Follow the instructions to learn how to use Info.
After learning how to use Info, you can read the Texinfo documentation.
Using the standalone `info', type the following at the shell prompt:
info -f texinfo
To use read this manual in Emacs, you first need to edit the Info-directory
menu (the file `dir' in the system info directory) to contain the
appropriate node. To learn how to do this, see node: Add in the Info
documentation.
The Texinfo documentation describes Texinfo in detail; among other things,
it tells how to install Info files in the usual manner. (See node: Install
an Info File.)
The `info-stnd.info' file describes the standalone Info reader in detail. To
read this file, type
$ info -f info-stnd
To create a printed manual
==========================
You need:
* The `tex' program, which typesets the manual using TeX.
* The `texinfo.tex' definition file that tells TeX how to typeset
a Texinfo file.
* The `texindex' program, which sorts the unsorted index files
created by TeX.
* A printing program such as `lp' or `lpr',
* A printer.
This Texinfo distribution package contains `texinfo.tex', the C source
for `texindex', and the handy shell script `texi2dvi'. The `tex'
program is not part of this distribution, but is available separately.
(See `How to Obtain TeX' in the Texinfo documentation.)
* Install `tex'. (`texindex' is installed automagically by
`make install' in this distribution.)
* Move the `texinfo.tex' file to an appropriate directory; the current
directory will do. (`/usr/local/lib/tex/inputs' might be a good place.
See ``Preparing to Use TeX'' in the Texinfo manual, for more
information.)
After following those instructions, type the following to make the .dvi
files:
$ (cd doc; make dvi)
You can then print the resulting .dvi files with the `lpr' or `lp'
commands, or maybe `dvips'.
For example, the command to print the texinfo.dvi file might be:
$ lpr -d texinfo.dvi
The name of the printing command depends on the system; `lpr -d' is
common, and is illustrated here. You may use a different name for the
printing command.
Please report bugs to bug-texinfo@gnu.org.
Happy formatting.

55
external/gpl2/texinfo/dist/Makefile.am vendored Normal file
View File

@ -0,0 +1,55 @@
# Makefile.am for texinfo.
# Id: Makefile.am,v 1.13 2004/12/15 16:53:59 kasal Exp
# Process this file with automake to produce Makefile.in in all directories.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# Be sure we're using the right version of Automake.
AUTOMAKE_OPTIONS = 1.8 readme-alpha
# Additional files to distribute.
EXTRA_DIST = ChangeLog.46 INSTALL.generic INTRODUCTION README.dev \
config.rpath \
djgpp/README djgpp/config.bat djgpp/config.sed djgpp/config.site
# This is to prevent texinfo.tex from being included in the top-level
# distribution directory.
TEXINFO_TEX = doc/texinfo.tex
if TOOLS_ONLY
# Build native tools only.
SUBDIRS = lib info makeinfo util
else
# All subdirectories.
# Do intl, m4, 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 = $(native_tools) intl m4 lib info makeinfo po util doc
endif
# for gettext.
ACLOCAL_AMFLAGS = -I m4
# In case TEXINFO_MAINT is set during make distcheck; in this case, the
# simple doc-related files generated in info/ make distcleancheck fail.
distcleancheck_listfiles = \
find -type f -exec sh -c 'test -f $(srcdir)/{} || echo {}' ';'
# One special target for installers to use by hand if desired.
install-tex:
cd doc && $(MAKE) TEXMF=$(TEXMF) install-tex
distclean-local:
-test -d "$(native_tools)" && rm -rf "$(native_tools)"
# Don't install native tools for cross compile.
if TOOLS_ONLY
install:
endif

679
external/gpl2/texinfo/dist/Makefile.in vendored Normal file
View File

@ -0,0 +1,679 @@
# Makefile.in generated by automake 1.9.4 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Makefile.am for texinfo.
# Id: Makefile.am,v 1.13 2004/12/15 16:53:59 kasal Exp
# Process this file with automake to produce Makefile.in in all directories.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.in \
$(top_srcdir)/configure $(top_srcdir)/intl/Makefile.in \
ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS TODO \
config.guess config.rpath config.sub depcomp install-sh \
missing mkinstalldirs
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
$(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
$(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
$(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
$(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
$(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno configure.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = intl/Makefile
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = @native_tools@ intl m4 lib info makeinfo po util doc
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GENCAT = @GENCAT@
GLIBC21 = @GLIBC21@
GMSGFMT = @GMSGFMT@
HAVE_ASPRINTF = @HAVE_ASPRINTF@
HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
HAVE_SNPRINTF = @HAVE_SNPRINTF@
HAVE_WPRINTF = @HAVE_WPRINTF@
HELP2MAN = @HELP2MAN@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
INSTOBJEXT = @INSTOBJEXT@
INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
POSUB = @POSUB@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TERMLIBS = @TERMLIBS@
TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
native_tools = @native_tools@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
# Be sure we're using the right version of Automake.
AUTOMAKE_OPTIONS = 1.8 readme-alpha
# Additional files to distribute.
EXTRA_DIST = ChangeLog.46 INSTALL.generic INTRODUCTION README.dev \
config.rpath \
djgpp/README djgpp/config.bat djgpp/config.sed djgpp/config.site
# This is to prevent texinfo.tex from being included in the top-level
# distribution directory.
TEXINFO_TEX = doc/texinfo.tex
@TOOLS_ONLY_FALSE@SUBDIRS = $(native_tools) intl m4 lib info makeinfo po util doc
@TOOLS_ONLY_TRUE@SUBDIRS = lib info makeinfo util
# for gettext.
ACLOCAL_AMFLAGS = -I m4
# In case TEXINFO_MAINT is set during make distcheck; in this case, the
# simple doc-related files generated in info/ make distcleancheck fail.
distcleancheck_listfiles = \
find -type f -exec sh -c 'test -f $(srcdir)/{} || echo {}' ';'
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) stamp-h1; \
else :; fi
stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_srcdir) && $(AUTOHEADER)
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f config.h stamp-h1
intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
$(mkdir_p) $(distdir)/djgpp $(distdir)/intl $(distdir)/m4 $(distdir)/po
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(mkdir_p) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
distdir) \
|| exit 1; \
fi; \
done
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
--with-included-gettext \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile config.h
installdirs: installdirs-recursive
installdirs-am:
@TOOLS_ONLY_FALSE@install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr distclean-local \
distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am:
install-exec-am:
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am: uninstall-info-am
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
check-am clean clean-generic clean-recursive ctags \
ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
dist-tarZ dist-zip distcheck distclean distclean-generic \
distclean-hdr distclean-local distclean-recursive \
distclean-tags distcleancheck distdir distuninstallcheck dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-exec install-exec-am \
install-info install-info-am install-man install-strip \
installcheck installcheck-am installdirs installdirs-am \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am uninstall-info-am
@TOOLS_ONLY_TRUE@ # Build native tools only.
@TOOLS_ONLY_FALSE@ # All subdirectories.
@TOOLS_ONLY_FALSE@ # Do intl, m4, and lib first since the C programs depend on them.
@TOOLS_ONLY_FALSE@ # Do doc last so makeinfo will be built when we get there.
@TOOLS_ONLY_FALSE@ # Others are alphabetical.
# One special target for installers to use by hand if desired.
install-tex:
cd doc && $(MAKE) TEXMF=$(TEXMF) install-tex
distclean-local:
-test -d "$(native_tools)" && rm -rf "$(native_tools)"
# Don't install native tools for cross compile.
@TOOLS_ONLY_TRUE@install:
# 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:

728
external/gpl2/texinfo/dist/NEWS vendored Normal file
View File

@ -0,0 +1,728 @@
Id: NEWS,v 1.103 2004/12/24 16:43:58 karl Exp
This file records noteworthy changes, very tersely.
See the manual for detailed information.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
*** IMPORTANT NEWS FOR ALL AUTHORS OF TEXINFO MANUALS ***
As of version 4.2, Texinfo has a new command @copying to define the
copyright and copying permissions for a manual. It's important to
switch to using it as soon as possible (as in your next release),
because the historical method of doing copyright permissions using
@ifinfo failed to output copyright information in the HTML (or XML)
formats. The manual has detailed explanations and examples. For
convenience, here's a url to one of the relevant sections:
http://www.gnu.org/software/texinfo/manual/texinfo/html_node/Document-Permissions.html
-------------------------------------------------------------------------------
4.8 (31 December 2004)
* Language:
. new command @euro for the Euro currency symbol, and
@documentencoding has some support for ISO-8859-15.
. new command @abbr for general abbreviations.
. new command @slanted to typeset text in a slanted font,
and @sansserif to typeset in a sans serif font.
* makeinfo:
. An empty first argument to cross-reference commands, such as @xref,
causes an error. This change was made in 4.1, but not mentioned in NEWS.
. HTML output:
- <a name="..."> constructs are added for the old-style
conversion of node names to HTML names, so that external references
to them can continue to work.
- "g_t" prefixed to targets for node names beginning with a
nonletter, for XHTML compatibility.
. Docbook output: recognize more image formats.
* texi2dvi:
. new option --recode, to call recode for input character translation.
* Distribution:
. new convenience script texi2pdf, equivalent to texi2dvi --pdf (from tetex).
. some cross-compiling support in configure && make.
. new configure option --disable-install-warnings, for TeX.
distributions which do have the files installed.
. automake 1.9.4.
4.7 (9 April 2004)
* Language:
. new commands @float, @caption, @shortcaption, @listoffloats for
initial implementation of floating material (figures, tables, etc).
Ironically, they do not yet actually float anywhere.
. new commands @docbook, @ifdocbook, @ifnotdocbook for conditional Docbook.
. new commands @ordf{} and @ordm{} for Spanish feminine/masculine ordinals.
. new commands @deftypecv[x] for class variables in typed OO languages.
. new command @registeredsymbol for the r-in-a-circle symbol.
. new command @headitem to make a heading row in @multitable.
. new command @LaTeX{} for the LaTeX logo.
. new command @comma{} to avoid comma-parsing problems.
. @url is now a synonym for @uref; new command @indicateurl has the
old meaning of just displaying a url as text.
. @quotation now accepts an optional argument for labelling the text
as a `Note', `Tip', etc.
. @defun (et al.) heading lines can now be continued with a lone @.
. @acronym accepts an optional argument for the meaning of the acronym.
* makeinfo:
. New environment variable TEXINFO_OUTPUT_FORMAT determines the output
format at runtime, if no options are specified.
. New option --plaintext, equivalent to --no-headers with Info output.
. All outputs:
- sections are numbered by default.
. Info output:
- punctuation is inserted after @pxref and @ref, if needed to make
cross-references valid.
- line numbers included in index menus, so Info readers can go to
the exact line of an entry, not just a node. Also in plaintext output.
- ^@^H[index^@^H] cookie included in index menus, so Info readers
can handle the ] etc. commands better.
. HTML output:
- new algorithm for cross-references to other manuals, for maximum
portability and stability.
- include node name in <title> with split output.
- @multicolumn fractions become percentages.
- entities used for bullets, quotes, dashes, and others.
- index entries are links to the exact locations.
- <h4> and <h5> used for @sub and @subsubsections again.
- accented dotless i supported.
. XML output: many new tags and structure to preserve more source features.
. Docbook output:
- upgraded DTD to Docbook XML 4.2, no longer using Docbook SGML.
- improved translation in general, for instance:
- line annotations and marked quotations.
* texi2dvi:
. if available, use etex (pdfetex if --pdf) by default.
. if the input file includes thumbpdf.sty (for LaTeX), then run thumbpdf.
. more output if --debug.
* texinfo.tex:
. @defun names are now printed in typewriter (instead of bold), and
within the arguments, @var text is printed in slanted typewriter.
. @tex code is executed inside a TeX group, so that any changes must
be prefixed with \global (or the equivalent) to be effective. (This
change was actually made years ago, but never made it into the NEWS.)
* info:
. new option --where (aka --location, -w) to report where an Info file
would be found, instead of reading it.
. by default, output ANSI terminal escape sequences as-is; new option
--no-raw-escapes overrides this.
. use the newly-generated index line numbers.
* Distribution:
. new script gendocs.sh (not installed), for use by GNU maintainers in
getting their manuals on the GNU web site. Documented in
maintain.texi (http://www.gnu.org/prep/maintain/).
. Most code uses ANSI C prototypes, to some extent.
. New translation: nb.
. automake 1.8.3, autoconf 2.59, gettext 0.14.1.
4.6 (10 June 2003)
* Language:
. new command @/ specifies an allowable breakpoint within a line.
. new command @dofirstparagraphindent to control whether the first
paragraph following a section heading is indented. Default is to
omit this indentation, unlike the output up to now.
. new command @indent for explicitly indenting a paragraph.
. makeinfo writes a new construct for @image in Info output, so that
graphical Info browsers (such as Emacs Info under X) can display an
actual image. (Standalone Info ignores this, since it runs in a tty.)
* makeinfo:
. Common:
- search for image files in the include file search path.
- warns if @value is used on an undefined variable.
. Info output:
- default --split-size now 300,000 bytes, up from 50,000.
- with --enable-encoding and a given @documentencoding,
output a Local Variables section specifying that encoding, for use
with Emacs.
. HTML output:
- uses <h3> at the smallest.
- a few css <style> definitions are included to better
implement @format, @display, @small..., etc.
- new option --css-include=FILE includes FILE in the <style>.
- @cartouche now outputs a <table> with a border.
* texinfo.tex:
. new Polish translation txi-pl.tex.
* texi2dvi:
. --command=CMD replaces --texinfo=CMD; it inserts CMD at the first
line of LaTeX files now, or after the @setfilename for Texinfo files.
* info:
. RET now goes to the nearest xref (rather like Emacs Info),
instead of the next xref starting on the current line.
* Distribution:
. new Romanian (ro) translation.
. variables now declared const where appropriate.
. gettext 0.12.1, automake 1.7.5.
4.5 (4 February 2003)
* info:
. a bug in 4.4 prevented compressed info files from being found.
* Distribution:
. detect sys/ptem.h on Solaris.
4.4 (31 January 2003)
* Language:
. The ' (ASCII apostrophe/right quote) character is finally allowed in
node and anchor names. Thus, after installing this texinfo.tex,
existing .aux files will cause errors! Remove them and rerun TeX to
generate good ones.
. @value constructs are now expanded in the filename arguments to
@include and @verbatiminclude.
* makeinfo:
. @macro names may no longer include ^ or _, for the sake of math mode.
. bug fix: @copying text is now reflected in tag table positions;
before, nodes may not have been found with a long-enough @copying.
. bug fix: html @verb arg is quoted properly, and does not imply
a paragraph break.
* texinfo.tex:
. @smallexample and the like now output in a smaller font (9pt) in all
paper formats, not just @smallbook and @afourpaper.
. new translation txi-tr.tex.
. bug fix: <>| and other characters do not disappear when they are
first on a line in @verbatim.
* install-info:
. bug fix: don't translate the `* Menu' info keyword.
* info:
. CTRL-H is treated like DEL in incremental search.
. arrow keys once again work in isearch contexts under Solaris.
* infokey:
. use .info key bindings before defaults.
. allow prefix keys to be disabled.
* Distribution:
. update to GNU FDL 1.2 (http://www.gnu.org/licenses/fdl.html).
. getopt and other common library files updated from gnulib
(http://savannah.gnu.org/projects/gnulib/).
. autoconf 2.57, automake 1.7.2.
4.3 (14 November 2002)
* Language:
. new command @tie{} to do a real tie (unbreakable interword space).
* makeinfo:
. html output for @defun and friends now has font changes.
. html output has some class attributes.
. xml and docbook output improved in many details.
* texinfo.tex:
. new Italian translations, txi-it.tex.
. pdf bookmarks for unnumbered sections work.
. type name for @defun and friends no longer extends into margin.
* info:
. automatic-footnotes now off by default, for emacs compatibility.
. crash when MALLOC_CHECK_=2 fixed.
* install-info:
. new option --infodir synonym for --info-dir, for compatibility with
the Debian install-info.
. support for bzip2-compressed files.
* texindex:
. omit initial if the entire index is under one character.
* Distribution:
. development sources now available under CVS, see
http://savannah.gnu.org/projects/texinfo/
. Turkish message translation.
. gettext 0.11.5, autoconf 2.54, automake 1.7.1.
4.2 (1 April 2002)
* Language:
. new command @copying to define copying permissions. See above.
. new conditionals @ifplaintext, @ifnotplaintext for the plain text
(--no-headers) output format.
. new command @\ to produce literal \ inside @math, since \ by itself
no longer works.
* makeinfo:
. emit accesskey attributes for keyboard shortcuts to menu items.
. @{even,every,odd}{footing,header} are ignored by makeinfo now, so
they no longer need to be enclosed in @iftex.
* texinfo.tex:
. bug fix for pdf-format table of contents.
* info:
. bug fixes for -R (--raw-escapes).
. --help shows short option names.
* Distribution:
. the doc.c, funs.h, and key.c files in info/ are no longer generated
at make time, to appease Automake's make distcheck.
. gettext 0.11.1, autoconf 2.53, automake 1.6 (with install-info kludge).
4.1 (4 March 2002)
* Language:
. new commands @verbatim and @verb for printing verbatim inserts.
. new command @verbatiminclude for verbatim include of files.
. new environment @documentdescription for defining the HTML description.
. new command @afivepaper for the A5 paper size.
* makeinfo:
. supports xml and docbook output.
. supports HTML splitting by node, which is now the default.
. new option --split-size to control maximum size of split info files.
. new option --enable-encoding to enable
* info:
. user-specified key bindings supported.
. ANSI escape sequences (as produced by groff) removed from man output
by default; use --raw-escapes to let them through if your terminal
supports them.
. RET terminates incremental search normally.
* texinfo.tex:
. @math implies @tex, so all the usual plain TeX math is supported.
. smaller fonts for @smallexample, in all page sizes.
. improvements in the PDF support.
* texi2dvi:
. new option -o to explicitly specify output filename.
* Distribution:
. switch to GNU Free Documentation License (http://www.gnu.org/copyleft/).
. update to GNU gettext 0.11, autoconf 2.52, and automake 1.5.
. Danish, Swedish, and Hebrew message translations.
4.0 (28 September 1999)
* Language:
. New command @anchor for cross references to arbitrary points.
. New commands @documentlanguage sets the main document language,
and @documentencoding sets the document input encoding (although not
much is done yet with either).
. New command @pagesizes allows limited control of text area for typesetting.
. New command @acronym for abbreviations in all caps, such as `NASA'.
. New command @alias for simple command aliases.
. New command @definfoenclose for better control of info output.
. New commands @deftypeivar for typed instance variables of a class
and @deftypeop for typed operations of a class.
. New command @novalidate suppresses cross-reference checking and (in
TeX) auxiliary file creation.
. New commands @setcontentsaftertitlepage and
@setshortcontentsaftertitlepage to force printing the table of
contents after @end titlepage. Also, @contents and @shortcontents
themselves can now appear at the beginning of the document as
well as the end.
. New markup commands: @env (for environment variables), @command (for
command names), @option (for command-line options).
. New commands @smallformat and @smalldisplay, a la @smallexample.
. New command @exampleindent to set indentation of example-like
environments a la @paragraphindent.
. @uref takes an optional third argument of text to show instead of
(rather than in addition to) the url for info and dvi output.
. @footnote works in an @item for a @table.
* texinfo.tex:
. latest version always at ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex
(and mirrors).
. implements @macro.
. implements @paragraphindent (except asis).
. @emph and @i use true italic type (cmti) instead of slanted (cmsl).
. implements pdf output when run with pdftex.
. better support for internationalization via txi-??.tex files.
. footnotes now set in a smaller point size.
* makeinfo:
. supports HTML output with the --html option.
. implication of --html: @top nodes should be wrapped in @ifnottex
rather than @ifinfo. @ifinfo conditionals are not expanded with --html.
. new option --number-sections to output chapter/section numbers.
. dashes and quotes are not treated specially in node names.
. new option --commands-in-node-names to allow @-commands in node names.
(Not implemented in TeX, and most likely never will be.)
. @emph output uses _underscores_.
. @image looks for .png files before .jpg.
. only output `Making ... file' line when verbose.
. allow -v as synonym for --verbose.
. new command line options to specify which conditionals to process
(but --iftex is not fully implemented).
. warns if @var contains any of ,[]().
. @quote-arg implicitly done for all one-argument macros, so commas in
the argument text are allowed.
. \\ required in macro body to get single \, no other `escapes' defined.
* info:
. ISO Latin 1 characters are displayed and input as-is by default.
. new option --vi-keys to enable vi-like and less-like key bindings.
. new command S does case-sensitive searching.
. new commands C-x n and C-x N repeat last search, respectively, in the
same and in reverse direction, without prompting for the string. These
commands are bound to n and N under --vi-keys, like in Less.
. new command G menu1 menu2 ... searches for menu items from (dir),
as allowed on the command line.
. new command O (capital o, not zero) goes directly to the node that
describes command-line options.
. new command-line option --show-options causes the node which
describes command-line options to be the first node displayed.
. M-prior and M-DEL do new command info-scroll-other-window-backward.
. / searches like s does.
. If the search string includes upper-case letters, in both incremental
and non-incremental search, the search is case-sensitive.
. S searches case-sensitively even if the search string is all
lower-case.
. - makes the argument negative (so e.g. `- /' searches backward).
. l restores point in the window returned to.
. SPC/DEL do not move outside the current document.
. foo.info is found before foo.
. `info foo --index-search=bar' now searches for bar in foo's index.
. support for files compressed with bzip2.
* install-info:
. handles gzipped dir files.
. sort entries into alphabetical order.
. install direntries only in preceding dircategory, not in all.
. --delete does not require the info file to exist.
. --delete can handle XEmacs-style dir entries.
* texi2dvi:
. bug fixed: now uses only the @iftex and @tex parts of the source.
. process LaTeX source as well as Texinfo source.
. output PDF (using pdftex) with new option --pdf.
. handles --OPTION=ARG style of command line arguments.
. new option --batch for progress reports but no interaction.
. new option --clean to remove all auxiliary files.
. new option --quiet for silence (unless there are errors).
. new option -I for specifying directories for @include to search.
. handles LaTeX files (running BibTeX etc.).
* Fixes to util/gen-dir-node and util/fix-info-dir (formerly util/update-info).
* Distribution:
. Man pages included.
. Czech and Norwegian message translations.
. Various translations for texinfo.tex fixed words included.
. DJGPP support.
3.12 (3 March 1998)
* Elisp files removed, since they are only usefully distributed with Emacs.
* Restore inclusion of compile-time $(infodir) to INFOPATH.
* install-info creates a proper dir file.
* Various portability fixes.
3.11 (31 July 1997)
* New commands:
- @uref to make a reference to a url; @url now only indicates such.
- @image to include graphics (epsf for TeX).
- @deftypemethod and @deftypemethodx to document methods in strongly
typed object-oriented languages, such as C++.
- @html for raw HTML.
- @ifnothtml @ifnotinfo @ifnottex for more precise conditionals.
- @kbdinputstyle to control when @kbd uses the slanted typewriter font.
- @email takes second optional argument.
* texinfo.tex reads texinfo.cnf (if present) for site-wide TeX
configuration; for example, A4 paper sizes.
* info:
- arrow keys supported.
- trailing : in INFOPATH appends default path.
- new option --index-search for online help support.
* makeinfo:
- output files removed if errors unless (new option) --force.
- new option -P to prepend to search path.
- macro expansion file can be standard output.
* install-info creates a new dir file if necessary.
* update-info script to create a dir file from all info files.
* Elisp: texnfo-tex.el and detexinfo.el removed from the distribution;
- texnfo-tex features are now part of standard TeX & Texinfo packages;
- makeinfo --no-headers does a better job than detexinfo.el.
* Documentation:
- Updates, revisions, corrections in the manual.
- makeinfo.texi removed, as it was a copy of what was in texinfo.texi.
* gettext support in sources, French and German translations included.
* info man page removed; use the Texinfo manual.
* Automake used, other portability fixes.
3.10 (nonexistent)
3.9 (4 October 1996)
* makeinfo:
- Give a suppressible (with --no-validate) error for references
outside of any node.
- Keep track of multitable output correctly for split files; this
caused nodes after the first multitable to be ``undefined''.
* install-info:
- Rename --infodir option to --info-dir.
- More robust error checking to avoid various crashes.
* configure: Include replacements for memcpy and memmove functions in
the distribution, in case they are missing.
3.8 (30 September 1996)
* Define and/or document new and/or previously existing commands:
Accents: @" @' @, @" @= @^ @` @~ @H @d @dotaccent @dotless @ringaccent
@tieaccent @u @ubaraccent @v
Special characters: @AA @AE @L @O @OE @aa @ae @exclamdown @l @o @oe
@pounds @questiondown @ss
Special punctuation: @! @? @enddots
dir file maintenance: @dircategory @direntry; also new program, install-info
HTML support: @email @url @ifhtml...@end ifhtml
Macros: @macro @unmacro
Tables: @multitable @tab
Hyphenation: @- @hyphenation
Spacing: @ @<TAB> @<NEWLINE>
Sectioning:
@headings singleafter/doubleafter (change heading style after current page)
@centerchap
@setchapterstyle
Other:
@shorttitlepage (simple title pages)
@detailmenu...@end detailmenu (help makeinfo parse master menus)
* Makeinfo prefers an input file named `foo.texinfo' or `foo.texi' or
`foo.txinfo' to just `foo' (the latter most likely being an executable).
* Makeinfo implements @. @! @? correctly, as end-of-sentence punctuation.
* @key marks its argument with a lozenge in TeX and <...> in Info.
* TeX output has substantially decreased interline spacing and other
formatting changes.
* Remove these obsolete and never-documented commands:
@infotop
@infoappendix @infoappendixsec @infoappendixsubsec @infoappendixsubsubsec
@infochapter @infosection @infosubsection @infosubsubsection
@infounnumbered @infounnumberedsec @infounnumberedsubsec
@infounnumberedsubsubsec
@input
@smallbreak @medbreak
@overfullrule
@br
* Deprecate these obsolete commands, to be removed in the next release:
@ctrl
@infoinclude
@iappendix @iappendixsection @iappendixsec @iappendixsubsec
@iappendixsubsubsec
@ichapter @isection @isubsection @isubsubsection
@iunnumbered @iunnumberedsec @iunnumberedsubsec @iunnumberedsubsubsec
@setchapterstyle
@titlespec
3.7 (24 December 1995)
* Have --version print texinfo release number as well as the individual
program version.
* Better man page cleaning.
* Update Elisp files from current Emacs release.
3.6 (21 June 1995)
* Unmatched brace error reporting improved.
* Missing comment terminator prevented compilation.
3.5 (20 June 1995)
* Autoconf update.
* Support for parallel makes.
* make install does not install Elisp files.
3.4 (19 June 1995)
* Handle @ifhtml in Elisp.
* Update FSF address.
3.3 (15 June 1995)
* Portability changes.
* Compile Elisp files.
* Don't distribute .info* files.
3.2 (9 June 1995)
* Standalone Info can read Unix man pages.
* New commands: @! @? @^ @" @enddots.
* makeinfo -E does macro expansion (and nothing else).
3.1 (23 May 1993)
Just bug fixes, see ChangeLog for full details.
3.0: first release of Texinfo version 2, with many new commands.
Here is the separate NEWS for old releases of Info:
Version 2.11, Sat Apr 1 09:15:21 1995
Changes since 2.7 beta:
Although the basic code remains the same, there are numerous nits
fixed, including some display bugs, and a memory leak. Some changes
that have taken place with larger impact include the way in which the
(dir) node is built; I have added in support for "localdir"
directories among other things. Info files may be stored in
compressed formats, and in their own subdirectories; menu items which
do not explicitly name the node to which they are attached have the
menu item name looked up as an Info file if it is not found within the
current document. This means that the menu item:
* Info:: The Info documentation reader.
in (dir) refers to the info node "(info)Top".
Please see the ChangeLog and documentation for details on other
changes.
Version 2.7 beta, Wed Dec 30 02:02:38 1992
Version 2.6 beta, Tue Dec 22 03:58:07 1992
Version 2.5 beta, Tue Dec 8 14:50:35 1992
Version 2.4 beta, Sat Nov 28 14:34:02 1992
Version 2.3 beta, Fri Nov 27 01:04:13 1992
Version 2.2 beta, Tue Nov 24 09:36:08 1992
Version 2.1 beta, Tue Nov 17 23:29:36 1992
Changes since 2.5 beta:
Note that versions 2.6 and 2.7 Beta were only released to a select group.
* "info-" removed from the front of M-x commands.
* Automatic footnote display. When you enter a node which contains
footnotes, and the variable "automatic-footnotes" is "On", Info pops
up a window containing the footnotes. Likewise, when you leave that
node, the window containing the footnotes goes away.
* Cleaner built in documentation, and documentation functions.
Use:
o `M-x describe-variable' to read a variable's documenation
o `M-x describe-key' to find out what a particular keystroke does.
o `M-x describe-function' to read a function's documentation.
o `M-x where-is' to find out what keys invoke a particular function.
* Info can "tile" the displayed windows (via "M-x tile-windows"). If
the variable "automatic-tiling" is "On", then splitting a window or
deleting a window causes the remaining windows to be retiled.
* You can save every keystroke you type in a "dribble file" by using the
`--dribble FILENAME' option. You can initially read keystrokes from an
alternate input stream with `--restore FILENAME', or by redirecting
input on the command line `info < old-dribble'.
* New behaviour of menu items. If the label is the same as the
target node name, and the node couldn't be found in the current file,
treat the label as a file name. For example, a menu entry in "DIR"
might contain:
* Emacs:: Cool text-editor.
Info would not find the node "(dir)Emacs", so just plain "(emacs)"
would be tried.
* New variable "ISO-Latin" allows you to use European machines with
8-bit character sets.
* Cleanups in echo area reading, and redisplay. Cleanups in handling the
window which shows possible completions.
* Info can now read files that have been compressed. An array in filesys.c
maps extensions to programs that can decompress stdin, and write the results
to stdout. Currently, ".Z"/uncompress, ".z"/gunzip, and ".Y"/unyabba are
supported. The modeline for a compressed file shows "zz" in it.
* There is a new variable "gc-compressed-files" which, if non-zero, says
it is okay to reclaim the file buffer space allocated to a file which
was compressed, if, and only if, that file's contents do not appear in
any history node.
* New file `nodemenu.c' implements a few functions for manipulating
previously visited nodes. `C-x C-b' (list-visited-nodes) produces a
menu of the nodes that could be reached by info-history-node in some
window. `C-x b' (select-visited-node) is similar, but reads one of
the node names with completion.
* Keystroke `M-r' (move_to_screen_line) allows the user to place the cursor at
the start of a specific screen line. Without a numeric argument, place the
cursor on the center line; with an arg, place the cursor on that line.
* Interruptible display implemented. Basic display speedups and hacks.
* The message "*** Tags Out of Date ***" now means what it says.
* Index searching with `,' (info-index-next) has been improved.
* When scrolling with C-v, C-M-v, or M-v, only "Page Only" scrolling
will happen.
* Continous scrolling (along with `]' (info-global-next) and `['
(info-global-prev) works better. `]' and `[' accept numeric
arguments, moving that many nodes in that case.
* `C-x w' (info-toggle-wrap) controls how lines wider than the width
of the screen are displayed. If a line is too long, a `$' is
displayed in the rightmost column of the window.
* There are some new variables for controlling the behaviour of Info
interactively. The current list of variables is as follows:
Variable Name Default Value Description
------------- ------------- -----------
`automatic-footnotes' On When "On", footnotes appear and
disappear automatically.
`automatic-tiling' Off When "On", creating of deleting a
window resizes other windows.
`visible-bell' Off If non-zero, try to use a visible bell.
`errors-ring-bell' On If non-zero, errors cause a ring.
`show-index-match' On If non-zero, the portion of the string
matched is highlighted by changing its
case.
`scroll-behaviour' Continuous One of "Continuous", "Next Only", or
"Page Only". "Page Only" prevents you from
scrolling past the bottom or top of a node.
"Next Only" causes the Next or Prev node to
be selected when you scroll past the bottom
or top of a node. "Continous" moves
linearly through the files hierchichal
structure.
`scroll-step' 0 Controls how scrolling is done for you when
the cursor moves out of the current window.
Non-zero means it is the number of lines
you would like the screen to shift. A
value of 0 means to center the line
containing the cursor in the window.
`gc-compressed-files' Off If non-zero means it is okay to reclaim the
file buffer space allocated to a file which
was compressed, if, and only if, that
file's contents do not appear in the node
list of any window.
`ISO-Latin' Off Non-zero means that you are using an ISO
Latin character set. By default, standard
ASCII characters are assumed.
________________________________________
This release of Info is version 2.5 beta.
Changes since 2.4 beta:
* Index (i) and (,) commands fully implemented.
* "configure" script now shipped with Info.
* New function "set-variable" allows users to set various variables.
* User-settable behaviour on end or beginning of node scrolling. This
supercedes the SPC and DEL changes in 2.3 beta.
________________________________________
This release of Info is version 2.4 beta.
Changes since 2.3 beta:
* info-last-node now means move to the last node of this info file.
* info-history-node means move backwards through this window's node history.
* info-first-node moves to the first node in the Info file. This node is
not necessarily "Top"!
* SPC and DEL can select the Next or Prev node after printing an informative
message when pressed at the end/beg of a node.
----------------------------------------
This release of Info is version 2.3 beta.
Changes since 2.2 beta:
* M-x command lines if NAMED_COMMANDS is #defined. Variable in Makefile.
* Screen height changes made quite robust.
* Interactive function "set-screen-height" implements user height changes.
* Scrolling on some terminals is faster now.
* C-l with numeric arguement is fixed.
----------------------------------------
This release of Info is version 2.2 beta.
Changes since 2.0:
* C-g can now interrupt multi-file searches.
* Incremental search is fully implemented.
* Loading large tag tables is much faster now.
* makedoc.c replaces shell script, speeding incremental builds.
* Scrolling in redisplay is implemented.
* Recursive uses of the echo area made more robust.
* Garbage collection of unreferenced nodes.

112
external/gpl2/texinfo/dist/README vendored Normal file
View File

@ -0,0 +1,112 @@
Id: README,v 1.16 2004/12/13 13:36:32 karl Exp
This is the README file for the GNU Texinfo distribution. Texinfo is
the preferred documentation format for GNU software.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
See ./INSTALL* for installation instructions.
Primary distribution point: ftp://ftp.gnu.org/gnu/texinfo/
(list of mirrors at: http://www.gnu.org/prep/ftp.html)
Home page: http://www.gnu.org/software/texinfo/
(list of mirrors at: http://www.gnu.org/server/list-mirrors.html)
This page includes links to other Texinfo-related programs.
Mailing lists and archives:
- bug-texinfo@gnu.org for bug reports or enhancement suggestions,
archive: http://mail.gnu.org/pipermail/bug-texinfo
- help-texinfo@gnu.org for authoring questions and general discussion,
archive: http://mail.gnu.org/pipermail/help-texinfo
- texinfo-pretest@texinfo.org for pretests of new releases,
archive: http://texinfo.org/ftp/texinfo-pretest-archive
There are no corresponding newsgroups.
Bug reports:
please include enough information for the maintainers to reproduce the
problem. Generally speaking, that means:
- the contents of any input files necessary to reproduce the bug (crucial!).
- a description of the problem and any samples of the erroneous output.
- the version number of Texinfo and the program(s) involved (use --version).
- hardware, operating system, and compiler versions (uname -a).
- unusual options you gave to configure, if any (see config.status).
- anything else that you think would be helpful.
Patches are most welcome; if possible, please make them with diff -c and
include ChangeLog entries.
When sending email, please do not encode or split the messages in any
way if at all possible; it's easier to deal with one large message than
many small ones. GNU shar (http://www.gnu.org/software/sharutils/) is a
convenient way of packaging multiple and/or binary files for email.
See README.dev for information on the Texinfo development environment --
any interested parties are welcome. If you're a programmer and wish to
contribute, this should get you started. And if you're not a
programmer, you can still make significant contributions by writing test
cases, checking the documentation against the implementation, etc.
This distribution includes the following files, among others:
README This file.
README.dev Texinfo developer information.
INSTALL Texinfo-specific installation notes.
NEWS Summary of new features by release.
INTRODUCTION Brief introduction to the system, and
how to create readable files from the
Texinfo source files in this distribution.
Texinfo documentation files (in ./doc):
texinfo.txi Describes the Texinfo language and many
of the associated tools. It tells how
to use Texinfo to write documentation,
how to use Texinfo mode in GNU Emacs,
TeX, makeinfo, and the Emacs Lisp
Texinfo formatting commands.
info.texi This manual tells you how to use
Info. This document also comes as part of
GNU Emacs. If you do not have Emacs,
you can format this Texinfo source
file with makeinfo or TeX and then
read the resulting Info file with the
standalone Info reader that is part of
this distribution.
info-stnd.texi This manual tells you how to use
the standalone GNU Info reader that is
included in this distribution as C
source (./info).
Printing related files:
doc/texinfo.tex This TeX definitions file tells
the TeX program how to typeset a
Texinfo file into a DVI file ready for
printing.
util/texindex.c This file contains the source for
the `texindex' program that generates
sorted indices used by TeX when
typesetting a file for printing.
util/texi2dvi This is a shell script for
producing an indexed DVI file using
TeX and texindex.
Source files for standalone C programs:
./lib
./makeinfo
./info
Installation files:
Makefile.am What Automake uses to make a Makefile.in.
Makefile.in What `configure' uses to make a Makefile,
created by Automake.
configure.ac What Autoconf uses to create `configure'.
configure Configuration script for local conditions,
created by Autoconf.

44
external/gpl2/texinfo/dist/README.dev vendored Normal file
View File

@ -0,0 +1,44 @@
Id: README.dev,v 1.7 2003/11/24 15:11:06 karl Exp
README.dev - Texinfo developer information.
Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
The development sources for Texinfo is available through anonymous cvs
at Savannah, see
http://savannah.gnu.org/cvs/?group=texinfo
This distribution uses whatever versions of automake, autoconf, and
gettext are listed in NEWS; usually the latest ones released. If you
are getting the Texinfo sources from cvs, or change the Texinfo
configure.ac, you'll need to have these tools installed to (re)build.
You'll also need help2man. (All of these are available from
ftp://ftp.gnu.org/gnu.)
Here's the order in which to run the tools for a fresh build:
autoheader # creates config.in, not necessarily needed every time
aclocal -I m4 # for a new version of automake
automake
autoconf
configure CFLAGS=-g --enable-maintainer-mode
make
(with arguments to taste, of course.) Or you can run
./bootstrap
instead of the various auto* tools.
One final note: If you would like to contribute to the GNU project by
implementing additional documentation output formats for Texinfo, that
would be great. But please do not write a separate translator texi2foo
for your favorite format foo! That is the hard way to do the job, and
makes extra work in subsequent maintenance, since the Texinfo language
is continually being enhanced and updated. Instead, the best approach
is modify Makeinfo to generate the new format, as it does now for Info,
HTML, XML, and DocBook.

181
external/gpl2/texinfo/dist/TODO vendored Normal file
View File

@ -0,0 +1,181 @@
Id: TODO,v 1.26 2004/11/22 23:57:32 karl Exp
This is the todo list for GNU Texinfo.
If you are interested in working on any of these, email bug-texinfo@gnu.org.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2003,
2001, 2002, 2003, 2004 Free Software Foundation.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
* General:
- @euro{}.
- Support installation of manuals in different languages, along these lines:
. support a LINGUAS file or variable saying which subdirs LL in the
source to descend into (under doc/).
. within each subdir LL, install the info files into $infodir/LL,
and run install-info on $infodir/LL/dir.
. info (both emacs and standalone) should read $infodir/$LANG/dir
as the first dir file, and likewise read info files first from
$infodir/$LANG, before falling back to $infodir.
. consider ways to avoid installing images in both places.
In fact, images probably need to be installed in a subdir
$infodir/MANUAL/ in the first place, to avoid conflicts of having
the same image name in different manuals.
For a test case, see texinfo cvs, with its one translated manual
(info-fr.texi).
From Wojciech Polak.
- Monitor and improve the dir categories in existing manuals,
following the Free Software Directory categories. Much mail to
developers has already been sent, what's needed now is to check new
releases and make sure they are using the right categories.
See the util/dir-example in the Texinfo distribution for our current
recommended categories.
For background, see the thread (which discusses a lot of other
issues too) at
http://mail.gnu.org/pipermail/emacs-devel/2002-10/msg00011.html,
especially
http://mail.gnu.org/archive/html/emacs-devel/2002-10/msg00090.html
http://mail.gnu.org/archive/html/emacs-devel/2002-10/msg00137.html
- Get Info declared as a MIME Content-Type.
- Likewise the `info:' URI scheme; a library consortium has proposed a
completely different purpose for the URI scheme, but I don't know
how to send comments, despite it being a "request for comments". Sigh.
There is mail about this in the bug-texinfo archives:
http://mail.gnu.org/archive/html/bug-texinfo/2003-09/msg00086.html
- Support compressed image files.
- Support reference card creation, perhaps by only paying attention to
sectioning and @def... commands.
- Allow @end (and other?) commands to be indented in the source.
- Test for memory leaks, e.g., with valgrind:
http://developer.kde.org/~sewardj/
- Extend and improve the tests.
* Language:
- @else for the @if... conditionals.
- @xindexterm [def] primary [,secondary [,tertiary]] or some such?
- Allow subitems and `see' and `see also' in indices.
- multicolumn * width to take up `the rest'.
- another table command to take N succeeding items and split them
into M columns (see eplain).
- support bibliographies with BibTeX (see web2c/doc for kludge prototype).
- @flushboth to combine @flushleft and @flushright, for RFC's.
- @part sectioning command.
- @exercise/@answer command for, e.g., gawk.
- Allow @hsep/@vsep at @item, instead of just in template.
- Support automatic line numbering of examples.
- Better macro syntax.
- Better def... command syntax.
- Allow : in node names for info files, for names like
`class::method'. Likewise index entries. A quoting mechanism such
as surrounding node names with SPACE BACKSPACE is probably the best
solution, although this is an incompatible change to Info format, sigh.
- Glossary/general definition support (dumas msg 28 Nov 2003 17:09:57 +0100).
- Add support for other Latin 9 (and Latin 2 and Latin 1) characters.
* Makeinfo:
- Translation of "Appendix" etc. should depend on @doclang not $LANG.
- Try directory of main source file.
- Make makeinfo -E just do macro expansion, avoiding all error checks.
That way, texi2dvi could run makeinfo --iftex -E.
- A detexinfo program, like detex or delatex. This command would
strip all the texinfo commands out, and would be used as a filter on
the way to a speller. An option would be to NOT strip comments out.
makeinfo --no-headers comes close.
- If node name contains an @ command, complain explicitly.
- Use @documentlanguage instead of LANG for many translations.
- HTML: split output by chapter to improve context, per Akim.
Generate dummy files for all nodes for the sake of cross-references.
- HTML: support thumbnails.
- HTML: make images of math, maybe.
- HTML: allow settable background color, table colors and spacing,
<head> meta tags, etc. A la http://texi2html.cvshome.org. In fact:
- HTML: have a library of different CSS styles.
http://mail.gnu.org/archive/html/bug-texinfo/2004-01/msg00025.html
- XML: cannot be loaded directly in a browser; why not?
- Docbook: &euro; and other entities do not work; does anything work?
- Rewrite completely to simplify generation of different formats.
* TeX:
- Use @ as the escape character, and Texinfo syntax generally, in the
table of contents and index files. Eliminate all the crazy
multiple redefinitions of every Texinfo command in different contexts.
- Support input in any encoding and language, via ec or Latin Modern fonts.
- Reasonable way to change fonts from the default (some work has been
done), to allow for PostScript fonts, for example.
- @multitable: handle @hsep and @vsep.
- @multitable: repeat table headings if multiple pages long.
- @multitable: support a heading line concept (<thead> in HTML).
- Introduce new command to change \bindingoffset.
- How about using latex2html to produce HTML?
- Table of contents gets misaligned if there are 10 or more [sub]sections.
- Use url.sty (or something) to allow linebreak of url's.
- Include hyperlink \special's in the DVI output for xdvi, etc.
- PDF: make each letter of the index (A, B, ...) a section in the TOC.
From Carsten Dominik <dominik@astro.uva.nl>.
* Doc:
- Include a complete functional summary, as in a reference card, in
the manual.
- Improve the manuals, especially for makeinfo, standalone info, etc.
- new section on doing dedication pages. See gawk.texi
for an example of doing it in both the tex and info versions.
* Info:
- Regular expression search.
- Full-text search across all info files installed on the system.
- Support character sets other than ISO Latin 1.
- Perhaps comply with LANGUAGE setting on a per-node basis, to allow
incremental translation of Texinfo files.
- Search all nodes of dir file at startup, then can have
INFO-DIR-SEPARATE-GROUPS and other such.
- Better dir file merging.
- Global dir file (as in /etc/conf/dir) and texinfo config file
specifying which info directories to search. From Dale Mellor.
http://mail.gnu.org/mailman/private/gnu-prog-discuss/2003q4/000439.html
- Steal interface ideas from Lynx: number links, use color, etc.
Perhaps code from the pinfo viewer can be reused:
http://zeus.polsl.gliwice.pl/~pborys/.
- More sample .infokey files, so people can choose without writing their own.
- q within help should quit help like C-x 0.
- Incorporate an X-based viewer, perhaps saxinfo or tkinfo
http://www.math.ucsb.edu/~boldt/tkinfo/
- Make "info foo bar" search for bar in foo's index(es) if no menu match.
- Handle M-n, C-u m, and C-u g like Emacs Info (opening new windows).
- Write technical definition of Info format.
* install-info:
- be able to copy the info file to compile-time $infodir, to
simplify by-hand installation.
- also support installing HTML files, etc., along with subsidiary
@image (or other) files. In subdirs. Or something.
- support info dir entries for other than the current info file name;
see comments in menu_item_equal.
- merge features with Debian install-info, so we can have one program.
* texindex:
- read source file (specified by new option) for @documentlanguage
and/or @documentencoding, and change the sorting appropriately.
From: Wojciech Polak, 26 Apr 2003 11:30:59 +0200.
* Distribution:
- generate txi-??.tex from .po's to make translators' jobs easier.
From Akim and Karl E.
Ideas that will not be implemented:
- Process Texinfo files directly instead of converting to Info:
ftp://ftp.cs.berkeley.edu/ucb/people/phelps/tcltk/tkman.tar.Z, which
uses Tcl/Tk 8.0 from ftp.smli.com in the /pub/tcl directory.
From: phelps@ecstasy.CS.Berkeley.EDU (Tom Phelps)
[This has the disadvantage of needing to be updated when the
Texinfo language changes, so don't.]
- Call Ghostscript to get ASCII/jpg output for the @image command.
[makeinfo should not try to be make, or assume it knows how the user
wants to generate images. Too many different methods are possible.]
- Change bars. This is difficult or impossible in TeX,
unfortunately. To do it right requires device driver support.
wdiff or ediff may be all we can do. Merely specifying what should be
changed is not obvious.

1090
external/gpl2/texinfo/dist/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

1453
external/gpl2/texinfo/dist/config.guess vendored Normal file

File diff suppressed because it is too large Load Diff

420
external/gpl2/texinfo/dist/config.in vendored Normal file
View File

@ -0,0 +1,420 @@
/* config.in. Generated from configure.ac by autoheader. */
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
systems. This function is required for `alloca.c' support on those systems.
*/
#undef CRAY_STACKSEG_END
/* Define to 1 if using `alloca.c'. */
#undef C_ALLOCA
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
/* Define to 1 if `TIOCGWINSZ' requires <sys/ioctl.h>. */
#undef GWINSZ_IN_SYS_IOCTL
/* Define to 1 if you have `alloca', as a function or macro. */
#undef HAVE_ALLOCA
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
*/
#undef HAVE_ALLOCA_H
/* Define to 1 if you have the <argz.h> header file. */
#undef HAVE_ARGZ_H
/* Define to 1 if you have the `asprintf' function. */
#undef HAVE_ASPRINTF
/* Define to 1 if you have the `bzero' function. */
#undef HAVE_BZERO
/* Define if the GNU dcgettext() function is already present or preinstalled.
*/
#undef HAVE_DCGETTEXT
/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
don't. */
#undef HAVE_DECL_FEOF_UNLOCKED
/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
you don't. */
#undef HAVE_DECL_FGETS_UNLOCKED
/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
don't. */
#undef HAVE_DECL_GETC_UNLOCKED
/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
*/
#undef HAVE_DECL_GETENV
/* Define to 1 if you have the declaration of `memchr', and to 0 if you don't.
*/
#undef HAVE_DECL_MEMCHR
/* Define to 1 if you have the declaration of `strcoll', and to 0 if you
don't. */
#undef HAVE_DECL_STRCOLL
/* Define to 1 if you have the declaration of `strerror', and to 0 if you
don't. */
#undef HAVE_DECL_STRERROR
/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
don't. */
#undef HAVE_DECL__SNPRINTF
/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you
don't. */
#undef HAVE_DECL__SNWPRINTF
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
#undef HAVE_DOPRNT
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define to 1 if you have the `fwprintf' function. */
#undef HAVE_FWPRINTF
/* Define to 1 if you have the `getcwd' function. */
#undef HAVE_GETCWD
/* Define to 1 if you have the `getegid' function. */
#undef HAVE_GETEGID
/* Define to 1 if you have the `geteuid' function. */
#undef HAVE_GETEUID
/* Define to 1 if you have the `getgid' function. */
#undef HAVE_GETGID
/* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE
/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
/* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY
/* Define to 1 if you have the `getuid' function. */
#undef HAVE_GETUID
/* Define if you have the iconv() function. */
#undef HAVE_ICONV
/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
#undef HAVE_INTMAX_T
/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
#undef HAVE_INTTYPES_H
/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
declares uintmax_t. */
#undef HAVE_INTTYPES_H_WITH_UINTMAX
/* Define to 1 if you have the <io.h> header file. */
#undef HAVE_IO_H
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
#undef HAVE_LANGINFO_CODESET
/* Define if your <locale.h> file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
/* Define to 1 if you have the `bsd' library (-lbsd). */
#undef HAVE_LIBBSD
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
/* Define to 1 if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
/* Define if you have the 'long double' type. */
#undef HAVE_LONG_DOUBLE
/* Define if you have the 'long long' type. */
#undef HAVE_LONG_LONG
/* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H
/* Define to 1 if you have the `memcpy' function. */
#undef HAVE_MEMCPY
/* Define to 1 if you have the `memmove' function. */
#undef HAVE_MEMMOVE
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `mempcpy' function. */
#undef HAVE_MEMPCPY
/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
/* Define to 1 if you have the `mkstemp' function. */
#undef HAVE_MKSTEMP
/* Define to 1 if you have a working `mmap' system call. */
#undef HAVE_MMAP
/* Define to 1 if you have the `munmap' function. */
#undef HAVE_MUNMAP
/* Define to 1 if you have the <ncurses/termcap.h> header file. */
#undef HAVE_NCURSES_TERMCAP_H
/* Define to 1 if you have the <nl_types.h> header file. */
#undef HAVE_NL_TYPES_H
/* Define if your printf() function supports format strings with positions. */
#undef HAVE_POSIX_PRINTF
/* Define to 1 if you have the `putenv' function. */
#undef HAVE_PUTENV
/* Define to 1 if you have the <pwd.h> header file. */
#undef HAVE_PWD_H
/* Define to 1 if you have the `setenv' function. */
#undef HAVE_SETENV
/* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE
/* Define to 1 if you have the `setvbuf' function. */
#undef HAVE_SETVBUF
/* Define to 1 if you have the `sigaction' function. */
#undef HAVE_SIGACTION
/* Define to 1 if you have the `sigprocmask' function. */
#undef HAVE_SIGPROCMASK
/* Define to 1 if you have the `sigsetmask' function. */
#undef HAVE_SIGSETMASK
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
/* Define to 1 if you have the <stddef.h> header file. */
#undef HAVE_STDDEF_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
uintmax_t. */
#undef HAVE_STDINT_H_WITH_UINTMAX
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the `stpcpy' function. */
#undef HAVE_STPCPY
/* Define to 1 if you have the `strcasecmp' function. */
#undef HAVE_STRCASECMP
/* Define to 1 if you have the `strchr' function. */
#undef HAVE_STRCHR
/* Define to 1 if you have the `strcoll' function and it is properly defined.
*/
#undef HAVE_STRCOLL
/* Define to 1 if you have the `strdup' function. */
#undef HAVE_STRDUP
/* Define to 1 if you have the `strerror' function. */
#undef HAVE_STRERROR
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the `strncasecmp' function. */
#undef HAVE_STRNCASECMP
/* Define to 1 if you have the `strtoul' function. */
#undef HAVE_STRTOUL
/* Define to 1 if you have the <sys/fcntl.h> header file. */
#undef HAVE_SYS_FCNTL_H
/* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H
/* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
/* Define to 1 if you have the <sys/ptem.h> header file. */
#undef HAVE_SYS_PTEM_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/stream.h> header file. */
#undef HAVE_SYS_STREAM_H
/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define to 1 if you have the <sys/ttold.h> header file. */
#undef HAVE_SYS_TTOLD_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <sys/wait.h> header file. */
#undef HAVE_SYS_WAIT_H
/* Define to 1 if you have the <termcap.h> header file. */
#undef HAVE_TERMCAP_H
/* Define to 1 if you have the <termios.h> header file. */
#undef HAVE_TERMIOS_H
/* Define to 1 if you have the <termio.h> header file. */
#undef HAVE_TERMIO_H
/* Define to 1 if you have the `tsearch' function. */
#undef HAVE_TSEARCH
/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
#undef HAVE_UINTMAX_T
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define if you have the 'unsigned long long' type. */
#undef HAVE_UNSIGNED_LONG_LONG
/* Define to 1 if you have the `vprintf' function. */
#undef HAVE_VPRINTF
/* Define if you have the 'wchar_t' type. */
#undef HAVE_WCHAR_T
/* Define to 1 if you have the `wcslen' function. */
#undef HAVE_WCSLEN
/* Define if you have the 'wint_t' type. */
#undef HAVE_WINT_T
/* Define to 1 if you have the `__argz_count' function. */
#undef HAVE___ARGZ_COUNT
/* Define to 1 if you have the `__argz_next' function. */
#undef HAVE___ARGZ_NEXT
/* Define to 1 if you have the `__argz_stringify' function. */
#undef HAVE___ARGZ_STRINGIFY
/* Define to 1 if you have the `__fsetlocking' function. */
#undef HAVE___FSETLOCKING
/* Define to 1 if you have the `__secure_getenv' function. */
#undef HAVE___SECURE_GETENV
/* Define as const if the declaration of iconv() needs const. */
#undef ICONV_CONST
/* Define if integer division by zero raises signal SIGFPE. */
#undef INTDIV0_RAISES_SIGFPE
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
#undef PRI_MACROS_BROKEN
/* Define as the return type of signal handlers (`int' or `void'). */
#undef RETSIGTYPE
/* Define as the maximum value of type 'size_t', if the system doesn't define
it. */
#undef SIZE_MAX
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
automatically deduced at 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 to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
#undef STAT_MACROS_BROKEN
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
#undef TM_IN_SYS_TIME
/* Version number of package */
#undef VERSION
/* Define to 1 if on MINIX. */
#undef _MINIX
/* Define to 2 if the system does not provide POSIX.1 features except with
this defined. */
#undef _POSIX_1_SOURCE
/* Define to 1 if you need to in order for `stat' and other things to work. */
#undef _POSIX_SOURCE
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
#undef inline
#endif
/* Define to rpl_mkstemp if the replacement function should be used. */
#undef mkstemp
/* Define to `long' if <sys/types.h> does not define. */
#undef off_t
/* Define as the type of the result of subtracting two pointers, if the system
doesn't define it. */
#undef ptrdiff_t
/* Define to empty if the C compiler doesn't support this keyword. */
#undef signed
/* Define to `unsigned' if <sys/types.h> does not define. */
#undef size_t
/* Define to unsigned long or unsigned long long if <stdint.h> and
<inttypes.h> don't define. */
#undef uintmax_t

548
external/gpl2/texinfo/dist/config.rpath vendored Executable file
View File

@ -0,0 +1,548 @@
#! /bin/sh
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
# Copyright 1996-2003 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
#
# The first argument passed to this file is the canonical host specification,
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
# should be set by the caller.
#
# The set of defined variables is at the end of this script.
# Known limitations:
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
# than 256 bytes, otherwise the compiler driver will dump core. The only
# known workaround is to choose shorter directory names for the build
# directory and/or the installation directory.
# All known linkers require a `.a' archive for static linking (except M$VC,
# which needs '.lib').
libext=a
shrext=.so
host="$1"
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
wl=
if test "$GCC" = yes; then
wl='-Wl,'
else
case "$host_os" in
aix*)
wl='-Wl,'
;;
mingw* | pw32* | os2*)
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
;;
irix5* | irix6* | nonstopux*)
wl='-Wl,'
;;
newsos6)
;;
linux*)
case $CC in
icc|ecc)
wl='-Wl,'
;;
ccc)
wl='-Wl,'
;;
esac
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
sco3.2v5*)
;;
solaris*)
wl='-Wl,'
;;
sunos4*)
wl='-Qoption ld '
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
wl='-Wl,'
;;
sysv4*MP*)
;;
uts4*)
;;
esac
fi
# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
cygwin* | mingw* | pw32*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
if test "$GCC" != yes; then
with_gnu_ld=no
fi
;;
openbsd*)
with_gnu_ld=no
;;
esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
case "$host_os" in
aix3* | aix4* | aix5*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs=no
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
# that the semantics of dynamic libraries on AmigaOS, at least up
# to version 4, is to share data among multiple programs linked
# with the same dynamic library. Since this doesn't match the
# behavior of shared libraries on other platforms, we can use
# them.
ld_shlibs=no
;;
beos*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
cygwin* | mingw* | pw32*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
netbsd*)
;;
solaris* | sysv5*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
sunos4*)
hardcode_direct=yes
;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
esac
if test "$ld_shlibs" = yes; then
# Unlike libtool, we use -rpath here, not --rpath, since the documented
# option of GNU ld is called -rpath, not --rpath.
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
fi
else
case "$host_os" in
aix3*)
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
if test "$GCC" = yes; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
fi
;;
aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
else
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
esac
fi
hardcode_direct=yes
hardcode_libdir_separator=':'
if test "$GCC" = yes; then
case $host_os in aix4.[012]|aix4.[012].*)
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" && \
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
hardcode_direct=yes
else
# We have old collect2
hardcode_direct=unsupported
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
esac
fi
# Begin _LT_AC_SYS_LIBPATH_AIX.
echo 'int main () { return 0; }' > conftest.c
${CC} ${LDFLAGS} conftest.c -o conftest
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
if test -z "$aix_libpath"; then
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
fi
if test -z "$aix_libpath"; then
aix_libpath="/usr/lib:/lib"
fi
rm -f conftest.c conftest
# End _LT_AC_SYS_LIBPATH_AIX.
if test "$aix_use_runtimelinking" = yes; then
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
else
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
fi
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# see comment about different semantics on the GNU ld section
ld_shlibs=no
;;
bsdi4*)
;;
cygwin* | mingw* | pw32*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec=' '
libext=lib
;;
darwin* | rhapsody*)
if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
hardcode_direct=no
fi
;;
dgux*)
hardcode_libdir_flag_spec='-L$libdir'
;;
freebsd1*)
ld_shlibs=no
;;
freebsd2.2*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
freebsd2*)
hardcode_direct=yes
hardcode_minus_L=yes
;;
freebsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
hpux9*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
hpux10* | hpux11*)
if test "$with_gnu_ld" = no; then
case "$host_cpu" in
hppa*64*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=no
;;
ia64*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=no
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
esac
fi
;;
irix5* | irix6* | nonstopux*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
netbsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
newsos6)
hardcode_direct=yes
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
openbsd*)
hardcode_direct=yes
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
else
case "$host_os" in
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
hardcode_libdir_flag_spec='-R$libdir'
;;
*)
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
esac
fi
;;
os2*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
osf3*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
osf4* | osf5*)
if test "$GCC" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
else
# Both cc and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
fi
hardcode_libdir_separator=:
;;
sco3.2v5*)
;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
sunos4*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
sysv4)
case $host_vendor in
sni)
hardcode_direct=yes # is this really true???
;;
siemens)
hardcode_direct=no
;;
motorola)
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
;;
esac
;;
sysv4.3*)
;;
sysv4*MP*)
if test -d /usr/nec; then
ld_shlibs=yes
fi
;;
sysv4.2uw2*)
hardcode_direct=yes
hardcode_minus_L=no
;;
sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
;;
sysv5*)
hardcode_libdir_flag_spec=
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
;;
*)
ld_shlibs=no
;;
esac
fi
# Check dynamic linker characteristics
# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
libname_spec='lib$name'
case "$host_os" in
aix3*)
;;
aix4* | aix5*)
;;
amigaos*)
;;
beos*)
;;
bsdi4*)
;;
cygwin* | mingw* | pw32*)
shrext=.dll
;;
darwin* | rhapsody*)
shrext=.dylib
;;
dgux*)
;;
freebsd1*)
;;
freebsd*)
;;
gnu*)
;;
hpux9* | hpux10* | hpux11*)
case "$host_cpu" in
ia64*)
shrext=.so
;;
hppa*64*)
shrext=.sl
;;
*)
shrext=.sl
;;
esac
;;
irix5* | irix6* | nonstopux*)
case "$host_os" in
irix5* | nonstopux*)
libsuff= shlibsuff=
;;
*)
case $LD in
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
*) libsuff= shlibsuff= ;;
esac
;;
esac
;;
linux*oldld* | linux*aout* | linux*coff*)
;;
linux*)
;;
netbsd*)
;;
newsos6)
;;
nto-qnx)
;;
openbsd*)
;;
os2*)
libname_spec='$name'
shrext=.dll
;;
osf3* | osf4* | osf5*)
;;
sco3.2v5*)
;;
solaris*)
;;
sunos4*)
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
;;
sysv4*MP*)
;;
uts4*)
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
# How to pass a linker flag through the compiler.
wl="$escaped_wl"
# Static library suffix (normally "a").
libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator="$hardcode_libdir_separator"
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.
hardcode_direct="$hardcode_direct"
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L="$hardcode_minus_L"
EOF

1566
external/gpl2/texinfo/dist/config.sub vendored Normal file

File diff suppressed because it is too large Load Diff

14795
external/gpl2/texinfo/dist/configure vendored Executable file

File diff suppressed because it is too large Load Diff

224
external/gpl2/texinfo/dist/configure.ac vendored Normal file
View File

@ -0,0 +1,224 @@
# Process this file with autoconf to produce a configure script.
# Id: configure.ac,v 1.50 2004/12/22 13:29:44 karl Exp
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
AC_PREREQ(2.59)# Minimum Autoconf version required.
#
AC_INIT([GNU Texinfo], [4.8])
AC_CONFIG_HEADERS(config.h:config.in)# Keep filename to 8.3 for MS-DOS.
AC_CONFIG_SRCDIR([makeinfo/makeinfo.c])
AM_INIT_AUTOMAKE([dist-bzip2])
# When the Texinfo source is imported into other repositories
# (NetBSD and TeX Live), timestamps are generally not preserved. This
# causes lots of annoyance, so --enable-maintainer-mode. Sorry.
AM_MAINTAINER_MODE
# Checks for programs.
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_PROG_RANLIB
AM_MISSING_PROG(HELP2MAN, help2man)
AC_ISC_POSIX
AC_MINIX
# Needed on sysV68 for sigblock, sigsetmask. But check for it in libc first.
AC_CHECK_FUNC(sigblock, , AC_CHECK_LIB(bsd, sigblock))
# Checks for header files.
AC_HEADER_STAT
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h io.h limits.h pwd.h string.h strings.h \
termcap.h termio.h termios.h unistd.h \
sys/fcntl.h sys/file.h sys/stream.h sys/time.h sys/ttold.h sys/wait.h)
# sys/ptem.h requires sys/stream.h for mblk_t on Solaris.
AC_CHECK_HEADERS([sys/ptem.h],,,
[#if HAVE_SYS_STREAM_H
#include <sys/stream.h>
#endif
])
AC_SYS_POSIX_TERMIOS
AC_HEADER_TIOCGWINSZ
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_OFF_T
AC_TYPE_SIGNAL
AC_C_CONST
AC_STRUCT_TM
# Checks for function declarations.
AC_CHECK_DECLS([memchr, strcoll, strerror])
# Checks for library functions.
AC_FUNC_ALLOCA
AC_FUNC_STRCOLL
AC_FUNC_VPRINTF
# in theory only pre-sysvr3 systems needed this and it's not likely
# that anyone compiling new texinfo still has such a thing? we'll see.
# AC_FUNC_SETVBUF_REVERSED
AC_CHECK_FUNCS(bzero getcwd memset setvbuf sigaction sigprocmask \
sigsetmask strchr)
AC_REPLACE_FUNCS(memcpy memmove strdup strerror)
# strcasecmp and strncasecmp, gnulib-style.
gl_STRCASE
# We want to recognize djgpp to avoid the useless warning about no
# term library.
AC_CANONICAL_BUILD
# We need to run some of our own binaries, most notably makedoc, but as
# long as we have this process, we also use our own makeinfo and
# install-info.
#
# This means that if we are cross compiling, we have to configure the
# package twice: once with the native compiler (this is done in a
# subdirectory $native_tools), and once with the cross compiler.
# The former is invoked automatically here, with --host=$build.
# $native_tools is also added to SUBDIRS in the main Makefile.am,
# so that make compiles the native tools first.
#
if test "$cross_compiling" = no; then
native_tools=
else
native_tools=tools
test -d "$native_tools" || mkdir "$native_tools"
confdir=`(cd "$srcdir";pwd)`
# Make sure the secondary configure won't fail with
# "error: source directory already configured".
rm -f config.status
AC_MSG_NOTICE([[Doing configure of native tools (${build}).]])
cd "$native_tools" || exit 1
# Run secondary configure in alternate environment or
# it gets the wrong CC etc. env -i gives this build host configure
# a clean environment.
env -i CC="${BUILD_CC}" AR="${BUILD_AR}" RANLIB="${BUILD_RANLIB}" \
PATH="${PATH}" \
tools_only=1 \
${confdir}/configure --build=${build} --host=${build} \
--disable-rpath --disable-nls
cd .. || exit 1
AC_MSG_NOTICE([[Continuing with main configure (${host}).]])
fi
AC_SUBST(native_tools)
AM_CONDITIONAL(TOOLS_ONLY, [[test "x$tools_only" = x1]])
# Some GNU/Linux systems (e.g., SuSE 4.3, 1996) don't have curses, but
# rather ncurses. So we check for it.
TERMLIBS=
# Check for termlib before termcap because Solaris termcap needs libucb.
TERMLIB_VARIANTS="ncurses curses termlib termcap terminfo"
for termlib in ${TERMLIB_VARIANTS}; do
AC_CHECK_LIB(${termlib}, tgetent,
[TERMLIBS="${TERMLIBS} -l${termlib}"; break])
done
# don't bother warning on djgpp, it doesn't have a term library, it
# ports each termcap-needing program separately according to its needs.
if test -z "$TERMLIBS" && echo "$build" | grep -v djgpp >/dev/null; then
AC_MSG_WARN([probably need a terminal library, one of: ${TERMLIB_VARIANTS}])
fi
# Checks for variables.
# HP-UX 9 (at least) needs -lncurses which defines termcap variables PC etc.
AC_MSG_CHECKING(for library with termcap variables)
AC_CACHE_VAL(ac_cv_var_ospeed,
oldLIBS=$LIBS
for trylib in $termlib ${TERMLIB_VARIANTS}; do
if test "x$trylib" != "x$termlib"; then
LIBS="$oldLIBS -l$termlib -l$trylib"
else
LIBS="$oldLIBS -l$termlib"
fi
AC_TRY_LINK(,
[#ifdef HAVE_NCURSES_TERMCAP_H
#include <ncurses/termcap.h>
#else
#ifdef HAVE_TERMCAP_H
#include <termcap.h>
#else
#undef PC
char *BC;
char **UP;
char PC;
short ospeed;
#endif
#endif
/* Make sure all variables actually exist. AIX 4.3 has ospeed but no BC.
--Andreas Ley <andy@rz.uni-karlsruhe.de> 24 Aug 2000. */
BC++;
UP++;
PC++;
return ospeed != 0;
], ac_cv_var_ospeed=$trylib; break)
done
LIBS=$oldLIBS
)
AC_MSG_RESULT($ac_cv_var_ospeed)
if test -n "$ac_cv_var_ospeed" \
&& test "x$termlib" != "x$ac_cv_var_ospeed"; then
TERMLIBS="${TERMLIBS} -l${ac_cv_var_ospeed}"
fi
AC_SUBST(TERMLIBS)#
# Do not use <ncurses/termcap.h> unless we're linking with ncurses.
# Must come after the termlib tests.
if test "x$termlib" = xncurses; then
# Use AC_CHECK_HEADERS so the HAVE_*_H symbol gets defined.
AC_CHECK_HEADERS(ncurses/termcap.h)
fi
# gnulib.
gl_FUNC_MKSTEMP
# For teTeX and TeX Live.
AC_CANONICAL_HOST
AC_ARG_ENABLE(multiplatform,
[ --enable-multiplatform put executables in bin/PLATFORM])
# if enable_multiplatform is set in the environment, use that.
test "x$enable_multiplatform" = xyes \
&& test "x$bindir" = 'x${exec_prefix}/bin' \
&& bindir="$bindir/$host"
# Taken from the example in
# http://www.gnu.org/software/automake/manual/html_node/Conditionals.html.
AC_ARG_ENABLE(install-warnings,
[ --disable-install-warnings omit make install warnings about TeX files],
[case "${enableval}" in
yes) install_warnings=true ;;
no) install_warnings=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-install-warnings) ;;
esac],
[install_warnings=true])
AM_CONDITIONAL(INSTALL_WARNINGS,
test x"$install_warnings" = xtrue || test x"$install_warnings" = xyes)
# i18n support. To update to a new version of gettext, run:
# gettextize -f -c --intl
AM_GNU_GETTEXT_VERSION(0.14.1)
AM_GNU_GETTEXT()
AC_CONFIG_FILES([
Makefile
doc/Makefile
info/Makefile
intl/Makefile
lib/Makefile
m4/Makefile
makeinfo/Makefile
makeinfo/tests/Makefile
po/Makefile.in
util/Makefile
])
AC_OUTPUT

522
external/gpl2/texinfo/dist/depcomp vendored Normal file
View File

@ -0,0 +1,522 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2004-05-31.23
# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.
Environment variables:
depmode Dependency tracking mode.
source Source file read by `PROGRAMS ARGS'.
object Object file output by `PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputing dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit 0
;;
-v | --v*)
echo "depcomp $scriptversion"
exit 0
;;
esac
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts `$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test -f "$tmpdepfile"; then :
else
stripped=`echo "$stripped" | sed 's,^.*/,,'`
tmpdepfile="$stripped.u"
fi
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
outname="$stripped.o"
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
icc)
# Intel's C compiler understands `-MD -MF file'. However on
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want:
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using \ :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
# Dependencies are output in .lo.d with libtool 1.4.
# With libtool 1.5 they are output both in $dir.libs/$base.o.d
# and in $dir.libs/$base.o.d and $dir$base.o.d. We process the
# latter, because the former will be cleaned when $dir.libs is
# erased.
tmpdepfile1="$dir.libs/$base.lo.d"
tmpdepfile2="$dir$base.o.d"
tmpdepfile3="$dir.libs/$base.d"
"$@" -Wc,-MD
else
tmpdepfile1="$dir$base.o.d"
tmpdepfile2="$dir$base.d"
tmpdepfile3="$dir$base.d"
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
exit $stat
fi
if test -f "$tmpdepfile1"; then
tmpdepfile="$tmpdepfile1"
elif test -f "$tmpdepfile2"; then
tmpdepfile="$tmpdepfile2"
else
tmpdepfile="$tmpdepfile3"
fi
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a tab and a space in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for `:'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
"$@" $dashmflag |
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

View File

@ -0,0 +1,80 @@
# Id: Makefile.am,v 1.20 2004/11/18 01:10:59 karl Exp
# Makefile.am for texinfo/doc.
# Run automake in .. to produce Makefile.in from this.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# Put texinfo.txi first because that's the most important.
info_TEXINFOS = texinfo.txi info-stnd.texi info.texi
DISTCLEANFILES = texinfo texinfo-* info*.info*
man_MANS = info.1 infokey.1 install-info.1 makeinfo.1 texindex.1 texi2dvi.1 \
info.5 texinfo.5
# Use the programs built in our distribution, taking account of possible
# cross-compiling.
MAKEINFO = $(top_builddir)/$(native_tools)/makeinfo/makeinfo
INSTALL_INFO = $(top_builddir)/$(native_tools)/util/install-info
TXI_XLATE = txi-cs.tex txi-de.tex txi-en.tex txi-es.tex txi-fr.tex \
txi-it.tex txi-nl.tex txi-no.tex txi-pl.tex txi-pt.tex txi-tr.tex
# Include our texinfo.tex, not Automake's.
EXTRA_DIST = epsf.tex pdfcolor.tex texinfo.tex \
fdl.texi \
$(man_MANS) $(TXI_XLATE)
if INSTALL_WARNINGS
install-data-local:
@echo
@echo "WARNING: If your texmf tree does not already contain"
@echo " up-to-date versions, you must install"
@echo " texinfo.tex and txi-??.tex manually,"
@echo " perhaps in TEXMF/tex/texinfo/,"
@echo " where TEXMF is a root of your TeX tree."
@echo " See doc/README for some considerations."
@echo " You can run make TEXMF=/your/texmf install-tex to do this."
@echo
@echo " You may also need to install epsf.tex and (if you"
@echo " use pdftex) pdfcolor.tex in TEXMF/tex/generic/dvips"
@echo " and TEXMF/pdftex/plain/misc/pdfcolor.tex respectively,"
@echo " if your TeX installation did not include them."
endif
texmf_texinfo = $(TEXMF)/tex/texinfo
texmf_dvips = $(TEXMF)/tex/generic/dvips
texmf_pdftex_misc = $(TEXMF)/pdftex/plain/misc
install-tex:
test -n "$(TEXMF)" || (echo "TEXMF must be set." >&2; exit 1)
$(mkinstalldirs) $(DESTDIR)$(texmf_texinfo) $(DESTDIR)$(texmf_dvips) $(DESTDIR)$(texmf_pdftex_misc)
$(INSTALL_DATA) $(srcdir)/texinfo.tex $(DESTDIR)$(texmf_texinfo)/texinfo.tex
$(INSTALL_DATA) $(srcdir)/epsf.tex $(DESTDIR)$(texmf_dvips)/epsf.tex
$(INSTALL_DATA) $(srcdir)/pdfcolor.tex $(DESTDIR)$(texmf_pdftex_misc)/pdfcolor.tex
for f in $(TXI_XLATE); do \
$(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(texmf_texinfo)/$$f; done
# The man pages depend on the --help strings and the version number.
if MAINTAINER_MODE
common_mandeps = $(top_srcdir)/configure.ac
info.1: $(top_srcdir)/info/info.c $(common_mandeps)
$(HELP2MAN) --name="read Info documents" `basename $@ .1` >$@
infokey.1: $(top_srcdir)/info/infokey.c $(common_mandeps)
$(HELP2MAN) --name="compile customizations for Info" `basename $@ .1` >$@
install-info.1: $(top_srcdir)/util/install-info.c $(common_mandeps)
$(HELP2MAN) --name="update info/dir entries" `basename $@ .1` >$@
makeinfo.1: $(top_srcdir)/makeinfo/makeinfo.c $(common_mandeps)
$(HELP2MAN) --name="translate Texinfo documents" `basename $@ .1` >$@
texi2dvi.1: $(top_srcdir)/util/texi2dvi $(common_mandeps)
$(HELP2MAN) --name="print Texinfo documents" `basename $@ .1` >$@
texindex.1: $(top_srcdir)/util/texindex.c $(common_mandeps)
$(HELP2MAN) --name="sort Texinfo index files" `basename $@ .1` >$@
endif
# Do not create info files for distribution.
dist-info:

View File

@ -0,0 +1,772 @@
# Makefile.in generated by automake 1.9.4 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Id: Makefile.am,v 1.20 2004/11/18 01:10:59 karl Exp
# Makefile.am for texinfo/doc.
# Run automake in .. to produce Makefile.in from this.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = doc
DIST_COMMON = README $(info_TEXINFOS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/stamp-1 $(srcdir)/stamp-vti \
$(srcdir)/version-stnd.texi $(srcdir)/version.texi mdate-sh \
texinfo.tex
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
$(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
$(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
$(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
$(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
$(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
INFO_DEPS = texinfo info-stnd.info info.info
am__TEXINFO_TEX_DIR = $(srcdir)
DVIS = texinfo.dvi info-stnd.dvi info.dvi
PDFS = texinfo.pdf info-stnd.pdf info.pdf
PSS = texinfo.ps info-stnd.ps info.ps
HTMLS = texinfo.html info-stnd.html info.html
TEXINFOS = texinfo.txi info-stnd.texi info.texi
TEXI2DVI = texi2dvi
TEXI2PDF = $(TEXI2DVI) --pdf --batch
MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
DVIPS = dvips
am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \
"$(DESTDIR)$(man5dir)"
man1dir = $(mandir)/man1
man5dir = $(mandir)/man5
NROFF = nroff
MANS = $(man_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GENCAT = @GENCAT@
GLIBC21 = @GLIBC21@
GMSGFMT = @GMSGFMT@
HAVE_ASPRINTF = @HAVE_ASPRINTF@
HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
HAVE_SNPRINTF = @HAVE_SNPRINTF@
HAVE_WPRINTF = @HAVE_WPRINTF@
HELP2MAN = @HELP2MAN@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
INSTOBJEXT = @INSTOBJEXT@
INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
# Use the programs built in our distribution, taking account of possible
# cross-compiling.
MAKEINFO = $(top_builddir)/$(native_tools)/makeinfo/makeinfo
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
POSUB = @POSUB@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TERMLIBS = @TERMLIBS@
TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
native_tools = @native_tools@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
# Put texinfo.txi first because that's the most important.
info_TEXINFOS = texinfo.txi info-stnd.texi info.texi
DISTCLEANFILES = texinfo texinfo-* info*.info*
man_MANS = info.1 infokey.1 install-info.1 makeinfo.1 texindex.1 texi2dvi.1 \
info.5 texinfo.5
INSTALL_INFO = $(top_builddir)/$(native_tools)/util/install-info
TXI_XLATE = txi-cs.tex txi-de.tex txi-en.tex txi-es.tex txi-fr.tex \
txi-it.tex txi-nl.tex txi-no.tex txi-pl.tex txi-pt.tex txi-tr.tex
# Include our texinfo.tex, not Automake's.
EXTRA_DIST = epsf.tex pdfcolor.tex texinfo.tex \
fdl.texi \
$(man_MANS) $(TXI_XLATE)
texmf_texinfo = $(TEXMF)/tex/texinfo
texmf_dvips = $(TEXMF)/tex/generic/dvips
texmf_pdftex_misc = $(TEXMF)/pdftex/plain/misc
# The man pages depend on the --help strings and the version number.
@MAINTAINER_MODE_TRUE@common_mandeps = $(top_srcdir)/configure.ac
all: all-am
.SUFFIXES:
.SUFFIXES: .dvi .ps
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
texinfo: texinfo.txi $(srcdir)/version.texi
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
rm -rf $$backupdir && mkdir $$backupdir && \
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
done; \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ `test -f 'texinfo.txi' || echo '$(srcdir)/'`texinfo.txi; \
then \
rc=0; \
else \
rc=$$?; \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
texinfo.dvi: texinfo.txi $(srcdir)/version.texi
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) -o $@ `test -f 'texinfo.txi' || echo '$(srcdir)/'`texinfo.txi
texinfo.pdf: texinfo.txi $(srcdir)/version.texi
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2PDF) -o $@ `test -f 'texinfo.txi' || echo '$(srcdir)/'`texinfo.txi
texinfo.html: texinfo.txi $(srcdir)/version.texi
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $(@:.html=.htp) `test -f 'texinfo.txi' || echo '$(srcdir)/'`texinfo.txi; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
else \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti
$(srcdir)/stamp-vti: texinfo.txi $(top_srcdir)/configure
@(dir=.; test -f ./texinfo.txi || dir=$(srcdir); \
set `$(SHELL) $(srcdir)/mdate-sh $$dir/texinfo.txi`; \
echo "@set UPDATED $$1 $$2 $$3"; \
echo "@set UPDATED-MONTH $$2 $$3"; \
echo "@set EDITION $(VERSION)"; \
echo "@set VERSION $(VERSION)") > vti.tmp
@cmp -s vti.tmp $(srcdir)/version.texi \
|| (echo "Updating $(srcdir)/version.texi"; \
cp vti.tmp $(srcdir)/version.texi)
-@rm -f vti.tmp
@cp $(srcdir)/version.texi $@
mostlyclean-vti:
-rm -f vti.tmp
maintainer-clean-vti:
@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
info-stnd.info: info-stnd.texi $(srcdir)/version-stnd.texi
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
rm -rf $$backupdir && mkdir $$backupdir && \
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
done; \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ `test -f 'info-stnd.texi' || echo '$(srcdir)/'`info-stnd.texi; \
then \
rc=0; \
else \
rc=$$?; \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
info-stnd.dvi: info-stnd.texi $(srcdir)/version-stnd.texi
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) -o $@ `test -f 'info-stnd.texi' || echo '$(srcdir)/'`info-stnd.texi
info-stnd.pdf: info-stnd.texi $(srcdir)/version-stnd.texi
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2PDF) -o $@ `test -f 'info-stnd.texi' || echo '$(srcdir)/'`info-stnd.texi
info-stnd.html: info-stnd.texi $(srcdir)/version-stnd.texi
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $(@:.html=.htp) `test -f 'info-stnd.texi' || echo '$(srcdir)/'`info-stnd.texi; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
else \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
$(srcdir)/version-stnd.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-1
$(srcdir)/stamp-1: info-stnd.texi $(top_srcdir)/configure
@(dir=.; test -f ./info-stnd.texi || dir=$(srcdir); \
set `$(SHELL) $(srcdir)/mdate-sh $$dir/info-stnd.texi`; \
echo "@set UPDATED $$1 $$2 $$3"; \
echo "@set UPDATED-MONTH $$2 $$3"; \
echo "@set EDITION $(VERSION)"; \
echo "@set VERSION $(VERSION)") > 1.tmp
@cmp -s 1.tmp $(srcdir)/version-stnd.texi \
|| (echo "Updating $(srcdir)/version-stnd.texi"; \
cp 1.tmp $(srcdir)/version-stnd.texi)
-@rm -f 1.tmp
@cp $(srcdir)/version-stnd.texi $@
mostlyclean-1:
-rm -f 1.tmp
maintainer-clean-1:
@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-1 $(srcdir)/version-stnd.texi
info.info: info.texi $(info_TEXINFOS)
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
rm -rf $$backupdir && mkdir $$backupdir && \
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
done; \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ `test -f 'info.texi' || echo '$(srcdir)/'`info.texi; \
then \
rc=0; \
else \
rc=$$?; \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
info.dvi: info.texi $(info_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) -o $@ `test -f 'info.texi' || echo '$(srcdir)/'`info.texi
info.pdf: info.texi $(info_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2PDF) -o $@ `test -f 'info.texi' || echo '$(srcdir)/'`info.texi
info.html: info.texi $(info_TEXINFOS)
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $(@:.html=.htp) `test -f 'info.texi' || echo '$(srcdir)/'`info.texi; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
else \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
.dvi.ps:
$(DVIPS) -o $@ $<
uninstall-info-am:
$(PRE_UNINSTALL)
@if (install-info --version && \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
@list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
(if cd "$(DESTDIR)$(infodir)"; then \
echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \
rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
else :; fi); \
done
mostlyclean-aminfo:
-rm -rf texinfo.aux texinfo.cp texinfo.cps texinfo.fn texinfo.fns texinfo.ky \
texinfo.kys texinfo.log texinfo.op texinfo.pg texinfo.tmp \
texinfo.toc texinfo.tp texinfo.tps texinfo.vr texinfo.dvi \
texinfo.pdf texinfo.ps texinfo.html info-stnd.aux \
info-stnd.cp info-stnd.cps info-stnd.fn info-stnd.ky \
info-stnd.log info-stnd.pg info-stnd.pgs info-stnd.tmp \
info-stnd.toc info-stnd.tp info-stnd.tps info-stnd.vr \
info-stnd.dvi info-stnd.pdf info-stnd.ps info-stnd.html \
info.aux info.cp info.cps info.fn info.ky info.log info.pg \
info.pgs info.tmp info.toc info.tp info.tps info.vr info.dvi \
info.pdf info.ps info.html
maintainer-clean-aminfo:
@list='$(INFO_DEPS)'; for i in $$list; do \
i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
done
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
done
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
done
install-man5: $(man5_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man5dir)" || $(mkdir_p) "$(DESTDIR)$(man5dir)"
@list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.5*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
5*) ;; \
*) ext='5' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
done
uninstall-man5:
@$(NORMAL_UNINSTALL)
@list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.5*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
5*) ;; \
*) ext='5' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
done
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-info
check-am: all-am
check: check-am
all-am: Makefile $(INFO_DEPS) $(MANS)
installdirs:
for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
@INSTALL_WARNINGS_FALSE@install-data-local:
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am: $(DVIS)
html: html-am
html-am: $(HTMLS)
info: info-am
info-am: $(INFO_DEPS)
install-data-am: install-data-local install-info-am install-man
install-exec-am:
install-info: install-info-am
install-info-am: $(INFO_DEPS)
@$(NORMAL_INSTALL)
test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
list='$(INFO_DEPS)'; \
for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
esac; \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
$$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
if test -f $$ifile; then \
relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
$(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
else : ; fi; \
done; \
done
@$(POST_INSTALL)
@if (install-info --version && \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
done; \
else : ; fi
install-man: install-man1 install-man5
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-1 \
maintainer-clean-aminfo maintainer-clean-generic \
maintainer-clean-vti
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
mostlyclean-vti
pdf: pdf-am
pdf-am: $(PDFS)
ps: ps-am
ps-am: $(PSS)
uninstall-am: uninstall-info-am uninstall-man
uninstall-man: uninstall-man1 uninstall-man5
.PHONY: all all-am check check-am clean clean-generic dist-info \
distclean distclean-generic distdir dvi dvi-am html html-am \
info info-am install install-am install-data install-data-am \
install-data-local install-exec install-exec-am install-info \
install-info-am install-man install-man1 install-man5 \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-1 maintainer-clean-aminfo \
maintainer-clean-generic maintainer-clean-vti mostlyclean \
mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
mostlyclean-vti pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-info-am uninstall-man uninstall-man1 uninstall-man5
@INSTALL_WARNINGS_TRUE@install-data-local:
@INSTALL_WARNINGS_TRUE@ @echo
@INSTALL_WARNINGS_TRUE@ @echo "WARNING: If your texmf tree does not already contain"
@INSTALL_WARNINGS_TRUE@ @echo " up-to-date versions, you must install"
@INSTALL_WARNINGS_TRUE@ @echo " texinfo.tex and txi-??.tex manually,"
@INSTALL_WARNINGS_TRUE@ @echo " perhaps in TEXMF/tex/texinfo/,"
@INSTALL_WARNINGS_TRUE@ @echo " where TEXMF is a root of your TeX tree."
@INSTALL_WARNINGS_TRUE@ @echo " See doc/README for some considerations."
@INSTALL_WARNINGS_TRUE@ @echo " You can run make TEXMF=/your/texmf install-tex to do this."
@INSTALL_WARNINGS_TRUE@ @echo
@INSTALL_WARNINGS_TRUE@ @echo " You may also need to install epsf.tex and (if you"
@INSTALL_WARNINGS_TRUE@ @echo " use pdftex) pdfcolor.tex in TEXMF/tex/generic/dvips"
@INSTALL_WARNINGS_TRUE@ @echo " and TEXMF/pdftex/plain/misc/pdfcolor.tex respectively,"
@INSTALL_WARNINGS_TRUE@ @echo " if your TeX installation did not include them."
install-tex:
test -n "$(TEXMF)" || (echo "TEXMF must be set." >&2; exit 1)
$(mkinstalldirs) $(DESTDIR)$(texmf_texinfo) $(DESTDIR)$(texmf_dvips) $(DESTDIR)$(texmf_pdftex_misc)
$(INSTALL_DATA) $(srcdir)/texinfo.tex $(DESTDIR)$(texmf_texinfo)/texinfo.tex
$(INSTALL_DATA) $(srcdir)/epsf.tex $(DESTDIR)$(texmf_dvips)/epsf.tex
$(INSTALL_DATA) $(srcdir)/pdfcolor.tex $(DESTDIR)$(texmf_pdftex_misc)/pdfcolor.tex
for f in $(TXI_XLATE); do \
$(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(texmf_texinfo)/$$f; done
@MAINTAINER_MODE_TRUE@info.1: $(top_srcdir)/info/info.c $(common_mandeps)
@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="read Info documents" `basename $@ .1` >$@
@MAINTAINER_MODE_TRUE@infokey.1: $(top_srcdir)/info/infokey.c $(common_mandeps)
@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="compile customizations for Info" `basename $@ .1` >$@
@MAINTAINER_MODE_TRUE@install-info.1: $(top_srcdir)/util/install-info.c $(common_mandeps)
@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="update info/dir entries" `basename $@ .1` >$@
@MAINTAINER_MODE_TRUE@makeinfo.1: $(top_srcdir)/makeinfo/makeinfo.c $(common_mandeps)
@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="translate Texinfo documents" `basename $@ .1` >$@
@MAINTAINER_MODE_TRUE@texi2dvi.1: $(top_srcdir)/util/texi2dvi $(common_mandeps)
@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="print Texinfo documents" `basename $@ .1` >$@
@MAINTAINER_MODE_TRUE@texindex.1: $(top_srcdir)/util/texindex.c $(common_mandeps)
@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="sort Texinfo index files" `basename $@ .1` >$@
# Do not create info files for distribution.
dist-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:

44
external/gpl2/texinfo/dist/doc/README vendored Normal file
View File

@ -0,0 +1,44 @@
Id: README,v 1.4 2004/04/11 17:56:45 karl Exp
texinfo/doc/README
Copyright (C) 2002 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
This directory contains documentation on the Texinfo system and the TeX
sources needed to process Texinfo sources. We recommend using the
texi2dvi included in this distribution to run a Texinfo manual through
TeX to produce a DVI file.
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://tug.org/tds/), this will be the directory
TEXMF/tex/texinfo/ for texinfo.tex, TEXMF/tex/generic/dvips/ for epsf.tex,
and TEXMF/pdftex/plain/misc for pdfcolor.tex. If you use the default
installation paths, TEXMF will be /usr/local/share/texmf. On systems
with TeX preinstalled, as most GNU/Linux distributions offer, TEXMF
will often be something like /usr/share/texmf.
It is also possible to put these .tex files in a `local' place instead
of overwriting existing ones, but this is more complicated. See your TeX
documentation in general and the texmf.cnf file in particular for information.
If you add files to your TeX installations, not just replace existing
ones, you very likely have to update your ls-R file; do this with the
mktexlsr command. In older versions, this was named MakeTeXls-R.
You can get the latest texinfo.tex from
ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex (and all GNU mirrors)
ftp://tug.org/tex/texinfo.tex (and all CTAN mirrors)
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.

547
external/gpl2/texinfo/dist/doc/epsf.tex vendored Normal file
View File

@ -0,0 +1,547 @@
%%% ====================================================================
%%% 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\space
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

453
external/gpl2/texinfo/dist/doc/fdl.texi vendored Normal file
View File

@ -0,0 +1,453 @@
@c $NetBSD: fdl.texi,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
@node GNU Free Documentation License
@appendixsec GNU Free Documentation License
@cindex FDL, GNU Free Documentation License
@center Version 1.2, November 2002
@display
Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@end display
@enumerate 0
@item
PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document @dfn{free} in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of ``copyleft'', which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
@item
APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The ``Document'', below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as ``you''. You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
A ``Modified Version'' of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A ``Secondary Section'' is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject. (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The ``Invariant Sections'' are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The ``Cover Texts'' are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
A ``Transparent'' copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not ``Transparent'' is called ``Opaque''.
Examples of suitable formats for Transparent copies include plain
@sc{ascii} without markup, Texinfo input format, La@TeX{} input
format, @acronym{SGML} or @acronym{XML} using a publicly available
@acronym{DTD}, and standard-conforming simple @acronym{HTML},
PostScript or @acronym{PDF} designed for human modification. Examples
of transparent image formats include @acronym{PNG}, @acronym{XCF} and
@acronym{JPG}. Opaque formats include proprietary formats that can be
read and edited only by proprietary word processors, @acronym{SGML} or
@acronym{XML} for which the @acronym{DTD} and/or processing tools are
not generally available, and the machine-generated @acronym{HTML},
PostScript or @acronym{PDF} produced by some word processors for
output purposes only.
The ``Title Page'' means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, ``Title Page'' means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
A section ``Entitled XYZ'' means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as ``Acknowledgements'',
``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
of such a section when you modify the Document means that it remains a
section ``Entitled XYZ'' according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
@item
VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
@item
COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
@item
MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
@enumerate A
@item
Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document). You may use the same title as a previous version
if the original publisher of that version gives permission.
@item
List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
@item
State on the Title page the name of the publisher of the
Modified Version, as the publisher.
@item
Preserve all the copyright notices of the Document.
@item
Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
@item
Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
@item
Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
@item
Include an unaltered copy of this License.
@item
Preserve the section Entitled ``History'', Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section Entitled ``History'' in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
@item
Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on. These may be placed in the ``History'' section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
@item
For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
the Title of the section, and preserve in the section all the
substance and tone of each of the contributor acknowledgements and/or
dedications given therein.
@item
Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
@item
Delete any section Entitled ``Endorsements''. Such a section
may not be included in the Modified Version.
@item
Do not retitle any existing section to be Entitled ``Endorsements'' or
to conflict in title with any Invariant Section.
@item
Preserve any Warranty Disclaimers.
@end enumerate
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled ``Endorsements'', provided it contains
nothing but endorsements of your Modified Version by various
parties---for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
@item
COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled ``History''
in the various original documents, forming one section Entitled
``History''; likewise combine any sections Entitled ``Acknowledgements'',
and any sections Entitled ``Dedications''. You must delete all
sections Entitled ``Endorsements.''
@item
COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
@item
AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an ``aggregate'' if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
@item
TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled ``Acknowledgements'',
``Dedications'', or ``History'', the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
@item
TERMINATION
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License. Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
@item
FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
@uref{http://www.gnu.org/copyleft/}.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License ``or any later version'' applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.
@end enumerate
@page
@heading ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
@smallexample
@group
Copyright (C) @var{year} @var{your name}.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license is included in the section entitled ``GNU
Free Documentation License''.
@end group
@end smallexample
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the ``with...Texts.'' line with this:
@smallexample
@group
with the Invariant Sections being @var{list their titles}, with
the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
being @var{list}.
@end group
@end smallexample
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.
@c Local Variables:
@c ispell-local-pdict: "ispell-dict"
@c End:

File diff suppressed because it is too large Load Diff

91
external/gpl2/texinfo/dist/doc/info.1 vendored Normal file
View File

@ -0,0 +1,91 @@
.\" $NetBSD: info.1,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
.\"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
.TH INFO "1" "December 2004" "info 4.8" "User Commands"
.SH NAME
info \- read Info documents
.SH SYNOPSIS
.B info
[\fIOPTION\fR]... [\fIMENU-ITEM\fR...]
.SH DESCRIPTION
Read documentation in Info format.
.SH OPTIONS
.TP
\fB\-\-apropos\fR=\fISTRING\fR
look up STRING in all indices of all manuals.
.TP
\fB\-d\fR, \fB\-\-directory\fR=\fIDIR\fR
add DIR to INFOPATH.
.TP
\fB\-\-dribble\fR=\fIFILENAME\fR
remember user keystrokes in FILENAME.
.TP
\fB\-f\fR, \fB\-\-file\fR=\fIFILENAME\fR
specify Info file to visit.
.TP
\fB\-h\fR, \fB\-\-help\fR
display this help and exit.
.TP
\fB\-\-index\-search\fR=\fISTRING\fR
go to node pointed by index entry STRING.
.TP
\fB\-n\fR, \fB\-\-node\fR=\fINODENAME\fR
specify nodes in first visited Info file.
.TP
\fB\-o\fR, \fB\-\-output\fR=\fIFILENAME\fR
output selected nodes to FILENAME.
.TP
\fB\-R\fR, \fB\-\-raw\-escapes\fR
output "raw" ANSI escapes (default).
.TP
\fB\-\-no\-raw\-escapes\fR
output escapes as literal text.
.TP
\fB\-\-restore\fR=\fIFILENAME\fR
read initial keystrokes from FILENAME.
.TP
\fB\-O\fR, \fB\-\-show\-options\fR, \fB\-\-usage\fR
go to command\-line options node.
.TP
\fB\-\-subnodes\fR
recursively output menu items.
.TP
\fB\-w\fR, \fB\-\-where\fR, \fB\-\-location\fR
print physical location of Info file.
.TP
\fB\-\-vi\-keys\fR
use vi\-like and less\-like key bindings.
.TP
\fB\-\-version\fR
display version information and exit.
.PP
The first non\-option argument, if present, is the menu entry to start from;
it is searched for in all `dir' files along INFOPATH.
If it is not present, info merges all `dir' files and shows the result.
Any remaining arguments are treated as the names of menu
items relative to the initial node visited.
.SH EXAMPLES
.TP
info
show top\-level dir menu
.TP
info emacs
start at emacs node from top\-level dir
.TP
info emacs buffers
start at buffers node within emacs manual
.TP
info \fB\-\-show\-options\fR emacs
start at node with emacs' command line options
.TP
info \fB\-f\fR ./foo.info
show file ./foo.info, not searching dir
.SH "REPORTING BUGS"
Email bug reports to bug\-texinfo@gnu.org,
general questions and discussion to help\-texinfo@gnu.org.
Texinfo home page: http://www.gnu.org/software/texinfo/
.SH COPYRIGHT
Copyright \(co 2004 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.

64
external/gpl2/texinfo/dist/doc/info.5 vendored Normal file
View File

@ -0,0 +1,64 @@
.\" $NetBSD: info.5,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
.\"
.\" info(5)
.\" Id: info.5,v 1.2 2004/04/11 17:56:45 karl Exp
.\"
.\" Copyright (C) 1998 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.
.\"
.\" 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 Foundation.
.\"
.TH INFO 5 "GNU Info" "FSF"
.SH NAME
info \- readable online documentation
.SH DESCRIPTION
The Info file format is an easily-parsable representation for online
documents. It can be read by
.I emacs(1)
and
.I info(1)
among other programs.
.PP
Info files are usually created from
.I texinfo(5)
sources by
.IR makeinfo(1) ,
but can be created from scratch if so desired.
.PP
For a full description of the Texinfo language and associated tools,
please see the Texinfo manual (written in Texinfo itself). Most likely,
running this command from your shell:
.RS
.I info texinfo
.RE
or this key sequence from inside Emacs:
.RS
.I M-x info RET m texinfo RET
.RE
will get you there.
.SH AVAILABILITY
ftp://ftp.gnu.org/pub/gnu/texinfo-<version>.tar.gz
.br
or any GNU mirror site.
.SH "REPORTING BUGS"
Please send bug reports to bug-texinfo@gnu.org,
general questions and discussion to help-texinfo@gnu.org.
.SH "SEE ALSO"
info(1), install-info(1), makeinfo(1), texi2dvi(1),
.br
texindex(1).
.br
emacs(1), tex(1).
.br
texinfo(5).

1499
external/gpl2/texinfo/dist/doc/info.texi vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,43 @@
.\" $NetBSD: infokey.1,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
.\"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
.TH INFOKEY "1" "December 2004" "infokey 4.8" "User Commands"
.SH NAME
infokey \- compile customizations for Info
.SH SYNOPSIS
.B infokey
[\fIOPTION\fR]... [\fIINPUT-FILE\fR]
.SH DESCRIPTION
Compile infokey source file to infokey file. Reads INPUT\-FILE (default
$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.
.SH OPTIONS
.TP
\fB\-\-output\fR FILE
output to FILE instead of $HOME/.info
.TP
\fB\-\-help\fR
display this help and exit.
.TP
\fB\-\-version\fR
display version information and exit.
.SH "REPORTING BUGS"
Email bug reports to bug\-texinfo@gnu.org,
general questions and discussion to help\-texinfo@gnu.org.
Texinfo home page: http://www.gnu.org/software/texinfo/
.SH COPYRIGHT
Copyright \(co 2003 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
.SH "SEE ALSO"
The full documentation for
.B infokey
is maintained as a Texinfo manual. If the
.B info
and
.B infokey
programs are properly installed at your site, the command
.IP
.B info infokey
.PP
should give you access to the complete manual.

View File

@ -0,0 +1,80 @@
.\" $NetBSD: install-info.1,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
.\"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
.TH INSTALL-INFO "1" "December 2004" "install-info 4.8" "User Commands"
.SH NAME
install-info \- update info/dir entries
.SH SYNOPSIS
.B install-info
[\fIOPTION\fR]... [\fIINFO-FILE \fR[\fIDIR-FILE\fR]]
.SH DESCRIPTION
Install or delete dir entries from INFO\-FILE in the Info directory file
DIR\-FILE.
.SH OPTIONS
.TP
\fB\-\-delete\fR
delete existing entries for INFO\-FILE from DIR\-FILE;
don't insert any new entries.
.TP
\fB\-\-dir\-file\fR=\fINAME\fR
specify file name of Info directory file.
This is equivalent to using the DIR\-FILE argument.
.TP
\fB\-\-entry\fR=\fITEXT\fR
insert TEXT as an Info directory entry.
TEXT should have the form of an Info menu item line
plus zero or more extra lines starting with whitespace.
If you specify more than one entry, they are all added.
If you don't specify any entries, they are determined
from information in the Info file itself.
.TP
\fB\-\-help\fR
display this help and exit.
.TP
\fB\-\-info\-file\fR=\fIFILE\fR
specify Info file to install in the directory.
This is equivalent to using the INFO\-FILE argument.
.TP
\fB\-\-info\-dir\fR=\fIDIR\fR
same as \fB\-\-dir\-file\fR=\fIDIR\fR/dir.
.TP
\fB\-\-item\fR=\fITEXT\fR
same as \fB\-\-entry\fR TEXT.
An Info directory entry is actually a menu item.
.TP
\fB\-\-quiet\fR
suppress warnings.
.TP
\fB\-\-remove\fR
same as \fB\-\-delete\fR.
.TP
\fB\-\-section\fR=\fISEC\fR
put this file's entries in section SEC of the directory.
If you specify more than one section, all the entries
are added in each of the sections.
If you don't specify any sections, they are determined
from information in the Info file itself.
.TP
\fB\-\-version\fR
display version information and exit.
.SH "REPORTING BUGS"
Email bug reports to bug\-texinfo@gnu.org,
general questions and discussion to help\-texinfo@gnu.org.
Texinfo home page: http://www.gnu.org/software/texinfo/
.SH COPYRIGHT
Copyright \(co 2004 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
.SH "SEE ALSO"
The full documentation for
.B install-info
is maintained as a Texinfo manual. If the
.B info
and
.B install-info
programs are properly installed at your site, the command
.IP
.B info install-info
.PP
should give you access to the complete manual.

View File

@ -0,0 +1,207 @@
.\" $NetBSD: makeinfo.1,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
.\"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
.TH MAKEINFO "1" "December 2004" "makeinfo 4.8" "User Commands"
.SH NAME
makeinfo \- translate Texinfo documents
.SH SYNOPSIS
.B makeinfo
[\fIOPTION\fR]... \fITEXINFO-FILE\fR...
.SH DESCRIPTION
Translate Texinfo source documentation to various other formats, by default
Info files suitable for reading online with Emacs or standalone GNU Info.
.SS "General options:"
.TP
\fB\-\-error\-limit\fR=\fINUM\fR
quit after NUM errors (default 100).
.TP
\fB\-\-force\fR
preserve output even if errors.
.TP
\fB\-\-help\fR
display this help and exit.
.TP
\fB\-\-no\-validate\fR
suppress node cross\-reference validation.
.TP
\fB\-\-no\-warn\fR
suppress warnings (but not errors).
.TP
\fB\-\-reference\-limit\fR=\fINUM\fR
warn about at most NUM references (default 1000).
.TP
\fB\-v\fR, \fB\-\-verbose\fR
explain what is being done.
.TP
\fB\-\-version\fR
display version information and exit.
.SS "Output format selection (default is to produce Info):"
.TP
\fB\-\-docbook\fR
output Docbook XML rather than Info.
.TP
\fB\-\-html\fR
output HTML rather than Info.
.TP
\fB\-\-xml\fR
output Texinfo XML rather than Info.
.TP
\fB\-\-plaintext\fR
output plain text rather than Info.
.SS "General output options:"
.TP
\fB\-E\fR, \fB\-\-macro\-expand\fR FILE
output macro\-expanded source to FILE.
ignoring any @setfilename.
.TP
\fB\-\-no\-headers\fR
suppress node separators, Node: lines, and menus
from Info output (thus producing plain text)
or from HTML (thus producing shorter output);
also, write to standard output by default.
.TP
\fB\-\-no\-split\fR
suppress splitting of Info or HTML output,
generate only one output file.
.TP
\fB\-\-number\-sections\fR
output chapter and sectioning numbers.
.TP
\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR
output to FILE (directory if split HTML),
.SS "Options for Info and plain text:"
.TP
\fB\-\-enable\-encoding\fR
output accented and special characters in
Info output based on @documentencoding.
.TP
\fB\-\-fill\-column\fR=\fINUM\fR
break Info lines at NUM characters (default 72).
.TP
\fB\-\-footnote\-style\fR=\fISTYLE\fR
output footnotes in Info according to STYLE:
`separate' to put them in their own node;
`end' to put them at the end of the node
.IP
in which they are defined (default).
.TP
\fB\-\-paragraph\-indent\fR=\fIVAL\fR
indent Info paragraphs by VAL spaces (default 3).
If VAL is `none', do not indent; if VAL is
`asis', preserve existing indentation.
.TP
\fB\-\-split\-size\fR=\fINUM\fR
split Info files at size NUM (default 300000).
.SS "Options for HTML:"
.TP
\fB\-\-css\-include\fR=\fIFILE\fR
include FILE in HTML <style> output;
read stdin if FILE is \-.
.SS "Options for XML and Docbook:"
.TP
\fB\-\-output\-indent\fR=\fIVAL\fR
indent XML elements by VAL spaces (default 2).
If VAL is 0, ignorable whitespace is dropped.
.SS "Input file options:"
.TP
\fB\-\-commands\-in\-node\-names\fR
allow @ commands in node names.
.TP
\fB\-D\fR VAR
define the variable VAR, as with @set.
.TP
\fB\-I\fR DIR
append DIR to the @include search path.
.TP
\fB\-P\fR DIR
prepend DIR to the @include search path.
.TP
\fB\-U\fR VAR
undefine the variable VAR, as with @clear.
.SS "Conditional processing in input:"
.TP
\fB\-\-ifdocbook\fR
process @ifdocbook and @docbook even if
not generating Docbook.
.TP
\fB\-\-ifhtml\fR
process @ifhtml and @html even if not generating HTML.
.TP
\fB\-\-ifinfo\fR
process @ifinfo even if not generating Info.
.TP
\fB\-\-ifplaintext\fR
process @ifplaintext even if not generating plain text.
.TP
\fB\-\-iftex\fR
process @iftex and @tex; implies \fB\-\-no\-split\fR.
.TP
\fB\-\-ifxml\fR
process @ifxml and @xml.
.TP
\fB\-\-no\-ifdocbook\fR
do not process @ifdocbook and @docbook text.
.TP
\fB\-\-no\-ifhtml\fR
do not process @ifhtml and @html text.
.TP
\fB\-\-no\-ifinfo\fR
do not process @ifinfo text.
.TP
\fB\-\-no\-ifplaintext\fR
do not process @ifplaintext text.
.TP
\fB\-\-no\-iftex\fR
do not process @iftex and @tex text.
.TP
\fB\-\-no\-ifxml\fR
do not process @ifxml and @xml text.
.IP
Also, for the \fB\-\-no\-ifFORMAT\fR options, do process @ifnotFORMAT text.
.IP
The defaults for the @if... conditionals depend on the output format:
if generating HTML, \fB\-\-ifhtml\fR is on and the others are off;
if generating Info, \fB\-\-ifinfo\fR is on and the others are off;
if generating plain text, \fB\-\-ifplaintext\fR is on and the others are off;
if generating XML, \fB\-\-ifxml\fR is on and the others are off.
.SH EXAMPLES
.TP
makeinfo foo.texi
write Info to foo's @setfilename
.TP
makeinfo \fB\-\-html\fR foo.texi
write HTML to @setfilename
.TP
makeinfo \fB\-\-xml\fR foo.texi
write Texinfo XML to @setfilename
.TP
makeinfo \fB\-\-docbook\fR foo.texi
write DocBook XML to @setfilename
.TP
makeinfo \fB\-\-no\-headers\fR foo.texi
write plain text to standard output
.IP
makeinfo \fB\-\-html\fR \fB\-\-no\-headers\fR foo.texi write html without node lines, menus
makeinfo \fB\-\-number\-sections\fR foo.texi write Info with numbered sections
makeinfo \fB\-\-no\-split\fR foo.texi write one Info file however big
.SH "REPORTING BUGS"
Email bug reports to bug\-texinfo@gnu.org,
general questions and discussion to help\-texinfo@gnu.org.
Texinfo home page: http://www.gnu.org/software/texinfo/
.SH COPYRIGHT
Copyright \(co 2004 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
.SH "SEE ALSO"
The full documentation for
.B makeinfo
is maintained as a Texinfo manual. If the
.B info
and
.B makeinfo
programs are properly installed at your site, the command
.IP
.B info makeinfo
.PP
should give you access to the complete manual.

170
external/gpl2/texinfo/dist/doc/mdate-sh vendored Normal file
View File

@ -0,0 +1,170 @@
#!/bin/sh
# Get modification time of a file or directory and pretty-print it.
scriptversion=2004-12-08.12
# Copyright (C) 1995, 1996, 1997, 2003, 2004 Free Software Foundation, Inc.
# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 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.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
case $1 in
'')
echo "$0: No file. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: mdate-sh [--help] [--version] FILE
Pretty-print the modification time of FILE.
Report bugs to <bug-automake@gnu.org>.
EOF
exit 0
;;
-v | --v*)
echo "mdate-sh $scriptversion"
exit 0
;;
esac
# Prevent date giving response in another language.
LANG=C
export LANG
LC_ALL=C
export LC_ALL
LC_TIME=C
export LC_TIME
save_arg1="$1"
# Find out how to get the extended ls output of a file or directory.
if ls -L /dev/null 1>/dev/null 2>&1; then
ls_command='ls -L -l -d'
else
ls_command='ls -l -d'
fi
# A `ls -l' line looks as follows on OS/2.
# drwxrwx--- 0 Aug 11 2001 foo
# This differs from Unix, which adds ownership information.
# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
#
# To find the date, we split the line on spaces and iterate on words
# until we find a month. This cannot work with files whose owner is a
# user named `Jan', or `Feb', etc. However, it's unlikely that `/'
# will be owned by a user whose name is a month. So we first look at
# the extended ls output of the root directory to decide how many
# words should be skipped to get the date.
# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
set x`ls -l -d /`
# Find which argument is the month.
month=
command=
until test $month
do
shift
# Add another shift to the command.
command="$command shift;"
case $1 in
Jan) month=January; nummonth=1;;
Feb) month=February; nummonth=2;;
Mar) month=March; nummonth=3;;
Apr) month=April; nummonth=4;;
May) month=May; nummonth=5;;
Jun) month=June; nummonth=6;;
Jul) month=July; nummonth=7;;
Aug) month=August; nummonth=8;;
Sep) month=September; nummonth=9;;
Oct) month=October; nummonth=10;;
Nov) month=November; nummonth=11;;
Dec) month=December; nummonth=12;;
esac
done
# Get the extended ls output of the file or directory.
set x`eval "$ls_command \"\$save_arg1\""`
# Remove all preceding arguments
eval $command
# Get the month. Next argument is day, followed by the year or time.
case $1 in
Jan) month=January; nummonth=1;;
Feb) month=February; nummonth=2;;
Mar) month=March; nummonth=3;;
Apr) month=April; nummonth=4;;
May) month=May; nummonth=5;;
Jun) month=June; nummonth=6;;
Jul) month=July; nummonth=7;;
Aug) month=August; nummonth=8;;
Sep) month=September; nummonth=9;;
Oct) month=October; nummonth=10;;
Nov) month=November; nummonth=11;;
Dec) month=December; nummonth=12;;
esac
day=$2
# Here we have to deal with the problem that the ls output gives either
# the time of day or the year.
case $3 in
*:*) set `date`; eval year=\$$#
case $2 in
Jan) nummonthtod=1;;
Feb) nummonthtod=2;;
Mar) nummonthtod=3;;
Apr) nummonthtod=4;;
May) nummonthtod=5;;
Jun) nummonthtod=6;;
Jul) nummonthtod=7;;
Aug) nummonthtod=8;;
Sep) nummonthtod=9;;
Oct) nummonthtod=10;;
Nov) nummonthtod=11;;
Dec) nummonthtod=12;;
esac
# For the first six month of the year the time notation can also
# be used for files modified in the last year.
if (expr $nummonth \> $nummonthtod) > /dev/null;
then
year=`expr $year - 1`
fi;;
*) year=$3;;
esac
# The result.
echo $day $month $year
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

View File

@ -0,0 +1,158 @@
% Very simple macros to show how to use colors with pdftex
\def\cmykGreenYellow{0.15 0 0.69 0}
\def\cmykYellow{0 0 1 0}
\def\cmykGoldenrod{0 0.10 0.84 0}
\def\cmykDandelion{0 0.29 0.84 0}
\def\cmykApricot{0 0.32 0.52 0}
\def\cmykPeach{0 0.50 0.70 0}
\def\cmykMelon{0 0.46 0.50 0}
\def\cmykYellowOrange{0 0.42 1 0}
\def\cmykOrange{0 0.61 0.87 0}
\def\cmykBurntOrange{0 0.51 1 0}
\def\cmykBittersweet{0 0.75 1 0.24}
\def\cmykRedOrange{0 0.77 0.87 0}
\def\cmykMahogany{0 0.85 0.87 0.35}
\def\cmykMaroon{0 0.87 0.68 0.32}
\def\cmykBrickRed{0 0.89 0.94 0.28}
\def\cmykRed{0 1 1 0}
\def\cmykOrangeRed{0 1 0.50 0}
\def\cmykRubineRed{0 1 0.13 0}
\def\cmykWildStrawberry{0 0.96 0.39 0}
\def\cmykSalmon{0 0.53 0.38 0}
\def\cmykCarnationPink{0 0.63 0 0}
\def\cmykMagenta{0 1 0 0}
\def\cmykVioletRed{0 0.81 0 0}
\def\cmykRhodamine{0 0.82 0 0}
\def\cmykMulberry{0.34 0.90 0 0.02}
\def\cmykRedViolet{0.07 0.90 0 0.34}
\def\cmykFuchsia{0.47 0.91 0 0.08}
\def\cmykLavender{0 0.48 0 0}
\def\cmykThistle{0.12 0.59 0 0}
\def\cmykOrchid{0.32 0.64 0 0}
\def\cmykDarkOrchid{0.40 0.80 0.20 0}
\def\cmykPurple{0.45 0.86 0 0}
\def\cmykPlum{0.50 1 0 0}
\def\cmykViolet{0.79 0.88 0 0}
\def\cmykRoyalPurple{0.75 0.90 0 0}
\def\cmykBlueViolet{0.86 0.91 0 0.04}
\def\cmykPeriwinkle{0.57 0.55 0 0}
\def\cmykCadetBlue{0.62 0.57 0.23 0}
\def\cmykCornflowerBlue{0.65 0.13 0 0}
\def\cmykMidnightBlue{0.98 0.13 0 0.43}
\def\cmykNavyBlue{0.94 0.54 0 0}
\def\cmykRoyalBlue{1 0.50 0 0}
\def\cmykBlue{1 1 0 0}
\def\cmykCerulean{0.94 0.11 0 0}
\def\cmykCyan{1 0 0 0}
\def\cmykProcessBlue{0.96 0 0 0}
\def\cmykSkyBlue{0.62 0 0.12 0}
\def\cmykTurquoise{0.85 0 0.20 0}
\def\cmykTealBlue{0.86 0 0.34 0.02}
\def\cmykAquamarine{0.82 0 0.30 0}
\def\cmykBlueGreen{0.85 0 0.33 0}
\def\cmykEmerald{1 0 0.50 0}
\def\cmykJungleGreen{0.99 0 0.52 0}
\def\cmykSeaGreen{0.69 0 0.50 0}
\def\cmykGreen{1 0 1 0}
\def\cmykForestGreen{0.91 0 0.88 0.12}
\def\cmykPineGreen{0.92 0 0.59 0.25}
\def\cmykLimeGreen{0.50 0 1 0}
\def\cmykYellowGreen{0.44 0 0.74 0}
\def\cmykSpringGreen{0.26 0 0.76 0}
\def\cmykOliveGreen{0.64 0 0.95 0.40}
\def\cmykRawSienna{0 0.72 1 0.45}
\def\cmykSepia{0 0.83 1 0.70}
\def\cmykBrown{0 0.81 1 0.60}
\def\cmykTan{0.14 0.42 0.56 0}
\def\cmykGray{0 0 0 0.50}
\def\cmykBlack{0 0 0 1}
\def\cmykWhite{0 0 0 0}
\def\GreenYellow{\pdfsetcolor{\cmykGreenYellow}}
\def\Yellow{\pdfsetcolor{\cmykYellow}}
\def\Goldenrod{\pdfsetcolor{\cmykGoldenrod}}
\def\Dandelion{\pdfsetcolor{\cmykDandelion}}
\def\Apricot{\pdfsetcolor{\cmykApricot}}
\def\Peach{\pdfsetcolor{\cmykPeach}}
\def\Melon{\pdfsetcolor{\cmykMelon}}
\def\YellowOrange{\pdfsetcolor{\cmykYellowOrange}}
\def\Orange{\pdfsetcolor{\cmykOrange}}
\def\BurntOrange{\pdfsetcolor{\cmykBurntOrange}}
\def\Bittersweet{\pdfsetcolor{\cmykBittersweet}}
\def\RedOrange{\pdfsetcolor{\cmykRedOrange}}
\def\Mahogany{\pdfsetcolor{\cmykMahogany}}
\def\Maroon{\pdfsetcolor{\cmykMaroon}}
\def\BrickRed{\pdfsetcolor{\cmykBrickRed}}
\def\Red{\pdfsetcolor{\cmykRed}}
\def\OrangeRed{\pdfsetcolor{\cmykOrangeRed}}
\def\RubineRed{\pdfsetcolor{\cmykRubineRed}}
\def\WildStrawberry{\pdfsetcolor{\cmykWildStrawberry}}
\def\Salmon{\pdfsetcolor{\cmykSalmon}}
\def\CarnationPink{\pdfsetcolor{\cmykCarnationPink}}
\def\Magenta{\pdfsetcolor{\cmykMagenta}}
\def\VioletRed{\pdfsetcolor{\cmykVioletRed}}
\def\Rhodamine{\pdfsetcolor{\cmykRhodamine}}
\def\Mulberry{\pdfsetcolor{\cmykMulberry}}
\def\RedViolet{\pdfsetcolor{\cmykRedViolet}}
\def\Fuchsia{\pdfsetcolor{\cmykFuchsia}}
\def\Lavender{\pdfsetcolor{\cmykLavender}}
\def\Thistle{\pdfsetcolor{\cmykThistle}}
\def\Orchid{\pdfsetcolor{\cmykOrchid}}
\def\DarkOrchid{\pdfsetcolor{\cmykDarkOrchid}}
\def\Purple{\pdfsetcolor{\cmykPurple}}
\def\Plum{\pdfsetcolor{\cmykPlum}}
\def\Violet{\pdfsetcolor{\cmykViolet}}
\def\RoyalPurple{\pdfsetcolor{\cmykRoyalPurple}}
\def\BlueViolet{\pdfsetcolor{\cmykBlueViolet}}
\def\Periwinkle{\pdfsetcolor{\cmykPeriwinkle}}
\def\CadetBlue{\pdfsetcolor{\cmykCadetBlue}}
\def\CornflowerBlue{\pdfsetcolor{\cmykCornflowerBlue}}
\def\MidnightBlue{\pdfsetcolor{\cmykMidnightBlue}}
\def\NavyBlue{\pdfsetcolor{\cmykNavyBlue}}
\def\RoyalBlue{\pdfsetcolor{\cmykRoyalBlue}}
\def\Blue{\pdfsetcolor{\cmykBlue}}
\def\Cerulean{\pdfsetcolor{\cmykCerulean}}
\def\Cyan{\pdfsetcolor{\cmykCyan}}
\def\ProcessBlue{\pdfsetcolor{\cmykProcessBlue}}
\def\SkyBlue{\pdfsetcolor{\cmykSkyBlue}}
\def\Turquoise{\pdfsetcolor{\cmykTurquoise}}
\def\TealBlue{\pdfsetcolor{\cmykTealBlue}}
\def\Aquamarine{\pdfsetcolor{\cmykAquamarine}}
\def\BlueGreen{\pdfsetcolor{\cmykBlueGreen}}
\def\Emerald{\pdfsetcolor{\cmykEmerald}}
\def\JungleGreen{\pdfsetcolor{\cmykJungleGreen}}
\def\SeaGreen{\pdfsetcolor{\cmykSeaGreen}}
\def\Green{\pdfsetcolor{\cmykGreen}}
\def\ForestGreen{\pdfsetcolor{\cmykForestGreen}}
\def\PineGreen{\pdfsetcolor{\cmykPineGreen}}
\def\LimeGreen{\pdfsetcolor{\cmykLimeGreen}}
\def\YellowGreen{\pdfsetcolor{\cmykYellowGreen}}
\def\SpringGreen{\pdfsetcolor{\cmykSpringGreen}}
\def\OliveGreen{\pdfsetcolor{\cmykOliveGreen}}
\def\RawSienna{\pdfsetcolor{\cmykRawSienna}}
\def\Sepia{\pdfsetcolor{\cmykSepia}}
\def\Brown{\pdfsetcolor{\cmykBrown}}
\def\Tan{\pdfsetcolor{\cmykTan}}
\def\Gray{\pdfsetcolor{\cmykGray}}
\def\Black{\pdfsetcolor{\cmykBlack}}
\def\White{\pdfsetcolor{\cmykWhite}}
\def\pdfsetcolor#1{\pdfliteral{#1 k}}
\def\setcolor#1{\mark{#1}\pdfsetcolor{#1}}
\pdfoutput=1
\def\maincolor{\cmykBlack}
\pdfsetcolor{\maincolor}
\def\makefootline{
\baselineskip24pt
\line{\pdfsetcolor{\maincolor}\the\footline}}
\def\makeheadline{%
\edef\M{\topmark}
\ifx\M\empty\let\M=\maincolor\fi
\vbox to 0pt{\vskip-22.5pt
\line{\vbox to8.5pt{}%
\pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\M}}\vss}%
\nointerlineskip}

View File

@ -0,0 +1,4 @@
@set UPDATED 14 December 2004
@set UPDATED-MONTH December 2004
@set EDITION 4.8
@set VERSION 4.8

View File

@ -0,0 +1,4 @@
@set UPDATED 29 December 2004
@set UPDATED-MONTH December 2004
@set EDITION 4.8
@set VERSION 4.8

View File

@ -0,0 +1,97 @@
.\" $NetBSD: texi2dvi.1,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
.\"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
.TH TEXI2DVI "1" "December 2004" "texi2dvi 1.34" "User Commands"
.SH NAME
texi2dvi \- print Texinfo documents
.SH SYNOPSIS
.B texi2dvi
[\fIOPTION\fR]... \fIFILE\fR...
.SH DESCRIPTION
Run each Texinfo or LaTeX FILE through TeX in turn until all
cross\-references are resolved, building all indices. The directory
containing each FILE is searched for included files. The suffix of FILE
is used to determine its language (LaTeX or Texinfo).
.PP
Makeinfo is used to perform Texinfo macro expansion before running TeX
when needed.
.SS "Operation modes:"
.TP
\fB\-b\fR, \fB\-\-batch\fR
no interaction
.TP
\fB\-c\fR, \fB\-\-clean\fR
remove all auxiliary files
.TP
\fB\-D\fR, \fB\-\-debug\fR
turn on shell debugging (set \fB\-x\fR)
.TP
\fB\-h\fR, \fB\-\-help\fR
display this help and exit successfully
.TP
\fB\-o\fR, \fB\-\-output\fR=\fIOFILE\fR
leave output in OFILE (implies \fB\-\-clean\fR);
Only one input FILE may be specified in this case
.TP
\fB\-q\fR, \fB\-\-quiet\fR
no output unless errors (implies \fB\-\-batch\fR)
.TP
\fB\-s\fR, \fB\-\-silent\fR
same as \fB\-\-quiet\fR
.TP
\fB\-v\fR, \fB\-\-version\fR
display version information and exit successfully
.TP
\fB\-V\fR, \fB\-\-verbose\fR
report on what is done
.SS "TeX tuning:"
.TP
\-@
use @input instead of \einput; for preloaded Texinfo
.TP
\fB\-e\fR, \fB\-E\fR, \fB\-\-expand\fR
force macro expansion using makeinfo
.TP
\fB\-I\fR DIR
search DIR for Texinfo files
.TP
\fB\-l\fR, \fB\-\-language\fR=\fILANG\fR
specify the LANG of FILE (LaTeX or Texinfo)
.TP
\fB\-p\fR, \fB\-\-pdf\fR
use pdftex or pdflatex for processing
.TP
\fB\-r\fR, \fB\-\-recode\fR
call recode before TeX to translate input characters
.TP
\fB\-t\fR, \fB\-\-command\fR=\fICMD\fR
insert CMD in copy of input file
.TP
or \fB\-\-texinfo\fR=\fICMD\fR
multiple values accumulate
.PP
The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
TEX (or PDFTEX), TEXINDEX, and THUMBPDF environment variables are used
to run those commands, if they are set. Any CMD strings are added
after @setfilename for Texinfo input, in the first line for LaTeX input.
.SH "REPORTING BUGS"
Email bug reports to <bug\-texinfo@gnu.org>,
general questions and discussion to <help\-texinfo@gnu.org>.
Texinfo home page: http://www.gnu.org/software/texinfo/
.SH COPYRIGHT
Copyright \(co 2004 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
.SH "SEE ALSO"
The full documentation for
.B texi2dvi
is maintained as a Texinfo manual. If the
.B info
and
.B texi2dvi
programs are properly installed at your site, the command
.IP
.B info texi2dvi
.PP
should give you access to the complete manual.

View File

@ -0,0 +1,49 @@
.\" $NetBSD: texindex.1,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
.\"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
.TH TEXINDEX "1" "December 2004" "texindex 4.8" "User Commands"
.SH NAME
texindex \- sort Texinfo index files
.SH SYNOPSIS
.B texindex
[\fIOPTION\fR]... \fIFILE\fR...
.SH DESCRIPTION
Generate a sorted index for each TeX output FILE.
Usually FILE... is specified as `foo.??' for a document `foo.texi'.
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
display this help and exit
.TP
\fB\-k\fR, \fB\-\-keep\fR
keep temporary files around after processing
.TP
\fB\-\-no\-keep\fR
do not keep temporary files around after processing (default)
.TP
\fB\-o\fR, \fB\-\-output\fR FILE
send output to FILE
.TP
\fB\-\-version\fR
display version information and exit
.SH "REPORTING BUGS"
Email bug reports to bug\-texinfo@gnu.org,
general questions and discussion to help\-texinfo@gnu.org.
Texinfo home page: http://www.gnu.org/software/texinfo/
.SH COPYRIGHT
Copyright \(co 2004 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
.SH "SEE ALSO"
The full documentation for
.B texindex
is maintained as a Texinfo manual. If the
.B info
and
.B texindex
programs are properly installed at your site, the command
.IP
.B info texindex
.PP
should give you access to the complete manual.

View File

@ -0,0 +1,53 @@
.\" $NetBSD: texinfo.5,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
.\"
.\" texinfo(5)
.\" Id: texinfo.5,v 1.2 2004/04/11 17:56:45 karl Exp
.\"
.\" Copyright (C) 1998, 1999, 2002 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.
.\"
.\" 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 Foundation.
.\"
.TH TEXINFO 5 "GNU Texinfo" "FSF"
.SH NAME
texinfo \- software documentation system
.SH DESCRIPTION
Texinfo is a documentation system that uses a single source file to
produce both online information and printed output. It is primarily
designed for writing software manuals.
.PP
For a full description of the Texinfo language and associated tools,
please see the Texinfo manual (written in Texinfo itself). Most likely,
running this command from your shell:
.RS
.I info texinfo
.RE
or this key sequence from inside Emacs:
.RS
.I M-x info RET m texinfo RET
.RE
will get you there.
.SH AVAILABILITY
ftp://ftp.gnu.org/gnu/texinfo/
.br
or any GNU mirror site.
.SH "REPORTING BUGS"
Please send bug reports to bug-texinfo@gnu.org,
general questions and discussion to help-texinfo@gnu.org.
.SH "SEE ALSO"
info(1), install-info(1), makeinfo(1), texi2dvi(1), texindex(1).
.br
emacs(1), tex(1).
.br
info(5).

7086
external/gpl2/texinfo/dist/doc/texinfo.tex vendored Normal file

File diff suppressed because it is too large Load Diff

20513
external/gpl2/texinfo/dist/doc/texinfo.txi vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,74 @@
% Id: txi-cs.tex,v 1.3 2004/04/11 17:56:45 karl Exp
% Czech translation for texinfo.tex.
%
% Copyright (C) 1999, 2000 Free Software Foundation.
%
% Authors:
% Vladimir Michl <Vladimir.Michl@mujweb.cz>
% Stepan Kasal <kasal@ucw.cz>
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
%
\gdef\putwordAppendix{Pøílohy}
\gdef\putwordChapter{Kapitola}
\gdef\putwordfile{soubor}
\gdef\putwordin{v~knize}
\gdef\putwordIndexIsEmpty{(Rejstøík je prázdný.)}
\gdef\putwordIndexNonexistent{(Rejstøík neexistuje.)}
\gdef\putwordInfo{Info}
\gdef\putwordInstanceVariableof{Promìnná pro instance tøídy}
\gdef\putwordMethodon{Metoda tøídy}
\gdef\putwordNoTitle{Bez nadpisu}
\gdef\putwordof{tøídy}
\global\let\putwordon\putwordof
\gdef\putwordpage{stránka}
\gdef\putwordsection{oddíl}
\gdef\putwordSection{Oddíl}
\gdef\putwordsee{viz}
\gdef\putwordSee{Viz}
\gdef\putwordShortTOC{Struèný obsah}
\gdef\putwordTOC{Obsah}
%
\gdef\putwordMJan{ledna}
\gdef\putwordMFeb{února}
\gdef\putwordMMar{bøezna}
\gdef\putwordMApr{dubna}
\gdef\putwordMMai{kvìtna}
\gdef\putwordMJun{èervna}
\gdef\putwordMJul{èervence}
\gdef\putwordMAug{srpna}
\gdef\putwordMSep{záøí}
\gdef\putwordMOct{øíjna}
\gdef\putwordMNov{listopadu}
\gdef\putwordMDec{prosince}
%
\gdef\putwordDefmac{Makro}
\gdef\putwordDefspec{Speciální forma}
\gdef\putwordDefvar{Promìnná}
\gdef\putwordDefopt{Volby}
\gdef\putwordDeffunc{Funkce}
%
% Redefine \today to produce Czech
% preferred dates such as 28. januar 1999.
%
\gdef\today{%
\number\day.\nobreak\space
\ifcase\month
\or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
\or\putwordMMai\or\putwordMJun\or\putwordMJul\or\putwordMAug
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\penalty3000\relax\space\number\year}
%

View File

@ -0,0 +1,79 @@
% txi-de.tex -- adaptation to German for texinfo.tex.
% Id: txi-de.tex,v 1.3 2004/04/11 17:56:45 karl Exp
%
% Copyright (C) 1999 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 Karl Heinz Marbaise, 18. January 1999, <kama@hippo.fido.de>
%%
%% german translation of the used words.
%% Don't use checking because if it is our turn they have
%% been defined.
\gdef\putwordAppendix{Anhang}
\gdef\putwordChapter{Kapitel}
\gdef\putwordfile{Datei}
\gdef\putwordin{in}
\gdef\putwordInfo{Info}
\gdef\putwordMethodon{Methode von}
\gdef\putwordon{auf}
\gdef\putwordof{von}
\gdef\putwordpage{Seite}
\gdef\putwordsection{Abschnitt}
\gdef\putwordSection{Abschnitt}
\gdef\putwordsee{siehe}
\gdef\putwordSee{Siehe}
\gdef\putwordShortTOC{Kurzverzeichnis}
\gdef\putwordTOC{Inhaltsverzeichnis}
%%
\gdef\putwordNoTitle{Kein Titel}
%%
%% New defintion for the output of months.
\gdef\putwordMJan{Januar}
\gdef\putwordMFeb{Februar}
\gdef\putwordMMar{M\"arz}
\gdef\putwordMApr{April}
\gdef\putwordMMai{Mai}
\gdef\putwordMJun{Juni}
\gdef\putwordMJul{Juli}
\gdef\putwordMAug{August}
\gdef\putwordMSep{September}
\gdef\putwordMOct{Oktober}
\gdef\putwordMNov{November}
\gdef\putwordMDec{Dezember}
%%
%% some hyphenation for german language. Might be changed.
\hyphenation{An-hang}
%%\hyphenation{mini-buf-fer mini-buf-fers}
%%\hyphenation{eshell}
%%\hyphenation{white-space}
%%
%% Index handling should also work correct in german
\gdef\putwordIndexNonexistent{(Index ist nicht vorhanden)}
\gdef\putwordIndexIsEmpty{(Der Index ist leer)}
%%
%% \defmac
\gdef\putwordDefmac{Makro}
%% \defspec
\gdef\putwordDefspec{Spezial Form}
%% \defivar
\gdef\putwordDefivar{exemplar Variable}
%% \defvar leave unchanged because no difference in
%% writing but in phonectics.
\gdef\putwordDefvar{Variable}
%% \defopt
\gdef\putwordDefopt{Benutzer Option}
%% \deffun
\gdef\putwordDeffunc{Funktion}

View File

@ -0,0 +1,69 @@
% English non-translation for texinfo.tex. This is read when a source
% document says @documentlanguage en (which might happen after another
% @documentlanguage). The actual values are the same as defaults.
% Id: txi-en.tex,v 1.3 2004/04/11 17:56:45 karl Exp
%
% Copyright (C) 1999 Free Software Foundation.
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\gdef\putwordAppendix{Appendix}
\gdef\putwordChapter{Chapter}
\gdef\putwordfile{file}
\gdef\putwordin{in}
\gdef\putwordIndexIsEmpty{(Index is empty)}
\gdef\putwordIndexNonexistent{(Index is nonexistent)}
\gdef\putwordInfo{Info}
\gdef\putwordInstanceVariableof{Instance Variable of}
\gdef\putwordMethodon{Method on}
\gdef\putwordNoTitle{No Title}
\gdef\putwordof{of}
\gdef\putwordon{on}
\gdef\putwordpage{page}
\gdef\putwordsection{section}
\gdef\putwordSection{Section}
\gdef\putwordsee{see}
\gdef\putwordSee{See}
\gdef\putwordShortTOC{Short Contents}
\gdef\putwordTOC{Table of Contents}
%
\gdef\putwordMJan{January}
\gdef\putwordMFeb{February}
\gdef\putwordMMar{March}
\gdef\putwordMApr{April}
\gdef\putwordMMay{May}
\gdef\putwordMJun{June}
\gdef\putwordMJul{July}
\gdef\putwordMAug{August}
\gdef\putwordMSep{September}
\gdef\putwordMOct{October}
\gdef\putwordMNov{November}
\gdef\putwordMDec{December}
%
\gdef\putwordDefmac{Macro}
\gdef\putwordDefspec{Special Form}
\gdef\putwordDefvar{Variable}
\gdef\putwordDefopt{User Option}
\gdef\putwordDeffunc{Function}
% Produces Day Month Year style of output.
\def\today{%
\number\day\space
\ifcase\month
\or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
\or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\space\number\year}

View File

@ -0,0 +1,58 @@
% txi-es.tex -- TeX macros to handle Spanish language documents.
%
% Copyright (C) 1999 by Adrian Perez Jorge
%
% This txi-es.tex file is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
% published by the Free Software Foundation; either version 2, or (at
% your option) any later version.
%
% This txi-es.tex file is distributed in the hope that it will be
% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% General Public License for more details.
%
%
% Set up fixed words for Spanish.
%
\gdef\putwordAppendix{Ap\'endice}
\gdef\putwordChapter{Cap\'{\char16{}}tulo}
\gdef\putwordfile{archivo}
\gdef\putwordIndexIsEmpty{(El \'Indice est\'a vac\'{\char16{}}o)}
\gdef\putwordIndexNonexistent{(No existe el \'Indice)}
\gdef\putwordInfo{Info}
\gdef\putwordMethodon{M\'etodo de}
\gdef\putwordNoTitle{Sin T\'{\char{16}}tulo}
\gdef\putwordof{de}
\gdef\putwordon{de}
\gdef\putwordpage{p\'agina}
\gdef\putwordsection{secci\'on}
\gdef\putwordSection{Secci\'on}
\gdef\putwordsee{v\'ease}
\gdef\putwordSee{V\'ease}
\gdef\putwordShortTOC{Resumen del Contenido}
\gdef\putwordTOC{\'Indice General}
%
\gdef\putwordMJan{enero}
\gdef\putwordMFeb{febrero}
\gdef\putwordMMar{marzo}
\gdef\putwordMApr{abril}
\gdef\putwordMMay{mayo}
\gdef\putwordMJun{junio}
\gdef\putwordMJul{julio}
\gdef\putwordMAug{agosto}
\gdef\putwordMSep{septiembre}
\gdef\putwordMOct{octubre}
\gdef\putwordMNov{noviembre}
\gdef\putwordMDec{diciembre}
%
\gdef\putwordDefmac{Macro}
\gdef\putwordDefspec{Forma Especial}
\gdef\putwordDefivar{Variable de Instancia}
\gdef\putwordDefvar{Variable}
\gdef\putwordDefopt{Opci\'on de Usuario}
\gdef\putwordDeffunc{Funci\'on}
\endinput

View File

@ -0,0 +1,73 @@
% txi-fr.tex -- TeX macros to handle French language for texinfo.tex documents.
% Id: txi-fr.tex,v 1.3 2004/04/11 17:56:45 karl Exp
%
% Copyright (C) 1999 Free Software Foundation.
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
% Set up fixed words for French.
% Translated by Laurent Bourbeau <bourbeau@progiciels-bpi.ca>
% Translation date: le 10 décembre 1999.
% Transmitted to: Karl Berry <karl@cs.umb.edu>
\gdef\putwordAppendix{Annexe}
\gdef\putwordChapter{Chapitre}
\gdef\putwordfile{fichier}
\gdef\putwordin{dans}
\gdef\putwordIndexIsEmpty{(Index est vide)}
\gdef\putwordIndexNonexistent{(Index n'existe pas)}
\gdef\putwordInfo{Info}
\gdef\putwordInstanceVariableof{Variable d'instance de}
\gdef\putwordMethodon{M\'ethode sur}
\gdef\putwordNoTitle{Sans Titre}
\gdef\putwordof{de}
\gdef\putwordon{sur}
\gdef\putwordpage{page}
\gdef\putwordsection{section}
\gdef\putwordSection{Section}
\gdef\putwordsee{voir}
\gdef\putwordSee{Voir}
\gdef\putwordShortTOC{Sommaire}
\gdef\putwordTOC{Table des mati\`eres}
%
\gdef\putwordMJan{janvier}
\gdef\putwordMFeb{f\'evrier}
\gdef\putwordMMar{mars}
\gdef\putwordMApr{avril}
\gdef\putwordMMay{mai}
\gdef\putwordMJun{juin}
\gdef\putwordMJul{juillet}
\gdef\putwordMAug{ao\^ut}
\gdef\putwordMSep{septembre}
\gdef\putwordMOct{octobre}
\gdef\putwordMNov{novembre}
\gdef\putwordMDec{d\'ecembre}
%
\gdef\putwordDefmac{Macro}
\gdef\putwordDefspec{Forme Sp\'eciale}
\gdef\putwordDefvar{Variable}
\gdef\putwordDefopt{Option de l'usager}
\gdef\putwordDeffunc{Fonction}
% Produces Day Month Year style of output.
% French datation - for instance: 10 janvier 2000.
\def\today{%
\number\day\space
\ifcase\month
\or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
\or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\space\number\year}

View File

@ -0,0 +1,69 @@
% English non-translation for texinfo.tex. This is read when a source
% document says @documentlanguage en (which might happen after another
% @documentlanguage). The actual values are the same as defaults.
% Id: txi-it.tex,v 1.3 2004/04/11 17:56:45 karl Exp
%
% Copyright (C) 1999 Free Software Foundation.
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\gdef\putwordAppendix{Appendice}
\gdef\putwordChapter{Capitolo}
\gdef\putwordfile{file}
\gdef\putwordin{in}
\gdef\putwordIndexIsEmpty{(L'indice \'e vuoto)}
\gdef\putwordIndexNonexistent{(L'indice non esiste)}
\gdef\putwordInfo{Info}
\gdef\putwordInstanceVariableof{Variabile di istanza di}
\gdef\putwordMethodon{Metodo di}
\gdef\putwordNoTitle{Nessun titolo}
\gdef\putwordof{di}
\gdef\putwordon{su}
\gdef\putwordpage{pagina}
\gdef\putwordsection{sezione}
\gdef\putwordSection{Sezione}
\gdef\putwordsee{vedi}
\gdef\putwordSee{Vedi}
\gdef\putwordShortTOC{Sommario abbreviato}
\gdef\putwordTOC{Sommario}
%
\gdef\putwordMJan{Gennaio}
\gdef\putwordMFeb{Febbraio}
\gdef\putwordMMar{Marzo}
\gdef\putwordMApr{Aprile}
\gdef\putwordMMay{Maggio}
\gdef\putwordMJun{Giugno}
\gdef\putwordMJul{Luglio}
\gdef\putwordMAug{Agosto}
\gdef\putwordMSep{Settembre}
\gdef\putwordMOct{Ottobre}
\gdef\putwordMNov{Novembre}
\gdef\putwordMDec{Dicembre}
%
\gdef\putwordDefmac{Macro}
\gdef\putwordDefspec{Forma speciale}
\gdef\putwordDefvar{Variabile}
\gdef\putwordDefopt{Opzione}
\gdef\putwordDeffunc{Funzione}
% Produces Day Month Year style of output.
\def\today{%
\number\day\space
\ifcase\month
\or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
\or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\space\number\year}

View File

@ -0,0 +1,68 @@
% Dutch translation for texinfo.tex.
% Id: txi-nl.tex,v 1.3 2004/04/11 17:56:45 karl Exp
%
% Copyright (C) 1999 Free Software Foundation.
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
% Set up fixed words if not already set.
\gdef\putwordAppendix{Appendix}
\gdef\putwordChapter{Hoofdstuk}
\gdef\putwordfile{bestand}
\gdef\putwordin{in}
\gdef\putwordIndexIsEmpty{(Index is leeg)}
\gdef\putwordIndexNonexistent{(Index bestaat niet)}
\gdef\putwordInfo{Info}
\gdef\putwordInstanceVariableof{Instantie Variabele van}
\gdef\putwordMethodon{Methode van}
\gdef\putwordNoTitle{Geen titel}
\gdef\putwordof{van}
\gdef\putwordon{op}
\gdef\putwordpage{pagina}
\gdef\putwordsection{sectie}
\gdef\putwordSection{Sectie}
\gdef\putwordsee{zie}
\gdef\putwordSee{Zie}
\gdef\putwordShortTOC{Korte inhoudsopgave}
\gdef\putwordTOC{Inhoudsopgave}
%
\gdef\putwordMJan{Januari}
\gdef\putwordMFeb{Februari}
\gdef\putwordMMar{Maart}
\gdef\putwordMApr{April}
\gdef\putwordMMay{Mei}
\gdef\putwordMJun{Juni}
\gdef\putwordMJul{Juli}
\gdef\putwordMAug{Augustus}
\gdef\putwordMSep{September}
\gdef\putwordMOct{Oktober}
\gdef\putwordMNov{November}
\gdef\putwordMDec{December}
%
\gdef\putwordDefmac{Macro}
\gdef\putwordDefspec{Speciale Vorm}
\gdef\putwordDefvar{Variabele}
\gdef\putwordDefopt{Gebruikers optie}
\gdef\putwordDeffunc{Functie}
% Produces Day Month Year style of output.
\def\today{%
\number\day\space
\ifcase\month
\or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
\or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\space\number\year}

View File

@ -0,0 +1,69 @@
% Norwegian translation for texinfo.tex (1999-10-29, GNU Texinfo 4.0).
% Enables the use of words like Kapittel instead of Chapter, etc.
%
% Copyright (C) 1999 Trond Endrest=F8l <endrestol@hotmail.com>
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place - Suite 330, Boston,
% MA 02111-1307, USA.
%
\gdef\putwordAppendix{Vedlegg}
\gdef\putwordChapter{Kapittel}
\gdef\putwordfile{fil}
\gdef\putwordIndexIsEmpty{(Indeks er tom)}
\gdef\putwordIndexNonexistent{(Indeks eksisterer ikke)}
\gdef\putwordInfo{Info}
\gdef\putwordMethodon{Metode p\aa}
\gdef\putwordNoTitle{Ingen tittel}
\gdef\putwordof{av}
\gdef\putwordon{p\aa}
\gdef\putwordpage{side}
\gdef\putwordsection{avsnitt}
\gdef\putwordSection{Avsnitt}
\gdef\putwordsee{se}
\gdef\putwordSee{Se}
\gdef\putwordShortTOC{Kort innholdsfortegnelse}
\gdef\putwordTOC{Innholdsfortegnelse}
%
\gdef\putwordMJan{januar}
\gdef\putwordMFeb{februar}
\gdef\putwordMMar{mars}
\gdef\putwordMApr{april}
\gdef\putwordMMay{mai}
\gdef\putwordMJun{juni}
\gdef\putwordMJul{juli}
\gdef\putwordMAug{august}
\gdef\putwordMSep{september}
\gdef\putwordMOct{oktober}
\gdef\putwordMNov{november}
\gdef\putwordMDec{desember}
%
\gdef\putwordDefmac{Makro}
\gdef\putwordDefspec{Spesiell form}
\gdef\putwordDefivar{Forekomstvariabel}
\gdef\putwordDefvar{Variabel}
\gdef\putwordDefopt{Brukervalg}
\gdef\putwordDeffunc{Funksjon}
%
% Redefine \today to produce Norwegian
% preferred dates such as 28. januar 1999.
%
\gdef\today{%
\number\day.\space
\ifcase\month
\or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
\or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\space\number\year}

View File

@ -0,0 +1,73 @@
% txi-pl.tex -- adaptation to Polish for texinfo.tex.
% Id: txi-pl.tex,v 1.3 2004/04/11 17:56:45 karl Exp
%
% Copyright (C) 2003 Free Software Foundation.
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
%
% Written by Wojciech Polak <polak@gnu.org> on 29-03-2003.
% Modified by Staszek Wawrykiewicz <staw@gust.org.pl> on 01-04-2003.
%
\prefixing
\gdef\putwordAppendix{Suplement}
\gdef\putwordChapter{Rozdzia/l}
\gdef\putwordfile{plik}
\gdef\putwordin{w}
\gdef\putwordIndexIsEmpty{(Skorowidz jest pusty)}
\gdef\putwordIndexNonexistent{(Brak skorowidza)}
\gdef\putwordInfo{Info}
\gdef\putwordInstanceVariableof{Przyk/ladowa zmienna}
\gdef\putwordMethodon{Metoda}
\gdef\putwordNoTitle{Brak tytu/lu}
\gdef\putwordof{z}
\gdef\putwordon{na}
\gdef\putwordpage{strona}
\gdef\putwordsection{cz/e/s/c}
\gdef\putwordSection{Cz/e/s/c}
\gdef\putwordsee{zobacz}
\gdef\putwordSee{Zobacz}
\gdef\putwordShortTOC{Kr/otka zawarto/s/c}
\gdef\putwordTOC{Spis tre/sci}
%
\gdef\putwordMJan{stycznia}
\gdef\putwordMFeb{lutego}
\gdef\putwordMMar{marca}
\gdef\putwordMApr{kwietnia}
\gdef\putwordMMay{maja}
\gdef\putwordMJun{czerwca}
\gdef\putwordMJul{lipca}
\gdef\putwordMAug{sierpnia}
\gdef\putwordMSep{wrze/snia}
\gdef\putwordMOct{pa/xdziernika}
\gdef\putwordMNov{listopada}
\gdef\putwordMDec{grudnia}
%
\gdef\putwordDefmac{Makro}
\gdef\putwordDefspec{Specjalna forma}
\gdef\putwordDefvar{Zmienna}
\gdef\putwordDefopt{Opcja u/zytkownika}
\gdef\putwordDeffunc{Funkcja}
\nonprefixing
%
% Produces Day Month Year style of output.
%
\def\today{%
\number\day\space
\ifcase\month
\or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
\or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\space\number\year}

View File

@ -0,0 +1,69 @@
% txi-pt.tex -- adaptation to Portuguese for texinfo.tex.
%
% Copyright (C) 1999 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 Lalo Martins <lalo@webcom.com> at 05 August 1999
%%
%% Portuguese translation of the used words.
\gdef\putwordAppendix{Ap\^endice}
\gdef\putwordChapter{Cap\'\ptexi tulo}
\gdef\putwordfile{Data}
\gdef\putwordin{em}
\gdef\putwordInfo{Info}
\gdef\putwordMethodon{M\'etodo de}
\gdef\putwordon{em}
\gdef\putwordof{de}
\gdef\putwordpage{P\'agina}
\gdef\putwordsection{se\,c\~ao}
\gdef\putwordSection{Se\,c\~ao}
\gdef\putwordsee{veja}
\gdef\putwordSee{Veja}
\gdef\putwordShortTOC{Breve Sum\'ario}
\gdef\putwordTOC{Sum\'ario}
%%
\gdef\putwordNoTitle{Sem T\'\ptexi tulo}
%%
%% New defintion for the output of months.
\gdef\putwordMJan{Janeiro}
\gdef\putwordMFeb{Fevereiro}
\gdef\putwordMMar{Mar\,co}
\gdef\putwordMApr{Abril}
\gdef\putwordMMai{Maio}
\gdef\putwordMJun{Junho}
\gdef\putwordMJul{Julho}
\gdef\putwordMAug{Agosto}
\gdef\putwordMSep{Setembro}
\gdef\putwordMOct{Outubro}
\gdef\putwordMNov{Novembro}
\gdef\putwordMDec{Dezembro}
%%
%% Index handling should also work correct in german
\gdef\putwordIndexNonexistent{(\'Indice inexistente)}
\gdef\putwordIndexIsEmpty{(\'Indice vazio)}
%%
%% \defmac
\gdef\putwordDefmac{Macro}
%% \defspec
\gdef\putwordDefspec{Forma Especial}
%% \defivar
\gdef\putwordDefivar{Vari\'avel de Inst\^ancia}
%% \defvar
\gdef\putwordDefvar{Vari\'avel}
%% \defopt
\gdef\putwordDefopt{Op\,c\~ao de Usu\'ario}
%% \deffun
\gdef\putwordDeffunc{Fun\,c\~ao}

View File

@ -0,0 +1,82 @@
% txi-en.tex -- adaptation to Turkish for texinfo.tex.
% Id: txi-tr.tex,v 1.3 2004/04/11 17:56:45 karl Exp
%
% Copyright (C) 2003 Free Software Foundation, Inc.
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU 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 Alper Ersoy, 5 January 2003, <aersoy@tfz.net>
%
%%
%% Turkish translations of the used words.
%%
%%
\gdef\putwordAppendix{Ek}
\gdef\putwordChapter{Kesim}
\gdef\putwordfile{dosya}
\gdef\putwordInfo{Bilgi}
\gdef\putwordpage{Sayfa}
\gdef\putwordsection{b\"ol\"um}
\gdef\putwordSection{B\"ol\"um}
\gdef\putwordsee{bkz.}
\gdef\putwordSee{Bkz.}
\gdef\putwordShortTOC{\dotaccent{I}\,cindekiler (K\dotless{i}saca)}
\gdef\putwordTOC{\dotaccent{I}\,cindekiler}
%%
%% This one really sucks :\
\gdef\putwordMethodon{S\dotless{i}n\dotless{i}f:}
%%
%% I could not translate these ones, need examples :\
%% If anybody out there is using these in turkish, please
%% don't hesitate to send me patches ;)
\gdef\putwordin{in}
\gdef\putwordon{on}
\gdef\putwordof{of}
%%
%%
\gdef\putwordNoTitle{Ba\,sl\dotless{i}s\dotless{i}z}
\gdef\putwordIndexNonexistent{(Dizin bulunmamakta)}
\gdef\putwordIndexIsEmpty{(Dizin bo\,s)}
%%
%% Months
\gdef\putwordMJan{Ocak}
\gdef\putwordMFeb{\,Subat}
\gdef\putwordMMar{Mart}
\gdef\putwordMApr{Nisan}
\gdef\putwordMMai{May\dotless{i}s}
\gdef\putwordMJun{Haziran}
\gdef\putwordMJul{Temmuz}
\gdef\putwordMAug{A\u{g}ustos}
\gdef\putwordMSep{Eyl\"ul}
\gdef\putwordMOct{Ekim}
\gdef\putwordMNov{Kas\dotless{i}m}
\gdef\putwordMDec{Aral\dotless{i}k}
%%
%% Definitions
\gdef\putwordDefmac{Makro}
\gdef\putwordDefspec{\"Ozel Yap\dotless{i}}
\gdef\putwordDefopt{Se\,cenek}
\gdef\putwordDefvar{De\u{g}i\,sken}
\gdef\putwordDeffunc{Fonksiyon}
%%
% Produces Day Month Year style of output.
\def\today{%
\number\day\space
\ifcase\month
\or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
\or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\space\number\year}

View File

@ -0,0 +1,5 @@
@set UPDATED 14 December 2004
@c $NetBSD: version-stnd.texi,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
@set UPDATED-MONTH December 2004
@set EDITION 4.8
@set VERSION 4.8

View File

@ -0,0 +1,5 @@
@set UPDATED 29 December 2004
@c $NetBSD: version.texi,v 1.1.1.1 2016/01/14 00:11:30 christos Exp $
@set UPDATED-MONTH December 2004
@set EDITION 4.8
@set VERSION 4.8

View File

@ -0,0 +1,74 @@
# Id: Makefile.am,v 1.8 2004/10/28 14:03:27 karl Exp
# Makefile.am for texinfo/info.
# Run automake in .. to produce Makefile.in from this.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# Use `ginfo' for building to avoid confusion with the standard `info'
# target. Removes the `g' in the install rule before applying any
# user-specified name transformations.
bin_PROGRAMS = ginfo infokey
transform = s/ginfo/info/; $(program_transform_name)
localedir = $(datadir)/locale
infodir2 = $(datadir)/info
# -I. for funs.h.
# Automake puts -I.. and -I$(srcdir) into DEFS by default, but
# we need to override it, so include them ourselves.
INCLUDES = -I. -I$(top_srcdir)/lib -I../intl -I.. -I$(srcdir)
DEFS += -DLOCALEDIR=\"$(localedir)\" -DINFODIR=\"$(infodir)\" \
-DINFODIR2=\"$(infodir2)\"
LDADD = ../lib/libtxi.a $(TERMLIBS) $(LIBINTL)
EXTRA_DIST = README pcterm.c
ginfo_SOURCES = dir.c display.c display.h doc.h dribble.c dribble.h \
echo-area.c echo-area.h \
filesys.c filesys.h footnotes.c footnotes.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
nodist_ginfo_SOURCES = doc.c funs.h
infokey_SOURCES = infokey.c infokey.h key.h
nodist_infokey_SOURCES = key.c funs.h
# The files `doc.c', `key.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.
#
generated_sources = doc.c key.c funs.h
# We need a linear ordering to prevent race condition in parallel make.
# See the node ``(automake)Multiple Outputs'' for an explanation.
doc.c: key.c
key.c: funs.h
# These files are not distributed.
DISTCLEANFILES = $(generated_sources)
noinst_PROGRAMS = makedoc
makedoc_SOURCES = makedoc.c
# Files with Info commands defined that makedoc should read.
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
# The $(EXEEXT) should be added by Automake, but isn't. Fine.
$(generated_sources): makedoc$(EXEEXT) $(cmd_sources)
rm -f $(generated_sources)
$(top_builddir)/$(native_tools)/info/makedoc $(cmd_sources)
# The following hack is necessary to hint make before the automatic
# dependencies are built.
BUILT_SOURCES = funs.h

View File

@ -0,0 +1,584 @@
# Makefile.in generated by automake 1.9.4 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Id: Makefile.am,v 1.8 2004/10/28 14:03:27 karl Exp
# Makefile.am for texinfo/info.
# Run automake in .. to produce Makefile.in from this.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
SOURCES = $(ginfo_SOURCES) $(nodist_ginfo_SOURCES) $(infokey_SOURCES) $(nodist_infokey_SOURCES) $(makedoc_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = ginfo$(EXEEXT) infokey$(EXEEXT)
noinst_PROGRAMS = makedoc$(EXEEXT)
subdir = info
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
$(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
$(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
$(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
$(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
$(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
am_ginfo_OBJECTS = dir.$(OBJEXT) display.$(OBJEXT) dribble.$(OBJEXT) \
echo-area.$(OBJEXT) filesys.$(OBJEXT) footnotes.$(OBJEXT) \
gc.$(OBJEXT) indices.$(OBJEXT) info-utils.$(OBJEXT) \
info.$(OBJEXT) infodoc.$(OBJEXT) infomap.$(OBJEXT) \
m-x.$(OBJEXT) man.$(OBJEXT) nodemenu.$(OBJEXT) nodes.$(OBJEXT) \
search.$(OBJEXT) session.$(OBJEXT) signals.$(OBJEXT) \
terminal.$(OBJEXT) tilde.$(OBJEXT) variables.$(OBJEXT) \
window.$(OBJEXT)
nodist_ginfo_OBJECTS = doc.$(OBJEXT)
ginfo_OBJECTS = $(am_ginfo_OBJECTS) $(nodist_ginfo_OBJECTS)
ginfo_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
ginfo_DEPENDENCIES = ../lib/libtxi.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_infokey_OBJECTS = infokey.$(OBJEXT)
nodist_infokey_OBJECTS = key.$(OBJEXT)
infokey_OBJECTS = $(am_infokey_OBJECTS) $(nodist_infokey_OBJECTS)
infokey_LDADD = $(LDADD)
infokey_DEPENDENCIES = ../lib/libtxi.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_makedoc_OBJECTS = makedoc.$(OBJEXT)
makedoc_OBJECTS = $(am_makedoc_OBJECTS)
makedoc_LDADD = $(LDADD)
makedoc_DEPENDENCIES = ../lib/libtxi.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(ginfo_SOURCES) $(nodist_ginfo_SOURCES) $(infokey_SOURCES) \
$(nodist_infokey_SOURCES) $(makedoc_SOURCES)
DIST_SOURCES = $(ginfo_SOURCES) $(infokey_SOURCES) $(makedoc_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
transform = s/ginfo/info/; $(program_transform_name)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" -DINFODIR=\"$(infodir)\" \
-DINFODIR2=\"$(infodir2)\"
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GENCAT = @GENCAT@
GLIBC21 = @GLIBC21@
GMSGFMT = @GMSGFMT@
HAVE_ASPRINTF = @HAVE_ASPRINTF@
HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
HAVE_SNPRINTF = @HAVE_SNPRINTF@
HAVE_WPRINTF = @HAVE_WPRINTF@
HELP2MAN = @HELP2MAN@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
INSTOBJEXT = @INSTOBJEXT@
INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
POSUB = @POSUB@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TERMLIBS = @TERMLIBS@
TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
native_tools = @native_tools@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
localedir = $(datadir)/locale
infodir2 = $(datadir)/info
# -I. for funs.h.
# Automake puts -I.. and -I$(srcdir) into DEFS by default, but
# we need to override it, so include them ourselves.
INCLUDES = -I. -I$(top_srcdir)/lib -I../intl -I.. -I$(srcdir)
LDADD = ../lib/libtxi.a $(TERMLIBS) $(LIBINTL)
EXTRA_DIST = README pcterm.c
ginfo_SOURCES = dir.c display.c display.h doc.h dribble.c dribble.h \
echo-area.c echo-area.h \
filesys.c filesys.h footnotes.c footnotes.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
nodist_ginfo_SOURCES = doc.c funs.h
infokey_SOURCES = infokey.c infokey.h key.h
nodist_infokey_SOURCES = key.c funs.h
# The files `doc.c', `key.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.
#
generated_sources = doc.c key.c funs.h
# These files are not distributed.
DISTCLEANFILES = $(generated_sources)
makedoc_SOURCES = makedoc.c
# Files with Info commands defined that makedoc should read.
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
# The following hack is necessary to hint make before the automatic
# dependencies are built.
BUILT_SOURCES = funs.h
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu info/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu info/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
clean-noinstPROGRAMS:
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
ginfo$(EXEEXT): $(ginfo_OBJECTS) $(ginfo_DEPENDENCIES)
@rm -f ginfo$(EXEEXT)
$(LINK) $(ginfo_LDFLAGS) $(ginfo_OBJECTS) $(ginfo_LDADD) $(LIBS)
infokey$(EXEEXT): $(infokey_OBJECTS) $(infokey_DEPENDENCIES)
@rm -f infokey$(EXEEXT)
$(LINK) $(infokey_LDFLAGS) $(infokey_OBJECTS) $(infokey_LDADD) $(LIBS)
makedoc$(EXEEXT): $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES)
@rm -f makedoc$(EXEEXT)
$(LINK) $(makedoc_LDFLAGS) $(makedoc_OBJECTS) $(makedoc_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/display.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/doc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dribble.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/echo-area.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesys.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/footnotes.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indices.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info-utils.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infodoc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infokey.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infomap.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/key.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m-x.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makedoc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/man.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nodemenu.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nodes.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/search.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/session.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terminal.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilde.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/variables.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(PROGRAMS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am: install-binPROGRAMS
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-noinstPROGRAMS ctags distclean \
distclean-compile distclean-generic distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-info-am
# We need a linear ordering to prevent race condition in parallel make.
# See the node ``(automake)Multiple Outputs'' for an explanation.
doc.c: key.c
key.c: funs.h
# The $(EXEEXT) should be added by Automake, but isn't. Fine.
$(generated_sources): makedoc$(EXEEXT) $(cmd_sources)
rm -f $(generated_sources)
$(top_builddir)/$(native_tools)/info/makedoc $(cmd_sources)
# 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:

30
external/gpl2/texinfo/dist/info/README vendored Normal file
View File

@ -0,0 +1,30 @@
Id: README,v 1.3 2004/04/11 17:56:45 karl Exp
texinfo/info/README
Copyright (C) 2002 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
Info 2.0 is a complete rewrite of the original standalone Info I wrote in
1987, the first program I wrote for rms. That program was something like
my second Unix program ever, and my die-hard machine language coding habits
tended to show through. I found the original Info hard to read and
maintain, and thus decided to write this one.
The rewrite consists of about 12,000 lines of code written in about 12
days. I believe this version of Info to be in much better shape than the
original Info.
Info 2.0 is substantially different from its original standalone
predecessor. It appears almost identical to the GNU Emacs version, but has
the advantages of smaller size, ease of portability, and a built in library
which can be used in other programs (to get or display documentation from
Info files, for example).
A full listing of the commands available in Info can be gotten by typing
`?' while within an Info window. This produces a node in a window which
can be viewed just like any Info node.
--Brian Fox <bfox@gnu.org>

292
external/gpl2/texinfo/dist/info/dir.c vendored Normal file
View File

@ -0,0 +1,292 @@
/* $NetBSD: dir.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* dir.c -- how to build a special "dir" node from "localdir" files.
Id: dir.c,v 1.3 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1997, 1998, 2004 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"
#include "info-utils.h"
#include "filesys.h"
#include "tilde.h"
/* The "dir" node can be built from the contents of a file called "dir",
with the addition of the menus of every file named in the array
dirs_to_add which are found in INFOPATH. */
static void add_menu_to_file_buffer (char *contents, long int size,
FILE_BUFFER *fb);
static void insert_text_into_fb_at_binding (FILE_BUFFER *fb,
SEARCH_BINDING *binding, char *text, int textlen);
void maybe_build_dir_node (char *dirname);
static char *dirs_to_add[] = {
"dir", "localdir", (char *)NULL
};
/* Return zero if the file represented in the stat structure TEST has
already been seen, nonzero else. */
typedef struct
{
unsigned long device;
unsigned long inode;
} dir_file_list_entry_type;
static int
new_dir_file_p (struct stat *test)
{
static unsigned dir_file_list_len = 0;
static dir_file_list_entry_type *dir_file_list = NULL;
unsigned i;
for (i = 0; i < dir_file_list_len; i++)
{
dir_file_list_entry_type entry;
entry = dir_file_list[i];
if (entry.device == test->st_dev && entry.inode == test->st_ino)
return 0;
}
dir_file_list_len++;
dir_file_list = xrealloc (dir_file_list,
dir_file_list_len * sizeof (dir_file_list_entry_type));
dir_file_list[dir_file_list_len - 1].device = test->st_dev;
dir_file_list[dir_file_list_len - 1].inode = test->st_ino;
return 1;
}
void
maybe_build_dir_node (char *dirname)
{
int path_index, update_tags;
char *this_dir;
FILE_BUFFER *dir_buffer = info_find_file (dirname);
/* If there is no "dir" in the current info path, we cannot build one
from nothing. */
if (!dir_buffer)
return;
/* If this directory has already been built, return now. */
if (dir_buffer->flags & N_CannotGC)
return;
/* Initialize the list we use to avoid reading the same dir file twice
with the dir file just found. */
new_dir_file_p (&dir_buffer->finfo);
path_index = update_tags = 0;
/* Using each element of the path, check for one of the files in
DIRS_TO_ADD. Do not check for "localdir.info.Z" or anything else.
Only files explictly named are eligible. This is a design decision.
There can be an info file name "localdir.info" which contains
information on the setting up of "localdir" files. */
while ((this_dir = extract_colon_unit (infopath, &path_index)))
{
register int da_index;
char *from_file;
/* Expand a leading tilde if one is present. */
if (*this_dir == '~')
{
char *tilde_expanded_dirname;
tilde_expanded_dirname = tilde_expand_word (this_dir);
if (tilde_expanded_dirname != this_dir)
{
free (this_dir);
this_dir = tilde_expanded_dirname;
}
}
/* For every different file named in DIRS_TO_ADD found in the
search path, add that file's menu to our "dir" node. */
for (da_index = 0; (from_file = dirs_to_add[da_index]); da_index++)
{
struct stat finfo;
int statable;
int namelen = strlen (from_file);
char *fullpath = xmalloc (3 + strlen (this_dir) + namelen);
strcpy (fullpath, this_dir);
if (!IS_SLASH (fullpath[strlen (fullpath) - 1]))
strcat (fullpath, "/");
strcat (fullpath, from_file);
statable = (stat (fullpath, &finfo) == 0);
/* Only add this file if we have not seen it before. */
if (statable && S_ISREG (finfo.st_mode) && new_dir_file_p (&finfo))
{
long filesize;
int compressed;
char *contents = filesys_read_info_file (fullpath, &filesize,
&finfo, &compressed);
if (contents)
{
update_tags++;
add_menu_to_file_buffer (contents, filesize, dir_buffer);
free (contents);
}
}
free (fullpath);
}
free (this_dir);
}
if (update_tags)
build_tags_and_nodes (dir_buffer);
/* Flag that the dir buffer has been built. */
dir_buffer->flags |= N_CannotGC;
}
/* Given CONTENTS and FB (a file buffer), add the menu found in CONTENTS
to the menu found in FB->contents. Second argument SIZE is the total
size of CONTENTS. */
static void
add_menu_to_file_buffer (char *contents, long int size, FILE_BUFFER *fb)
{
SEARCH_BINDING contents_binding, fb_binding;
long contents_offset, fb_offset;
contents_binding.buffer = contents;
contents_binding.start = 0;
contents_binding.end = size;
contents_binding.flags = S_FoldCase | S_SkipDest;
fb_binding.buffer = fb->contents;
fb_binding.start = 0;
fb_binding.end = fb->filesize;
fb_binding.flags = S_FoldCase | S_SkipDest;
/* Move to the start of the menus in CONTENTS and FB. */
contents_offset = search_forward (INFO_MENU_LABEL, &contents_binding);
fb_offset = search_forward (INFO_MENU_LABEL, &fb_binding);
/* If there is no menu in CONTENTS, quit now. */
if (contents_offset == -1)
return;
/* There is a menu in CONTENTS, and contents_offset points to the first
character following the menu starter string. Skip all whitespace
and newline characters. */
contents_offset += skip_whitespace_and_newlines (contents + contents_offset);
/* If there is no menu in FB, make one. */
if (fb_offset == -1)
{
/* Find the start of the second node in this file buffer. If there
is only one node, we will be adding the contents to the end of
this node. */
fb_offset = find_node_separator (&fb_binding);
/* If not even a single node separator, give up. */
if (fb_offset == -1)
return;
fb_binding.start = fb_offset;
fb_binding.start +=
skip_node_separator (fb_binding.buffer + fb_binding.start);
/* Try to find the next node separator. */
fb_offset = find_node_separator (&fb_binding);
/* If found one, consider that the start of the menu. Otherwise, the
start of this menu is the end of the file buffer (i.e., fb->size). */
if (fb_offset != -1)
fb_binding.start = fb_offset;
else
fb_binding.start = fb_binding.end;
insert_text_into_fb_at_binding
(fb, &fb_binding, INFO_MENU_LABEL, strlen (INFO_MENU_LABEL));
fb_binding.buffer = fb->contents;
fb_binding.start = 0;
fb_binding.end = fb->filesize;
fb_offset = search_forward (INFO_MENU_LABEL, &fb_binding);
if (fb_offset == -1)
abort ();
}
/* CONTENTS_OFFSET and FB_OFFSET point to the starts of the menus that
appear in their respective buffers. Add the remainder of CONTENTS
to the end of FB's menu. */
fb_binding.start = fb_offset;
fb_offset = find_node_separator (&fb_binding);
if (fb_offset != -1)
fb_binding.start = fb_offset;
else
fb_binding.start = fb_binding.end;
/* Leave exactly one blank line between directory entries. */
{
int num_found = 0;
while ((fb_binding.start > 0) &&
(whitespace_or_newline (fb_binding.buffer[fb_binding.start - 1])))
{
num_found++;
fb_binding.start--;
}
/* Optimize if possible. */
if (num_found >= 2)
{
fb_binding.buffer[fb_binding.start++] = '\n';
fb_binding.buffer[fb_binding.start++] = '\n';
}
else
{
/* Do it the hard way. */
insert_text_into_fb_at_binding (fb, &fb_binding, "\n\n", 2);
fb_binding.start += 2;
}
}
/* Insert the new menu. */
insert_text_into_fb_at_binding
(fb, &fb_binding, contents + contents_offset, size - contents_offset);
}
static void
insert_text_into_fb_at_binding (FILE_BUFFER *fb,
SEARCH_BINDING *binding, char *text, int textlen)
{
char *contents;
long start, end;
start = binding->start;
end = fb->filesize;
contents = (char *)xmalloc (fb->filesize + textlen + 1);
memcpy (contents, fb->contents, start);
memcpy (contents + start, text, textlen);
memcpy (contents + start + textlen, fb->contents + start, end - start);
free (fb->contents);
fb->contents = contents;
fb->filesize += textlen;
fb->finfo.st_size = fb->filesize;
}

View File

@ -0,0 +1,648 @@
/* $NetBSD: display.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* display.c -- How to display Info windows.
Id: display.c,v 1.7 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1997, 2003, 2004 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.
Originally written by Brian Fox (bfox@ai.mit.edu). */
#include "info.h"
#include "display.h"
extern int info_any_buffered_input_p (void); /* Found in session.c. */
static void free_display (DISPLAY_LINE **display);
static DISPLAY_LINE **make_display (int width, int height);
void handle_tag (char *tag);
void handle_tag_start (char *tag);
void handle_tag_end (char *tag);
/* An array of display lines which tell us what is currently visible on
the display. */
DISPLAY_LINE **the_display = (DISPLAY_LINE **)NULL;
/* Non-zero means do no output. */
int display_inhibited = 0;
/* Initialize THE_DISPLAY to WIDTH and HEIGHT, with nothing in it. */
void
display_initialize_display (int width, int height)
{
free_display (the_display);
the_display = make_display (width, height);
display_clear_display (the_display);
}
/* Clear all of the lines in DISPLAY making the screen blank. */
void
display_clear_display (DISPLAY_LINE **display)
{
register int i;
for (i = 0; display[i]; i++)
{
display[i]->text[0] = '\0';
display[i]->textlen = 0;
display[i]->inverse = 0;
}
}
/* Non-zero if we didn't completely redisplay a window. */
int display_was_interrupted_p = 0;
/* Update the windows pointed to by WINDOW in the_display. This actually
writes the text on the screen. */
void
display_update_display (WINDOW *window)
{
register WINDOW *win;
display_was_interrupted_p = 0;
/* For every window in the list, check contents against the display. */
for (win = window; win; win = win->next)
{
/* Only re-display visible windows which need updating. */
if (((win->flags & W_WindowVisible) == 0) ||
((win->flags & W_UpdateWindow) == 0) ||
(win->height == 0))
continue;
display_update_one_window (win);
if (display_was_interrupted_p)
break;
}
/* Always update the echo area. */
display_update_one_window (the_echo_area);
}
void
handle_tag_start (char *tag)
{
/* TODO really handle this tag. */
return;
}
void
handle_tag_end (char *tag)
{
/* TODO really handle this tag. */
return;
}
void
handle_tag (char *tag)
{
if (tag[0] == '/')
{
tag++;
handle_tag_end (tag);
}
else
handle_tag_start (tag);
}
/* Display WIN on the_display. Unlike display_update_display (), this
function only does one window. */
void
display_update_one_window (WINDOW *win)
{
register char *nodetext; /* Current character to display. */
register char *last_node_char; /* Position of the last character in node. */
register int i; /* General use index. */
char *printed_line; /* Buffer for a printed line. */
int pl_index = 0; /* Index into PRINTED_LINE. */
int line_index = 0; /* Number of lines done so far. */
int pl_ignore = 0; /* How many chars use zero width on screen. */
int allocated_win_width;
DISPLAY_LINE **display = the_display;
/* If display is inhibited, that counts as an interrupted display. */
if (display_inhibited)
display_was_interrupted_p = 1;
/* If the window has no height, or display is inhibited, quit now. */
if (!win->height || display_inhibited)
return;
/* If the window's first row doesn't appear in the_screen, then it
cannot be displayed. This can happen when the_echo_area is the
window to be displayed, and the screen has shrunk to less than one
line. */
if ((win->first_row < 0) || (win->first_row > the_screen->height))
return;
/* Print each line in the window into our local buffer, and then
check the contents of that buffer against the display. If they
differ, update the display. */
allocated_win_width = win->width + 1;
printed_line = (char *)xmalloc (allocated_win_width);
if (!win->node || !win->line_starts)
goto done_with_node_display;
nodetext = win->line_starts[win->pagetop];
last_node_char = win->node->contents + win->node->nodelen;
for (; nodetext < last_node_char; nodetext++)
{
char *rep = NULL, *rep_carried_over, rep_temp[2];
int replen;
if (isprint (*nodetext))
{
rep_temp[0] = *nodetext;
replen = 1;
rep_temp[1] = '\0';
rep = rep_temp;
}
else
{
if (*nodetext == '\r' || *nodetext == '\n')
{
replen = win->width - pl_index + pl_ignore;
}
else if (*nodetext == '\0'
&& (nodetext + 2) < last_node_char
&& *(nodetext + 1) == '\b'
&& *(nodetext + 2) == '[')
{
/* Found new style tag/cookie \0\b[
Read until the closing tag \0\b] */
int element_len = 0;
char *element;
/* Skip the escapes. */
nodetext += 3;
while (!(*nodetext == '\0'
&& *(nodetext + 1) == '\b'
&& *(nodetext + 2) == ']'))
{
nodetext++;
element_len++;
}
element = (char *) malloc (element_len + 1);
strncpy (element, nodetext - element_len, element_len);
/* Skip the escapes. */
nodetext += 2;
pl_ignore += element_len + 5;
/* Append string terminator. */
element[element_len] = '\0';
handle_tag (element);
/* Over and out */
free (element);
continue;
}
else
{
rep = printed_representation (*nodetext, pl_index);
replen = strlen (rep);
}
}
/* Support ANSI escape sequences under -R. */
if (raw_escapes_p
&& *nodetext == '\033'
&& nodetext[1] == '['
&& isdigit (nodetext[2]))
{
if (nodetext[3] == 'm')
pl_ignore += 4;
else if (isdigit (nodetext[3]) && nodetext[4] == 'm')
pl_ignore += 5;
}
while (pl_index + 2 >= allocated_win_width - 1)
{
allocated_win_width *= 2;
printed_line = (char *)xrealloc (printed_line, allocated_win_width);
}
/* If this character can be printed without passing the width of
the line, then stuff it into the line. */
if (replen + pl_index < win->width + pl_ignore)
{
/* Optimize if possible. */
if (replen == 1)
{
printed_line[pl_index++] = *rep;
}
else
{
for (i = 0; i < replen; i++)
printed_line[pl_index++] = rep[i];
}
}
else
{
DISPLAY_LINE *entry;
/* If this character cannot be printed in this line, we have
found the end of this line as it would appear on the screen.
Carefully print the end of the line, and then compare. */
if (*nodetext == '\n' || *nodetext == '\r' || *nodetext == '\t')
{
printed_line[pl_index] = '\0';
rep_carried_over = (char *)NULL;
}
else
{
/* The printed representation of this character extends into
the next line. Remember the offset of the last character
printed out of REP so that we can carry the character over
to the next line. */
for (i = 0; pl_index < (win->width + pl_ignore - 1);)
printed_line[pl_index++] = rep[i++];
rep_carried_over = rep + i;
/* If printing the last character in this window couldn't
possibly cause the screen to scroll, place a backslash
in the rightmost column. */
if (1 + line_index + win->first_row < the_screen->height)
{
if (win->flags & W_NoWrap)
printed_line[pl_index++] = '$';
else
printed_line[pl_index++] = '\\';
}
printed_line[pl_index] = '\0';
}
/* We have the exact line as it should appear on the screen.
Check to see if this line matches the one already appearing
on the screen. */
entry = display[line_index + win->first_row];
/* If the screen line is inversed, then we have to clear
the line from the screen first. Why, I don't know.
(But don't do this if we have no visible entries, as can
happen if the window is shrunk very small.) */
if ((entry && entry->inverse)
/* Need to erase the line if it has escape sequences. */
|| (raw_escapes_p && strchr (entry->text, '\033') != 0))
{
terminal_goto_xy (0, line_index + win->first_row);
terminal_clear_to_eol ();
entry->inverse = 0;
entry->text[0] = '\0';
entry->textlen = 0;
}
/* Find the offset where these lines differ. */
for (i = 0; i < pl_index; i++)
if (printed_line[i] != entry->text[i])
break;
/* If the lines are not the same length, or if they differed
at all, we must do some redrawing. */
if ((i != pl_index) || (pl_index != entry->textlen))
{
/* Move to the proper point on the terminal. */
terminal_goto_xy (i, line_index + win->first_row);
/* If there is any text to print, print it. */
if (i != pl_index)
terminal_put_text (printed_line + i);
/* If the printed text didn't extend all the way to the edge
of the window, and text was appearing between here and the
edge of the window, clear from here to the end of the line. */
if ((pl_index < win->width + pl_ignore
&& pl_index < entry->textlen)
|| (entry->inverse))
terminal_clear_to_eol ();
fflush (stdout);
/* Update the display text buffer. */
if (strlen (printed_line) > (unsigned int) screenwidth)
/* printed_line[] can include more than screenwidth
characters if we are under -R and there are escape
sequences in it. However, entry->text was
allocated (in display_initialize_display) for
screenwidth characters only. */
entry->text = xrealloc (entry->text, strlen (printed_line)+1);
strcpy (entry->text + i, printed_line + i);
entry->textlen = pl_index;
/* Lines showing node text are not in inverse. Only modelines
have that distinction. */
entry->inverse = 0;
}
/* We have done at least one line. Increment our screen line
index, and check against the bottom of the window. */
if (++line_index == win->height)
break;
/* A line has been displayed, and the screen reflects that state.
If there is typeahead pending, then let that typeahead be read
now, instead of continuing with the display. */
if (info_any_buffered_input_p ())
{
free (printed_line);
display_was_interrupted_p = 1;
return;
}
/* Reset PL_INDEX to the start of the line. */
pl_index = 0;
pl_ignore = 0; /* this is computed per line */
/* If there are characters from REP left to print, stuff them
into the buffer now. */
if (rep_carried_over)
for (; rep[pl_index]; pl_index++)
printed_line[pl_index] = rep[pl_index];
/* If this window has chosen not to wrap lines, skip to the end
of the physical line in the buffer, and start a new line here. */
if (pl_index && (win->flags & W_NoWrap))
{
char *begin;
pl_index = 0;
printed_line[0] = '\0';
begin = nodetext;
while ((nodetext < last_node_char) && (*nodetext != '\n'))
nodetext++;
}
}
}
done_with_node_display:
/* We have reached the end of the node or the end of the window. If it
is the end of the node, then clear the lines of the window from here
to the end of the window. */
for (; line_index < win->height; line_index++)
{
DISPLAY_LINE *entry = display[line_index + win->first_row];
/* If this line has text on it then make it go away. */
if (entry && entry->textlen)
{
entry->textlen = 0;
entry->text[0] = '\0';
terminal_goto_xy (0, line_index + win->first_row);
terminal_clear_to_eol ();
}
}
/* Finally, if this window has a modeline it might need to be redisplayed.
Check the window's modeline against the one in the display, and update
if necessary. */
if ((win->flags & W_InhibitMode) == 0)
{
window_make_modeline (win);
line_index = win->first_row + win->height;
/* This display line must both be in inverse, and have the same
contents. */
if ((!display[line_index]->inverse) ||
(strcmp (display[line_index]->text, win->modeline) != 0))
{
terminal_goto_xy (0, line_index);
terminal_begin_inverse ();
terminal_put_text (win->modeline);
terminal_end_inverse ();
strcpy (display[line_index]->text, win->modeline);
display[line_index]->inverse = 1;
display[line_index]->textlen = strlen (win->modeline);
fflush (stdout);
}
}
/* Okay, this window doesn't need updating anymore. */
win->flags &= ~W_UpdateWindow;
free (printed_line);
fflush (stdout);
}
/* Scroll the region of the_display starting at START, ending at END, and
moving the lines AMOUNT lines. If AMOUNT is less than zero, the lines
are moved up in the screen, otherwise down. Actually, it is possible
for no scrolling to take place in the case that the terminal doesn't
support it. This doesn't matter to us. */
void
display_scroll_display (int start, int end, int amount)
{
register int i, last;
DISPLAY_LINE *temp;
/* If this terminal cannot do scrolling, give up now. */
if (!terminal_can_scroll)
return;
/* If there isn't anything displayed on the screen because it is too
small, quit now. */
if (!the_display[0])
return;
/* If there is typeahead pending, then don't actually do any scrolling. */
if (info_any_buffered_input_p ())
return;
/* Do it on the screen. */
terminal_scroll_terminal (start, end, amount);
/* Now do it in the display buffer so our contents match the screen. */
if (amount > 0)
{
last = end + amount;
/* Shift the lines to scroll right into place. */
for (i = 0; i < (end - start); i++)
{
temp = the_display[last - i];
the_display[last - i] = the_display[end - i];
the_display[end - i] = temp;
}
/* The lines have been shifted down in the buffer. Clear all of the
lines that were vacated. */
for (i = start; i != (start + amount); i++)
{
the_display[i]->text[0] = '\0';
the_display[i]->textlen = 0;
the_display[i]->inverse = 0;
}
}
if (amount < 0)
{
last = start + amount;
for (i = 0; i < (end - start); i++)
{
temp = the_display[last + i];
the_display[last + i] = the_display[start + i];
the_display[start + i] = temp;
}
/* The lines have been shifted up in the buffer. Clear all of the
lines that are left over. */
for (i = end + amount; i != end; i++)
{
the_display[i]->text[0] = '\0';
the_display[i]->textlen = 0;
the_display[i]->inverse = 0;
}
}
}
/* Try to scroll lines in WINDOW. OLD_PAGETOP is the pagetop of WINDOW before
having had its line starts recalculated. OLD_STARTS is the list of line
starts that used to appear in this window. OLD_COUNT is the number of lines
that appear in the OLD_STARTS array. */
void
display_scroll_line_starts (WINDOW *window, int old_pagetop,
char **old_starts, int old_count)
{
register int i, old, new; /* Indices into the line starts arrays. */
int last_new, last_old; /* Index of the last visible line. */
int old_first, new_first; /* Index of the first changed line. */
int unchanged_at_top = 0;
int already_scrolled = 0;
/* Locate the first line which was displayed on the old window. */
old_first = old_pagetop;
new_first = window->pagetop;
/* Find the last line currently visible in this window. */
last_new = window->pagetop + (window->height - 1);
if (last_new > window->line_count)
last_new = window->line_count - 1;
/* Find the last line which used to be currently visible in this window. */
last_old = old_pagetop + (window->height - 1);
if (last_old > old_count)
last_old = old_count - 1;
for (old = old_first, new = new_first;
old < last_old && new < last_new;
old++, new++)
if (old_starts[old] != window->line_starts[new])
break;
else
unchanged_at_top++;
/* Loop through the old lines looking for a match in the new lines. */
for (old = old_first + unchanged_at_top; old < last_old; old++)
{
for (new = new_first; new < last_new; new++)
if (old_starts[old] == window->line_starts[new])
{
/* Find the extent of the matching lines. */
for (i = 0; (old + i) < last_old; i++)
if (old_starts[old + i] != window->line_starts[new + i])
break;
/* Scroll these lines if there are enough of them. */
{
int start, end, amount;
start = (window->first_row
+ ((old + already_scrolled) - old_pagetop));
amount = new - (old + already_scrolled);
end = window->first_row + window->height;
/* If we are shifting the block of lines down, then the last
AMOUNT lines will become invisible. Thus, don't bother
scrolling them. */
if (amount > 0)
end -= amount;
if ((end - start) > 0)
{
display_scroll_display (start, end, amount);
/* Some lines have been scrolled. Simulate the scrolling
by offsetting the value of the old index. */
old += i;
already_scrolled += amount;
}
}
}
}
}
/* Move the screen cursor to directly over the current character in WINDOW. */
void
display_cursor_at_point (WINDOW *window)
{
int vpos, hpos;
vpos = window_line_of_point (window) - window->pagetop + window->first_row;
hpos = window_get_cursor_column (window);
terminal_goto_xy (hpos, vpos);
fflush (stdout);
}
/* **************************************************************** */
/* */
/* Functions Static to this File */
/* */
/* **************************************************************** */
/* Make a DISPLAY_LINE ** with width and height. */
static DISPLAY_LINE **
make_display (int width, int height)
{
register int i;
DISPLAY_LINE **display;
display = (DISPLAY_LINE **)xmalloc ((1 + height) * sizeof (DISPLAY_LINE *));
for (i = 0; i < height; i++)
{
display[i] = (DISPLAY_LINE *)xmalloc (sizeof (DISPLAY_LINE));
display[i]->text = (char *)xmalloc (1 + width);
display[i]->textlen = 0;
display[i]->inverse = 0;
}
display[i] = (DISPLAY_LINE *)NULL;
return (display);
}
/* Free the storage allocated to DISPLAY. */
static void
free_display (DISPLAY_LINE **display)
{
register int i;
register DISPLAY_LINE *display_line;
if (!display)
return;
for (i = 0; (display_line = display[i]); i++)
{
free (display_line->text);
free (display_line);
}
free (display);
}

View File

@ -0,0 +1,80 @@
/* $NetBSD: display.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* display.h -- How the display in Info is done.
Id: display.h,v 1.3 2004/04/11 17:56:45 karl Exp
This file is part of GNU Info, a program for reading online documentation
stored in Info format.
Copyright (C) 1993, 1997, 2004 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_DISPLAY_H
#define INFO_DISPLAY_H
#include "info-utils.h"
#include "terminal.h"
typedef struct {
char *text; /* Text of the line as it appears. */
int textlen; /* Printable Length of TEXT. */
int inverse; /* Non-zero means this line is inverse. */
} DISPLAY_LINE;
/* An array of display lines which tell us what is currently visible on
the display. */
extern DISPLAY_LINE **the_display;
/* Non-zero means do no output. */
extern int display_inhibited;
/* Non-zero if we didn't completely redisplay a window. */
extern int display_was_interrupted_p;
/* Initialize THE_DISPLAY to WIDTH and HEIGHT, with nothing in it. */
extern void display_initialize_display (int width, int height);
/* Clear all of the lines in DISPLAY making the screen blank. */
extern void display_clear_display (DISPLAY_LINE **display);
/* Update the windows pointed to by WINDOWS in THE_DISPLAY. This actually
writes the text on the screen. */
extern void display_update_display (WINDOW *window);
/* Display WIN on THE_DISPLAY. Unlike display_update_display (), this
function only does one window. */
extern void display_update_one_window (WINDOW *win);
/* Move the screen cursor to directly over the current character in WINDOW. */
extern void display_cursor_at_point (WINDOW *window);
/* Scroll the region of the_display starting at START, ending at END, and
moving the lines AMOUNT lines. If AMOUNT is less than zero, the lines
are moved up in the screen, otherwise down. Actually, it is possible
for no scrolling to take place in the case that the terminal doesn't
support it. This doesn't matter to us. */
extern void display_scroll_display (int start, int end, int amount);
/* Try to scroll lines in WINDOW. OLD_PAGETOP is the pagetop of WINDOW before
having had its line starts recalculated. OLD_STARTS is the list of line
starts that used to appear in this window. OLD_COUNT is the number of lines
that appear in the OLD_STARTS array. */
extern void display_scroll_line_starts (WINDOW *window, int old_pagetop,
char **old_starts, int old_count);
#endif /* not INFO_DISPLAY_H */

105
external/gpl2/texinfo/dist/info/doc.h vendored Normal file
View File

@ -0,0 +1,105 @@
/* $NetBSD: doc.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* doc.h -- Structures associating function pointers with documentation.
Id: doc.h,v 1.3 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 2001, 2004 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 (DOC_H)
#define DOC_H
#include "info.h" /* for NAMED_FUNCTIONS, VFunction, etc. */
#if defined (INFOKEY)
/* For each function, we keep track of the first defined key sequence
which invokes that function, for each different map. This is so that
the dynamic documentation generation in infodoc.c (a) doesn't have to
search through copious KEYMAP_ENTRYs, and, more importantly, (b) the
user and programmer can choose the preferred key sequence that is
printed for any given function -- it's just the first one that
appears in the user's infokey file or the default keymaps in
infomap.c.
Each FUNCTION_DOC has a linked list of FUNCTION_KEYSEQ structs
hanging off it, which are created on startup when the user and/or
default keymaps are being parsed. */
typedef struct function_keyseq
{
struct function_keyseq *next;
struct keymap_entry *map;
char *keyseq;
} FUNCTION_KEYSEQ;
#endif /* INFOKEY */
/* An array of FUNCTION_DOC structures is defined in doc.c, which is
automagically generated by the makedoc utility, whose job is to scan
through the source files for command function declarations and
compile a list of all the ones it finds. This saves tedious
housekeeping and avoids errors of omission. */
typedef struct
{
VFunction *func;
#if defined (NAMED_FUNCTIONS)
char *func_name;
#endif /* NAMED_FUNCTIONS */
#if defined (INFOKEY)
FUNCTION_KEYSEQ *keys;
#endif /* INFOKEY */
char *doc;
} FUNCTION_DOC;
extern FUNCTION_DOC function_doc_array[];
/* Under the old key-binding system, an info command is specified by
the pointer to its function. Under the new INFOKEY binding system,
it is specified by a pointer to the command's FUNCTION_DOC structure,
defined in doc.c, from which the pointer to the function can be
easily divined using the InfoFunction() extractor. */
#if defined(INFOKEY)
typedef FUNCTION_DOC InfoCommand;
/* The cast to VFunction * prevents pgcc from complaining about
dereferencing a void *. */
#define InfoFunction(ic) ((ic) ? (ic)->func : (VFunction *) NULL)
#define InfoCmd(fn) (&function_doc_array[A_##fn])
#define DocInfoCmd(fd) ((fd) && (fd)->func ? (fd) : NULL)
#else /* !INFOKEY */
typedef VFunction InfoCommand;
#define InfoFunction(vf) ((vf))
#define InfoCmd(fn) fn
#define DocInfoCmd(fd) ((fd)->func)
#endif /* !INFOKEY */
#include "infomap.h" /* for Keymap. */
#if defined (NAMED_FUNCTIONS)
extern char *function_name (InfoCommand *cmd);
extern InfoCommand *named_function (char *name);
#endif /* NAMED_FUNCTIONS */
extern char *function_documentation (InfoCommand *cmd);
extern char *key_documentation (char key, Keymap map);
extern char *pretty_keyname (unsigned char key);
extern char *pretty_keyseq (char *keyseq);
extern char *where_is (Keymap map, InfoCommand *cmd);
extern char *replace_in_documentation (char *string, int help_is_only_window_p);
extern void dump_map_to_message_buffer (char *prefix, Keymap map);
#endif /* !DOC_H */

View File

@ -0,0 +1,70 @@
/* $NetBSD: dribble.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* dribble.c -- dribble files for Info.
Id: dribble.c,v 1.3 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1998, 2004 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"
#include "dribble.h"
/* When non-zero, it is a stream to write all input characters to for the
duration of this info session. */
FILE *info_dribble_file = (FILE *)NULL;
/* Open a dribble file named NAME, perhaps closing an already open one.
This sets the global variable INFO_DRIBBLE_FILE to the open stream. */
void
open_dribble_file (char *name)
{
/* Perhaps close existing dribble file. */
close_dribble_file ();
/* Keystrokes can be non-printable characters, so we need binary I/O. */
info_dribble_file = fopen (name, FOPEN_WBIN);
#if defined (HAVE_SETVBUF)
if (info_dribble_file)
# if defined (SETVBUF_REVERSED)
setvbuf (info_dribble_file, _IONBF, (char *)NULL, 1);
# else
setvbuf (info_dribble_file, (char *)NULL, _IONBF, 1);
# endif /* !SETVBUF_REVERSED */
#endif /* HAVE_SETVBUF */
}
/* If there is a dribble file already open, close it. */
void
close_dribble_file (void)
{
if (info_dribble_file)
{
fflush (info_dribble_file);
fclose (info_dribble_file);
info_dribble_file = (FILE *)NULL;
}
}
/* Write some output to our existing dribble file. */
void
dribble (unsigned char byte)
{
if (info_dribble_file)
fwrite (&byte, sizeof (unsigned char), 1, info_dribble_file);
}

View File

@ -0,0 +1,43 @@
/* $NetBSD: dribble.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* dribble.h -- Functions and vars declared in dribble.c. */
/* This file is part of GNU Info, a program for reading online documentation
stored in Info format.
Copyright (C) 1993, 2004 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 (_DRIBBLE_H_)
#define _DRIBBLE_H_
/* When non-zero, it is a stream to write all input characters to for the
duration of this info session. */
extern FILE *info_dribble_file;
/* Open a dribble file named NAME, perhaps closing an already open one.
This sets the global variable INFO_DRIBBLE_FILE to the open stream. */
extern void open_dribble_file (char *name);
/* If there is a dribble file already open, close it. */
extern void close_dribble_file (void);
/* Write some output to our existing dribble file. */
extern void dribble (unsigned char byte);
#endif /* !_DRIBBLE_H_ */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,87 @@
/* $NetBSD: echo-area.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* echo-area.h -- Functions used in reading information from the echo area.
Id: echo-area.h,v 1.4 2004/08/07 22:03:08 karl Exp
This file is part of GNU Info, a program for reading online documentation
stored in Info format.
Copyright (C) 1993, 1997, 2004 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 (const char *message);
extern void echo_area_inform_of_deleted_window (WINDOW *window);
extern void echo_area_prep_read (void);
extern VFunction *ea_last_executed_command;
extern char * info_read_completing_internal (WINDOW *window, char *prompt,
REFERENCE **completions, int force);
/* 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 (WINDOW *window, char *prompt);
/* 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 (WINDOW *window,
char *prompt, REFERENCE **completions);
/* 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 (WINDOW *window,
char *prompt, REFERENCE **completions);
extern void ea_insert (WINDOW *window, int count, unsigned char key);
extern void ea_quoted_insert (WINDOW *window, int count, unsigned char key);
extern void ea_beg_of_line (WINDOW *window, int count, unsigned char key);
extern void ea_backward (WINDOW *window, int count, unsigned char key);
extern void ea_delete (WINDOW *window, int count, unsigned char key);
extern void ea_end_of_line (WINDOW *window, int count, unsigned char key);
extern void ea_forward (WINDOW *window, int count, unsigned char key);
extern void ea_abort (WINDOW *window, int count, unsigned char key);
extern void ea_rubout (WINDOW *window, int count, unsigned char key);
extern void ea_complete (WINDOW *window, int count, unsigned char key);
extern void ea_newline (WINDOW *window, int count, unsigned char key);
extern void ea_kill_line (WINDOW *window, int count, unsigned char key);
extern void ea_backward_kill_line (WINDOW *window, int count, unsigned char key);
extern void ea_transpose_chars (WINDOW *window, int count, unsigned char key);
extern void ea_yank (WINDOW *window, int count, unsigned char key);
extern void ea_tab_insert (WINDOW *window, int count, unsigned char key);
extern void ea_possible_completions (WINDOW *window, int count, unsigned char key);
extern void ea_backward_word (WINDOW *window, int count, unsigned char key);
extern void ea_kill_word (WINDOW *window, int count, unsigned char key);
extern void ea_forward_word (WINDOW *window, int count, unsigned char key);
extern void ea_yank_pop (WINDOW *window, int count, unsigned char key);
extern void ea_backward_kill_word (WINDOW *window, int count, unsigned char key);
extern void ea_scroll_completions_window (WINDOW *window, int count,
unsigned char key);
#endif /* not INFO_ECHO_AREA_H */

View File

@ -0,0 +1,713 @@
/* $NetBSD: filesys.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* filesys.c -- filesystem specific functions.
Id: filesys.c,v 1.6 2004/07/30 17:17:40 karl Exp
Copyright (C) 1993, 1997, 1998, 2000, 2002, 2003, 2004 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"
#include "tilde.h"
#include "filesys.h"
/* Local to this file. */
static char *info_file_in_path (char *filename, char *path);
static char *lookup_info_filename (char *filename);
static char *info_absolute_file (char *fname);
static void remember_info_filename (char *filename, char *expansion);
static void maybe_initialize_infopath (void);
typedef struct
{
char *suffix;
char *decompressor;
} COMPRESSION_ALIST;
static char *info_suffixes[] = {
".info",
"-info",
"/index",
".inf", /* 8+3 file on filesystem which supports long file names */
#ifdef __MSDOS__
/* 8+3 file names strike again... */
".in", /* for .inz, .igz etc. */
".i",
#endif
"",
NULL
};
static COMPRESSION_ALIST compress_suffixes[] = {
{ ".gz", "gunzip" },
{ ".bz2", "bunzip2" },
{ ".z", "gunzip" },
{ ".Z", "uncompress" },
{ ".Y", "unyabba" },
#ifdef __MSDOS__
{ "gz", "gunzip" },
{ "z", "gunzip" },
#endif
{ (char *)NULL, (char *)NULL }
};
/* The path on which we look for info files. You can initialize this
from the environment variable INFOPATH if there is one, or you can
call info_add_path () to add paths to the beginning or end of it.
You can call zap_infopath () to make the path go away. */
char *infopath = (char *)NULL;
static int infopath_size = 0;
/* Expand the filename in PARTIAL to make a real name for this operating
system. This looks in INFO_PATHS in order to find the correct file.
If it can't find the file, it returns NULL. */
static char *local_temp_filename = (char *)NULL;
static int local_temp_filename_size = 0;
char *
info_find_fullpath (char *partial)
{
int initial_character;
char *temp;
filesys_error_number = 0;
maybe_initialize_infopath ();
if (partial && (initial_character = *partial))
{
char *expansion;
expansion = lookup_info_filename (partial);
if (expansion)
return (expansion);
/* If we have the full path to this file, we still may have to add
various extensions to it. I guess we have to stat this file
after all. */
if (IS_ABSOLUTE (partial))
temp = info_absolute_file (partial);
else if (initial_character == '~')
{
expansion = tilde_expand_word (partial);
if (IS_ABSOLUTE (expansion))
{
temp = info_absolute_file (expansion);
free (expansion);
}
else
temp = expansion;
}
else if (initial_character == '.' &&
(IS_SLASH (partial[1]) ||
(partial[1] == '.' && IS_SLASH (partial[2]))))
{
if (local_temp_filename_size < 1024)
local_temp_filename = (char *)xrealloc
(local_temp_filename, (local_temp_filename_size = 1024));
#if defined (HAVE_GETCWD)
if (!getcwd (local_temp_filename, local_temp_filename_size))
#else /* !HAVE_GETCWD */
if (!getwd (local_temp_filename))
#endif /* !HAVE_GETCWD */
{
filesys_error_number = errno;
return (partial);
}
strcat (local_temp_filename, "/");
strcat (local_temp_filename, partial);
temp = info_absolute_file (local_temp_filename); /* try extensions */
if (!temp)
partial = local_temp_filename;
}
else
temp = info_file_in_path (partial, infopath);
if (temp)
{
remember_info_filename (partial, temp);
if (strlen (temp) > (unsigned int) local_temp_filename_size)
local_temp_filename = (char *) xrealloc
(local_temp_filename,
(local_temp_filename_size = (50 + strlen (temp))));
strcpy (local_temp_filename, temp);
free (temp);
return (local_temp_filename);
}
}
return (partial);
}
/* Scan the list of directories in PATH looking for FILENAME. If we find
one that is a regular file, return it as a new string. Otherwise, return
a NULL pointer. */
static char *
info_file_in_path (char *filename, char *path)
{
struct stat finfo;
char *temp_dirname;
int statable, dirname_index;
/* Reject ridiculous cases up front, to prevent infinite recursion
later on. E.g., someone might say "info '(.)foo'"... */
if (!*filename || STREQ (filename, ".") || STREQ (filename, ".."))
return NULL;
dirname_index = 0;
while ((temp_dirname = extract_colon_unit (path, &dirname_index)))
{
register int i, pre_suffix_length;
char *temp;
/* Expand a leading tilde if one is present. */
if (*temp_dirname == '~')
{
char *expanded_dirname;
expanded_dirname = tilde_expand_word (temp_dirname);
free (temp_dirname);
temp_dirname = expanded_dirname;
}
temp = (char *)xmalloc (30 + strlen (temp_dirname) + strlen (filename));
strcpy (temp, temp_dirname);
if (!IS_SLASH (temp[(strlen (temp)) - 1]))
strcat (temp, "/");
strcat (temp, filename);
pre_suffix_length = strlen (temp);
free (temp_dirname);
for (i = 0; info_suffixes[i]; i++)
{
strcpy (temp + pre_suffix_length, info_suffixes[i]);
statable = (stat (temp, &finfo) == 0);
/* If we have found a regular file, then use that. Else, if we
have found a directory, look in that directory for this file. */
if (statable)
{
if (S_ISREG (finfo.st_mode))
{
return (temp);
}
else if (S_ISDIR (finfo.st_mode))
{
char *newpath, *filename_only, *newtemp;
newpath = xstrdup (temp);
filename_only = filename_non_directory (filename);
newtemp = info_file_in_path (filename_only, newpath);
free (newpath);
if (newtemp)
{
free (temp);
return (newtemp);
}
}
}
else
{
/* Add various compression suffixes to the name to see if
the file is present in compressed format. */
register int j, pre_compress_suffix_length;
pre_compress_suffix_length = strlen (temp);
for (j = 0; compress_suffixes[j].suffix; j++)
{
strcpy (temp + pre_compress_suffix_length,
compress_suffixes[j].suffix);
statable = (stat (temp, &finfo) == 0);
if (statable && (S_ISREG (finfo.st_mode)))
return (temp);
}
}
}
free (temp);
}
return ((char *)NULL);
}
/* Assume FNAME is an absolute file name, and check whether it is
a regular file. If it is, return it as a new string; otherwise
return a NULL pointer. We do it by taking the file name apart
into its directory and basename parts, and calling info_file_in_path.*/
static char *
info_absolute_file (char *fname)
{
char *containing_dir = xstrdup (fname);
char *base = filename_non_directory (containing_dir);
if (base > containing_dir)
base[-1] = '\0';
return info_file_in_path (filename_non_directory (fname), containing_dir);
}
/* Given a string containing units of information separated by the
PATH_SEP character, return the next one after IDX, or NULL if there
are no more. Advance IDX to the character after the colon. */
char *
extract_colon_unit (char *string, int *idx)
{
unsigned int i = (unsigned int) *idx;
unsigned int start = i;
if (!string || i >= strlen (string))
return NULL;
if (!string[i]) /* end of string */
return NULL;
/* Advance to next PATH_SEP. */
while (string[i] && string[i] != PATH_SEP[0])
i++;
{
char *value = xmalloc ((i - start) + 1);
strncpy (value, &string[start], (i - start));
value[i - start] = 0;
i++; /* move past PATH_SEP */
*idx = i;
return value;
}
}
/* A structure which associates a filename with its expansion. */
typedef struct
{
char *filename;
char *expansion;
} FILENAME_LIST;
/* An array of remembered arguments and results. */
static FILENAME_LIST **names_and_files = (FILENAME_LIST **)NULL;
static int names_and_files_index = 0;
static int names_and_files_slots = 0;
/* Find the result for having already called info_find_fullpath () with
FILENAME. */
static char *
lookup_info_filename (char *filename)
{
if (filename && names_and_files)
{
register int i;
for (i = 0; names_and_files[i]; i++)
{
if (FILENAME_CMP (names_and_files[i]->filename, filename) == 0)
return (names_and_files[i]->expansion);
}
}
return (char *)NULL;;
}
/* Add a filename and its expansion to our list. */
static void
remember_info_filename (char *filename, char *expansion)
{
FILENAME_LIST *new;
if (names_and_files_index + 2 > names_and_files_slots)
{
int alloc_size;
names_and_files_slots += 10;
alloc_size = names_and_files_slots * sizeof (FILENAME_LIST *);
names_and_files =
(FILENAME_LIST **) xrealloc (names_and_files, alloc_size);
}
new = (FILENAME_LIST *)xmalloc (sizeof (FILENAME_LIST));
new->filename = xstrdup (filename);
new->expansion = expansion ? xstrdup (expansion) : (char *)NULL;
names_and_files[names_and_files_index++] = new;
names_and_files[names_and_files_index] = (FILENAME_LIST *)NULL;
}
static void
maybe_initialize_infopath (void)
{
if (!infopath_size)
{
infopath = (char *)
xmalloc (infopath_size = (1 + strlen (DEFAULT_INFOPATH)));
strcpy (infopath, DEFAULT_INFOPATH);
}
}
/* Add PATH to the list of paths found in INFOPATH. 2nd argument says
whether to put PATH at the front or end of INFOPATH. */
void
info_add_path (char *path, int where)
{
int len;
if (!infopath)
{
infopath = (char *)xmalloc (infopath_size = 200 + strlen (path));
infopath[0] = '\0';
}
len = strlen (path) + strlen (infopath);
if (len + 2 >= infopath_size)
infopath = (char *)xrealloc (infopath, (infopath_size += (2 * len) + 2));
if (!*infopath)
strcpy (infopath, path);
else if (where == INFOPATH_APPEND)
{
strcat (infopath, PATH_SEP);
strcat (infopath, path);
}
else if (where == INFOPATH_PREPEND)
{
char *temp = xstrdup (infopath);
strcpy (infopath, path);
strcat (infopath, PATH_SEP);
strcat (infopath, temp);
free (temp);
}
}
/* Make INFOPATH have absolutely nothing in it. */
void
zap_infopath (void)
{
if (infopath)
free (infopath);
infopath = (char *)NULL;
infopath_size = 0;
}
/* Given a chunk of text and its length, convert all CRLF pairs at every
end-of-line into a single Newline character. Return the length of
produced text.
This is required because the rest of code is too entrenched in having
a single newline at each EOL; in particular, searching for various
Info headers and cookies can become extremely tricky if that assumption
breaks.
FIXME: this could also support Mac-style text files with a single CR
at the EOL, but what about random CR characters in non-Mac files? Can
we afford converting them into newlines as well? Maybe implement some
heuristics here, like in Emacs 20.
FIXME: is it a good idea to show the EOL type on the modeline? */
long
convert_eols (char *text, long int textlen)
{
register char *s = text;
register char *d = text;
while (textlen--)
{
if (*s == '\r' && textlen && s[1] == '\n')
{
s++;
textlen--;
}
*d++ = *s++;
}
return (long)(d - text);
}
/* Read the contents of PATHNAME, returning a buffer with the contents of
that file in it, and returning the size of that buffer in FILESIZE.
FINFO is a stat struct which has already been filled in by the caller.
If the file turns out to be compressed, set IS_COMPRESSED to non-zero.
If the file cannot be read, return a NULL pointer. */
char *
filesys_read_info_file (char *pathname, long int *filesize,
struct stat *finfo, int *is_compressed)
{
long st_size;
*filesize = filesys_error_number = 0;
if (compressed_filename_p (pathname))
{
*is_compressed = 1;
return (filesys_read_compressed (pathname, filesize));
}
else
{
int descriptor;
char *contents;
*is_compressed = 0;
descriptor = open (pathname, O_RDONLY | O_BINARY, 0666);
/* If the file couldn't be opened, give up. */
if (descriptor < 0)
{
filesys_error_number = errno;
return ((char *)NULL);
}
/* Try to read the contents of this file. */
st_size = (long) finfo->st_size;
contents = (char *)xmalloc (1 + st_size);
if ((read (descriptor, contents, st_size)) != st_size)
{
filesys_error_number = errno;
close (descriptor);
free (contents);
return ((char *)NULL);
}
close (descriptor);
/* Convert any DOS-style CRLF EOLs into Unix-style NL.
Seems like a good idea to have even on Unix, in case the Info
files are coming from some Windows system across a network. */
*filesize = convert_eols (contents, st_size);
/* EOL conversion can shrink the text quite a bit. We don't
want to waste storage. */
if (*filesize < st_size)
contents = (char *)xrealloc (contents, 1 + *filesize);
contents[*filesize] = '\0';
return (contents);
}
}
/* Typically, pipe buffers are 4k. */
#define BASIC_PIPE_BUFFER (4 * 1024)
/* We use some large multiple of that. */
#define FILESYS_PIPE_BUFFER_SIZE (16 * BASIC_PIPE_BUFFER)
char *
filesys_read_compressed (char *pathname, long int *filesize)
{
FILE *stream;
char *command, *decompressor;
char *contents = (char *)NULL;
*filesize = filesys_error_number = 0;
decompressor = filesys_decompressor_for_file (pathname);
if (!decompressor)
return ((char *)NULL);
command = (char *)xmalloc (15 + strlen (pathname) + strlen (decompressor));
/* Explicit .exe suffix makes the diagnostics of `popen'
better on systems where COMMAND.COM is the stock shell. */
sprintf (command, "%s%s < %s",
decompressor, STRIP_DOT_EXE ? ".exe" : "", pathname);
#if !defined (BUILDING_LIBRARY)
if (info_windows_initialized_p)
{
char *temp;
temp = (char *)xmalloc (5 + strlen (command));
sprintf (temp, "%s...", command);
message_in_echo_area ("%s", temp, NULL);
free (temp);
}
#endif /* !BUILDING_LIBRARY */
stream = popen (command, FOPEN_RBIN);
free (command);
/* Read chunks from this file until there are none left to read. */
if (stream)
{
long offset, size;
char *chunk;
offset = size = 0;
chunk = (char *)xmalloc (FILESYS_PIPE_BUFFER_SIZE);
while (1)
{
int bytes_read;
bytes_read = fread (chunk, 1, FILESYS_PIPE_BUFFER_SIZE, stream);
if (bytes_read + offset >= size)
contents = (char *)xrealloc
(contents, size += (2 * FILESYS_PIPE_BUFFER_SIZE));
memcpy (contents + offset, chunk, bytes_read);
offset += bytes_read;
if (bytes_read != FILESYS_PIPE_BUFFER_SIZE)
break;
}
free (chunk);
if (pclose (stream) == -1)
{
if (contents)
free (contents);
contents = (char *)NULL;
filesys_error_number = errno;
}
else
{
*filesize = convert_eols (contents, offset);
contents = (char *)xrealloc (contents, 1 + *filesize);
contents[*filesize] = '\0';
}
}
else
{
filesys_error_number = errno;
}
#if !defined (BUILDING_LIBARARY)
if (info_windows_initialized_p)
unmessage_in_echo_area ();
#endif /* !BUILDING_LIBRARY */
return (contents);
}
/* Return non-zero if FILENAME belongs to a compressed file. */
int
compressed_filename_p (char *filename)
{
char *decompressor;
/* Find the final extension of this filename, and see if it matches one
of our known ones. */
decompressor = filesys_decompressor_for_file (filename);
if (decompressor)
return (1);
else
return (0);
}
/* Return the command string that would be used to decompress FILENAME. */
char *
filesys_decompressor_for_file (char *filename)
{
register int i;
char *extension = (char *)NULL;
/* Find the final extension of FILENAME, and see if it appears in our
list of known compression extensions. */
for (i = strlen (filename) - 1; i > 0; i--)
if (filename[i] == '.')
{
extension = filename + i;
break;
}
if (!extension)
return ((char *)NULL);
for (i = 0; compress_suffixes[i].suffix; i++)
if (FILENAME_CMP (extension, compress_suffixes[i].suffix) == 0)
return (compress_suffixes[i].decompressor);
#if defined (__MSDOS__)
/* If no other suffix matched, allow any extension which ends
with `z' to be decompressed by gunzip. Due to limited 8+3 DOS
file namespace, we can expect many such cases, and supporting
every weird suffix thus produced would be a pain. */
if (extension[strlen (extension) - 1] == 'z' ||
extension[strlen (extension) - 1] == 'Z')
return "gunzip";
#endif
return ((char *)NULL);
}
/* The number of the most recent file system error. */
int filesys_error_number = 0;
/* A function which returns a pointer to a static buffer containing
an error message for FILENAME and ERROR_NUM. */
static char *errmsg_buf = (char *)NULL;
static int errmsg_buf_size = 0;
char *
filesys_error_string (char *filename, int error_num)
{
int len;
char *result;
if (error_num == 0)
return ((char *)NULL);
result = strerror (error_num);
len = 4 + strlen (filename) + strlen (result);
if (len >= errmsg_buf_size)
errmsg_buf = (char *)xrealloc (errmsg_buf, (errmsg_buf_size = 2 + len));
sprintf (errmsg_buf, "%s: %s", filename, result);
return (errmsg_buf);
}
/* Check for "dir" with all the possible info and compression suffixes,
in combination. */
int
is_dir_name (char *filename)
{
unsigned i;
for (i = 0; info_suffixes[i]; i++)
{
unsigned c;
char trydir[50];
strcpy (trydir, "dir");
strcat (trydir, info_suffixes[i]);
if (strcasecmp (filename, trydir) == 0)
return 1;
for (c = 0; compress_suffixes[c].suffix; c++)
{
char dir_compressed[50]; /* can be short */
strcpy (dir_compressed, trydir);
strcat (dir_compressed, compress_suffixes[c].suffix);
if (strcasecmp (filename, dir_compressed) == 0)
return 1;
}
}
return 0;
}

View File

@ -0,0 +1,94 @@
/* $NetBSD: filesys.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* filesys.h -- external declarations for filesys.c.
Id: filesys.h,v 1.3 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1997, 1998, 2002, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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_FILESYS_H
#define INFO_FILESYS_H
/* The path on which we look for info files. You can initialize this
from the environment variable INFOPATH if there is one, or you can
call info_add_path () to add paths to the beginning or end of it. */
extern char *infopath;
/* Make INFOPATH have absolutely nothing in it. */
extern void zap_infopath (void);
/* Add PATH to the list of paths found in INFOPATH. 2nd argument says
whether to put PATH at the front or end of INFOPATH. */
extern void info_add_path (char *path, int where);
/* Defines that are passed along with the pathname to info_add_path (). */
#define INFOPATH_PREPEND 0
#define INFOPATH_APPEND 1
/* Expand the filename in PARTIAL to make a real name for this operating
system. This looks in INFO_PATHS in order to find the correct file.
If it can't find the file, it returns NULL. */
extern char *info_find_fullpath (char *partial);
/* Given a chunk of text and its length, convert all CRLF pairs at the
EOLs into a single Newline character. Return the length of produced
text. */
long convert_eols (char *text, long textlen);
/* Read the contents of PATHNAME, returning a buffer with the contents of
that file in it, and returning the size of that buffer in FILESIZE.
FINFO is a stat struct which has already been filled in by the caller.
If the file cannot be read, return a NULL pointer. */
extern char *filesys_read_info_file (char *pathname, long int *filesize,
struct stat *finfo, int *is_compressed);
extern char *filesys_read_compressed (char *pathname, long int *filesize);
/* Return the command string that would be used to decompress FILENAME. */
extern char *filesys_decompressor_for_file (char *filename);
extern int compressed_filename_p (char *filename);
/* A function which returns a pointer to a static buffer containing
an error message for FILENAME and ERROR_NUM. */
extern char *filesys_error_string (char *filename, int error_num);
/* The number of the most recent file system error. */
extern int filesys_error_number;
/* Given a string containing units of information separated by colons,
return the next one pointed to by IDX, or NULL if there are no more.
Advance IDX to the character after the colon. */
extern char *extract_colon_unit (char *string, int *idx);
/* Return true if FILENAME is `dir', with a possible compression suffix. */
extern int is_dir_name (char *filename);
/* The default value of INFOPATH. */
#if !defined (DEFAULT_INFOPATH)
# define DEFAULT_INFOPATH "/usr/local/info:/usr/info:/usr/local/lib/info:/usr/lib/info:/usr/local/gnu/info:/usr/local/gnu/lib/info:/usr/gnu/info:/usr/gnu/lib/info:/opt/gnu/info:/usr/share/info:/usr/share/lib/info:/usr/local/share/info:/usr/local/share/lib/info:/usr/gnu/lib/emacs/info:/usr/local/gnu/lib/emacs/info:/usr/local/lib/emacs/info:/usr/local/emacs/info:."
#endif /* !DEFAULT_INFOPATH */
#if !defined (S_ISREG) && defined (S_IFREG)
# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#endif /* !S_ISREG && S_IFREG */
#if !defined (S_ISDIR) && defined (S_IFDIR)
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif /* !S_ISDIR && S_IFDIR */
#endif /* not INFO_FILESYS_H */

View File

@ -0,0 +1,270 @@
/* $NetBSD: footnotes.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* footnotes.c -- Some functions for manipulating footnotes.
Id: footnotes.c,v 1.4 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1997, 1998, 1999, 2002, 2004 Free Software
Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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.
Originally written by Brian Fox (bfox@ai.mit.edu). */
#include "info.h"
/* Nonzero means attempt to show footnotes when displaying a new window. */
int auto_footnotes_p = 0;
static char *footnote_nodename = "*Footnotes*";
NODE * make_footnotes_node (NODE *node);
#define FOOTNOTE_HEADER_FORMAT \
"*** Footnotes appearing in the node `%s' ***\n"
/* Find the window currently showing footnotes. */
static WINDOW *
find_footnotes_window (void)
{
WINDOW *win;
/* Try to find an existing window first. */
for (win = windows; win; win = win->next)
if (internal_info_node_p (win->node) &&
(strcmp (win->node->nodename, footnote_nodename) == 0))
break;
return (win);
}
/* Manufacture a node containing the footnotes of this node, and
return the manufactured node. If NODE has no footnotes, return a
NULL pointer. */
NODE *
make_footnotes_node (NODE *node)
{
NODE *fn_node, *result = (NODE *)NULL;
long fn_start;
/* Make the initial assumption that the footnotes appear as simple
text within this windows node. */
fn_node = node;
/* See if this node contains the magic footnote label. */
fn_start =
info_search_in_node (FOOTNOTE_LABEL, node, 0, (WINDOW *)NULL, 1, 0);
/* If it doesn't, check to see if it has an associated footnotes node. */
if (fn_start == -1)
{
REFERENCE **refs;
refs = info_xrefs_of_node (node);
if (refs)
{
register int i;
char *refname;
int reflen = strlen ("-Footnotes") + strlen (node->nodename);
refname = (char *)xmalloc (reflen + 1);
strcpy (refname, node->nodename);
strcat (refname, "-Footnotes");
for (i = 0; refs[i]; i++)
if ((refs[i]->nodename != (char *)NULL) &&
/* Support both the older "foo-Footnotes" and the new
style "foo-Footnote-NN" references. */
(strcmp (refs[i]->nodename, refname) == 0 ||
(strncmp (refs[i]->nodename, refname, reflen - 1) == 0 &&
refs[i]->nodename[reflen - 1] == '-' &&
isdigit (refs[i]->nodename[reflen]))))
{
char *filename;
filename = node->parent;
if (!filename)
filename = node->filename;
fn_node = info_get_node (filename, refname);
if (fn_node)
fn_start = 0;
break;
}
free (refname);
info_free_references (refs);
}
}
/* If we never found the start of a footnotes area, quit now. */
if (fn_start == -1)
return ((NODE *)NULL);
/* Make the new node. */
result = (NODE *)xmalloc (sizeof (NODE));
result->flags = 0;
result->display_pos = 0;
/* Get the size of the footnotes appearing within this node. */
{
char *header;
long text_start = fn_start;
header = (char *)xmalloc
(1 + strlen (node->nodename) + strlen (FOOTNOTE_HEADER_FORMAT));
sprintf (header, FOOTNOTE_HEADER_FORMAT, node->nodename);
/* Move the start of the displayed text to right after the first line.
This effectively skips either "---- footno...", or "File: foo...". */
while (text_start < fn_node->nodelen)
if (fn_node->contents[text_start++] == '\n')
break;
result->nodelen = strlen (header) + fn_node->nodelen - text_start;
/* Set the contents of this node. */
result->contents = (char *)xmalloc (1 + result->nodelen);
sprintf (result->contents, "%s", header);
memcpy (result->contents + strlen (header),
fn_node->contents + text_start, fn_node->nodelen - text_start);
name_internal_node (result, footnote_nodename);
free (header);
}
#if defined (NOTDEF)
/* If the footnotes were gleaned from the node that we were called with,
shorten the calling node's display length. */
if (fn_node == node)
narrow_node (node, 0, fn_start);
#endif /* NOTDEF */
return (result);
}
/* Create or delete the footnotes window depending on whether footnotes
exist in WINDOW's node or not. Returns FN_FOUND if footnotes were found
and displayed. Returns FN_UNFOUND if there were no footnotes found
in WINDOW's node. Returns FN_UNABLE if there were footnotes, but the
window to show them couldn't be made. */
int
info_get_or_remove_footnotes (WINDOW *window)
{
WINDOW *fn_win;
NODE *new_footnotes;
fn_win = find_footnotes_window ();
/* If we are in the footnotes window, change nothing. */
if (fn_win == window)
return (FN_FOUND);
/* Try to find footnotes for this window's node. */
new_footnotes = make_footnotes_node (window->node);
/* If there was a window showing footnotes, and there are no footnotes
for the current window, delete the old footnote window. */
if (fn_win && !new_footnotes)
{
if (windows->next)
info_delete_window_internal (fn_win);
}
/* If there are footnotes for this window's node, but no window around
showing footnotes, try to make a new window. */
if (new_footnotes && !fn_win)
{
WINDOW *old_active;
WINDOW *last, *win;
/* Always make this window be the last one appearing in the list. Find
the last window in the chain. */
for (win = windows, last = windows; win; last = win, win = win->next);
/* Try to split this window, and make the split window the one to
contain the footnotes. */
old_active = active_window;
active_window = last;
fn_win = window_make_window (new_footnotes);
active_window = old_active;
if (!fn_win)
{
free (new_footnotes->contents);
free (new_footnotes);
/* If we are hacking automatic footnotes, and there are footnotes
but we couldn't display them, print a message to that effect. */
if (auto_footnotes_p)
inform_in_echo_area ((char *) _("Footnotes could not be displayed"));
return (FN_UNABLE);
}
}
/* If there are footnotes, and there is a window to display them,
make that window be the number of lines appearing in the footnotes. */
if (new_footnotes && fn_win)
{
window_set_node_of_window (fn_win, new_footnotes);
window_change_window_height
(fn_win, fn_win->line_count - fn_win->height);
remember_window_and_node (fn_win, new_footnotes);
add_gcable_pointer (new_footnotes->contents);
}
if (!new_footnotes)
return (FN_UNFOUND);
else
return (FN_FOUND);
}
/* Show the footnotes associated with this node in another window. */
DECLARE_INFO_COMMAND (info_show_footnotes,
_("Show the footnotes associated with this node in another window"))
{
/* A negative argument means just make the window go away. */
if (count < 0)
{
WINDOW *fn_win = find_footnotes_window ();
/* If there is an old footnotes window, and it isn't the only window
on the screen, delete it. */
if (fn_win && windows->next)
info_delete_window_internal (fn_win);
}
else
{
int result;
result = info_get_or_remove_footnotes (window);
switch (result)
{
case FN_UNFOUND:
info_error ((char *) msg_no_foot_node, NULL, NULL);
break;
case FN_UNABLE:
info_error ((char *) msg_win_too_small, NULL, NULL);
break;
}
}
}

View File

@ -0,0 +1,45 @@
/* $NetBSD: footnotes.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* footnotes.h -- Some functions for manipulating footnotes.
Id: footnotes.h,v 1.3 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1997, 1998, 2002, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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_FOOTNOTES_H
#define INFO_FOOTNOTES_H
/* Magic string which indicates following text is footnotes. */
#define FOOTNOTE_LABEL N_("---------- Footnotes ----------")
#define FN_FOUND 0
#define FN_UNFOUND 1
#define FN_UNABLE 2
/* Create or delete the footnotes window depending on whether footnotes
exist in WINDOW's node or not. Returns FN_FOUND if footnotes were found
and displayed. Returns FN_UNFOUND if there were no footnotes found
in WINDOW's node. Returns FN_UNABLE if there were footnotes, but the
window to show them couldn't be made. */
extern int info_get_or_remove_footnotes (WINDOW *window);
/* Non-zero means attempt to show footnotes when displaying a new window. */
extern int auto_footnotes_p;
#endif /* not INFO_FOOTNOTES_H */

94
external/gpl2/texinfo/dist/info/gc.c vendored Normal file
View File

@ -0,0 +1,94 @@
/* $NetBSD: gc.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* gc.c -- Functions to remember and garbage collect unused node contents.
Id: gc.c,v 1.3 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 2004 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"
/* Array of pointers to the contents of gc-able nodes. A pointer on this
list can be garbage collected when no info window contains a node whose
contents member match the pointer. */
static char **gcable_pointers = (char **)NULL;
static int gcable_pointers_index = 0;
static int gcable_pointers_slots = 0;
/* Add POINTER to the list of garbage collectible pointers. A pointer
is not actually garbage collected until no info window contains a node
whose contents member is equal to the pointer. */
void
add_gcable_pointer (char *pointer)
{
gc_pointers ();
add_pointer_to_array (pointer, gcable_pointers_index, gcable_pointers,
gcable_pointers_slots, 10, char *);
}
/* Grovel the list of info windows and gc-able pointers finding those
node->contents which are collectible, and free them. */
void
gc_pointers (void)
{
register int i, j, k;
INFO_WINDOW *iw;
char **new = (char **)NULL;
int new_index = 0;
int new_slots = 0;
if (!info_windows || !gcable_pointers_index)
return;
for (i = 0; (iw = info_windows[i]); i++)
{
for (j = 0; j < iw->nodes_index; j++)
{
NODE *node = iw->nodes[j];
/* If this node->contents appears in our list of gcable_pointers,
it is not gc-able, so save it. */
for (k = 0; k < gcable_pointers_index; k++)
if (gcable_pointers[k] == node->contents)
{
add_pointer_to_array
(node->contents, new_index, new, new_slots, 10, char *);
break;
}
}
}
/* We have gathered all of the pointers which need to be saved. Free any
of the original pointers which do not appear in the new list. */
for (i = 0; i < gcable_pointers_index; i++)
{
for (j = 0; j < new_index; j++)
if (gcable_pointers[i] == new[j])
break;
/* If we got all the way through the new list, then the old pointer
can be garbage collected. */
if (new && !new[j])
free (gcable_pointers[i]);
}
free (gcable_pointers);
gcable_pointers = new;
gcable_pointers_slots = new_slots;
gcable_pointers_index = new_index;
}

39
external/gpl2/texinfo/dist/info/gc.h vendored Normal file
View File

@ -0,0 +1,39 @@
/* $NetBSD: gc.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* gc.h -- Functions for garbage collecting unused node contents.
Id: gc.h,v 1.3 2004/04/11 17:56:45 karl Exp
This file is part of GNU Info, a program for reading online documentation
stored in Info format.
Copyright (C) 1993, 1997, 2004 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_GC_H
#define INFO_GC_H
/* Add POINTER to the list of garbage collectible pointers. A pointer
is not actually garbage collected until no info window contains a node
whose contents member is equal to the pointer. */
extern void add_gcable_pointer (char *pointer);
/* Grovel the list of info windows and gc-able pointers finding those
node->contents which are collectible, and free them. */
extern void gc_pointers (void);
#endif /* not INFO_GC_H */

View File

@ -0,0 +1,737 @@
/* $NetBSD: indices.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* indices.c -- deal with an Info file index.
Id: indices.c,v 1.5 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1997, 1998, 1999, 2002, 2003, 2004 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.
Originally written by Brian Fox (bfox@ai.mit.edu). */
#include "info.h"
#include "indices.h"
/* User-visible variable controls the output of info-index-next. */
int show_index_match = 1;
/* In the Info sense, an index is a menu. This variable holds the last
parsed index. */
static REFERENCE **index_index = (REFERENCE **)NULL;
/* The offset of the most recently selected index element. */
static int index_offset = 0;
/* Variable which holds the last string searched for. */
static char *index_search = (char *)NULL;
/* A couple of "globals" describing where the initial index was found. */
static char *initial_index_filename = (char *)NULL;
static char *initial_index_nodename = (char *)NULL;
/* A structure associating index names with index offset ranges. */
typedef struct {
char *name; /* The nodename of this index. */
int first; /* The index in our list of the first entry. */
int last; /* The index in our list of the last entry. */
} INDEX_NAME_ASSOC;
/* An array associating index nodenames with index offset ranges. */
static INDEX_NAME_ASSOC **index_nodenames = (INDEX_NAME_ASSOC **)NULL;
static int index_nodenames_index = 0;
static int index_nodenames_slots = 0;
/* Add the name of NODE, and the range of the associated index elements
(passed in ARRAY) to index_nodenames. */
static void
add_index_to_index_nodenames (REFERENCE **array, NODE *node)
{
register int i, last;
INDEX_NAME_ASSOC *assoc;
for (last = 0; array[last + 1]; last++);
assoc = (INDEX_NAME_ASSOC *)xmalloc (sizeof (INDEX_NAME_ASSOC));
assoc->name = xstrdup (node->nodename);
if (!index_nodenames_index)
{
assoc->first = 0;
assoc->last = last;
}
else
{
for (i = 0; index_nodenames[i + 1]; i++);
assoc->first = 1 + index_nodenames[i]->last;
assoc->last = assoc->first + last;
}
add_pointer_to_array
(assoc, index_nodenames_index, index_nodenames, index_nodenames_slots,
10, INDEX_NAME_ASSOC *);
}
/* Find and return the indices of WINDOW's file. The indices are defined
as the first node in the file containing the word "Index" and any
immediately following nodes whose names also contain "Index". All such
indices are concatenated and the result returned. If WINDOW's info file
doesn't have any indices, a NULL pointer is returned. */
REFERENCE **
info_indices_of_window (WINDOW *window)
{
FILE_BUFFER *fb;
fb = file_buffer_of_window (window);
return (info_indices_of_file_buffer (fb));
}
REFERENCE **
info_indices_of_file_buffer (FILE_BUFFER *file_buffer)
{
register int i;
REFERENCE **result = (REFERENCE **)NULL;
/* No file buffer, no indices. */
if (!file_buffer)
return ((REFERENCE **)NULL);
/* Reset globals describing where the index was found. */
maybe_free (initial_index_filename);
maybe_free (initial_index_nodename);
initial_index_filename = (char *)NULL;
initial_index_nodename = (char *)NULL;
if (index_nodenames)
{
for (i = 0; index_nodenames[i]; i++)
{
free (index_nodenames[i]->name);
free (index_nodenames[i]);
}
index_nodenames_index = 0;
index_nodenames[0] = (INDEX_NAME_ASSOC *)NULL;
}
/* Grovel the names of the nodes found in this file. */
if (file_buffer->tags)
{
TAG *tag;
for (i = 0; (tag = file_buffer->tags[i]); i++)
{
if (string_in_line ("Index", tag->nodename) != -1)
{
NODE *node;
REFERENCE **menu;
/* Found one. Get its menu. */
node = info_get_node (tag->filename, tag->nodename);
if (!node)
continue;
/* Remember the filename and nodename of this index. */
initial_index_filename = xstrdup (file_buffer->filename);
initial_index_nodename = xstrdup (tag->nodename);
menu = info_menu_of_node (node);
/* If we have a menu, add this index's nodename and range
to our list of index_nodenames. */
if (menu)
{
add_index_to_index_nodenames (menu, node);
/* Concatenate the references found so far. */
result = info_concatenate_references (result, menu);
}
free (node);
}
}
}
/* If there is a result, clean it up so that every entry has a filename. */
for (i = 0; result && result[i]; i++)
if (!result[i]->filename)
result[i]->filename = xstrdup (file_buffer->filename);
return (result);
}
DECLARE_INFO_COMMAND (info_index_search,
_("Look up a string in the index for this file"))
{
do_info_index_search (window, count, 0);
}
/* Look up SEARCH_STRING in the index for this file. If SEARCH_STRING
is NULL, prompt user for input. */
void
do_info_index_search (WINDOW *window, int count, char *search_string)
{
FILE_BUFFER *fb;
char *line;
/* Reset the index offset, since this is not the info-index-next command. */
index_offset = 0;
/* The user is selecting a new search string, so flush the old one. */
maybe_free (index_search);
index_search = (char *)NULL;
/* If this window's file is not the same as the one that we last built an
index for, build and remember an index now. */
fb = file_buffer_of_window (window);
if (!initial_index_filename ||
(FILENAME_CMP (initial_index_filename, fb->filename) != 0))
{
info_free_references (index_index);
window_message_in_echo_area ((char *) _("Finding index entries..."),
NULL, NULL);
index_index = info_indices_of_file_buffer (fb);
}
/* If there is no index, quit now. */
if (!index_index)
{
info_error ((char *) _("No indices found."), NULL, NULL);
return;
}
/* Okay, there is an index. Look for SEARCH_STRING, or, if it is
empty, prompt for one. */
if (search_string && *search_string)
line = xstrdup (search_string);
else
{
line = info_read_maybe_completing (window, (char *) _("Index entry: "),
index_index);
window = active_window;
/* User aborted? */
if (!line)
{
info_abort_key (active_window, 1, 0);
return;
}
/* Empty line means move to the Index node. */
if (!*line)
{
free (line);
if (initial_index_filename && initial_index_nodename)
{
NODE *node;
node = info_get_node (initial_index_filename,
initial_index_nodename);
set_remembered_pagetop_and_point (window);
window_set_node_of_window (window, node);
remember_window_and_node (window, node);
window_clear_echo_area ();
return;
}
}
}
/* The user typed either a completed index label, or a partial string.
Find an exact match, or, failing that, the first index entry containing
the partial string. So, we just call info_next_index_match () with minor
manipulation of INDEX_OFFSET. */
{
int old_offset;
/* Start the search right after/before this index. */
if (count < 0)
{
register int i;
for (i = 0; index_index[i]; i++);
index_offset = i;
}
else
index_offset = -1;
old_offset = index_offset;
/* The "last" string searched for is this one. */
index_search = line;
/* Find it, or error. */
info_next_index_match (window, count, 0);
/* If the search failed, return the index offset to where it belongs. */
if (index_offset == old_offset)
index_offset = 0;
}
}
int
index_entry_exists (WINDOW *window, char *string)
{
register int i;
FILE_BUFFER *fb;
/* If there is no previous search string, the user hasn't built an index
yet. */
if (!string)
return 0;
fb = file_buffer_of_window (window);
if (!initial_index_filename
|| (FILENAME_CMP (initial_index_filename, fb->filename) != 0))
{
info_free_references (index_index);
index_index = info_indices_of_file_buffer (fb);
}
/* If there is no index, that is an error. */
if (!index_index)
return 0;
for (i = 0; (i > -1) && (index_index[i]); i++)
if (strcmp (string, index_index[i]->label) == 0)
break;
/* If that failed, look for the next substring match. */
if ((i < 0) || (!index_index[i]))
{
for (i = 0; (i > -1) && (index_index[i]); i++)
if (string_in_line (string, index_index[i]->label) != -1)
break;
if ((i > -1) && (index_index[i]))
string_in_line (string, index_index[i]->label);
}
/* If that failed, return 0. */
if ((i < 0) || (!index_index[i]))
return 0;
return 1;
}
DECLARE_INFO_COMMAND (info_next_index_match,
_("Go to the next matching index item from the last `\\[index-search]' command"))
{
register int i;
int partial, dir;
NODE *node;
/* If there is no previous search string, the user hasn't built an index
yet. */
if (!index_search)
{
info_error ((char *) _("No previous index search string."), NULL, NULL);
return;
}
/* If there is no index, that is an error. */
if (!index_index)
{
info_error ((char *) _("No index entries."), NULL, NULL);
return;
}
/* The direction of this search is controlled by the value of the
numeric argument. */
if (count < 0)
dir = -1;
else
dir = 1;
/* Search for the next occurence of index_search. First try to find
an exact match. */
partial = 0;
for (i = index_offset + dir; (i > -1) && (index_index[i]); i += dir)
if (strcmp (index_search, index_index[i]->label) == 0)
break;
/* If that failed, look for the next substring match. */
if ((i < 0) || (!index_index[i]))
{
for (i = index_offset + dir; (i > -1) && (index_index[i]); i += dir)
if (string_in_line (index_search, index_index[i]->label) != -1)
break;
if ((i > -1) && (index_index[i]))
partial = string_in_line (index_search, index_index[i]->label);
}
/* If that failed, print an error. */
if ((i < 0) || (!index_index[i]))
{
info_error ((char *) _("No %sindex entries containing `%s'."),
index_offset > 0 ? (char *) _("more ") : "", index_search);
return;
}
/* Okay, we found the next one. Move the offset to the current entry. */
index_offset = i;
/* Report to the user on what we have found. */
{
register int j;
const char *name = _("CAN'T SEE THIS");
char *match;
for (j = 0; index_nodenames[j]; j++)
{
if ((i >= index_nodenames[j]->first) &&
(i <= index_nodenames[j]->last))
{
name = index_nodenames[j]->name;
break;
}
}
/* If we had a partial match, indicate to the user which part of the
string matched. */
match = xstrdup (index_index[i]->label);
if (partial && show_index_match)
{
int k, ls, start, upper;
ls = strlen (index_search);
start = partial - ls;
upper = isupper (match[start]) ? 1 : 0;
for (k = 0; k < ls; k++)
if (upper)
match[k + start] = info_tolower (match[k + start]);
else
match[k + start] = info_toupper (match[k + start]);
}
{
char *format;
format = replace_in_documentation
((char *) _("Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"),
0);
window_message_in_echo_area (format, match, (char *) name);
}
free (match);
}
/* Select the node corresponding to this index entry. */
node = info_get_node (index_index[i]->filename, index_index[i]->nodename);
if (!node)
{
info_error ((char *) msg_cant_file_node,
index_index[i]->filename, index_index[i]->nodename);
return;
}
info_set_node_of_window (1, window, node);
/* Try to find an occurence of LABEL in this node. */
{
long start, loc;
start = window->line_starts[1] - window->node->contents;
loc = info_target_search_node (node, index_index[i]->label, start);
if (loc != -1)
{
window->point = loc;
window_adjust_pagetop (window);
}
}
}
/* **************************************************************** */
/* */
/* Info APROPOS: Search every known index. */
/* */
/* **************************************************************** */
/* For every menu item in DIR, search the indices of that file for
SEARCH_STRING. */
REFERENCE **
apropos_in_all_indices (char *search_string, int inform)
{
register int i, dir_index;
REFERENCE **all_indices = (REFERENCE **)NULL;
REFERENCE **dir_menu = (REFERENCE **)NULL;
NODE *dir_node;
dir_node = info_get_node ("dir", "Top");
if (dir_node)
dir_menu = info_menu_of_node (dir_node);
if (!dir_menu)
return NULL;
/* For every menu item in DIR, get the associated node's file buffer and
read the indices of that file buffer. Gather all of the indices into
one large one. */
for (dir_index = 0; dir_menu[dir_index]; dir_index++)
{
REFERENCE **this_index, *this_item;
NODE *this_node;
FILE_BUFFER *this_fb;
int dir_node_duplicated = 0;
this_item = dir_menu[dir_index];
if (!this_item->filename)
{
dir_node_duplicated = 1;
if (dir_node->parent)
this_item->filename = xstrdup (dir_node->parent);
else
this_item->filename = xstrdup (dir_node->filename);
}
/* Find this node. If we cannot find it, try using the label of the
entry as a file (i.e., "(LABEL)Top"). */
this_node = info_get_node (this_item->filename, this_item->nodename);
if (!this_node && this_item->nodename &&
(strcmp (this_item->label, this_item->nodename) == 0))
this_node = info_get_node (this_item->label, "Top");
if (!this_node)
{
if (dir_node_duplicated)
free (this_item->filename);
continue;
}
/* Get the file buffer associated with this node. */
{
char *files_name;
files_name = this_node->parent;
if (!files_name)
files_name = this_node->filename;
this_fb = info_find_file (files_name);
/* If we already scanned this file, don't do that again.
In addition to being faster, this also avoids having
multiple identical entries in the *Apropos* menu. */
for (i = 0; i < dir_index; i++)
if (FILENAME_CMP (this_fb->filename, dir_menu[i]->filename) == 0)
break;
if (i < dir_index)
{
if (dir_node_duplicated)
free (this_item->filename);
continue;
}
if (this_fb && inform)
message_in_echo_area ((char *) _("Scanning indices of `%s'..."),
files_name, NULL);
this_index = info_indices_of_file_buffer (this_fb);
free (this_node);
if (this_fb && inform)
unmessage_in_echo_area ();
}
if (this_index)
{
/* Remember the filename which contains this set of references. */
for (i = 0; this_index && this_index[i]; i++)
if (!this_index[i]->filename)
this_index[i]->filename = xstrdup (this_fb->filename);
/* Concatenate with the other indices. */
all_indices = info_concatenate_references (all_indices, this_index);
}
}
info_free_references (dir_menu);
/* Build a list of the references which contain SEARCH_STRING. */
if (all_indices)
{
REFERENCE *entry, **apropos_list = (REFERENCE **)NULL;
int apropos_list_index = 0;
int apropos_list_slots = 0;
for (i = 0; (entry = all_indices[i]); i++)
{
if (string_in_line (search_string, entry->label) != -1)
{
add_pointer_to_array
(entry, apropos_list_index, apropos_list, apropos_list_slots,
100, REFERENCE *);
}
else
{
maybe_free (entry->label);
maybe_free (entry->filename);
maybe_free (entry->nodename);
free (entry);
}
}
free (all_indices);
all_indices = apropos_list;
}
return (all_indices);
}
#define APROPOS_NONE \
N_("No available info files have `%s' in their indices.")
void
info_apropos (char *string)
{
REFERENCE **apropos_list;
apropos_list = apropos_in_all_indices (string, 0);
if (!apropos_list)
info_error ((char *) _(APROPOS_NONE), string, NULL);
else
{
register int i;
REFERENCE *entry;
for (i = 0; (entry = apropos_list[i]); i++)
fprintf (stdout, "\"(%s)%s\" -- %s\n",
entry->filename, entry->nodename, entry->label);
}
info_free_references (apropos_list);
}
static char *apropos_list_nodename = "*Apropos*";
DECLARE_INFO_COMMAND (info_index_apropos,
_("Grovel all known info file's indices for a string and build a menu"))
{
char *line;
line = info_read_in_echo_area (window, (char *) _("Index apropos: "));
window = active_window;
/* User aborted? */
if (!line)
{
info_abort_key (window, 1, 1);
return;
}
/* User typed something? */
if (*line)
{
REFERENCE **apropos_list;
NODE *apropos_node;
apropos_list = apropos_in_all_indices (line, 1);
if (!apropos_list)
info_error ((char *) _(APROPOS_NONE), line, NULL);
else
{
register int i;
char *line_buffer;
initialize_message_buffer ();
printf_to_message_buffer
((char *) _("\n* Menu: Nodes whose indices contain `%s':\n"),
line, NULL, NULL);
line_buffer = (char *)xmalloc (500);
for (i = 0; apropos_list[i]; i++)
{
int len;
/* The label might be identical to that of another index
entry in another Info file. Therefore, we make the file
name part of the menu entry, to make them all distinct. */
sprintf (line_buffer, "* %s [%s]: ",
apropos_list[i]->label, apropos_list[i]->filename);
len = pad_to (40, line_buffer);
sprintf (line_buffer + len, "(%s)%s.",
apropos_list[i]->filename, apropos_list[i]->nodename);
printf_to_message_buffer ("%s\n", line_buffer, NULL, NULL);
}
free (line_buffer);
}
apropos_node = message_buffer_to_node ();
add_gcable_pointer (apropos_node->contents);
name_internal_node (apropos_node, apropos_list_nodename);
/* Even though this is an internal node, we don't want the window
system to treat it specially. So we turn off the internalness
of it here. */
apropos_node->flags &= ~N_IsInternal;
/* Find/Create a window to contain this node. */
{
WINDOW *new;
NODE *node;
set_remembered_pagetop_and_point (window);
/* If a window is visible and showing an apropos list already,
re-use it. */
for (new = windows; new; new = new->next)
{
node = new->node;
if (internal_info_node_p (node) &&
(strcmp (node->nodename, apropos_list_nodename) == 0))
break;
}
/* If we couldn't find an existing window, try to use the next window
in the chain. */
if (!new && window->next)
new = window->next;
/* If we still don't have a window, make a new one to contain
the list. */
if (!new)
{
WINDOW *old_active;
old_active = active_window;
active_window = window;
new = window_make_window ((NODE *)NULL);
active_window = old_active;
}
/* If we couldn't make a new window, use this one. */
if (!new)
new = window;
/* Lines do not wrap in this window. */
new->flags |= W_NoWrap;
window_set_node_of_window (new, apropos_node);
remember_window_and_node (new, apropos_node);
active_window = new;
}
info_free_references (apropos_list);
}
free (line);
if (!info_error_was_printed)
window_clear_echo_area ();
}

View File

@ -0,0 +1,47 @@
/* $NetBSD: indices.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* indices.h -- Functions defined in indices.c.
Id: indices.h,v 1.3 2004/04/11 17:56:45 karl Exp
This file is part of GNU Info, a program for reading online documentation
stored in Info format.
Copyright (C) 1993, 1997, 2004 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_INDICES_H
#define INFO_INDICES_H
/* User-visible variable controls the output of info-index-next. */
extern int show_index_match;
extern REFERENCE **info_indices_of_window (WINDOW *window);
extern REFERENCE **info_indices_of_file_buffer (FILE_BUFFER *file_buffer);
extern void info_apropos (char *string);
/* For every menu item in DIR, search the indices of that file for STRING. */
REFERENCE **apropos_in_all_indices (char *search_string, int inform);
/* User visible functions declared in indices.c. */
extern void info_index_search (WINDOW *window, int count, unsigned char key);
extern void info_next_index_match (WINDOW *window, int count, unsigned char key);
extern void info_index_apropos (WINDOW *window, int count, unsigned char key);
extern void do_info_index_search (WINDOW *window, int count, char *search_string);
extern int index_entry_exists (WINDOW *window, char *string);
#endif /* not INFO_INDICES_H */

View File

@ -0,0 +1,703 @@
/* $NetBSD: info-utils.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* info-utils.c -- miscellanous.
Id: info-utils.c,v 1.4 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1998, 2003, 2004 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.
Originally written by Brian Fox (bfox@ai.mit.edu). */
#include "info.h"
#include "info-utils.h"
#if defined (HANDLE_MAN_PAGES)
# include "man.h"
#endif /* HANDLE_MAN_PAGES */
/* When non-zero, various display and input functions handle ISO Latin
character sets correctly. */
int ISO_Latin_p = 1;
/* Variable which holds the most recent filename parsed as a result of
calling info_parse_xxx (). */
char *info_parsed_filename = (char *)NULL;
/* Variable which holds the most recent nodename parsed as a result of
calling info_parse_xxx (). */
char *info_parsed_nodename = (char *)NULL;
/* Variable which holds the most recent line number parsed as a result of
calling info_parse_xxx (). */
int info_parsed_line_number = 0;
/* Functions to remember a filename or nodename for later return. */
static void save_filename (char *filename);
static void saven_filename (char *filename, int len);
static void save_nodename (char *nodename);
static void saven_nodename (char *nodename, int len);
/* How to get a reference (either menu or cross). */
static REFERENCE **info_references_internal (char *label,
SEARCH_BINDING *binding);
/* Parse the filename and nodename out of STRING. If STRING doesn't
contain a filename (i.e., it is NOT (FILENAME)NODENAME) then set
INFO_PARSED_FILENAME to NULL. If second argument NEWLINES_OKAY is
non-zero, it says to allow the nodename specification to cross a
newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
void
info_parse_node (char *string, int newlines_okay)
{
register int i = 0;
/* Default the answer. */
save_filename ((char *)NULL);
save_nodename ((char *)NULL);
/* Special case of nothing passed. Return nothing. */
if (!string || !*string)
return;
string += skip_whitespace (string);
/* Check for (FILENAME)NODENAME. */
if (*string == '(')
{
i = 0;
/* Advance past the opening paren. */
string++;
/* Find the closing paren. */
while (string[i] && string[i] != ')')
i++;
/* Remember parsed filename. */
saven_filename (string, i);
/* Point directly at the nodename. */
string += i;
if (*string)
string++;
}
/* Parse out nodename. */
i = skip_node_characters (string, newlines_okay);
saven_nodename (string, i);
canonicalize_whitespace (info_parsed_nodename);
if (info_parsed_nodename && !*info_parsed_nodename)
{
free (info_parsed_nodename);
info_parsed_nodename = (char *)NULL;
}
/* Parse ``(line ...)'' part of menus, if any. */
{
char *rest = string + i;
/* Advance only if it's not already at end of string. */
if (*rest)
rest++;
/* Skip any whitespace first, and then a newline in case the item
was so long to contain the ``(line ...)'' string in the same
physical line. */
while (whitespace(*rest))
rest++;
if (*rest == '\n')
{
rest++;
while (whitespace(*rest))
rest++;
}
/* Are we looking at an opening parenthesis? That can only mean
we have a winner. :) */
if (strncmp (rest, "(line ", strlen ("(line ")) == 0)
{
rest += strlen ("(line ");
info_parsed_line_number = strtol (rest, NULL, 0);
}
else
info_parsed_line_number = 0;
}
}
/* Return the node addressed by LABEL in NODE (usually one of "Prev:",
"Next:", "Up:", "File:", or "Node:". After a call to this function,
the global INFO_PARSED_NODENAME and INFO_PARSED_FILENAME contain
the information. */
void
info_parse_label (char *label, NODE *node)
{
register int i;
char *nodeline;
/* Default answer to failure. */
save_nodename ((char *)NULL);
save_filename ((char *)NULL);
/* Find the label in the first line of this node. */
nodeline = node->contents;
i = string_in_line (label, nodeline);
if (i == -1)
return;
nodeline += i;
nodeline += skip_whitespace (nodeline);
info_parse_node (nodeline, DONT_SKIP_NEWLINES);
}
/* **************************************************************** */
/* */
/* Finding and Building Menus */
/* */
/* **************************************************************** */
/* Return a NULL terminated array of REFERENCE * which represents the menu
found in NODE. If there is no menu in NODE, just return a NULL pointer. */
REFERENCE **
info_menu_of_node (NODE *node)
{
long position;
SEARCH_BINDING tmp_search;
REFERENCE **menu = (REFERENCE **)NULL;
tmp_search.buffer = node->contents;
tmp_search.start = 0;
tmp_search.end = node->nodelen;
tmp_search.flags = S_FoldCase;
/* Find the start of the menu. */
position = search_forward (INFO_MENU_LABEL, &tmp_search);
if (position == -1)
return ((REFERENCE **) NULL);
/* We have the start of the menu now. Glean menu items from the rest
of the node. */
tmp_search.start = position + strlen (INFO_MENU_LABEL);
tmp_search.start += skip_line (tmp_search.buffer + tmp_search.start);
tmp_search.start--;
menu = info_menu_items (&tmp_search);
return (menu);
}
/* Return a NULL terminated array of REFERENCE * which represents the cross
refrences found in NODE. If there are no cross references in NODE, just
return a NULL pointer. */
REFERENCE **
info_xrefs_of_node (NODE *node)
{
SEARCH_BINDING tmp_search;
#if defined (HANDLE_MAN_PAGES)
if (node->flags & N_IsManPage)
return (xrefs_of_manpage (node));
#endif
tmp_search.buffer = node->contents;
tmp_search.start = 0;
tmp_search.end = node->nodelen;
tmp_search.flags = S_FoldCase;
return (info_xrefs (&tmp_search));
}
/* Glean menu entries from BINDING->buffer + BINDING->start until we
have looked at the entire contents of BINDING. Return an array
of REFERENCE * that represents each menu item in this range. */
REFERENCE **
info_menu_items (SEARCH_BINDING *binding)
{
return (info_references_internal (INFO_MENU_ENTRY_LABEL, binding));
}
/* Glean cross references from BINDING->buffer + BINDING->start until
BINDING->end. Return an array of REFERENCE * that represents each
cross reference in this range. */
REFERENCE **
info_xrefs (SEARCH_BINDING *binding)
{
return (info_references_internal (INFO_XREF_LABEL, binding));
}
/* Glean cross references or menu items from BINDING. Return an array
of REFERENCE * that represents the items found. */
static REFERENCE **
info_references_internal (char *label, SEARCH_BINDING *binding)
{
SEARCH_BINDING tmp_search;
REFERENCE **refs = (REFERENCE **)NULL;
int refs_index = 0, refs_slots = 0;
int searching_for_menu_items = 0;
long position;
tmp_search.buffer = binding->buffer;
tmp_search.start = binding->start;
tmp_search.end = binding->end;
tmp_search.flags = S_FoldCase | S_SkipDest;
searching_for_menu_items = (strcasecmp (label, INFO_MENU_ENTRY_LABEL) == 0);
while ((position = search_forward (label, &tmp_search)) != -1)
{
int offset, start;
char *refdef;
REFERENCE *entry;
tmp_search.start = position;
tmp_search.start += skip_whitespace (tmp_search.buffer + tmp_search.start);
start = tmp_search.start - binding->start;
refdef = tmp_search.buffer + tmp_search.start;
offset = string_in_line (":", refdef);
/* When searching for menu items, if no colon, there is no
menu item on this line. */
if (offset == -1)
{
if (searching_for_menu_items)
continue;
else
{
int temp;
temp = skip_line (refdef);
offset = string_in_line (":", refdef + temp);
if (offset == -1)
continue; /* Give up? */
else
offset += temp;
}
}
entry = (REFERENCE *)xmalloc (sizeof (REFERENCE));
entry->filename = (char *)NULL;
entry->nodename = (char *)NULL;
entry->label = (char *)xmalloc (offset);
strncpy (entry->label, refdef, offset - 1);
entry->label[offset - 1] = '\0';
canonicalize_whitespace (entry->label);
refdef += offset;
entry->start = start;
entry->end = refdef - binding->buffer;
/* If this reference entry continues with another ':' then the
nodename is the same as the label. */
if (*refdef == ':')
{
entry->nodename = xstrdup (entry->label);
}
else
{
/* This entry continues with a specific nodename. Parse the
nodename from the specification. */
refdef += skip_whitespace_and_newlines (refdef);
if (searching_for_menu_items)
info_parse_node (refdef, DONT_SKIP_NEWLINES);
else
info_parse_node (refdef, SKIP_NEWLINES);
if (info_parsed_filename)
entry->filename = xstrdup (info_parsed_filename);
if (info_parsed_nodename)
entry->nodename = xstrdup (info_parsed_nodename);
entry->line_number = info_parsed_line_number;
}
add_pointer_to_array
(entry, refs_index, refs, refs_slots, 50, REFERENCE *);
}
return (refs);
}
/* Get the entry associated with LABEL in REFERENCES. Return a pointer
to the ENTRY if found, or NULL. */
REFERENCE *
info_get_labeled_reference (char *label, REFERENCE **references)
{
register int i;
REFERENCE *entry;
for (i = 0; references && (entry = references[i]); i++)
{
if (strcmp (label, entry->label) == 0)
return (entry);
}
return ((REFERENCE *)NULL);
}
/* A utility function for concatenating REFERENCE **. Returns a new
REFERENCE ** which is the concatenation of REF1 and REF2. The REF1
and REF2 arrays are freed, but their contents are not. */
REFERENCE **
info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2)
{
register int i, j;
REFERENCE **result;
int size;
/* With one argument passed as NULL, simply return the other arg. */
if (!ref1)
return (ref2);
else if (!ref2)
return (ref1);
/* Get the total size of the slots that we will need. */
for (i = 0; ref1[i]; i++);
size = i;
for (i = 0; ref2[i]; i++);
size += i;
result = (REFERENCE **)xmalloc ((1 + size) * sizeof (REFERENCE *));
/* Copy the contents over. */
for (i = 0; ref1[i]; i++)
result[i] = ref1[i];
j = i;
for (i = 0; ref2[i]; i++)
result[j++] = ref2[i];
result[j] = (REFERENCE *)NULL;
free (ref1);
free (ref2);
return (result);
}
/* Copy a reference structure. Since we tend to free everything at
every opportunity, we don't share any points, but copy everything into
new memory. */
REFERENCE *
info_copy_reference (REFERENCE *src)
{
REFERENCE *dest = xmalloc (sizeof (REFERENCE));
dest->label = src->label ? xstrdup (src->label) : NULL;
dest->filename = src->filename ? xstrdup (src->filename) : NULL;
dest->nodename = src->nodename ? xstrdup (src->nodename) : NULL;
dest->start = src->start;
dest->end = src->end;
return dest;
}
/* Free the data associated with REFERENCES. */
void
info_free_references (REFERENCE **references)
{
register int i;
REFERENCE *entry;
if (references)
{
for (i = 0; references && (entry = references[i]); i++)
{
maybe_free (entry->label);
maybe_free (entry->filename);
maybe_free (entry->nodename);
free (entry);
}
free (references);
}
}
/* Search for sequences of whitespace or newlines in STRING, replacing
all such sequences with just a single space. Remove whitespace from
start and end of string. */
void
canonicalize_whitespace (char *string)
{
register int i, j;
int len, whitespace_found, whitespace_loc = 0;
char *temp;
if (!string)
return;
len = strlen (string);
temp = (char *)xmalloc (1 + len);
/* Search for sequences of whitespace or newlines. Replace all such
sequences in the string with just a single space. */
whitespace_found = 0;
for (i = 0, j = 0; string[i]; i++)
{
if (whitespace_or_newline (string[i]))
{
whitespace_found++;
whitespace_loc = i;
continue;
}
else
{
if (whitespace_found && whitespace_loc)
{
whitespace_found = 0;
/* Suppress whitespace at start of string. */
if (j)
temp[j++] = ' ';
}
temp[j++] = string[i];
}
}
/* Kill trailing whitespace. */
if (j && whitespace (temp[j - 1]))
j--;
temp[j] = '\0';
strcpy (string, temp);
free (temp);
}
/* String representation of a char returned by printed_representation (). */
static char the_rep[10];
/* Return a pointer to a string which is the printed representation
of CHARACTER if it were printed at HPOS. */
char *
printed_representation (unsigned char character, int hpos)
{
register int i = 0;
int printable_limit = ISO_Latin_p ? 255 : 127;
if (raw_escapes_p && character == '\033')
the_rep[i++] = character;
/* Show CTRL-x as ^X. */
else if (iscntrl (character) && character < 127)
{
switch (character)
{
case '\r':
case '\n':
the_rep[i++] = character;
break;
case '\t':
{
int tw;
tw = ((hpos + 8) & 0xf8) - hpos;
while (i < tw)
the_rep[i++] = ' ';
}
break;
default:
the_rep[i++] = '^';
the_rep[i++] = (character | 0x40);
}
}
/* Show META-x as 0370. */
else if (character > printable_limit)
{
sprintf (the_rep + i, "\\%0o", character);
i = strlen (the_rep);
}
else if (character == DEL)
{
the_rep[i++] = '^';
the_rep[i++] = '?';
}
else
the_rep[i++] = character;
the_rep[i] = 0;
return the_rep;
}
/* **************************************************************** */
/* */
/* Functions Static To This File */
/* */
/* **************************************************************** */
/* Amount of space allocated to INFO_PARSED_FILENAME via xmalloc (). */
static int parsed_filename_size = 0;
/* Amount of space allocated to INFO_PARSED_NODENAME via xmalloc (). */
static int parsed_nodename_size = 0;
static void save_string (char *string, char **string_p, int *string_size_p);
static void saven_string (char *string, int len, char **string_p,
int *string_size_p);
/* Remember FILENAME in PARSED_FILENAME. An empty FILENAME is translated
to a NULL pointer in PARSED_FILENAME. */
static void
save_filename (char *filename)
{
save_string (filename, &info_parsed_filename, &parsed_filename_size);
}
/* Just like save_filename (), but you pass the length of the string. */
static void
saven_filename (char *filename, int len)
{
saven_string (filename, len,
&info_parsed_filename, &parsed_filename_size);
}
/* Remember NODENAME in PARSED_NODENAME. An empty NODENAME is translated
to a NULL pointer in PARSED_NODENAME. */
static void
save_nodename (char *nodename)
{
save_string (nodename, &info_parsed_nodename, &parsed_nodename_size);
}
/* Just like save_nodename (), but you pass the length of the string. */
static void
saven_nodename (char *nodename, int len)
{
saven_string (nodename, len,
&info_parsed_nodename, &parsed_nodename_size);
}
/* Remember STRING in STRING_P. STRING_P should currently have STRING_SIZE_P
bytes allocated to it. An empty STRING is translated to a NULL pointer
in STRING_P. */
static void
save_string (char *string, char **string_p, int *string_size_p)
{
if (!string || !*string)
{
if (*string_p)
free (*string_p);
*string_p = (char *)NULL;
*string_size_p = 0;
}
else
{
if (strlen (string) >= (unsigned int) *string_size_p)
*string_p = (char *)xrealloc
(*string_p, (*string_size_p = 1 + strlen (string)));
strcpy (*string_p, string);
}
}
/* Just like save_string (), but you also pass the length of STRING. */
static void
saven_string (char *string, int len, char **string_p, int *string_size_p)
{
if (!string)
{
if (*string_p)
free (*string_p);
*string_p = (char *)NULL;
*string_size_p = 0;
}
else
{
if (len >= *string_size_p)
*string_p = (char *)xrealloc (*string_p, (*string_size_p = 1 + len));
strncpy (*string_p, string, len);
(*string_p)[len] = '\0';
}
}
/* Return a pointer to the part of PATHNAME that simply defines the file. */
char *
filename_non_directory (char *pathname)
{
register char *filename = pathname + strlen (pathname);
if (HAVE_DRIVE (pathname))
pathname += 2;
while (filename > pathname && !IS_SLASH (filename[-1]))
filename--;
return (filename);
}
/* Return non-zero if NODE is one especially created by Info. */
int
internal_info_node_p (NODE *node)
{
#if defined (NEVER)
if (node &&
(node->filename && !*node->filename) &&
!node->parent && node->nodename)
return (1);
else
return (0);
#else
return ((node != (NODE *)NULL) && ((node->flags & N_IsInternal) != 0));
#endif /* !NEVER */
}
/* Make NODE appear to be one especially created by Info. */
void
name_internal_node (NODE *node, char *name)
{
if (!node)
return;
node->filename = "";
node->parent = (char *)NULL;
node->nodename = name;
node->flags |= N_IsInternal;
}
/* Return the window displaying NAME, the name of an internally created
Info window. */
WINDOW *
get_internal_info_window (char *name)
{
WINDOW *win;
for (win = windows; win; win = win->next)
if (internal_info_node_p (win->node) &&
(strcmp (win->node->nodename, name) == 0))
break;
return (win);
}
/* Return a window displaying the node NODE. */
WINDOW *
get_window_of_node (NODE *node)
{
WINDOW *win = (WINDOW *)NULL;
for (win = windows; win; win = win->next)
if (win->node == node)
break;
return (win);
}

View File

@ -0,0 +1,138 @@
/* $NetBSD: info-utils.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* info-utils.h -- Exported functions and variables from info-utils.c.
Id: info-utils.h,v 1.4 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1996, 1998, 2002, 2003, 2004 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_UTILS_H
#define INFO_UTILS_H
#include "nodes.h"
#include "window.h"
#include "search.h"
/* Structure which describes a node reference, such as a menu entry or
cross reference. Arrays of such references can be built by calling
info_menus_of_node () or info_xrefs_of_node (). */
typedef struct {
char *label; /* User Label. */
char *filename; /* File where this node can be found. */
char *nodename; /* Name of the node. */
int start, end; /* Offsets within the containing node of LABEL. */
int line_number; /* Specific line number a menu item points to. */
} REFERENCE;
/* When non-zero, various display and input functions handle ISO Latin
character sets correctly. */
extern int ISO_Latin_p;
/* Variable which holds the most recent filename parsed as a result of
calling info_parse_xxx (). */
extern char *info_parsed_filename;
/* Variable which holds the most recent nodename parsed as a result of
calling info_parse_xxx (). */
extern char *info_parsed_nodename;
/* Parse the filename and nodename out of STRING. If STRING doesn't
contain a filename (i.e., it is NOT (FILENAME)NODENAME) then set
INFO_PARSED_FILENAME to NULL. If second argument NEWLINES_OKAY is
non-zero, it says to allow the nodename specification to cross a
newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
void info_parse_node (char *string, int newlines_okay);
/* Return a NULL terminated array of REFERENCE * which represents the menu
found in NODE. If there is no menu in NODE, just return a NULL pointer. */
extern REFERENCE **info_menu_of_node (NODE *node);
/* Return a NULL terminated array of REFERENCE * which represents the cross
refrences found in NODE. If there are no cross references in NODE, just
return a NULL pointer. */
extern REFERENCE **info_xrefs_of_node (NODE *node);
/* Glean cross references from BINDING->buffer + BINDING->start until
BINDING->end. Return an array of REFERENCE * that represents each
cross reference in this range. */
extern REFERENCE **info_xrefs (SEARCH_BINDING *binding);
/* Get the entry associated with LABEL in REFERENCES. Return a pointer to
the reference if found, or NULL. */
extern REFERENCE *info_get_labeled_reference (char *label,
REFERENCE **references);
/* Glean menu entries from BINDING->buffer + BINDING->start until we
have looked at the entire contents of BINDING. Return an array
of REFERENCE * that represents each menu item in this range. */
extern REFERENCE **info_menu_items (SEARCH_BINDING *binding);
/* A utility function for concatenating REFERENCE **. Returns a new
REFERENCE ** which is the concatenation of REF1 and REF2. The REF1
and REF2 arrays are freed, but their contents are not. */
REFERENCE **info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2);
/* Copy an existing reference into new memory. */
extern REFERENCE *info_copy_reference (REFERENCE *src);
/* Free the data associated with REFERENCES. */
extern void info_free_references (REFERENCE **references);
/* Search for sequences of whitespace or newlines in STRING, replacing
all such sequences with just a single space. Remove whitespace from
start and end of string. */
void canonicalize_whitespace (char *string);
/* Return a pointer to a string which is the printed representation
of CHARACTER if it were printed at HPOS. */
extern char *printed_representation (unsigned char character, int hpos);
/* Return a pointer to the part of PATHNAME that simply defines the file. */
extern char *filename_non_directory (char *pathname);
/* Return non-zero if NODE is one especially created by Info. */
extern int internal_info_node_p (NODE *node);
/* Make NODE appear to be one especially created by Info, and give it NAME. */
extern void name_internal_node (NODE *node, char *name);
/* Return the window displaying NAME, the name of an internally created
Info window. */
extern WINDOW *get_internal_info_window (char *name);
/* Return a window displaying the node NODE. */
extern WINDOW *get_window_of_node (NODE *node);
/* Return the node addressed by LABEL in NODE (usually one of "Prev:",
"Next:", "Up:", "File:", or "Node:". After a call to this function,
the globals `info_parsed_nodename' and `info_parsed_filename' contain
the information. */
extern void info_parse_label (char *label, NODE *node);
#define info_file_label_of_node(n) info_parse_label (INFO_FILE_LABEL, n)
#define info_next_label_of_node(n) info_parse_label (INFO_NEXT_LABEL, n)
#define info_up_label_of_node(n) info_parse_label (INFO_UP_LABEL, n)
#define info_prev_label_of_node(n) \
do { \
info_parse_label (INFO_PREV_LABEL, n); \
if (!info_parsed_nodename && !info_parsed_filename) \
info_parse_label (INFO_ALTPREV_LABEL, n); \
} while (0)
#endif /* not INFO_UTILS_H */

687
external/gpl2/texinfo/dist/info/info.c vendored Normal file
View File

@ -0,0 +1,687 @@
/* $NetBSD: info.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* info.c -- Display nodes of Info files in multiple windows.
Id: info.c,v 1.11 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2004 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"
#include "indices.h"
#include "dribble.h"
#include "getopt.h"
#if defined (HANDLE_MAN_PAGES)
# include "man.h"
#endif /* HANDLE_MAN_PAGES */
static char *program_name = "info";
/* Non-zero means search all indices for APROPOS_SEARCH_STRING. */
static int apropos_p = 0;
/* Variable containing the string to search for when apropos_p is non-zero. */
static char *apropos_search_string = (char *)NULL;
/* Non-zero means search all indices for INDEX_SEARCH_STRING. Unlike
apropos, this puts the user at the node, running info. */
static int index_search_p = 0;
/* Non-zero means look for the node which describes the invocation
and command-line options of the program, and start the info
session at that node. */
static int goto_invocation_p = 0;
/* Variable containing the string to search for when index_search_p is
non-zero. */
static char *index_search_string = (char *)NULL;
/* Non-zero means print version info only. */
static int print_version_p = 0;
/* Non-zero means print a short description of the options. */
static int print_help_p = 0;
/* Array of the names of nodes that the user specified with "--node" on the
command line. */
static char **user_nodenames = (char **)NULL;
static int user_nodenames_index = 0;
static int user_nodenames_slots = 0;
/* String specifying the first file to load. This string can only be set
by the user specifying "--file" on the command line. */
static char *user_filename = (char *)NULL;
/* String specifying the name of the file to dump nodes to. This value is
filled if the user speficies "--output" on the command line. */
static char *user_output_filename = (char *)NULL;
/* Non-zero indicates that when "--output" is specified, all of the menu
items of the specified nodes (and their subnodes as well) should be
dumped in the order encountered. This basically can print a book. */
int dump_subnodes = 0;
/* Non-zero means make default keybindings be loosely modeled on vi(1). */
int vi_keys_p = 0;
/* Non-zero means don't remove ANSI escape sequences. */
int raw_escapes_p = 1;
/* Non-zero means print the absolute location of the file to be loaded. */
static int print_where_p = 0;
#ifdef __MSDOS__
/* Non-zero indicates that screen output should be made 'speech-friendly'.
Since on MSDOS the usual behavior is to write directly to the video
memory, speech synthesizer software cannot grab the output. Therefore,
we provide a user option which tells us to avoid direct screen output
and use stdout instead (which loses the color output). */
int speech_friendly = 0;
#endif
/* Structure describing the options that Info accepts. We pass this structure
to getopt_long (). If you add or otherwise change this structure, you must
also change the string which follows it. */
#define APROPOS_OPTION 1
#define DRIBBLE_OPTION 2
#define RESTORE_OPTION 3
#define IDXSRCH_OPTION 4
static struct option long_options[] = {
{ "apropos", 1, 0, APROPOS_OPTION },
{ "directory", 1, 0, 'd' },
{ "dribble", 1, 0, DRIBBLE_OPTION },
{ "file", 1, 0, 'f' },
{ "help", 0, &print_help_p, 1 },
{ "index-search", 1, 0, IDXSRCH_OPTION },
{ "location", 0, &print_where_p, 1 },
{ "node", 1, 0, 'n' },
{ "output", 1, 0, 'o' },
{ "raw-escapes", 0, &raw_escapes_p, 1 },
{ "no-raw-escapes", 0, &raw_escapes_p, 0 },
{ "restore", 1, 0, RESTORE_OPTION },
{ "show-options", 0, 0, 'O' },
{ "subnodes", 0, &dump_subnodes, 1 },
{ "usage", 0, 0, 'O' },
{ "version", 0, &print_version_p, 1 },
{ "vi-keys", 0, &vi_keys_p, 1 },
{ "where", 0, &print_where_p, 1 },
#ifdef __MSDOS__
{ "speech-friendly", 0, &speech_friendly, 1 },
#endif
{NULL, 0, NULL, 0}
};
/* String describing the shorthand versions of the long options found above. */
#ifdef __MSDOS__
static char *short_options = "d:n:f:ho:ORswb";
#else
static char *short_options = "d:n:f:ho:ORws";
#endif
/* When non-zero, the Info window system has been initialized. */
int info_windows_initialized_p = 0;
/* Some "forward" declarations. */
static void info_short_help (void);
static void init_messages (void);
/* **************************************************************** */
/* */
/* Main Entry Point to the Info Program */
/* */
/* **************************************************************** */
int
main (int argc, char **argv)
{
int getopt_long_index; /* Index returned by getopt_long (). */
NODE *initial_node; /* First node loaded by Info. */
#ifdef HAVE_SETLOCALE
/* Set locale via LC_ALL. */
setlocale (LC_ALL, "");
#endif
#ifdef ENABLE_NLS
/* Set the text message domain. */
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
#endif
init_messages ();
while (1)
{
int option_character;
option_character = getopt_long
(argc, argv, short_options, long_options, &getopt_long_index);
/* getopt_long returns EOF when there are no more long options. */
if (option_character == EOF)
break;
/* If this is a long option, then get the short version of it. */
if (option_character == 0 && long_options[getopt_long_index].flag == 0)
option_character = long_options[getopt_long_index].val;
/* Case on the option that we have received. */
switch (option_character)
{
case 0:
break;
/* User wants to add a directory. */
case 'd':
info_add_path (optarg, INFOPATH_PREPEND);
break;
/* User is specifying a particular node. */
case 'n':
add_pointer_to_array (optarg, user_nodenames_index, user_nodenames,
user_nodenames_slots, 10, char *);
break;
/* User is specifying a particular Info file. */
case 'f':
if (user_filename)
free (user_filename);
user_filename = xstrdup (optarg);
break;
/* Treat -h like --help. */
case 'h':
print_help_p = 1;
break;
/* User is specifying the name of a file to output to. */
case 'o':
if (user_output_filename)
free (user_output_filename);
user_output_filename = xstrdup (optarg);
break;
/* User has specified that she wants to find the "Options"
or "Invocation" node for the program. */
case 'O':
goto_invocation_p = 1;
break;
/* User has specified that she wants the escape sequences
in man pages to be passed thru unaltered. */
case 'R':
raw_escapes_p = 1;
break;
/* User is specifying that she wishes to dump the subnodes of
the node that she is dumping. */
case 's':
dump_subnodes = 1;
break;
/* For compatibility with man, -w is --where. */
case 'w':
print_where_p = 1;
break;
#ifdef __MSDOS__
/* User wants speech-friendly output. */
case 'b':
speech_friendly = 1;
break;
#endif /* __MSDOS__ */
/* User has specified a string to search all indices for. */
case APROPOS_OPTION:
apropos_p = 1;
maybe_free (apropos_search_string);
apropos_search_string = xstrdup (optarg);
break;
/* User has specified a dribble file to receive keystrokes. */
case DRIBBLE_OPTION:
close_dribble_file ();
open_dribble_file (optarg);
break;
/* User has specified an alternate input stream. */
case RESTORE_OPTION:
info_set_input_from_file (optarg);
break;
/* User has specified a string to search all indices for. */
case IDXSRCH_OPTION:
index_search_p = 1;
maybe_free (index_search_string);
index_search_string = xstrdup (optarg);
break;
default:
fprintf (stderr, _("Try --help for more information.\n"));
xexit (1);
}
}
/* If the output device is not a terminal, and no output filename has been
specified, make user_output_filename be "-", so that the info is written
to stdout, and turn on the dumping of subnodes. */
if ((!isatty (fileno (stdout))) && (user_output_filename == (char *)NULL))
{
user_output_filename = xstrdup ("-");
dump_subnodes = 1;
}
/* If the user specified --version, then show the version and exit. */
if (print_version_p)
{
printf ("%s (GNU %s) %s\n", program_name, PACKAGE, VERSION);
puts ("");
puts ("Copyright (C) 2004 Free Software Foundation, Inc.");
printf (_("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.\n"));
xexit (0);
}
/* If the `--help' option was present, show the help and exit. */
if (print_help_p)
{
info_short_help ();
xexit (0);
}
/* If the user hasn't specified a path for Info files, default it.
Lowest priority is our messy hardwired list in filesys.h.
Then comes the user's INFODIR from the Makefile.
Highest priority is the environment variable, if set. */
if (!infopath)
{
char *path_from_env = getenv ("INFOPATH");
if (path_from_env)
{
unsigned len = strlen (path_from_env);
/* Trailing : on INFOPATH means insert the default path. */
if (len && path_from_env[len - 1] == PATH_SEP[0])
{
path_from_env[len - 1] = 0;
info_add_path (DEFAULT_INFOPATH, INFOPATH_PREPEND);
}
#ifdef INFODIR /* from the Makefile */
info_add_path (INFODIR, INFOPATH_PREPEND);
#endif
info_add_path (path_from_env, INFOPATH_PREPEND);
}
else
{
info_add_path (DEFAULT_INFOPATH, INFOPATH_PREPEND);
#ifdef INFODIR /* from the Makefile */
info_add_path (INFODIR, INFOPATH_PREPEND);
#endif
#ifdef INFODIR2 /* from the Makefile, too */
# ifdef INFODIR
if (!STREQ (INFODIR, INFODIR2))
# endif
info_add_path (INFODIR2, INFOPATH_PREPEND);
#endif
}
}
/* If the user specified a particular filename, add the path of that
file to the contents of INFOPATH. */
if (user_filename)
add_file_directory_to_path (user_filename);
/* If the user wants to search every known index for a given string,
do that now, and report the results. */
if (apropos_p)
{
info_apropos (apropos_search_string);
xexit (0);
}
/* Get the initial Info node. It is either "(dir)Top", or what the user
specifed with values in user_filename and user_nodenames. */
initial_node = info_get_node (user_filename,
user_nodenames ? user_nodenames[0] : 0);
/* If we couldn't get the initial node, this user is in trouble. */
if (!initial_node)
{
if (info_recent_file_error)
info_error (info_recent_file_error, NULL, NULL);
else
info_error ((char *) msg_cant_find_node,
user_nodenames ? user_nodenames[0] : "Top", NULL);
xexit (1);
}
/* Special cases for when the user specifies multiple nodes. If we
are dumping to an output file, dump all of the nodes specified.
Otherwise, attempt to create enough windows to handle the nodes
that this user wants displayed. */
if (user_nodenames_index > 1)
{
free (initial_node);
if (print_where_p)
printf ("%s\n", user_filename ? user_filename : "unknown?!");
else if (user_output_filename)
dump_nodes_to_file
(user_filename, user_nodenames, user_output_filename, dump_subnodes);
else
begin_multiple_window_info_session (user_filename, user_nodenames);
xexit (0);
}
/* If there are arguments remaining, they are the names of menu items
in sequential info files starting from the first one loaded. That
file name is either "dir", or the contents of user_filename if one
was specified. */
{
const char *errstr;
char *errarg1, *errarg2;
NODE *new_initial_node = info_follow_menus (initial_node, argv + optind,
&errstr, &errarg1, &errarg2);
if (new_initial_node && new_initial_node != initial_node)
initial_node = new_initial_node;
if (print_where_p)
{
if (initial_node->parent)
printf ("%s\n", initial_node->parent);
else if (initial_node->filename
&& !is_dir_name (filename_non_directory (initial_node->filename)))
printf ("%s\n", initial_node->filename);
else
xexit (1);
xexit (0);
}
/* If the user specified that this node should be output, then do that
now. Otherwise, start the Info session with this node. Or act
accordingly if the initial node was not found. */
if (user_output_filename && !goto_invocation_p)
{
if (!errstr)
dump_node_to_file (initial_node, user_output_filename,
dump_subnodes);
else
info_error ((char *) errstr, errarg1, errarg2);
}
else
{
if (errstr)
begin_info_session_with_error (initial_node, (char *) errstr,
errarg1, errarg2);
/* If the user specified `--index-search=STRING' or
--show-options, start the info session in the node
corresponding to what they want. */
else if (index_search_p || goto_invocation_p)
{
int status = 0;
initialize_info_session (initial_node, 0);
if (goto_invocation_p
|| index_entry_exists (windows, index_search_string))
{
terminal_prep_terminal ();
terminal_clear_screen ();
info_last_executed_command = (VFunction *)NULL;
if (index_search_p)
do_info_index_search (windows, 0, index_search_string);
else
{
/* If they said "info --show-options foo bar baz",
the last of the arguments is the program whose
options they want to see. */
char **p = argv + optind;
char *program;
if (*p)
{
while (p[1])
p++;
program = xstrdup (*p);
}
else if (user_filename)
/* If there's no command-line arguments to
supply the program name, use the Info file
name (sans extension and leading directories)
instead. */
program = program_name_from_file_name (user_filename);
else
program = xstrdup ("");
info_intuit_options_node (windows, initial_node, program);
free (program);
}
if (user_output_filename)
{
dump_node_to_file (windows->node, user_output_filename,
dump_subnodes);
}
else
info_read_and_dispatch ();
/* On program exit, leave the cursor at the bottom of the
window, and restore the terminal IO. */
terminal_goto_xy (0, screenheight - 1);
terminal_clear_to_eol ();
fflush (stdout);
terminal_unprep_terminal ();
}
else
{
fprintf (stderr, _("no index entries found for `%s'\n"),
index_search_string);
status = 2;
}
close_dribble_file ();
xexit (status);
}
else
begin_info_session (initial_node);
}
xexit (0);
}
return 0; /* Avoid bogus warnings. */
}
void
add_file_directory_to_path (char *filename)
{
char *directory_name = xstrdup (filename);
char *temp = filename_non_directory (directory_name);
if (temp != directory_name)
{
if (HAVE_DRIVE (directory_name) && temp == directory_name + 2)
{
/* The directory of "d:foo" is stored as "d:.", to avoid
mixing it with "d:/" when a slash is appended. */
*temp = '.';
temp += 2;
}
temp[-1] = 0;
info_add_path (directory_name, INFOPATH_PREPEND);
}
free (directory_name);
}
/* Error handling. */
/* Non-zero if an error has been signalled. */
int info_error_was_printed = 0;
/* Non-zero means ring terminal bell on errors. */
int info_error_rings_bell_p = 1;
/* Print FORMAT with ARG1 and ARG2. If the window system was initialized,
then the message is printed in the echo area. Otherwise, a message is
output to stderr. */
void
info_error (char *format, void *arg1, void *arg2)
{
info_error_was_printed = 1;
if (!info_windows_initialized_p || display_inhibited)
{
fprintf (stderr, "%s: ", program_name);
fprintf (stderr, format, arg1, arg2);
fprintf (stderr, "\n");
fflush (stderr);
}
else
{
if (!echo_area_is_active)
{
if (info_error_rings_bell_p)
terminal_ring_bell ();
window_message_in_echo_area (format, arg1, arg2);
}
else
{
NODE *temp;
temp = build_message_node (format, arg1, arg2);
if (info_error_rings_bell_p)
terminal_ring_bell ();
inform_in_echo_area (temp->contents);
free (temp->contents);
free (temp);
}
}
}
/* Produce a scaled down description of the available options to Info. */
static void
info_short_help (void)
{
#ifdef __MSDOS__
static const char speech_friendly_string[] = N_("\
-b, --speech-friendly be friendly to speech synthesizers.\n");
#else
static const char speech_friendly_string[] = "";
#endif
printf (_("\
Usage: %s [OPTION]... [MENU-ITEM...]\n\
\n\
Read documentation in Info format.\n\
\n\
Options:\n\
--apropos=STRING look up STRING in all indices of all manuals.\n\
-d, --directory=DIR add DIR to INFOPATH.\n\
--dribble=FILENAME remember user keystrokes in FILENAME.\n\
-f, --file=FILENAME specify Info file to visit.\n\
-h, --help display this help and exit.\n\
--index-search=STRING go to node pointed by index entry STRING.\n\
-n, --node=NODENAME specify nodes in first visited Info file.\n\
-o, --output=FILENAME output selected nodes to FILENAME.\n\
-R, --raw-escapes output \"raw\" ANSI escapes (default).\n\
--no-raw-escapes output escapes as literal text.\n\
--restore=FILENAME read initial keystrokes from FILENAME.\n\
-O, --show-options, --usage go to command-line options node.\n%s\
--subnodes recursively output menu items.\n\
-w, --where, --location print physical location of Info file.\n\
--vi-keys use vi-like and less-like key bindings.\n\
--version display version information and exit.\n\
\n\
The first non-option argument, if present, is the menu entry to start from;\n\
it is searched for in all `dir' files along INFOPATH.\n\
If it is not present, info merges all `dir' files and shows the result.\n\
Any remaining arguments are treated as the names of menu\n\
items relative to the initial node visited.\n\
\n\
Examples:\n\
info show top-level dir menu\n\
info emacs start at emacs node from top-level dir\n\
info emacs buffers start at buffers node within emacs manual\n\
info --show-options emacs start at node with emacs' command line options\n\
info -f ./foo.info show file ./foo.info, not searching dir\n\
"),
program_name, speech_friendly_string);
puts (_("\n\
Email bug reports to bug-texinfo@gnu.org,\n\
general questions and discussion to help-texinfo@gnu.org.\n\
Texinfo home page: http://www.gnu.org/software/texinfo/"));
xexit (0);
}
/* Initialize strings for gettext. Because gettext doesn't handle N_ or
_ within macro definitions, we put shared messages into variables and
use them that way. This also has the advantage that there's only one
copy of the strings. */
const char *msg_cant_find_node;
const char *msg_cant_file_node;
const char *msg_cant_find_window;
const char *msg_cant_find_point;
const char *msg_cant_kill_last;
const char *msg_no_menu_node;
const char *msg_no_foot_node;
const char *msg_no_xref_node;
const char *msg_no_pointer;
const char *msg_unknown_command;
const char *msg_term_too_dumb;
const char *msg_at_node_bottom;
const char *msg_at_node_top;
const char *msg_one_window;
const char *msg_win_too_small;
const char *msg_cant_make_help;
static void
init_messages (void)
{
msg_cant_find_node = _("Cannot find node `%s'.");
msg_cant_file_node = _("Cannot find node `(%s)%s'.");
msg_cant_find_window = _("Cannot find a window!");
msg_cant_find_point = _("Point doesn't appear within this window's node!");
msg_cant_kill_last = _("Cannot delete the last window.");
msg_no_menu_node = _("No menu in this node.");
msg_no_foot_node = _("No footnotes in this node.");
msg_no_xref_node = _("No cross references in this node.");
msg_no_pointer = _("No `%s' pointer for this node.");
msg_unknown_command = _("Unknown Info command `%c'; try `?' for help.");
msg_term_too_dumb = _("Terminal type `%s' is not smart enough to run Info.");
msg_at_node_bottom = _("You are already at the last page of this node.");
msg_at_node_top = _("You are already at the first page of this node.");
msg_one_window = _("Only one window.");
msg_win_too_small = _("Resulting window would be too small.");
msg_cant_make_help = _("Not enough room for a help window, please delete a window.");
}

162
external/gpl2/texinfo/dist/info/info.h vendored Normal file
View File

@ -0,0 +1,162 @@
/* $NetBSD: info.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* info.h -- Header file which includes all of the other headers.
Id: info.h,v 1.4 2004/04/11 17:56:45 karl Exp
Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004 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_H
#define INFO_H
/* We always want these, so why clutter up the compile command? */
#define HANDLE_MAN_PAGES
#define NAMED_FUNCTIONS
#define INFOKEY
/* System dependencies. */
#include "system.h"
/* Some of our other include files use these. */
typedef int Function ();
typedef void VFunction ();
typedef char *CFunction ();
#include "filesys.h"
#include "doc.h"
#include "display.h"
#include "session.h"
#include "echo-area.h"
#include "footnotes.h"
#include "gc.h"
#define info_toupper(x) (islower (x) ? toupper (x) : x)
#define info_tolower(x) (isupper (x) ? tolower (x) : x)
#if !defined (whitespace)
# define whitespace(c) ((c == ' ') || (c == '\t'))
#endif /* !whitespace */
#if !defined (whitespace_or_newline)
# define whitespace_or_newline(c) (whitespace (c) || (c == '\n'))
#endif /* !whitespace_or_newline */
/* Add POINTER to the list of pointers found in ARRAY. SLOTS is the number
of slots that have already been allocated. INDEX is the index into the
array where POINTER should be added. GROW is the number of slots to grow
ARRAY by, in the case that it needs growing. TYPE is a cast of the type
of object stored in ARRAY (e.g., NODE_ENTRY *. */
#define add_pointer_to_array(pointer, idx, array, slots, grow, type) \
do { \
if (idx + 2 >= slots) \
array = (type *)(xrealloc (array, (slots += grow) * sizeof (type))); \
array[idx++] = (type)pointer; \
array[idx] = (type)NULL; \
} while (0)
#define maybe_free(x) do { if (x) free (x); } while (0)
#if !defined (zero_mem) && defined (HAVE_MEMSET)
# define zero_mem(mem, length) memset (mem, 0, length)
#endif /* !zero_mem && HAVE_MEMSET */
#if !defined (zero_mem) && defined (HAVE_BZERO)
# define zero_mem(mem, length) bzero (mem, length)
#endif /* !zero_mem && HAVE_BZERO */
#if !defined (zero_mem)
# define zero_mem(mem, length) \
do { \
register int zi; \
register unsigned char *place; \
\
place = (unsigned char *)mem; \
for (zi = 0; zi < length; zi++) \
place[zi] = 0; \
} while (0)
#endif /* !zero_mem */
/* A structure associating the nodes visited in a particular window. */
typedef struct {
WINDOW *window; /* The window that this list is attached to. */
NODE **nodes; /* Array of nodes visited in this window. */
int *pagetops; /* For each node in NODES, the pagetop. */
long *points; /* For each node in NODES, the point. */
int current; /* Index in NODES of the current node. */
int nodes_index; /* Index where to add the next node. */
int nodes_slots; /* Number of slots allocated to NODES. */
} INFO_WINDOW;
/* Array of structures describing for each window which nodes have been
visited in that window. */
extern INFO_WINDOW **info_windows;
/* For handling errors. If you initialize the window system, you should
also set info_windows_initialized_p to non-zero. It is used by the
info_error () function to determine how to format and output errors. */
extern int info_windows_initialized_p;
/* Non-zero if an error message has been printed. */
extern int info_error_was_printed;
/* Non-zero means ring terminal bell on errors. */
extern int info_error_rings_bell_p;
/* Non-zero means default keybindings are loosely modeled on vi(1). */
extern int vi_keys_p;
/* Non-zero means don't remove ANSI escape sequences from man pages. */
extern int raw_escapes_p;
/* Print FORMAT with ARG1 and ARG2. If the window system was initialized,
then the message is printed in the echo area. Otherwise, a message is
output to stderr. */
extern void info_error (char *format, void *arg1, void *arg2);
extern void add_file_directory_to_path (char *filename);
/* Error message defines. */
extern const char *msg_cant_find_node;
extern const char *msg_cant_file_node;
extern const char *msg_cant_find_window;
extern const char *msg_cant_find_point;
extern const char *msg_cant_kill_last;
extern const char *msg_no_menu_node;
extern const char *msg_no_foot_node;
extern const char *msg_no_xref_node;
extern const char *msg_no_pointer;
extern const char *msg_unknown_command;
extern const char *msg_term_too_dumb;
extern const char *msg_at_node_bottom;
extern const char *msg_at_node_top;
extern const char *msg_one_window;
extern const char *msg_win_too_small;
extern const char *msg_cant_make_help;
#if defined(INFOKEY)
/* Found in variables.c. */
extern void set_variable_to_value (char *name, char *value);
#endif /* INFOKEY */
/* Found in m-x.c. */
extern char *read_function_name (char *prompt, WINDOW *window);
#endif /* !INFO_H */

1202
external/gpl2/texinfo/dist/info/infodoc.c vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,926 @@
/* $NetBSD: infokey.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* infokey.c -- compile ~/.infokey to ~/.info.
Id: infokey.c,v 1.9 2004/12/14 00:15:36 karl Exp
Copyright (C) 1999, 2001, 2002, 2003, 2004 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 Andrew Bettison <andrewb@zip.com.au>. */
#include "info.h"
#include "infomap.h"
#include "infokey.h"
#include "key.h"
#include "getopt.h"
static char *program_name = "infokey";
/* Non-zero means print version info only. */
static int print_version_p = 0;
/* Non-zero means print a short description of the options. */
static int print_help_p = 0;
/* String specifying the source file. This is set by the user on the
command line, or a default is used. */
static char *input_filename = (char *) NULL;
/* String specifying the name of the file to output to. This is
set by the user on the command line, or a default is used. */
static char *output_filename = (char *) NULL;
/* Structure describing the options that Infokey accepts. We pass this
structure to getopt_long (). If you add or otherwise change this
structure, you must also change the string which follows it. */
static struct option long_options[] =
{
{"output", 1, 0, 'o'},
{"help", 0, &print_help_p, 1},
{"version", 0, &print_version_p, 1},
{NULL, 0, NULL, 0}
};
/* String describing the shorthand versions of the long options found above. */
static char *short_options = "o:";
/* Structure for holding the compiled sections. */
enum sect_e
{
info = 0,
ea = 1,
var = 2
};
struct sect
{
unsigned int cur;
unsigned char data[INFOKEY_MAX_SECTIONLEN];
};
/* Some "forward" declarations. */
static char *mkpath (const char *dir, const char *file);
static int compile (FILE *fp, const char *filename, struct sect *sections);
static int write_infokey_file (FILE *fp, struct sect *sections);
static void syntax_error (const char *filename,
unsigned int linenum, const char *fmt,
const void *a1, const void *a2, const void *a3, const void *a4);
static void error_message (int error_code, const char *fmt,
const void *a1, const void *a2, const void *a3, const void *a4);
static void suggest_help (void);
static void short_help (void);
/* **************************************************************** */
/* */
/* Main Entry Point to the Infokey Program */
/* */
/* **************************************************************** */
int
main (int argc, char **argv)
{
int getopt_long_index; /* Index returned by getopt_long (). */
#ifdef HAVE_SETLOCALE
/* Set locale via LC_ALL. */
setlocale (LC_ALL, "");
#endif
#ifdef ENABLE_NLS
/* Set the text message domain. */
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
#endif
while (1)
{
int option_character;
option_character = getopt_long
(argc, argv, short_options, long_options, &getopt_long_index);
/* getopt_long () returns EOF when there are no more long options. */
if (option_character == EOF)
break;
/* If this is a long option, then get the short version of it. */
if (option_character == 0 && long_options[getopt_long_index].flag == 0)
option_character = long_options[getopt_long_index].val;
/* Case on the option that we have received. */
switch (option_character)
{
case 0:
break;
/* User is specifying the name of a file to output to. */
case 'o':
if (output_filename)
free (output_filename);
output_filename = xstrdup (optarg);
break;
default:
suggest_help ();
xexit (1);
}
}
/* If the user specified --version, then show the version and exit. */
if (print_version_p)
{
printf ("%s (GNU %s) %s\n", program_name, PACKAGE, VERSION);
puts ("");
printf (_ ("Copyright (C) %s 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.\n"),
"2003");
xexit (0);
}
/* If the `--help' option was present, show the help and exit. */
if (print_help_p)
{
short_help ();
xexit (0);
}
/* If there is one argument remaining, it is the name of the input
file. */
if (optind == argc - 1)
{
if (input_filename)
free (input_filename);
input_filename = xstrdup (argv[optind]);
}
else if (optind != argc)
{
error_message (0, _("incorrect number of arguments"),
NULL, NULL, NULL, NULL);
suggest_help ();
xexit (1);
}
/* Use default filenames where none given. */
{
char *homedir;
homedir = getenv ("HOME");
#ifdef __MSDOS__
if (!homedir)
homedir = ".";
#endif
if (!input_filename)
input_filename = mkpath (homedir, INFOKEY_SRCFILE);
if (!output_filename)
output_filename = mkpath (homedir, INFOKEY_FILE);
}
{
FILE *inf;
FILE *outf;
int write_error;
static struct sect sections[3];
/* Open the input file. */
inf = fopen (input_filename, "r");
if (!inf)
{
error_message (errno, _("cannot open input file `%s'"),
input_filename, NULL, NULL, NULL);
xexit (1);
}
/* Compile the input file to its verious sections, then write the
section data to the output file. */
if (compile (inf, input_filename, sections))
{
/* Open the output file. */
outf = fopen (output_filename, FOPEN_WBIN);
if (!outf)
{
error_message (errno, _("cannot create output file `%s'"),
output_filename, NULL, NULL, NULL);
xexit (1);
}
/* Write the contents of the output file and close it. If there is
an error writing to the file, delete it and exit with a failure
status. */
write_error = 0;
if (!write_infokey_file (outf, sections))
{
error_message (errno, _("error writing to `%s'"),
output_filename, NULL, NULL, NULL);
write_error = 1;
}
if (fclose (outf) == EOF)
{
error_message (errno, _("error closing output file `%s'"),
output_filename, NULL, NULL, NULL);
write_error = 1;
}
if (write_error)
{
unlink (output_filename);
xexit (1);
}
}
/* Close the input file. */
fclose (inf);
}
return 0;
}
static char *
mkpath (const char *dir, const char *file)
{
char *p;
p = xmalloc (strlen (dir) + 1 + strlen (file) + 2);
strcpy (p, dir);
strcat (p, "/");
strcat (p, file);
return p;
}
/* Compilation - the real work.
Source file syntax
------------------
The source file is a line-based text file with the following
structure:
# comments
# more comments
#info
u prev-line
d next-line
^a invalid # just beep
\ku prev-line
#stop
\kd next-line
q quit # of course!
#echo-area
^a echo-area-beg-of-line
^e echo-area-end-of-line
\kr echo-area-forward
\kl echo-area-backward
\kh echo-area-beg-of-line
\ke echo-area-end-of-line
#var
scroll-step=1
ISO-Latin=Off
Lines starting with '#' are comments, and are ignored. Blank
lines are ignored. Each section is introduced by one of the
following lines:
#info
#echo-area
#var
The sections may occur in any order. Each section may be
omitted completely. If the 'info' section is the first in the
file, its '#info' line may be omitted.
The 'info' and 'echo-area' sections
-----------------------------------
Each line in the 'info' or 'echo-area' sections has the
following syntax:
key-sequence SPACE action-name [ SPACE [ # comment ] ] \n
Where SPACE is one or more white space characters excluding
newline, "action-name" is the name of a GNU Info command,
"comment" is any sequence of characters excluding newline, and
"key-sequence" is a concatenation of one or more key definitions
using the following syntax:
1. A carat ^ followed by one character indicates a single
control character;
2. A backslash \ followed by one, two, or three octal
digits indicates a single character having that ASCII
code;
3. \n indicates a single NEWLINE;
\e indicates a single ESC;
\r indicates a single CR;
\t indicates a single TAB;
\b indicates a single BACKSPACE;
4. \ku indicates the Up Arrow key;
\kd indicates the Down Arrow key;
\kl indicates the Left Arrow key;
\kr indicates the Right Arrow key;
\kP indicates the Page Up (PRIOR) key;
\kN indicates the Page Down (NEXT) key;
\kh indicates the Home key;
\ke indicates the End key;
\kx indicates the DEL key;
\k followed by any other character indicates a single
control-K, and the following character is interpreted
as in rules 1, 2, 3, 5 and 6.
5. \m followed by any sequence defined in rules 1, 2, 3, 4
or 6 indicates the "Meta" modification of that key.
6. A backslash \ followed by any character not described
above indicates that character itself. In particular:
\\ indicates a single backslash \,
\ (backslash-space) indicates a single space,
\^ indicates a single caret ^,
If the following line:
#stop
occurs anywhere in an 'info' or 'echo-area' section, that
indicates to GNU Info to suppress all of its default key
bindings in that context.
The 'var' section
-----------------
Each line in the 'var' section has the following syntax:
variable-name = value \n
Where "variable-name" is the name of a GNU Info variable and
"value" is the value that GNU Info will assign to that variable
when commencing execution. There must be no white space in the
variable name, nor between the variable name and the '='. All
characters immediately following the '=', up to but not
including the terminating newline, are considered to be the
value that will be assigned. In other words, white space
following the '=' is not ignored.
*/
static int add_to_section (struct sect *s, const char *str, unsigned int len);
static int lookup_action (const char *actname);
/* Compile the input file into its various sections. Return true if no
error was encountered.
*/
static int
compile (FILE *fp, const char *filename, struct sect *sections)
{
int error = 0;
char rescan = 0;
unsigned int lnum = 0;
int c = 0;
/* This parser is a true state machine, with no sneaky fetching
of input characters inside the main loop. In other words, all
state is fully represented by the following variables:
*/
enum
{
start_of_line,
start_of_comment,
in_line_comment,
in_trailing_comment,
get_keyseq,
got_keyseq,
get_action,
got_action,
get_varname,
got_varname,
get_equals,
got_equals,
get_value
}
state = start_of_line;
enum sect_e section = info;
enum
{
normal,
slosh,
control,
octal,
special_key
}
seqstate; /* used if state == get_keyseq */
char meta = 0;
char ocnt = 0; /* used if state == get_keyseq && seqstate == octal */
/* Data is accumulated in the following variables. The code
avoids overflowing these strings, and throws an error
where appropriate if a string limit is exceeded. These string
lengths are arbitrary (and should be large enough) and their
lengths are not hard-coded anywhere else, so increasing them
here will not break anything. */
char oval = 0;
char comment[10];
unsigned int clen = 0;
char seq[20];
unsigned int slen = 0;
char act[80];
unsigned int alen = 0;
char varn[80];
unsigned int varlen = 0;
char val[80];
unsigned int vallen = 0;
#define To_seq(c) \
do { \
if (slen < sizeof seq) \
seq[slen++] = meta ? Meta(c) : (c); \
else \
{ \
syntax_error(filename, lnum, _("key sequence too long"), \
NULL, NULL, NULL, NULL); \
error = 1; \
} \
meta = 0; \
} while (0)
sections[info].cur = 1;
sections[info].data[0] = 0;
sections[ea].cur = 1;
sections[ea].data[0] = 0;
sections[var].cur = 0;
while (!error && (rescan || (c = fgetc (fp)) != EOF))
{
rescan = 0;
switch (state)
{
case start_of_line:
lnum++;
if (c == '#')
state = start_of_comment;
else if (c != '\n')
{
switch (section)
{
case info:
case ea:
state = get_keyseq;
seqstate = normal;
slen = 0;
break;
case var:
state = get_varname;
varlen = 0;
break;
}
rescan = 1;
}
break;
case start_of_comment:
clen = 0;
state = in_line_comment;
/* fall through */
case in_line_comment:
if (c == '\n')
{
state = start_of_line;
comment[clen] = '\0';
if (strcmp (comment, "info") == 0)
section = info;
else if (strcmp (comment, "echo-area") == 0)
section = ea;
else if (strcmp (comment, "var") == 0)
section = var;
else if (strcmp (comment, "stop") == 0
&& (section == info || section == ea))
sections[section].data[0] = 1;
}
else if (clen < sizeof comment - 1)
comment[clen++] = c;
break;
case in_trailing_comment:
if (c == '\n')
state = start_of_line;
break;
case get_keyseq:
switch (seqstate)
{
case normal:
if (c == '\n' || isspace (c))
{
state = got_keyseq;
rescan = 1;
if (slen == 0)
{
syntax_error (filename, lnum, _("missing key sequence"),
NULL, NULL, NULL, NULL);
error = 1;
}
}
else if (c == '\\')
seqstate = slosh;
else if (c == '^')
seqstate = control;
else
To_seq (c);
break;
case slosh:
switch (c)
{
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
seqstate = octal;
oval = c - '0';
ocnt = 1;
break;
case 'b':
To_seq ('\b');
seqstate = normal;
break;
case 'e':
To_seq ('\033');
seqstate = normal;
break;
case 'n':
To_seq ('\n');
seqstate = normal;
break;
case 'r':
To_seq ('\r');
seqstate = normal;
break;
case 't':
To_seq ('\t');
seqstate = normal;
break;
case 'm':
meta = 1;
seqstate = normal;
break;
case 'k':
seqstate = special_key;
break;
default:
/* Backslash followed by any other char
just means that char. */
To_seq (c);
seqstate = normal;
break;
}
break;
case octal:
switch (c)
{
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
if (++ocnt <= 3)
oval = oval * 8 + c - '0';
if (ocnt == 3)
seqstate = normal;
break;
default:
ocnt = 4;
seqstate = normal;
rescan = 1;
break;
}
if (seqstate != octal)
{
if (oval)
To_seq (oval);
else
{
syntax_error (filename, lnum,
_("NUL character (\\000) not permitted"),
NULL, NULL, NULL, NULL);
error = 1;
}
}
break;
case special_key:
To_seq (SK_ESCAPE);
switch (c)
{
case 'u': To_seq (SK_UP_ARROW); break;
case 'd': To_seq (SK_DOWN_ARROW); break;
case 'r': To_seq (SK_RIGHT_ARROW); break;
case 'l': To_seq (SK_LEFT_ARROW); break;
case 'U': To_seq (SK_PAGE_UP); break;
case 'D': To_seq (SK_PAGE_DOWN); break;
case 'h': To_seq (SK_HOME); break;
case 'e': To_seq (SK_END); break;
case 'x': To_seq (SK_DELETE); break;
default: To_seq (SK_LITERAL); rescan = 1; break;
}
seqstate = normal;
break;
case control:
if (CONTROL (c))
To_seq (CONTROL (c));
else
{
syntax_error (filename, lnum,
(char *) _("NUL character (^%c) not permitted"),
(void *) (long) c, NULL, NULL, NULL);
error = 1;
}
seqstate = normal;
break;
}
break;
case got_keyseq:
if (isspace (c) && c != '\n')
break;
state = get_action;
alen = 0;
/* fall through */
case get_action:
if (c == '\n' || isspace (c))
{
int a;
state = got_action;
rescan = 1;
if (alen == 0)
{
syntax_error (filename, lnum, (char *) _("missing action name"),
(void *) (long) c, NULL, NULL, NULL);
error = 1;
}
else
{
act[alen] = '\0';
a = lookup_action (act);
if (a != -1)
{
char av = a;
if (!(add_to_section (&sections[section], seq, slen)
&& add_to_section (&sections[section], "", 1)
&& add_to_section (&sections[section], &av, 1)))
{
syntax_error (filename, lnum, _("section too long"),
NULL, NULL, NULL, NULL);
error = 1;
}
}
else
{
syntax_error (filename, lnum, _("unknown action `%s'"),
act, NULL, NULL, NULL);
error = 1;
}
}
}
else if (alen < sizeof act - 1)
act[alen++] = c;
else
{
syntax_error (filename, lnum, _("action name too long"),
NULL, NULL, NULL, NULL);
error = 1;
}
break;
case got_action:
if (c == '#')
state = in_trailing_comment;
else if (c == '\n')
state = start_of_line;
else if (!isspace (c))
{
syntax_error (filename, lnum,
_("extra characters following action `%s'"),
act, NULL, NULL, NULL);
error = 1;
}
break;
case get_varname:
if (c == '=')
{
if (varlen == 0)
{
syntax_error (filename, lnum, _("missing variable name"),
NULL, NULL, NULL, NULL);
error = 1;
}
state = get_value;
vallen = 0;
}
else if (c == '\n' || isspace (c))
{
syntax_error (filename, lnum,
_("missing `=' immediately after variable name"),
NULL, NULL, NULL, NULL);
error = 1;
}
else if (varlen < sizeof varn)
varn[varlen++] = c;
else
{
syntax_error (filename, lnum, _("variable name too long"),
NULL, NULL, NULL, NULL);
error = 1;
}
break;
case get_value:
if (c == '\n')
{
state = start_of_line;
if (!(add_to_section (&sections[section], varn, varlen)
&& add_to_section (&sections[section], "", 1)
&& add_to_section (&sections[section], val, vallen)
&& add_to_section (&sections[section], "", 1)))
{
syntax_error (filename, lnum, _("section too long"),
NULL, NULL, NULL, NULL);
error = 1;
}
}
else if (vallen < sizeof val)
val[vallen++] = c;
else
{
syntax_error (filename, lnum, _("value too long"),
NULL, NULL, NULL, NULL);
error = 1;
}
break;
case get_equals:
case got_equals:
case got_varname:
break;
}
}
#undef To_seq
return !error;
}
/* Add some characters to a section's data. Return true if all the
characters fit, or false if the section's size limit was exceeded.
*/
static int
add_to_section (struct sect *s, const char *str, unsigned int len)
{
if (s->cur + len > sizeof s->data)
return 0;
strncpy ((char *) s->data + s->cur, str, len);
s->cur += len;
return 1;
}
/* Translate from an action name to its numeric code. This uses the
auto-generated array in key.c.
*/
static int
lookup_action (const char *actname)
{
int i;
if (strcmp ("invalid", actname) == 0)
return A_INVALID;
for (i = 0; function_key_array[i].name != NULL; i++)
if (strcmp (function_key_array[i].name, actname) == 0)
return function_key_array[i].code;
return -1;
}
/* Put an integer to an infokey file.
Integers are stored as two bytes, low order first,
in radix INFOKEY_RADIX.
*/
static int
putint (int i, FILE *fp)
{
return fputc (i % INFOKEY_RADIX, fp) != EOF
&& fputc ((i / INFOKEY_RADIX) % INFOKEY_RADIX, fp) != EOF;
}
/* Write an entire section to an infokey file. If the section is
empty, simply omit it.
*/
static int
putsect (struct sect *s, int code, FILE *fp)
{
if (s->cur == 0)
return 1;
return fputc (code, fp) != EOF
&& putint (s->cur, fp)
&& fwrite (s->data, s->cur, 1, fp) == 1;
}
/* Write an entire infokey file, given an array containing its sections.
*/
static int
write_infokey_file (FILE *fp, struct sect *sections)
{
/* Get rid of sections with no effect. */
if (sections[info].cur == 1 && sections[info].data[0] == 0)
sections[info].cur = 0;
if (sections[ea].cur == 1 && sections[ea].data[0] == 0)
sections[ea].cur = 0;
/* Write all parts of the file out in order (no lseeks),
checking for errors all the way. */
return fputc (INFOKEY_MAGIC_S0, fp) != EOF
&& fputc (INFOKEY_MAGIC_S1, fp) != EOF
&& fputc (INFOKEY_MAGIC_S2, fp) != EOF
&& fputc (INFOKEY_MAGIC_S3, fp) != EOF
&& fputs (VERSION, fp) != EOF
&& fputc ('\0', fp) != EOF
&& putsect (&sections[info], INFOKEY_SECTION_INFO, fp)
&& putsect (&sections[ea], INFOKEY_SECTION_EA, fp)
&& putsect (&sections[var], INFOKEY_SECTION_VAR, fp)
&& fputc (INFOKEY_MAGIC_E0, fp) != EOF
&& fputc (INFOKEY_MAGIC_E1, fp) != EOF
&& fputc (INFOKEY_MAGIC_E2, fp) != EOF
&& fputc (INFOKEY_MAGIC_E3, fp) != EOF;
}
/* Error handling. */
/* Give the user a "syntax error" message in the form
progname: "filename", line N: message
*/
static void
error_message (int error_code, const char *fmt,
const void *a1, const void *a2, const void *a3, const void *a4)
{
fprintf (stderr, "%s: ", program_name);
fprintf (stderr, fmt, a1, a2, a3, a4);
if (error_code)
fprintf (stderr, " - %s", strerror (error_code));
fprintf (stderr, "\n");
}
/* Give the user a generic error message in the form
progname: message
*/
static void
syntax_error (const char *filename,
unsigned int linenum, const char *fmt,
const void *a1, const void *a2, const void *a3, const void *a4)
{
fprintf (stderr, "%s: ", program_name);
fprintf (stderr, _("\"%s\", line %u: "), filename, linenum);
fprintf (stderr, fmt, a1, a2, a3, a4);
fprintf (stderr, "\n");
}
/* Produce a gentle rtfm. */
static void
suggest_help (void)
{
fprintf (stderr, _("Try --help for more information.\n"));
}
/* Produce a scaled down description of the available options to Info. */
static void
short_help (void)
{
printf (_("\
Usage: %s [OPTION]... [INPUT-FILE]\n\
\n\
Compile infokey source file to infokey file. Reads INPUT-FILE (default\n\
$HOME/.infokey) and writes compiled key file to (by default) $HOME/.info.\n\
\n\
Options:\n\
--output FILE output to FILE instead of $HOME/.info\n\
--help display this help and exit.\n\
--version display version information and exit.\n\
"), program_name);
puts (_("\n\
Email bug reports to bug-texinfo@gnu.org,\n\
general questions and discussion to help-texinfo@gnu.org.\n\
Texinfo home page: http://www.gnu.org/software/texinfo/"));
xexit (0);
}

View File

@ -0,0 +1,130 @@
/* $NetBSD: infokey.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* infokey.h -- Custom keystroke definition support.
Id: infokey.h,v 1.2 2004/04/11 17:56:45 karl Exp
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Written by Andrew Bettison <andrewb@zip.com.au>.
This design was derived from the "lesskey" system in less 3.4.0. by
Mark Nudelman.
The following terminology is confusing:
source file = $HOME/.infokey
infokey file = $HOME/.info
Oh, well.
*/
/* Default source file, where user writes text definitions to be
compiled to the infokey file. MS-DOS doesn't allow leading
dots in file names. */
#ifdef __MSDOS__
#define INFOKEY_SRCFILE "_infokey"
#else
#define INFOKEY_SRCFILE ".infokey"
#endif
/* Default "infokey file", where compiled user defs are kept and
read by Info. MS-DOS doesn't allow leading dots in file names. */
#ifdef __MSDOS__
#define INFOKEY_FILE "_info"
#else
#define INFOKEY_FILE ".info"
#endif
/*
Format of entire infokey file:
4 bytes magic number S
X bytes version string
1 byte '\0' terminator
any number of sections:
1 byte section id
2 bytes section length (N)
N bytes section definitions: format depends on section
4 bytes magic number E
Format of INFO and EA sections:
1 byte flag: 1 == suppress default key bindings
Repeat:
X bytes key sequence
1 byte '\0' terminator
1 byte action code (A_xxx)
Format of VAR section:
Repeat:
X bytes variable name
1 byte '\0' terminator
Y bytes value
1 byte '\0' terminator
*/
#define INFOKEY_NMAGIC 8
#define INFOKEY_MAGIC_S0 '\001'
#define INFOKEY_MAGIC_S1 'I'
#define INFOKEY_MAGIC_S2 'n'
#define INFOKEY_MAGIC_S3 'f'
#define INFOKEY_SECTION_INFO 'i'
#define INFOKEY_SECTION_EA 'e'
#define INFOKEY_SECTION_VAR 'v'
#define INFOKEY_MAGIC_E0 'A'
#define INFOKEY_MAGIC_E1 'l'
#define INFOKEY_MAGIC_E2 'f'
#define INFOKEY_MAGIC_E3 'n'
#define INFOKEY_RADIX 64
#define INFOKEY_MAX_SECTIONLEN 500
#define INFOKEY_MAX_DEFLEN 16
#define A_MAX_COMMAND 120
#define A_INVALID 121
/* Character transformations (independent of info's own) */
#define CONTROL(c) ((c) & 0x1f)
#define ISCONTROL(c) (((c) & ~0x1f) == 0)
#define META(c) ((c) | 0x80)
#define UNMETA(c) ((c) & ~0x80)
#define ISMETA(c) (((c) & 0x80) != 0)
/* Special keys (keys which output different strings on different terminals) */
#define SK_ESCAPE CONTROL('k')
#define SK_RIGHT_ARROW 1
#define SK_LEFT_ARROW 2
#define SK_UP_ARROW 3
#define SK_DOWN_ARROW 4
#define SK_PAGE_UP 5
#define SK_PAGE_DOWN 6
#define SK_HOME 7
#define SK_END 8
#define SK_DELETE 9
#define SK_INSERT 10
#define SK_CTL_LEFT_ARROW 11
#define SK_CTL_RIGHT_ARROW 12
#define SK_CTL_DELETE 13
#define SK_LITERAL 40

1833
external/gpl2/texinfo/dist/info/infomap.c vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,84 @@
/* $NetBSD: infomap.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* infomap.h -- description of a keymap in Info and related functions.
Id: infomap.h,v 1.3 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 2001, 2004 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 INFOMAP_H
#define INFOMAP_H
#include "info.h"
#define ESC '\033'
#define DEL '\177'
#define TAB '\011'
#define RET '\r'
#define LFD '\n'
#define SPC ' '
#define meta_character_threshold (DEL + 1)
#define control_character_threshold (SPC)
#define meta_character_bit 0x80
#define control_character_bit 0x40
#define Meta_p(c) (((c) > meta_character_threshold))
#define Control_p(c) ((c) < control_character_threshold)
#define Meta(c) ((c) | (meta_character_bit))
#define UnMeta(c) ((c) & (~meta_character_bit))
#define Control(c) ((toupper (c)) & (~control_character_bit))
#define UnControl(c) (tolower ((c) | control_character_bit))
/* A keymap contains one entry for each key in the ASCII set.
Each entry consists of a type and a pointer.
FUNCTION is the address of a function to run, or the
address of a keymap to indirect through.
TYPE says which kind of thing FUNCTION is. */
typedef struct keymap_entry
{
char type;
InfoCommand *function;
} KEYMAP_ENTRY;
typedef KEYMAP_ENTRY *Keymap;
/* The values that TYPE can have in a keymap entry. */
#define ISFUNC 0
#define ISKMAP 1
extern Keymap info_keymap;
extern Keymap echo_area_keymap;
/* Return a new keymap which has all the uppercase letters mapped to run
the function info_do_lowercase_version (). */
extern Keymap keymap_make_keymap (void);
/* Return a new keymap which is a copy of MAP. */
extern Keymap keymap_copy_keymap (Keymap map, Keymap rootmap,
Keymap newroot);
/* Free MAP and it's descendents. */
extern void keymap_discard_keymap (Keymap map, Keymap rootmap);
/* Initialize the info keymaps. */
extern void initialize_info_keymaps (void);
#endif /* not INFOMAP_H */

37
external/gpl2/texinfo/dist/info/key.h vendored Normal file
View File

@ -0,0 +1,37 @@
/* $NetBSD: key.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* key.h -- Structure associating function names with numeric codes. */
/* This file is part of GNU Info, a program for reading online documentation
stored in Info format.
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.
Written by Andrew Bettison <andrewb@zip.com.au> */
#if !defined (KEY_H)
#define KEY_H
typedef struct {
char *name;
unsigned char code;
}
FUNCTION_KEY;
extern FUNCTION_KEY function_key_array[];
#endif /* !KEY_H */

216
external/gpl2/texinfo/dist/info/m-x.c vendored Normal file
View File

@ -0,0 +1,216 @@
/* $NetBSD: m-x.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* m-x.c -- Meta-x minibuffer reader.
Id: m-x.c,v 1.3 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1997, 1998, 2001, 2002, 2004 Free Software
Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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.
Originally written by Brian Fox (bfox@ai.mit.edu). */
#include "info.h"
#include "funs.h"
/* **************************************************************** */
/* */
/* Reading Named Commands */
/* */
/* **************************************************************** */
/* Read the name of an Info function in the echo area and return the
name. A return value of NULL indicates that no function name could
be read. */
char *
read_function_name (char *prompt, WINDOW *window)
{
register int i;
char *line;
REFERENCE **array = (REFERENCE **)NULL;
int array_index = 0, array_slots = 0;
/* Make an array of REFERENCE which actually contains the names of
the functions available in Info. */
for (i = 0; function_doc_array[i].func; i++)
{
REFERENCE *entry;
entry = (REFERENCE *)xmalloc (sizeof (REFERENCE));
entry->label = xstrdup (function_doc_array[i].func_name);
entry->nodename = (char *)NULL;
entry->filename = (char *)NULL;
add_pointer_to_array
(entry, array_index, array, array_slots, 200, REFERENCE *);
}
line = info_read_completing_in_echo_area (window, prompt, array);
info_free_references (array);
if (!echo_area_is_active)
window_clear_echo_area ();
return (line);
}
DECLARE_INFO_COMMAND (describe_command,
_("Read the name of an Info command and describe it"))
{
char *line;
line = read_function_name ((char *) _("Describe command: "), window);
if (!line)
{
info_abort_key (active_window, count, key);
return;
}
/* Describe the function named in "LINE". */
if (*line)
{
InfoCommand *cmd = named_function (line);
if (!cmd)
return;
window_message_in_echo_area ("%s: %s.",
line, function_documentation (cmd));
}
free (line);
}
DECLARE_INFO_COMMAND (info_execute_command,
_("Read a command name in the echo area and execute it"))
{
char *line;
char *keys;
char *prompt;
prompt = (char *)xmalloc (20);
keys = where_is (info_keymap, InfoCmd(info_execute_command));
/* If the where_is () function thinks that this command doesn't exist,
there's something very wrong! */
if (!keys)
abort();
if (info_explicit_arg || count != 1)
sprintf (prompt, "%d %s ", count, keys);
else
sprintf (prompt, "%s ", keys);
/* Ask the completer to read a reference for us. */
line = read_function_name (prompt, window);
/* User aborted? */
if (!line)
{
info_abort_key (active_window, count, key);
return;
}
/* User accepted "default"? (There is none.) */
if (!*line)
{
free (line);
return;
}
/* User wants to execute a named command. Do it. */
{
InfoCommand *command;
if ((active_window != the_echo_area) &&
(strncmp (line, "echo-area-", 10) == 0))
{
free (line);
info_error ((char *) _("Cannot execute an `echo-area' command here."),
NULL, NULL);
return;
}
command = named_function (line);
free (line);
if (!command)
return;
if (InfoFunction(command))
(*InfoFunction(command)) (active_window, count, 0);
else
info_error ((char *) _("Undefined command: %s"), line, NULL);
}
}
/* Okay, now that we have M-x, let the user set the screen height. */
DECLARE_INFO_COMMAND (set_screen_height,
_("Set the height of the displayed window"))
{
int new_height, old_height = screenheight;
if (info_explicit_arg || count != 1)
new_height = count;
else
{
char prompt[80];
char *line;
new_height = screenheight;
sprintf (prompt, _("Set screen height to (%d): "), new_height);
line = info_read_in_echo_area (window, prompt);
/* If the user aborted, do that now. */
if (!line)
{
info_abort_key (active_window, count, 0);
return;
}
/* Find out what the new height is supposed to be. */
if (*line)
new_height = atoi (line);
/* Clear the echo area if it isn't active. */
if (!echo_area_is_active)
window_clear_echo_area ();
free (line);
}
terminal_clear_screen ();
display_clear_display (the_display);
screenheight = new_height;
#ifdef SET_SCREEN_SIZE_HELPER
SET_SCREEN_SIZE_HELPER;
#endif
if (screenheight == old_height)
{
/* Display dimensions didn't actually change, so
window_new_screen_size won't do anything, but we've
already cleared the display above. Undo the damage. */
window_mark_chain (windows, W_UpdateWindow);
display_update_display (windows);
}
else
{
display_initialize_display (screenwidth, screenheight);
window_new_screen_size (screenwidth, screenheight);
}
}

View File

@ -0,0 +1,580 @@
/* $NetBSD: makedoc.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* makedoc.c -- make doc.c and funs.h from input files.
Id: makedoc.c,v 1.4 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004 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.
Originally written by Brian Fox (bfox@ai.mit.edu). */
/* This program grovels the contents of the source files passed as arguments
and writes out a file of function pointers and documentation strings, and
a header file which describes the contents. This only does the functions
declared with DECLARE_INFO_COMMAND. */
#include "info.h"
#include "infokey.h"
static void fatal_file_error (char *filename);
/* Name of the header file which receives the declarations of functions. */
static char *funs_filename = "funs.h";
/* Name of the documentation to function pointer file. */
static char *doc_filename = "doc.c";
static char *key_filename = "key.c";
static char *doc_header[] = {
"/* doc.c -- Generated structure containing function names and doc strings.",
"",
" This file was automatically made from various source files with the",
" command `%s'. DO NOT EDIT THIS FILE, only `%s.c'.",
(char *)NULL
};
static char *doc_header_1[] = {
" 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,",
#if defined (NAMED_FUNCTIONS)
" a string which is the user-visible name of the function,",
#endif /* NAMED_FUNCTIONS */
" and a string which documents its purpose. */",
"",
"#include \"info.h\"",
"#include \"funs.h\"",
"",
"FUNCTION_DOC function_doc_array[] = {",
"",
(char *)NULL
};
static char *key_header[] = {
"/* key.c -- Generated array containing function names.",
"",
" This file was automatically made from various source files with the",
" command \"%s\". DO NOT EDIT THIS FILE, only \"%s.c\".",
"",
(char *)NULL
};
static char *key_header_1[] = {
" An entry in the array FUNCTION_KEY_ARRAY is made for each command",
" found in the above files; each entry consists of",
" a string which is the user-visible name of the function. */",
"",
"#include \"key.h\"",
"#include \"funs.h\"",
"",
"FUNCTION_KEY function_key_array[] = {",
"",
(char *)NULL
};
/* How to remember the locations of the functions found so that Emacs
can use the information in a tag table. */
typedef struct {
char *name; /* Name of the tag. */
int line; /* Line number at which it appears. */
long char_offset; /* Character offset at which it appears. */
} EMACS_TAG;
typedef struct {
char *filename; /* Name of the file containing entries. */
long entrylen; /* Total number of characters in tag block. */
EMACS_TAG **entries; /* Entries found in FILENAME. */
int entries_index;
int entries_slots;
} EMACS_TAG_BLOCK;
EMACS_TAG_BLOCK **emacs_tags = (EMACS_TAG_BLOCK **)NULL;
int emacs_tags_index = 0;
int emacs_tags_slots = 0;
#define DECLARATION_STRING "\nDECLARE_INFO_COMMAND"
static void process_one_file (char *filename, FILE *doc_stream,
FILE *key_stream, FILE *funs_stream);
static void maybe_dump_tags (FILE *stream);
static FILE *must_fopen (char *filename, char *mode);
static void init_func_key (unsigned int val);
static unsigned int next_func_key (void);
int
main (int argc, char **argv)
{
register int i;
int tags_only = 0;
FILE *funs_stream, *doc_stream;
FILE *key_stream;
#if STRIP_DOT_EXE
{
char *dot = strrchr (argv[0], '.');
if (dot && FILENAME_CMP (dot, ".exe") == 0)
*dot = 0;
}
#endif
for (i = 1; i < argc; i++)
if (strcmp (argv[i], "-tags") == 0)
{
tags_only++;
break;
}
if (tags_only)
{
funs_filename = NULL_DEVICE;
doc_filename = NULL_DEVICE;
key_filename = NULL_DEVICE;
}
funs_stream = must_fopen (funs_filename, "w");
doc_stream = must_fopen (doc_filename, "w");
key_stream = must_fopen (key_filename, "w");
fprintf (funs_stream,
"/* %s -- Generated declarations for Info commands. */\n\n\
#include \"info.h\"\n",
funs_filename);
for (i = 0; doc_header[i]; i++)
{
fprintf (doc_stream, doc_header[i], argv[0], argv[0]);
fprintf (doc_stream, "\n");
}
fprintf (doc_stream,
_(" Source files groveled to make this file include:\n\n"));
for (i = 0; key_header[i]; i++)
{
fprintf (key_stream, key_header[i], argv[0], argv[0]);
fprintf (key_stream, "\n");
}
fprintf (key_stream,
_(" Source files groveled to make this file include:\n\n"));
for (i = 1; i < argc; i++)
{
fprintf (doc_stream, "\t%s\n", argv[i]);
fprintf (key_stream, "\t%s\n", argv[i]);
}
fprintf (doc_stream, "\n");
for (i = 0; doc_header_1[i]; i++)
fprintf (doc_stream, "%s\n", doc_header_1[i]);
fprintf (key_stream, "\n");
for (i = 0; key_header_1[i]; i++)
fprintf (key_stream, "%s\n", key_header_1[i]);
init_func_key(0);
for (i = 1; i < argc; i++)
{
char *curfile;
curfile = argv[i];
if (*curfile == '-')
continue;
fprintf (doc_stream, "/* Commands found in \"%s\". */\n", curfile);
fprintf (key_stream, "/* Commands found in \"%s\". */\n", curfile);
fprintf (funs_stream, "\n/* Functions declared in \"%s\". */\n",
curfile);
process_one_file (curfile, doc_stream, key_stream, funs_stream);
}
#if defined (INFOKEY)
#if defined (NAMED_FUNCTIONS)
fprintf (doc_stream,
" { (VFunction *)NULL, (char *)NULL, (FUNCTION_KEYSEQ *)NULL, (char *)NULL }\n};\n");
#else /* !NAMED_FUNCTIONS */
fprintf (doc_stream, " { (VFunction *)NULL, (FUNCTION_KEYSEQ *)NULL, (char *)NULL }\n};\n");
#endif /* !NAMED_FUNCTIONS */
#else /* !INFOKEY */
#if defined (NAMED_FUNCTIONS)
fprintf (doc_stream,
" { (VFunction *)NULL, (char *)NULL, (char *)NULL }\n};\n");
#else /* !NAMED_FUNCTIONS */
fprintf (doc_stream, " { (VFunction *)NULL, (char *)NULL }\n};\n");
#endif /* !NAMED_FUNCTIONS */
#endif /* !INFOKEY */
fprintf (key_stream, " { (char *)NULL, 0 }\n};\n");
fprintf (funs_stream, "\n#define A_NCOMMANDS %u\n", next_func_key());
fclose (funs_stream);
fclose (doc_stream);
fclose (key_stream);
if (tags_only)
maybe_dump_tags (stdout);
return 0;
}
/* Dumping out the contents of an Emacs tags table. */
static void
maybe_dump_tags (FILE *stream)
{
register int i;
/* Emacs needs its TAGS file to be in Unix text format (i.e., only
newline at end of every line, no CR), so when we generate a
TAGS table, we must switch the output stream to binary mode.
(If the table is written to a terminal, this is obviously not needed.) */
SET_BINARY (fileno (stream));
/* Print out the information for each block. */
for (i = 0; i < emacs_tags_index; i++)
{
register int j;
register EMACS_TAG_BLOCK *block;
register EMACS_TAG *etag;
long block_len;
block_len = 0;
block = emacs_tags[i];
/* Calculate the length of the dumped block first. */
for (j = 0; j < block->entries_index; j++)
{
char digits[30];
etag = block->entries[j];
block_len += 3 + strlen (etag->name);
sprintf (digits, "%d,%ld", etag->line, etag->char_offset);
block_len += strlen (digits);
}
/* Print out the defining line. */
fprintf (stream, "\f\n%s,%ld\n", block->filename, block_len);
/* Print out the individual tags. */
for (j = 0; j < block->entries_index; j++)
{
etag = block->entries[j];
fprintf (stream, "%s,\177%d,%ld\n",
etag->name, etag->line, etag->char_offset);
}
}
}
/* Keeping track of names, line numbers and character offsets of functions
found in source files. */
static EMACS_TAG_BLOCK *
make_emacs_tag_block (char *filename)
{
EMACS_TAG_BLOCK *block;
block = (EMACS_TAG_BLOCK *)xmalloc (sizeof (EMACS_TAG_BLOCK));
block->filename = xstrdup (filename);
block->entrylen = 0;
block->entries = (EMACS_TAG **)NULL;
block->entries_index = 0;
block->entries_slots = 0;
return (block);
}
static void
add_tag_to_block (EMACS_TAG_BLOCK *block,
char *name, int line, long int char_offset)
{
EMACS_TAG *tag;
tag = (EMACS_TAG *)xmalloc (sizeof (EMACS_TAG));
tag->name = name;
tag->line = line;
tag->char_offset = char_offset;
add_pointer_to_array (tag, block->entries_index, block->entries,
block->entries_slots, 50, EMACS_TAG *);
}
/* Read the file represented by FILENAME into core, and search it for Info
function declarations. Output the declarations in various forms to the
DOC_STREAM, KEY_STREAM, and FUNS_STREAM. */
static void
process_one_file (char *filename, FILE *doc_stream,
FILE *key_stream, FILE *funs_stream)
{
int descriptor, decl_len;
char *buffer, *decl_str;
struct stat finfo;
long offset;
long file_size;
EMACS_TAG_BLOCK *block;
if (stat (filename, &finfo) == -1)
fatal_file_error (filename);
descriptor = open (filename, O_RDONLY, 0666);
if (descriptor == -1)
fatal_file_error (filename);
file_size = (long) finfo.st_size;
buffer = (char *)xmalloc (1 + file_size);
/* On some systems, the buffer will actually contain
less characters than the full file's size, because
the CR characters are removed from line endings. */
file_size = read (descriptor, buffer, file_size);
close (descriptor);
offset = 0;
decl_str = DECLARATION_STRING;
decl_len = strlen (decl_str);
block = make_emacs_tag_block (filename);
while (1)
{
long point = 0;
long line_start = 0;
int line_number = 0;
char *func, *doc;
#if defined (INFOKEY) || defined (NAMED_FUNCTIONS)
char *func_name;
#endif /* INFOKEY || NAMED_FUNCTIONS */
for (; offset < (file_size - decl_len); offset++)
{
if (buffer[offset] == '\n')
{
line_number++;
line_start = offset + 1;
}
if (strncmp (buffer + offset, decl_str, decl_len) == 0)
{
offset += decl_len;
point = offset;
break;
}
}
if (!point)
break;
/* Skip forward until we find the open paren. */
while (point < file_size)
{
if (buffer[point] == '\n')
{
line_number++;
line_start = point + 1;
}
else if (buffer[point] == '(')
break;
point++;
}
while (point++ < file_size)
{
if (!whitespace_or_newline (buffer[point]))
break;
else if (buffer[point] == '\n')
{
line_number++;
line_start = point + 1;
}
}
if (point >= file_size)
break;
/* Now looking at name of function. Get it. */
for (offset = point; buffer[offset] != ','; offset++);
func = (char *)xmalloc (1 + (offset - point));
strncpy (func, buffer + point, offset - point);
func[offset - point] = '\0';
/* Remember this tag in the current block. */
{
char *tag_name;
tag_name = (char *)xmalloc (1 + (offset - line_start));
strncpy (tag_name, buffer + line_start, offset - line_start);
tag_name[offset - line_start] = '\0';
add_tag_to_block (block, tag_name, line_number, point);
}
#if defined (INFOKEY) || defined (NAMED_FUNCTIONS)
/* Generate the user-visible function name from the function's name. */
{
register int i;
char *name_start;
name_start = func;
if (strncmp (name_start, "info_", 5) == 0)
name_start += 5;
func_name = xstrdup (name_start);
/* Fix up "ea" commands. */
if (strncmp (func_name, "ea_", 3) == 0)
{
char *temp_func_name;
temp_func_name = (char *)xmalloc (10 + strlen (func_name));
strcpy (temp_func_name, "echo_area_");
strcat (temp_func_name, func_name + 3);
free (func_name);
func_name = temp_func_name;
}
for (i = 0; func_name[i]; i++)
if (func_name[i] == '_')
func_name[i] = '-';
}
#endif /* INFOKEY || NAMED_FUNCTIONS */
/* Find doc string. */
point = offset + 1;
while (point < file_size)
{
if (buffer[point] == '\n')
{
line_number++;
line_start = point + 1;
}
if (buffer[point] == '"')
break;
else
point++;
}
offset = point + 1;
while (offset < file_size)
{
if (buffer[offset] == '\n')
{
line_number++;
line_start = offset + 1;
}
if (buffer[offset] == '\\')
offset += 2;
else if (buffer[offset] == '"')
break;
else
offset++;
}
offset++;
if (offset >= file_size)
break;
doc = (char *)xmalloc (1 + (offset - point));
strncpy (doc, buffer + point, offset - point);
doc[offset - point] = '\0';
#if defined (INFOKEY)
#if defined (NAMED_FUNCTIONS)
fprintf (doc_stream,
" { (VFunction *)%s, \"%s\", (FUNCTION_KEYSEQ *)0, %s },\n",
func, func_name, doc);
#else /* !NAMED_FUNCTIONS */
fprintf (doc_stream,
" { (VFunction *) %s, (FUNCTION_KEYSEQ *)0, %s },\n", func, doc);
#endif /* !NAMED_FUNCTIONS */
fprintf (key_stream, " { \"%s\", A_%s },\n", func_name, func);
#else /* !INFOKEY */
#if defined (NAMED_FUNCTIONS)
fprintf (doc_stream, " { %s, \"%s\", %s },\n", func, func_name, doc);
#else /* !NAMED_FUNCTIONS */
fprintf (doc_stream, " { %s, %s },\n", func, doc);
#endif /* !NAMED_FUNCTIONS */
#endif /* !INFOKEY */
#if defined (INFOKEY) || defined (NAMED_FUNCTIONS)
free (func_name);
#endif /* INFOKEY || NAMED_FUNCTIONS */
#if defined (INFOKEY)
fprintf (funs_stream, "#define A_%s %u\n", func, next_func_key());
#endif /* INFOKEY */
fprintf (funs_stream,
"extern void %s (WINDOW *window, int count, unsigned char key);\n",
func);
free (func);
free (doc);
}
free (buffer);
/* If we created any tags, remember this file on our global list. Otherwise,
free the memory already allocated to it. */
if (block->entries)
add_pointer_to_array (block, emacs_tags_index, emacs_tags,
emacs_tags_slots, 10, EMACS_TAG_BLOCK *);
else
{
free (block->filename);
free (block);
}
}
static void
fatal_file_error (char *filename)
{
fprintf (stderr, _("Couldn't manipulate the file %s.\n"), filename);
xexit (2);
}
static FILE *
must_fopen (char *filename, char *mode)
{
FILE *stream;
stream = fopen (filename, mode);
if (!stream)
fatal_file_error (filename);
return (stream);
}
static unsigned int func_key;
static void
init_func_key(unsigned int val)
{
func_key = val;
}
static unsigned int
next_func_key(void)
{
return func_key++;
}

736
external/gpl2/texinfo/dist/info/man.c vendored Normal file
View File

@ -0,0 +1,736 @@
/* $NetBSD: man.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* man.c: How to read and format man files.
Id: man.c,v 1.4 2004/04/11 17:56:46 karl Exp
Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004 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 Thu May 4 09:17:52 1995 (bfox@ai.mit.edu). */
#include "info.h"
#include <sys/ioctl.h>
#include "signals.h"
#if defined (HAVE_SYS_TIME_H)
#include <sys/time.h>
#endif
#if defined (HAVE_SYS_WAIT_H)
#include <sys/wait.h>
#endif
#include "tilde.h"
#include "man.h"
#if !defined (_POSIX_VERSION)
#define pid_t int
#endif
#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 */
#if STRIP_DOT_EXE
static char const * const exec_extensions[] = {
".exe", ".com", ".bat", ".btm", ".sh", ".ksh", ".pl", ".sed", "", NULL
};
#else
static char const * const exec_extensions[] = { "", NULL };
#endif
static char *read_from_fd (int fd);
static void clean_manpage (char *manpage);
static NODE *manpage_node_of_file_buffer (FILE_BUFFER *file_buffer,
char *pagename);
static char *get_manpage_contents (char *pagename);
NODE *
make_manpage_node (char *pagename)
{
return (info_get_node (MANPAGE_FILE_BUFFER_NAME, pagename));
}
NODE *
get_manpage_node (FILE_BUFFER *file_buffer, char *pagename)
{
NODE *node;
node = manpage_node_of_file_buffer (file_buffer, pagename);
if (!node)
{
char *page;
page = get_manpage_contents (pagename);
if (page)
{
char header[1024];
long oldsize, newsize;
int hlen, plen;
char *old_contents = file_buffer->contents;
sprintf (header, "\n\n%c\n%s %s, %s %s, %s (dir)\n\n",
INFO_COOKIE,
INFO_FILE_LABEL, file_buffer->filename,
INFO_NODE_LABEL, pagename,
INFO_UP_LABEL);
oldsize = file_buffer->filesize;
hlen = strlen (header);
plen = strlen (page);
newsize = (oldsize + hlen + plen);
file_buffer->contents =
(char *)xrealloc (file_buffer->contents, 1 + newsize);
memcpy (file_buffer->contents + oldsize, header, hlen);
memcpy (file_buffer->contents + oldsize + hlen, page, plen);
file_buffer->contents[newsize] = '\0';
file_buffer->filesize = newsize;
file_buffer->finfo.st_size = newsize;
build_tags_and_nodes (file_buffer);
free (page);
/* We have just relocated file_buffer->contents from under
the feet of info_windows[] array. Therefore, all the
nodes on that list which are showing man pages have their
contents member pointing into the blue. Undo that harm. */
if (old_contents && oldsize && old_contents != file_buffer->contents)
{
int iw;
INFO_WINDOW *info_win;
char *old_contents_end = old_contents + oldsize;
for (iw = 0; (info_win = info_windows[iw]); iw++)
{
int in;
for (in = 0; in < info_win->nodes_index; in++)
{
NODE *tmp_node = info_win->nodes[in];
/* It really only suffices to see that node->filename
is "*manpages*". But after several hours of
debugging this, would you blame me for being a bit
paranoid? */
if (tmp_node && tmp_node->filename
&& tmp_node->contents
&& strcmp (tmp_node->filename,
MANPAGE_FILE_BUFFER_NAME) == 0
&& tmp_node->contents >= old_contents
&& tmp_node->contents + tmp_node->nodelen
<= old_contents_end)
{
info_win->nodes[in] =
manpage_node_of_file_buffer (file_buffer,
tmp_node->nodename);
free (tmp_node->nodename);
free (tmp_node);
}
}
}
}
}
node = manpage_node_of_file_buffer (file_buffer, pagename);
}
return (node);
}
FILE_BUFFER *
create_manpage_file_buffer (void)
{
FILE_BUFFER *file_buffer = make_file_buffer ();
file_buffer->filename = xstrdup (MANPAGE_FILE_BUFFER_NAME);
file_buffer->fullpath = xstrdup (MANPAGE_FILE_BUFFER_NAME);
file_buffer->finfo.st_size = 0;
file_buffer->filesize = 0;
file_buffer->contents = (char *)NULL;
file_buffer->flags = (N_IsInternal | N_CannotGC | N_IsManPage);
return (file_buffer);
}
/* Scan the list of directories in PATH looking for FILENAME. If we find
one that is an executable file, return it as a new string. Otherwise,
return a NULL pointer. */
static char *
executable_file_in_path (char *filename, char *path)
{
struct stat finfo;
char *temp_dirname;
int statable, dirname_index;
dirname_index = 0;
while ((temp_dirname = extract_colon_unit (path, &dirname_index)))
{
char *temp;
char *temp_end;
int i;
/* Expand a leading tilde if one is present. */
if (*temp_dirname == '~')
{
char *expanded_dirname;
expanded_dirname = tilde_expand_word (temp_dirname);
free (temp_dirname);
temp_dirname = expanded_dirname;
}
temp = (char *)xmalloc (34 + strlen (temp_dirname) + strlen (filename));
strcpy (temp, temp_dirname);
if (!IS_SLASH (temp[(strlen (temp)) - 1]))
strcat (temp, "/");
strcat (temp, filename);
temp_end = temp + strlen (temp);
free (temp_dirname);
/* Look for FILENAME, possibly with any of the extensions
in EXEC_EXTENSIONS[]. */
for (i = 0; exec_extensions[i]; i++)
{
if (exec_extensions[i][0])
strcpy (temp_end, exec_extensions[i]);
statable = (stat (temp, &finfo) == 0);
/* If we have found a regular executable file, then use it. */
if ((statable) && (S_ISREG (finfo.st_mode)) &&
(access (temp, X_OK) == 0))
return (temp);
}
free (temp);
}
return ((char *)NULL);
}
/* Return the full pathname of the system man page formatter. */
static char *
find_man_formatter (void)
{
return (executable_file_in_path ("man", (char *)getenv ("PATH")));
}
static char *manpage_pagename = (char *)NULL;
static char *manpage_section = (char *)NULL;
static void
get_page_and_section (char *pagename)
{
register int i;
if (manpage_pagename)
free (manpage_pagename);
if (manpage_section)
free (manpage_section);
manpage_pagename = (char *)NULL;
manpage_section = (char *)NULL;
for (i = 0; pagename[i] != '\0' && pagename[i] != '('; i++);
manpage_pagename = (char *)xmalloc (1 + i);
strncpy (manpage_pagename, pagename, i);
manpage_pagename[i] = '\0';
if (pagename[i] == '(')
{
int start;
start = i + 1;
for (i = start; pagename[i] != '\0' && pagename[i] != ')'; i++);
manpage_section = (char *)xmalloc (1 + (i - start));
strncpy (manpage_section, pagename + start, (i - start));
manpage_section[i - start] = '\0';
}
}
#if PIPE_USE_FORK
static void
reap_children (int sig)
{
wait (NULL);
}
#endif
static char *
get_manpage_contents (char *pagename)
{
static char *formatter_args[4] = { (char *)NULL };
int pipes[2];
pid_t child;
RETSIGTYPE (*sigsave) (int signum);
char *formatted_page = NULL;
int arg_index = 1;
if (formatter_args[0] == (char *)NULL)
formatter_args[0] = find_man_formatter ();
if (formatter_args[0] == (char *)NULL)
return ((char *)NULL);
get_page_and_section (pagename);
if (manpage_section != (char *)NULL)
formatter_args[arg_index++] = manpage_section;
formatter_args[arg_index++] = manpage_pagename;
formatter_args[arg_index] = (char *)NULL;
/* Open a pipe to this program, read the output, and save it away
in FORMATTED_PAGE. The reader end of the pipe is pipes[0]; the
writer end is pipes[1]. */
#if PIPE_USE_FORK
pipe (pipes);
sigsave = signal (SIGCHLD, reap_children);
child = fork ();
if (child == -1)
return ((char *)NULL);
if (child != 0)
{
/* In the parent, close the writing end of the pipe, and read from
the exec'd child. */
close (pipes[1]);
formatted_page = read_from_fd (pipes[0]);
close (pipes[0]);
signal (SIGCHLD, sigsave);
}
else
{ /* In the child, close the read end of the pipe, make the write end
of the pipe be stdout, and execute the man page formatter. */
close (pipes[0]);
freopen (NULL_DEVICE, "w", stderr);
freopen (NULL_DEVICE, "r", stdin);
dup2 (pipes[1], fileno (stdout));
execv (formatter_args[0], formatter_args);
/* If we get here, we couldn't exec, so close out the pipe and
exit. */
close (pipes[1]);
xexit (0);
}
#else /* !PIPE_USE_FORK */
/* Cannot fork/exec, but can popen/pclose. */
{
FILE *fpipe;
char *cmdline = xmalloc (strlen (formatter_args[0])
+ strlen (manpage_pagename)
+ (arg_index > 2 ? strlen (manpage_section) : 0)
+ 3);
int save_stderr = dup (fileno (stderr));
int fd_err = open (NULL_DEVICE, O_WRONLY, 0666);
if (fd_err > 2)
dup2 (fd_err, fileno (stderr)); /* Don't print errors. */
sprintf (cmdline, "%s %s %s", formatter_args[0], manpage_pagename,
arg_index > 2 ? manpage_section : "");
fpipe = popen (cmdline, "r");
free (cmdline);
if (fd_err > 2)
close (fd_err);
dup2 (save_stderr, fileno (stderr));
if (fpipe == 0)
return ((char *)NULL);
formatted_page = read_from_fd (fileno (fpipe));
if (pclose (fpipe) == -1)
{
if (formatted_page)
free (formatted_page);
return ((char *)NULL);
}
}
#endif /* !PIPE_USE_FORK */
/* If we have the page, then clean it up. */
if (formatted_page)
clean_manpage (formatted_page);
return (formatted_page);
}
static void
clean_manpage (char *manpage)
{
register int i, j;
int newline_count = 0;
char *newpage;
newpage = (char *)xmalloc (1 + strlen (manpage));
for (i = 0, j = 0; (newpage[j] = manpage[i]); i++, j++)
{
if (manpage[i] == '\n')
newline_count++;
else
newline_count = 0;
if (newline_count == 3)
{
j--;
newline_count--;
}
/* A malformed man page could have a \b as its first character,
in which case decrementing j by 2 will cause us to write into
newpage[-1], smashing the hidden info stored there by malloc. */
if (manpage[i] == '\b' || (manpage[i] == '\f' && j > 0))
j -= 2;
else if (!raw_escapes_p)
{
/* Remove the ANSI escape sequences for color, boldface,
underlining, and italics, generated by some versions of
Groff. */
if (manpage[i] == '\033' && manpage[i + 1] == '['
&& isdigit (manpage[i + 2]))
{
if (isdigit (manpage[i + 3]) && manpage[i + 4] == 'm')
{
i += 4;
j--;
}
else if (manpage[i + 3] == 'm')
{
i += 3;
j--;
}
/* Else do nothing: it's some unknown escape sequence,
so let's leave it alone. */
}
}
}
newpage[j++] = 0;
strcpy (manpage, newpage);
free (newpage);
}
static NODE *
manpage_node_of_file_buffer (FILE_BUFFER *file_buffer, char *pagename)
{
NODE *node = (NODE *)NULL;
TAG *tag = (TAG *)NULL;
if (file_buffer->contents)
{
register int i;
for (i = 0; (tag = file_buffer->tags[i]); i++)
{
if (strcasecmp (pagename, tag->nodename) == 0)
break;
}
}
if (tag)
{
node = (NODE *)xmalloc (sizeof (NODE));
node->filename = file_buffer->filename;
node->nodename = xstrdup (tag->nodename);
node->contents = file_buffer->contents + tag->nodestart;
node->nodelen = tag->nodelen;
node->flags = 0;
node->display_pos = 0;
node->parent = (char *)NULL;
node->flags = (N_HasTagsTable | N_IsManPage);
node->contents += skip_node_separator (node->contents);
}
return (node);
}
static char *
read_from_fd (int fd)
{
struct timeval timeout;
char *buffer = (char *)NULL;
int bsize = 0;
int bindex = 0;
int select_result;
#if defined (FD_SET)
fd_set read_fds;
timeout.tv_sec = 15;
timeout.tv_usec = 0;
FD_ZERO (&read_fds);
FD_SET (fd, &read_fds);
select_result = select (fd + 1, fd_set_cast (&read_fds), 0, 0, &timeout);
#else /* !FD_SET */
select_result = 1;
#endif /* !FD_SET */
switch (select_result)
{
case 0:
case -1:
break;
default:
{
int amount_read;
int done = 0;
while (!done)
{
while ((bindex + 1024) > (bsize))
buffer = (char *)xrealloc (buffer, (bsize += 1024));
buffer[bindex] = '\0';
amount_read = read (fd, buffer + bindex, 1023);
if (amount_read < 0)
{
done = 1;
}
else
{
bindex += amount_read;
buffer[bindex] = '\0';
if (amount_read == 0)
done = 1;
}
}
}
}
if ((buffer != (char *)NULL) && (*buffer == '\0'))
{
free (buffer);
buffer = (char *)NULL;
}
return (buffer);
}
static char *reference_section_starters[] =
{
"\nRELATED INFORMATION",
"\nRELATED\tINFORMATION",
"RELATED INFORMATION\n",
"RELATED\tINFORMATION\n",
"\nSEE ALSO",
"\nSEE\tALSO",
"SEE ALSO\n",
"SEE\tALSO\n",
(char *)NULL
};
static SEARCH_BINDING frs_binding;
static SEARCH_BINDING *
find_reference_section (NODE *node)
{
register int i;
long position = -1;
frs_binding.buffer = node->contents;
frs_binding.start = 0;
frs_binding.end = node->nodelen;
frs_binding.flags = S_SkipDest;
for (i = 0; reference_section_starters[i] != (char *)NULL; i++)
{
position = search_forward (reference_section_starters[i], &frs_binding);
if (position != -1)
break;
}
if (position == -1)
return ((SEARCH_BINDING *)NULL);
/* We found the start of the reference section, and point is right after
the string which starts it. The text from here to the next header
(or end of buffer) contains the only references in this manpage. */
frs_binding.start = position;
for (i = frs_binding.start; i < frs_binding.end - 2; i++)
{
if ((frs_binding.buffer[i] == '\n') &&
(!whitespace (frs_binding.buffer[i + 1])))
{
frs_binding.end = i;
break;
}
}
return (&frs_binding);
}
REFERENCE **
xrefs_of_manpage (NODE *node)
{
SEARCH_BINDING *reference_section;
REFERENCE **refs = (REFERENCE **)NULL;
int refs_index = 0;
int refs_slots = 0;
long position;
reference_section = find_reference_section (node);
if (reference_section == (SEARCH_BINDING *)NULL)
return ((REFERENCE **)NULL);
/* Grovel the reference section building a list of references found there.
A reference is alphabetic characters followed by non-whitespace text
within parenthesis. */
reference_section->flags = 0;
while ((position = search_forward ("(", reference_section)) != -1)
{
register int start, end;
for (start = position; start > reference_section->start; start--)
if (whitespace (reference_section->buffer[start]))
break;
start++;
for (end = position; end < reference_section->end; end++)
{
if (whitespace (reference_section->buffer[end]))
{
end = start;
break;
}
if (reference_section->buffer[end] == ')')
{
end++;
break;
}
}
if (end != start)
{
REFERENCE *entry;
int len = end - start;
entry = (REFERENCE *)xmalloc (sizeof (REFERENCE));
entry->label = (char *)xmalloc (1 + len);
strncpy (entry->label, (reference_section->buffer) + start, len);
entry->label[len] = '\0';
entry->filename = xstrdup (node->filename);
entry->nodename = xstrdup (entry->label);
entry->start = start;
entry->end = end;
add_pointer_to_array
(entry, refs_index, refs, refs_slots, 10, REFERENCE *);
}
reference_section->start = position + 1;
}
return (refs);
}
long
locate_manpage_xref (NODE *node, long int start, int dir)
{
REFERENCE **refs;
long position = -1;
refs = xrefs_of_manpage (node);
if (refs)
{
register int i, count;
REFERENCE *entry;
for (i = 0; refs[i]; i++);
count = i;
if (dir > 0)
{
for (i = 0; (entry = refs[i]); i++)
if (entry->start > start)
{
position = entry->start;
break;
}
}
else
{
for (i = count - 1; i > -1; i--)
{
entry = refs[i];
if (entry->start < start)
{
position = entry->start;
break;
}
}
}
info_free_references (refs);
}
return (position);
}
/* This one was a little tricky. The binding buffer that is passed in has
a START and END value of 0 -- strlen (window-line-containing-point).
The BUFFER is a pointer to the start of that line. */
REFERENCE **
manpage_xrefs_in_binding (NODE *node, SEARCH_BINDING *binding)
{
register int i;
REFERENCE **all_refs = xrefs_of_manpage (node);
REFERENCE **brefs = (REFERENCE **)NULL;
REFERENCE *entry;
int brefs_index = 0;
int brefs_slots = 0;
int start, end;
if (!all_refs)
return ((REFERENCE **)NULL);
start = binding->start + (binding->buffer - node->contents);
end = binding->end + (binding->buffer - node->contents);
for (i = 0; (entry = all_refs[i]); i++)
{
if ((entry->start > start) && (entry->end < end))
{
add_pointer_to_array
(entry, brefs_index, brefs, brefs_slots, 10, REFERENCE *);
}
else
{
maybe_free (entry->label);
maybe_free (entry->filename);
maybe_free (entry->nodename);
free (entry);
}
}
free (all_refs);
return (brefs);
}

41
external/gpl2/texinfo/dist/info/man.h vendored Normal file
View File

@ -0,0 +1,41 @@
/* $NetBSD: man.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* man.h: Defines and external function declarations for man.c.
Id: man.h,v 1.3 2004/04/11 17:56:46 karl Exp
This file is part of GNU Info, a program for reading online documentation
stored in Info format.
Copyright (C) 1993, 1997, 2004 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.
Author: Brian J. Fox (bfox@ai.mit.edu) Sat May 6 16:19:13 1995. */
#ifndef INFO_MAN_H
#define INFO_MAN_H
#define MANPAGE_FILE_BUFFER_NAME "*manpages*"
extern NODE *make_manpage_node (char *pagename);
extern NODE *get_manpage_node (FILE_BUFFER *file_buffer,
char *pagename);
extern FILE_BUFFER *create_manpage_file_buffer (void);
extern long locate_manpage_xref (NODE *node, long int start, int dir);
extern REFERENCE **xrefs_of_manpage (NODE *node);
extern REFERENCE **manpage_xrefs_in_binding (NODE *node,
SEARCH_BINDING *binding);
#endif /* INFO_MAN_H */

View File

@ -0,0 +1,349 @@
/* $NetBSD: nodemenu.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* nodemenu.c -- produce a menu of all visited nodes.
Id: nodemenu.c,v 1.5 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1997, 1998, 2002, 2003, 2004 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"
NODE * get_visited_nodes (Function *filter_func);
/* Return a line describing the format of a node information line. */
static const char *
nodemenu_format_info (void)
{
return (_("\n\
* Menu:\n\
(File)Node Lines Size Containing File\n\
---------- ----- ---- ---------------"));
}
/* Produce a formatted line of information about NODE. Here is what we want
the output listing to look like:
* Menu:
(File)Node Lines Size Containing File
---------- ----- ---- ---------------
* (emacs)Buffers:: 48 2230 /usr/gnu/info/emacs/emacs-1
* (autoconf)Writing configure.in:: 123 58789 /usr/gnu/info/autoconf/autoconf-1
* (dir)Top:: 40 589 /usr/gnu/info/dir
*/
static char *
format_node_info (NODE *node)
{
register int i, len;
char *parent, *containing_file;
static char *line_buffer = (char *)NULL;
if (!line_buffer)
line_buffer = (char *)xmalloc (1000);
if (node->parent)
{
parent = filename_non_directory (node->parent);
if (!parent)
parent = node->parent;
}
else
parent = (char *)NULL;
containing_file = node->filename;
if (!parent && !*containing_file)
sprintf (line_buffer, "* %s::", node->nodename);
else
{
char *file = (char *)NULL;
if (parent)
file = parent;
else
file = filename_non_directory (containing_file);
if (!file)
file = containing_file;
if (!*file)
file = "dir";
sprintf (line_buffer, "* (%s)%s::", file, node->nodename);
}
len = pad_to (36, line_buffer);
{
int lines = 1;
for (i = 0; i < node->nodelen; i++)
if (node->contents[i] == '\n')
lines++;
sprintf (line_buffer + len, "%d", lines);
}
len = pad_to (44, line_buffer);
sprintf (line_buffer + len, "%ld", node->nodelen);
if (node->filename && *(node->filename))
{
len = pad_to (51, line_buffer);
strcpy (line_buffer + len, node->filename);
}
return xstrdup (line_buffer);
}
/* Little string comparison routine for qsort (). */
static int
compare_strings (const void *entry1, const void *entry2)
{
char **e1 = (char **) entry1;
char **e2 = (char **) entry2;
return (strcasecmp (*e1, *e2));
}
/* The name of the nodemenu node. */
static char *nodemenu_nodename = "*Node Menu*";
/* Produce an informative listing of all the visited nodes, and return it
in a node. If FILTER_FUNC is non-null, it is a function which filters
which nodes will appear in the listing. FILTER_FUNC takes an argument
of NODE, and returns non-zero if the node should appear in the listing. */
NODE *
get_visited_nodes (Function *filter_func)
{
register int i, iw_index;
INFO_WINDOW *info_win;
NODE *node;
char **lines = (char **)NULL;
int lines_index = 0, lines_slots = 0;
if (!info_windows)
return ((NODE *)NULL);
for (iw_index = 0; (info_win = info_windows[iw_index]); iw_index++)
{
for (i = 0; i < info_win->nodes_index; i++)
{
node = info_win->nodes[i];
/* We skip mentioning "*Node Menu*" nodes. */
if (internal_info_node_p (node) &&
(strcmp (node->nodename, nodemenu_nodename) == 0))
continue;
if (node && (!filter_func || (*filter_func) (node)))
{
char *line;
line = format_node_info (node);
add_pointer_to_array
(line, lines_index, lines, lines_slots, 20, char *);
}
}
}
/* Sort the array of information lines, if there are any. */
if (lines)
{
register int j, newlen;
char **temp;
qsort (lines, lines_index, sizeof (char *), compare_strings);
/* Delete duplicates. */
for (i = 0, newlen = 1; i < lines_index - 1; i++)
{
/* Use FILENAME_CMP here, since the most important piece
of info in each line is the file name of the node. */
if (FILENAME_CMP (lines[i], lines[i + 1]) == 0)
{
free (lines[i]);
lines[i] = (char *)NULL;
}
else
newlen++;
}
/* We have free ()'d and marked all of the duplicate slots.
Copy the live slots rather than pruning the dead slots. */
temp = (char **)xmalloc ((1 + newlen) * sizeof (char *));
for (i = 0, j = 0; i < lines_index; i++)
if (lines[i])
temp[j++] = lines[i];
temp[j] = (char *)NULL;
free (lines);
lines = temp;
lines_index = newlen;
}
initialize_message_buffer ();
printf_to_message_buffer
("%s", replace_in_documentation
((char *) _("Here is the menu of nodes you have recently visited.\n\
Select one from this menu, or use `\\[history-node]' in another window.\n"), 0),
NULL, NULL);
printf_to_message_buffer ("%s\n", (char *) nodemenu_format_info (),
NULL, NULL);
for (i = 0; (lines != (char **)NULL) && (i < lines_index); i++)
{
printf_to_message_buffer ("%s\n", lines[i], NULL, NULL);
free (lines[i]);
}
if (lines)
free (lines);
node = message_buffer_to_node ();
add_gcable_pointer (node->contents);
return (node);
}
DECLARE_INFO_COMMAND (list_visited_nodes,
_("Make a window containing a menu of all of the currently visited nodes"))
{
WINDOW *new;
NODE *node;
set_remembered_pagetop_and_point (window);
/* If a window is visible and showing the buffer list already, re-use it. */
for (new = windows; new; new = new->next)
{
node = new->node;
if (internal_info_node_p (node) &&
(strcmp (node->nodename, nodemenu_nodename) == 0))
break;
}
/* If we couldn't find an existing window, try to use the next window
in the chain. */
if (!new)
{
if (window->next)
new = window->next;
/* If there is more than one window, wrap around. */
else if (window != windows)
new = windows;
}
/* If we still don't have a window, make a new one to contain the list. */
if (!new)
{
WINDOW *old_active;
old_active = active_window;
active_window = window;
new = window_make_window ((NODE *)NULL);
active_window = old_active;
}
/* If we couldn't make a new window, use this one. */
if (!new)
new = window;
/* Lines do not wrap in this window. */
new->flags |= W_NoWrap;
node = get_visited_nodes ((Function *)NULL);
name_internal_node (node, nodemenu_nodename);
#if 0
/* Even if this is an internal node, we don't want the window
system to treat it specially. So we turn off the internalness
of it here. */
/* Why? We depend on internal_info_node_p returning true, so we must
not remove the flag. Otherwise, the *Node Menu* nodes themselves
appear in the node menu. --Andreas Schwab
<schwab@issan.informatik.uni-dortmund.de>. */
node->flags &= ~N_IsInternal;
#endif
/* If this window is already showing a node menu, reuse the existing node
slot. */
{
int remember_me = 1;
#if defined (NOTDEF)
if (internal_info_node_p (new->node) &&
(strcmp (new->node->nodename, nodemenu_nodename) == 0))
remember_me = 0;
#endif /* NOTDEF */
window_set_node_of_window (new, node);
if (remember_me)
remember_window_and_node (new, node);
}
active_window = new;
}
DECLARE_INFO_COMMAND (select_visited_node,
_("Select a node which has been previously visited in a visible window"))
{
char *line;
NODE *node;
REFERENCE **menu;
node = get_visited_nodes ((Function *)NULL);
menu = info_menu_of_node (node);
free (node);
line =
info_read_completing_in_echo_area (window,
(char *) _("Select visited node: "), menu);
window = active_window;
/* User aborts, just quit. */
if (!line)
{
info_abort_key (window, 0, 0);
info_free_references (menu);
return;
}
if (*line)
{
REFERENCE *entry;
/* Find the selected label in the references. */
entry = info_get_labeled_reference (line, menu);
if (!entry)
info_error ((char *) _("The reference disappeared! (%s)."), line, NULL);
else
info_select_reference (window, entry);
}
free (line);
info_free_references (menu);
if (!info_error_was_printed)
window_clear_echo_area ();
}

1265
external/gpl2/texinfo/dist/info/nodes.c vendored Normal file

File diff suppressed because it is too large Load Diff

158
external/gpl2/texinfo/dist/info/nodes.h vendored Normal file
View File

@ -0,0 +1,158 @@
/* $NetBSD: nodes.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* nodes.h -- How we represent nodes internally.
Id: nodes.h,v 1.3 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1997, 1998, 2002, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 NODES_H
#define NODES_H
#include "info.h"
/* User code interface. */
/* Callers generally only want the node itself. This structure is used
to pass node information around. None of the information in this
structure should ever be directly freed. The structure itself can
be passed to free (). Note that NODE->parent is non-null if this
node's file is a subfile. In that case, NODE->parent is the logical
name of the file containing this node. Both names are given as full
paths, so you might have: node->filename = "/usr/gnu/info/emacs-1",
with node->parent = "/usr/gnu/info/emacs". */
typedef struct {
char *filename; /* The physical file containing this node. */
char *parent; /* Non-null is the logical file name. */
char *nodename; /* The name of this node. */
char *contents; /* Characters appearing in this node. */
long nodelen; /* The length of the CONTENTS member. */
unsigned long display_pos; /* Where to display at, if nonzero. */
int flags; /* See immediately below. */
} NODE;
/* Defines that can appear in NODE->flags. All informative. */
#define N_HasTagsTable 0x01 /* This node was found through a tags table. */
#define N_TagsIndirect 0x02 /* The tags table was an indirect one. */
#define N_UpdateTags 0x04 /* The tags table is out of date. */
#define N_IsCompressed 0x08 /* The file is compressed on disk. */
#define N_IsInternal 0x10 /* This node was made by Info. */
#define N_CannotGC 0x20 /* File buffer cannot be gc'ed. */
#define N_IsManPage 0x40 /* This node is a manpage. */
#define N_FromAnchor 0x80 /* Synthesized for an anchor reference. */
/* Internal data structures. */
/* String constants. */
#define INFO_FILE_LABEL "File:"
#define INFO_REF_LABEL "Ref:"
#define INFO_NODE_LABEL "Node:"
#define INFO_PREV_LABEL "Prev:"
#define INFO_ALTPREV_LABEL "Previous:"
#define INFO_NEXT_LABEL "Next:"
#define INFO_UP_LABEL "Up:"
#define INFO_MENU_LABEL "\n* Menu:"
#define INFO_MENU_ENTRY_LABEL "\n* "
#define INFO_XREF_LABEL "*Note"
#define TAGS_TABLE_END_LABEL "\nEnd Tag Table"
#define TAGS_TABLE_BEG_LABEL "Tag Table:\n"
#define INDIRECT_TAGS_TABLE_LABEL "Indirect:\n"
#define TAGS_TABLE_IS_INDIRECT_LABEL "(Indirect)"
/* Character constants. */
#define INFO_COOKIE '\037'
#define INFO_FF '\014'
#define INFO_TAGSEP '\177'
/* For each logical file that we have loaded, we keep a list of the names
of the nodes that are found in that file. A pointer to a node in an
info file is called a "tag". For split files, the tag pointer is
"indirect"; that is, the pointer also contains the name of the split
file where the node can be found. For non-split files, the filename
member in the structure below simply contains the name of the current
file. The following structure describes a single node within a file. */
typedef struct {
char *filename; /* The file where this node can be found. */
char *nodename; /* The node pointed to by this tag. */
long nodestart; /* The offset of the start of this node. */
long nodelen; /* The length of this node. */
} TAG;
/* The following structure is used to remember information about the contents
of Info files that we have loaded at least once before. The FINFO member
is present so that we can reload the file if it has been modified since
last being loaded. All of the arrays appearing within this structure
are NULL terminated, and each array which can change size has a
corresponding SLOTS member which says how many slots have been allocated
(with malloc ()) for this array. */
typedef struct {
char *filename; /* The filename used to find this file. */
char *fullpath; /* The full pathname of this info file. */
struct stat finfo; /* Information about this file. */
char *contents; /* The contents of this particular file. */
long filesize; /* The number of bytes this file expands to. */
char **subfiles; /* If non-null, the list of subfiles. */
TAG **tags; /* If non-null, the indirect tags table. */
int tags_slots; /* Number of slots allocated for TAGS. */
int flags; /* Various flags. Mimics of N_* flags. */
} FILE_BUFFER;
/* Externally visible functions. */
/* Array of FILE_BUFFER * which represents the currently loaded info files. */
extern FILE_BUFFER **info_loaded_files;
/* The number of slots currently allocated to INFO_LOADED_FILES. */
extern int info_loaded_files_slots;
/* Locate the file named by FILENAME, and return the information structure
describing this file. The file may appear in our list of loaded files
already, or it may not. If it does not already appear, find the file,
and add it to the list of loaded files. If the file cannot be found,
return a NULL FILE_BUFFER *. */
extern FILE_BUFFER *info_find_file (char *filename);
/* Force load the file named FILENAME, and return the information structure
describing this file. Even if the file was already loaded, this loads
a new buffer, rebuilds tags and nodes, and returns a new FILE_BUFFER *. */
extern FILE_BUFFER *info_load_file (char *filename);
/* Return a pointer to a NODE structure for the Info node (FILENAME)NODENAME.
FILENAME can be passed as NULL, in which case the filename of "dir" is used.
NODENAME can be passed as NULL, in which case the nodename of "Top" is used.
If the node cannot be found, return a NULL pointer. */
extern NODE *info_get_node (char *filename, char *nodename);
/* Return a pointer to a NODE structure for the Info node NODENAME in
FILE_BUFFER. NODENAME can be passed as NULL, in which case the
nodename of "Top" is used. If the node cannot be found, return a
NULL pointer. */
extern NODE *info_get_node_of_file_buffer (char *nodename,
FILE_BUFFER *file_buffer);
/* Grovel FILE_BUFFER->contents finding tags and nodes, and filling in the
various slots. This can also be used to rebuild a tag or node table. */
extern void build_tags_and_nodes (FILE_BUFFER *file_buffer);
/* When non-zero, this is a string describing the most recent file error. */
extern char *info_recent_file_error;
/* Create a new, empty file buffer. */
extern FILE_BUFFER *make_file_buffer (void);
#endif /* not NODES_H */

761
external/gpl2/texinfo/dist/info/pcterm.c vendored Normal file
View File

@ -0,0 +1,761 @@
/* $NetBSD: pcterm.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* pcterm.c -- How to handle the PC terminal for Info under MS-DOS/MS-Windows.
Id: pcterm.c,v 1.4 2004/04/11 17:56:46 karl Exp
Copyright (C) 1998, 1999, 2003, 2004 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. */
/* WARNING WARNING WARNING!!!
This probably won't work as is with anything but DJGPP! However, Borland
should come close, and other PC compilers will need minor modifications. */
/* intl/libintl.h defines a macro `gettext' which
conflicts with conio.h header. */
#ifdef gettext
# undef gettext
# define gettext _gettext
#endif
#include <pc.h>
#include <keys.h>
#include <conio.h>
#include "variables.h"
extern int speech_friendly; /* defined in info.c */
/* **************************************************************** */
/* */
/* PC Terminal Output Functions */
/* */
/* **************************************************************** */
static struct text_info outside_info; /* holds screen params outside Info */
static unsigned char norm_attr, inv_attr;
static unsigned const char * find_sequence (int);
/* Turn on reverse video. */
static void
pc_begin_inverse (void)
{
textattr (inv_attr);
}
/* Turn off reverse video. */
static void
pc_end_inverse (void)
{
textattr (norm_attr);
}
/* Move the cursor up one line. */
static void
pc_up_line (void)
{
int x, y;
ScreenGetCursor (&y, &x);
ScreenSetCursor (MAX (y-1, 0), x);
}
/* Move the cursor down one line. */
static void
pc_down_line (void)
{
int x, y;
ScreenGetCursor (&y, &x);
ScreenSetCursor (MIN (screenheight-1, y+1), x);
}
/* Clear the entire terminal screen. */
static void
pc_clear_screen (void)
{
ScreenClear ();
}
/* Clear from the current position of the cursor to the end of the line. */
static void
pc_clear_to_eol (void)
{
clreol (); /* perhaps to be replaced by a loop */
}
/* Set the global variables SCREENWIDTH and SCREENHEIGHT. */
static void
pc_get_screen_size(void)
{
/* Current screen dimensions are the default. */
if (!outside_info.screenheight) /* paranoia */
gettextinfo (&outside_info);
screenwidth = outside_info.screenwidth;
screenheight = outside_info.screenheight;
/* Environment variable "LINES" overrides the default. */
if (getenv ("LINES") != NULL)
screenheight = atoi (getenv ("LINES"));
/* Environment variable "INFO_LINES" overrides "LINES". */
if (getenv ("INFO_LINES") != NULL)
screenheight = atoi (getenv ("INFO_LINES"));
}
/* Move the cursor to the terminal location of X and Y. */
static void
pc_goto_xy (x, y)
int x, y;
{
ScreenSetCursor (y, x); /* yes, pc.h says ScreenSetCursor (row, column) !! */
}
/* Print STRING to the terminal at the current position. */
static void
pc_put_text (string)
char *string;
{
if (speech_friendly)
fputs (string, stdout);
else
cputs (string);
}
/* Ring the terminal bell. The bell is rung visibly if the terminal is
capable of doing that, and if terminal_use_visible_bell_p is non-zero. */
static void
pc_ring_bell(void)
{
if (terminal_has_visible_bell_p && terminal_use_visible_bell_p)
ScreenVisualBell ();
else
{
printf ("%c",'\a');
fflush (stdout);
}
}
/* Print NCHARS from STRING to the terminal at the current position. */
static void
pc_write_chars (string, nchars)
char *string;
int nchars;
{
if (!nchars)
return;
if (speech_friendly)
printf ("%.*s",nchars, string);
else
cprintf ("%..*s",nchars, string);
}
/* Scroll an area of the terminal from START to (and excluding) END,
AMOUNT lines. If AMOUNT is negative, the lines are scrolled
towards the top of the screen, else they are scrolled towards the
bottom of the screen. The lines of the old region which do not
overlap the new region are cleared, to mimic terminal operation. */
static void
pc_scroll_terminal (start, end, amount)
int start, end, amount;
{
int line_to_clear = amount > 0 ? start : end + amount;
/* Move the text. Note that `movetext' expects 1-based coordinates. */
movetext (1, start + 1, ScreenCols (), end, 1, start + amount + 1);
/* Now clear the lines which were left unoccupied. */
if (amount < 0)
amount = -amount;
while (amount--)
{
ScreenSetCursor (line_to_clear++, 0);
clreol ();
}
}
/* Put the screen in the video mode and colors which Info will use.
Prepare to start using the terminal to read characters singly. */
static void
pc_prep_terminal (void)
{
int tty;
/* Do not set screen height if we already have it, because
doing so erases the screen. */
if (screenheight != ScreenRows ())
_set_screen_lines (screenheight);
/* Don't fail if they asked for screen dimensions that their
hardware cannot support. */
screenheight = ScreenRows ();
screenwidth = ScreenCols ();
/* Try setting the colors user asked for. */
textattr (norm_attr);
ScreenClear ();
/* Switch console reads to binary mode. */
tty = fileno (stdin);
#ifdef __DJGPP__
setmode (tty, O_BINARY);
__djgpp_set_ctrl_c (1); /* re-enable SIGINT generation by Ctrl-C */
#endif
}
/* Restore the tty settings back to what they were before we started using
this terminal. */
static void
pc_unprep_terminal (void)
{
int tty;
textattr (outside_info.normattr);
/* Do not set screen height if we already have it, because
doing so erases the screen. */
if (outside_info.screenheight != ScreenRows ())
{
_set_screen_lines (outside_info.screenheight);
textmode (LASTMODE);
}
else
pc_clear_to_eol (); /* for text attributes to really take effect */
/* Switch back to text mode on stdin. */
tty = fileno (stdin);
#ifdef __DJGPP__
setmode (tty, O_TEXT);
#endif
}
/* Initialize the terminal which is known as TERMINAL_NAME. If this
terminal doesn't have cursor addressability, `terminal_is_dumb_p'
becomes nonzero. The variables SCREENHEIGHT and SCREENWIDTH are set
to the dimensions that this terminal actually has. The variable
TERMINAL_HAS_META_P becomes nonzero if this terminal supports a Meta
key. Finally, the terminal screen is cleared. */
static void
pc_initialize_terminal (term_name)
char *term_name;
{
char *info_colors;
if (!term_name)
{
term_name = getenv ("TERM");
if (!term_name)
term_name = "pc-dos"; /* ``what's in a name?'' */
}
/* Get current video information, to be restored later. */
if (outside_info.screenwidth == 0)
gettextinfo (&outside_info);
/* Current screen colors are the default. */
norm_attr = outside_info.normattr;
inv_attr = (((outside_info.normattr & 7) << 4) |
((outside_info.normattr & 0x7f) >> 4));
/* Does the user want non-default colors? */
info_colors = getenv ("INFO_COLORS");
if ((info_colors != (char *)0) && !speech_friendly)
{
/* Decode a color from a string descriptor.
The descriptor string is a sequence of color specifiers separated
by a non-numeric character. Each color specifier should represent
a small integer which fits into an unsigned char, and can be given
in any base supported by strtoul. Examples of valid descriptors:
"10 31"
"0x13/0x45"
"007.077"
The separator between two color specifiers can be any character which
cannot be used in a printed representation of an integer number. */
char *endp;
unsigned long color_desc = strtoul (info_colors, &endp, 0);
if (color_desc <= UCHAR_MAX)
{
norm_attr = (unsigned char)color_desc;
color_desc = strtoul (endp + 1, &endp, 0);
if (color_desc <= UCHAR_MAX)
inv_attr = (unsigned char)color_desc;
}
}
/* We can scroll. */
terminal_can_scroll = 1;
/* We know how to produce a visible bell, if somebody's looking... */
if (!speech_friendly)
terminal_has_visible_bell_p = 1;
/* We have a Meta key. */
terminal_has_meta_p = 1;
/* We are *certainly* NOT dumb! */
terminal_is_dumb_p = 0;
pc_get_screen_size ();
/* Store the arrow keys. */
term_ku = (char *)find_sequence (K_Up);
term_kd = (char *)find_sequence (K_Down);
term_kr = (char *)find_sequence (K_Right);
term_kl = (char *)find_sequence (K_Left);
term_kP = (char *)find_sequence (K_PageUp);
term_kN = (char *)find_sequence (K_PageDown);
#if defined(INFOKEY)
term_kh = (char *)find_sequence (K_Home);
term_ke = (char *)find_sequence (K_End);
term_ki = (char *)find_sequence (K_Insert);
term_kx = (char *)find_sequence (K_Delete);
#endif
/* Set all the hooks to our PC-specific functions. */
terminal_begin_inverse_hook = pc_begin_inverse;
terminal_end_inverse_hook = pc_end_inverse;
terminal_prep_terminal_hook = pc_prep_terminal;
terminal_unprep_terminal_hook = pc_unprep_terminal;
terminal_up_line_hook = pc_up_line;
terminal_down_line_hook = pc_down_line;
terminal_clear_screen_hook = pc_clear_screen;
terminal_clear_to_eol_hook = pc_clear_to_eol;
terminal_get_screen_size_hook = pc_get_screen_size;
terminal_goto_xy_hook = pc_goto_xy;
terminal_put_text_hook = pc_put_text;
terminal_ring_bell_hook = pc_ring_bell;
terminal_write_chars_hook = pc_write_chars;
terminal_scroll_terminal_hook = pc_scroll_terminal;
}
/* **************************************************************** */
/* */
/* How to Read Characters From the PC Terminal */
/* */
/* **************************************************************** */
/* This will most certainly work ONLY with DJGPP. */
#ifdef __DJGPP__
#include <errno.h>
#include <sys/fsext.h>
#include <dpmi.h>
/* Translation table for some special keys.
Arrow keys which are standard on other keyboards are translated into
standard ESC-sequences, in case somebody rebinds the simple keys
(like C-f, C-b, C-n, etc.).
The strange "\033\061" prefix in some keys is a numeric argument of
one, which means ``do the next command once''. It is here so that
when the according PC key is pressed in the middle of an incremental
search, Info doesn't see just an ASCII character like `n' or `B',
and doesn't add it to the search string; instead, it will exit the
incremental search and then perform the command. */
static struct
{
int inkey;
unsigned char const * const sequence;
} DJGPP_keytab[] = { /* these are for moving between nodes... */
{K_Control_PageDown, "\033\061n"},
{K_Control_PageUp, "\033\061p"},
{K_Control_Up, "\033\061u"},
{K_Control_Down, "\033\061m"},
{K_Control_Center, "\033\061l"},
#if defined(INFOKEY)
{K_Home, "\033[H"}, /* ...and these are for moving IN a node */
{K_End, "\033[F"}, /* they're Numeric-Keypad-Keys, so */
#else
{K_Home, "\001"},
{K_End, "\005"},
#endif
{K_Left, "\033[D"}, /* NUMLOCK should be off !! */
{K_Right, "\033[C"},
{K_Down, "\033[B"},
{K_Up, "\033[A"},
{K_PageDown, "\033[G"},
{K_PageUp, "\033[I"},
{K_Control_Left, "\033b"},
{K_Control_Right, "\033f"},
{K_Control_Home, "\033<"},
{K_Control_End, "\033>"},
#if defined(INFOKEY)
{K_EHome, "\033[H"}, /* these are also for moving IN a node */
{K_EEnd, "\033[F"}, /* they're the "extended" (Grey) keys */
#else
{K_EHome, "\001"},
{K_EEnd, "\005"},
#endif
{K_ELeft, "\033[D"},
{K_ERight, "\033[C"},
{K_EDown, "\033[B"},
{K_EUp, "\033[A"},
{K_EPageDown, "\033[G"},
{K_EPageUp, "\033[I"},
{K_Control_ELeft, "\033b"},
{K_Control_ERight, "\033f"},
{K_Control_EHome, "\033<"},
{K_Control_EEnd, "\033>"},
{K_BackTab, "\033\011"},
{K_F1, "\10"}, /* YEAH, gimme that good old F-one-thing */
{K_Delete, "\177"}, /* to make Kp-Del be DEL (0x7f) */
{K_EDelete, "\177"}, /* to make Delete be DEL (0x7f) */
#if defined(INFOKEY)
{K_Insert, "\033[L"},
{K_EInsert, "\033[L"},
#endif
/* These are here to map more Alt-X keys to ESC X sequences. */
{K_Alt_Q, "\033q"},
{K_Alt_W, "\033w"},
{K_Alt_E, "\033e"},
{K_Alt_R, "\033r"},
{K_Alt_T, "\033t"},
{K_Alt_Y, "\033y"},
{K_Alt_U, "\033u"},
{K_Alt_I, "\033i"},
{K_Alt_O, "\033o"},
{K_Alt_P, "\033p"},
{K_Alt_LBracket, "\033["},
{K_Alt_RBracket, "\033]"},
{K_Alt_Return, "\033\015"},
{K_Alt_A, "\033a"},
{K_Alt_S, "\033s"},
{K_Alt_D, "\033d"},
{K_Alt_F, "\033f"},
{K_Alt_G, "\033g"},
{K_Alt_H, "\033h"},
{K_Alt_J, "\033j"},
{K_Alt_K, "\033k"},
{K_Alt_L, "\033l"},
{K_Alt_Semicolon, "\033;"},
{K_Alt_Quote, "\033'"},
{K_Alt_Backquote, "\033`"},
{K_Alt_Backslash, "\033\\"},
{K_Alt_Z, "\033z"},
{K_Alt_X, "\033x"},
{K_Alt_C, "\033c"},
{K_Alt_V, "\033v"},
{K_Alt_B, "\033b"},
{K_Alt_N, "\033n"},
{K_Alt_M, "\033m"},
{K_Alt_Comma, "\033<"}, /* our reader cannot distinguish between */
{K_Alt_Period, "\033>"}, /* Alt-. and Alt->, so we cheat a little */
{K_Alt_Slash, "\033?"}, /* ditto, to get Alt-? */
{K_Alt_Backspace, "\033\177"}, /* M-DEL, to delete word backwards */
{K_Alt_1, "\033\061"},
{K_Alt_2, "\033\062"},
{K_Alt_3, "\033\063"},
{K_Alt_4, "\033\064"},
{K_Alt_5, "\033\065"},
{K_Alt_6, "\033\066"},
{K_Alt_7, "\033\067"},
{K_Alt_8, "\033\070"},
{K_Alt_9, "\033\071"},
{K_Alt_0, "\033\060"},
{K_Alt_Dash, "\033\055"},
{K_Alt_EPageUp, "\033\033[I"},
{K_Alt_EPageDown, "\033\033[G"},
{K_Alt_Equals, "\033\075"},
{K_Alt_EDelete, "\033\177"},
{K_Alt_Tab, "\033\011"},
{0, 0}
};
/* Given a key, return the sequence of characters which
our keyboard driver generates. */
static unsigned const char *
find_sequence (int key)
{
int i;
for (i = 0; DJGPP_keytab[i].inkey; i++)
if (key == DJGPP_keytab[i].inkey)
return DJGPP_keytab[i].sequence;
return (unsigned const char *)NULL;
}
/* Return zero if a key is pending in the
keyboard buffer, non-zero otherwise. */
static int
kbd_buffer_empty (void)
{
__dpmi_regs r;
int retval;
r.h.ah = 0x11; /* Get enhanced keyboard status */
__dpmi_int (0x16, &r);
/* If the keyboard buffer is empty, the Zero Flag will be set. */
return (r.x.flags & 0x40) == 0x40;
}
/* The buffered characters pending to be read.
Actually, Info usually reads a single character, but when we
translate a key into a sequence of characters, we keep them here. */
static unsigned char buffered[512];
/* Index of the next buffered character to be returned. */
static int buf_idx;
/* Return the number of characters waiting to be read. */
long
pc_term_chars_avail (void)
{
if (buf_idx >= sizeof (buffered)) /* paranoia */
{
buf_idx = 0;
buffered[buf_idx] = '\0';
return 0;
}
else
return (long)strlen (buffered + buf_idx);
}
/* Our special terminal keyboard reader. It will be called by
low-level libc functions when the application calls `read' or
the ANSI-standard stream-oriented read functions. If the
caller wants to read the terminal, we redirect the call to
the BIOS keyboard functions, since that lets us recognize more
keys than DOS does. */
static int
keyboard_read (__FSEXT_Fnumber func, int *retval, va_list rest_args)
{
/* When we are called, REST_ARGS are: file_descriptor, buf, nbytes. */
unsigned char *buf;
size_t nbytes, nread = 0;
int fd = va_arg (rest_args, int);
/* Is this call for us? */
if (func != __FSEXT_read || !isatty (fd))
return 0; /* and the usual DOS call will be issued */
buf = va_arg (rest_args, unsigned char *);
nbytes = va_arg (rest_args, size_t);
if (!buf)
{
errno = EINVAL;
*retval = -1;
return 1;
}
if (!nbytes)
{
*retval = 0;
return 1;
}
/* Loop here until enough bytes has been read. */
do
{
int key;
/* If any ``buffered characters'' are left, return as much
of them as the caller wanted. */
while (buffered[buf_idx] && nbytes)
{
*buf++ = buffered[buf_idx++];
nread++;
nbytes--;
}
if (nbytes <= 0)
break;
/* Wait for another key.
We do that in a busy-waiting loop so we don't get parked
inside a BIOS call, which will effectively disable signals.
While we wait for them to type something, we repeatedly
release the rest of our time slice, so that other programs
in a multitasking environment, such as Windows, get more cycles. */
while (kbd_buffer_empty ())
__dpmi_yield ();
key = getxkey ();
/* Translate the key if necessary.
Untranslated non-ASCII keys are silently ignored. */
if ((key & 0x300) != 0)
{
unsigned char const * key_sequence = find_sequence (key);
if (key_sequence != NULL)
{
strcpy (buffered, key_sequence);
buf_idx = 0;
}
}
else if (key == K_Control_Z)
raise (SIGUSR1); /* we don't have SIGTSTP, so simulate it */
else if (key <= 0xff)
{
*buf++ = key;
nbytes--;
nread++;
}
}
while (nbytes > 0);
*retval = nread;
return 1; /* meaning that we handled the call */
}
/* Install our keyboard handler.
This is called by the startup code before `main'. */
static void __attribute__((constructor))
install_keyboard_handler (void)
{
__FSEXT_set_function (fileno (stdin), keyboard_read);
/* We need to set this single hook here; the rest
will be set by pc_initialize_terminal when it is called. */
terminal_initialize_terminal_hook = pc_initialize_terminal;
}
#endif /* __DJGPP__ */
/* **************************************************************** */
/* */
/* Emulation of SIGTSTP on Ctrl-Z */
/* */
/* **************************************************************** */
#include <limits.h>
#include "signals.h"
#include "session.h"
#ifndef PATH_MAX
# define PATH_MAX 512
#endif
/* Effectively disable signals which aren't defined
(assuming no signal can ever be zero).
SIGINT is ANSI, so we expect it to be always defined. */
#ifndef SIGUSR1
# define SIGUSR1 0
#endif
#ifndef SIGQUIT
# define SIGQUIT 0
#endif
int
kill (pid_t pid, int sig)
{
static char interrupted_msg[] = "Interrupted\r\n";
static char stopped_msg[] = "Stopped. Type `exit RET' to return.\r\n";
char cwd[PATH_MAX + 1];
if (pid == getpid ()
|| pid == 0
|| pid == -1
|| pid == -getpid ())
{
switch (sig)
{
RETSIGTYPE (*old_INT)(int), (*old_QUIT)(int);
case SIGINT:
#ifdef __DJGPP__
/* If SIGINT was generated by a readable key, we want to remove
it from the PC keyboard buffer, so that DOS and other
programs never see it. DJGPP signal-handling mechanism
doesn't remove the INT key from the keyboard buffer. */
if (!kbd_buffer_empty ())
getxkey ();
#endif
pc_write_chars (interrupted_msg, sizeof (interrupted_msg) - 1);
xexit (1);
case SIGUSR1:
/* Simulate SIGTSTP by invoking a subsidiary shell. */
pc_goto_xy (0, outside_info.screenheight - 1);
pc_clear_to_eol ();
pc_write_chars (stopped_msg, sizeof (stopped_msg) - 1);
/* The child shell can change the working directory, so
we need to save and restore it, since it is global. */
if (!getcwd (cwd, PATH_MAX)) /* should never happen */
cwd[0] = '\0';
/* We don't want to get fatal signals while the subshell runs. */
old_INT = signal (SIGINT, SIG_IGN);
old_QUIT = signal (SIGQUIT, SIG_IGN);
system ("");
if (*cwd)
chdir (cwd);
signal (SIGINT, old_INT);
signal (SIGQUIT, old_QUIT);
break;
default:
if (sig)
raise (sig);
break;
}
return 0;
}
else
return -1;
}
/* These should never be called, but they make the linker happy. */
void tputs (char *a, int b, int (*c)())
{
perror ("tputs");
}
char* tgoto (char*a, int b, int c)
{
perror ("tgoto"); return 0; /* here and below, added dummy retvals */
}
int tgetnum (char*a)
{
perror ("tgetnum"); return 0;
}
int tgetflag (char*a)
{
perror ("tgetflag"); return 0;
}
char* tgetstr (char *a, char **b)
{
perror ("tgetstr"); return 0;
}
int tgetent (char*a, char*b)
{
perror ("tgetent"); return 0;
}
int tcgetattr(int fildes, struct termios *termios_p)
{
perror ("tcgetattr"); return 0;
}
int tcsetattr(int fd, int opt_actions, const struct termios *termios_p)
{
perror ("tcsetattr"); return 0;
}

499
external/gpl2/texinfo/dist/info/search.c vendored Normal file
View File

@ -0,0 +1,499 @@
/* $NetBSD: search.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* search.c -- searching large bodies of text.
Id: search.c,v 1.3 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1997, 1998, 2002, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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"
#include "search.h"
#include "nodes.h"
/* The search functions take two arguments:
1) a string to search for, and
2) a pointer to a SEARCH_BINDING which contains the buffer, start,
and end of the search.
They return a long, which is the offset from the start of the buffer
at which the match was found. An offset of -1 indicates failure. */
/* A function which makes a binding with buffer and bounds. */
SEARCH_BINDING *
make_binding (char *buffer, long int start, long int end)
{
SEARCH_BINDING *binding;
binding = (SEARCH_BINDING *)xmalloc (sizeof (SEARCH_BINDING));
binding->buffer = buffer;
binding->start = start;
binding->end = end;
binding->flags = 0;
return (binding);
}
/* Make a copy of BINDING without duplicating the data. */
SEARCH_BINDING *
copy_binding (SEARCH_BINDING *binding)
{
SEARCH_BINDING *copy;
copy = make_binding (binding->buffer, binding->start, binding->end);
copy->flags = binding->flags;
return (copy);
}
/* **************************************************************** */
/* */
/* The Actual Searching Functions */
/* */
/* **************************************************************** */
/* Search forwards or backwards for the text delimited by BINDING.
The search is forwards if BINDING->start is greater than BINDING->end. */
long
search (char *string, SEARCH_BINDING *binding)
{
long result;
/* If the search is backwards, then search backwards, otherwise forwards. */
if (binding->start > binding->end)
result = search_backward (string, binding);
else
result = search_forward (string, binding);
return (result);
}
/* Search forwards for STRING through the text delimited in BINDING. */
long
search_forward (char *string, SEARCH_BINDING *binding)
{
register int c, i, len;
register char *buff, *end;
char *alternate = (char *)NULL;
len = strlen (string);
/* We match characters in the search buffer against STRING and ALTERNATE.
ALTERNATE is a case reversed version of STRING; this is cheaper than
case folding each character before comparison. Alternate is only
used if the case folding bit is turned on in the passed BINDING. */
if (binding->flags & S_FoldCase)
{
alternate = xstrdup (string);
for (i = 0; i < len; i++)
{
if (islower (alternate[i]))
alternate[i] = toupper (alternate[i]);
else if (isupper (alternate[i]))
alternate[i] = tolower (alternate[i]);
}
}
buff = binding->buffer + binding->start;
end = binding->buffer + binding->end + 1;
while (buff < (end - len))
{
for (i = 0; i < len; i++)
{
c = buff[i];
if ((c != string[i]) && (!alternate || c != alternate[i]))
break;
}
if (!string[i])
{
if (alternate)
free (alternate);
if (binding->flags & S_SkipDest)
buff += len;
return ((long) (buff - binding->buffer));
}
buff++;
}
if (alternate)
free (alternate);
return ((long) -1);
}
/* Search for STRING backwards through the text delimited in BINDING. */
long
search_backward (char *input_string, SEARCH_BINDING *binding)
{
register int c, i, len;
register char *buff, *end;
char *string;
char *alternate = (char *)NULL;
len = strlen (input_string);
/* Reverse the characters in the search string. */
string = (char *)xmalloc (1 + len);
for (c = 0, i = len - 1; input_string[c]; c++, i--)
string[i] = input_string[c];
string[c] = '\0';
/* We match characters in the search buffer against STRING and ALTERNATE.
ALTERNATE is a case reversed version of STRING; this is cheaper than
case folding each character before comparison. ALTERNATE is only
used if the case folding bit is turned on in the passed BINDING. */
if (binding->flags & S_FoldCase)
{
alternate = xstrdup (string);
for (i = 0; i < len; i++)
{
if (islower (alternate[i]))
alternate[i] = toupper (alternate[i]);
else if (isupper (alternate[i]))
alternate[i] = tolower (alternate[i]);
}
}
buff = binding->buffer + binding->start - 1;
end = binding->buffer + binding->end;
while (buff > (end + len))
{
for (i = 0; i < len; i++)
{
c = *(buff - i);
if (c != string[i] && (!alternate || c != alternate[i]))
break;
}
if (!string[i])
{
free (string);
if (alternate)
free (alternate);
if (binding->flags & S_SkipDest)
buff -= len;
return ((long) (1 + (buff - binding->buffer)));
}
buff--;
}
free (string);
if (alternate)
free (alternate);
return ((long) -1);
}
/* Find STRING in LINE, returning the offset of the end of the string.
Return an offset of -1 if STRING does not appear in LINE. The search
is bound by the end of the line (i.e., either NEWLINE or 0). */
int
string_in_line (char *string, char *line)
{
register int end;
SEARCH_BINDING binding;
/* Find the end of the line. */
for (end = 0; line[end] && line[end] != '\n'; end++);
/* Search for STRING within these confines. */
binding.buffer = line;
binding.start = 0;
binding.end = end;
binding.flags = S_FoldCase | S_SkipDest;
return (search_forward (string, &binding));
}
/* Return non-zero if STRING is the first text to appear at BINDING. */
int
looking_at (char *string, SEARCH_BINDING *binding)
{
long search_end;
search_end = search (string, binding);
/* If the string was not found, SEARCH_END is -1. If the string was found,
but not right away, SEARCH_END is != binding->start. Otherwise, the
string was found at binding->start. */
return (search_end == binding->start);
}
/* **************************************************************** */
/* */
/* Small String Searches */
/* */
/* **************************************************************** */
/* Function names that start with "skip" are passed a string, and return
an offset from the start of that string. Function names that start
with "find" are passed a SEARCH_BINDING, and return an absolute position
marker of the item being searched for. "Find" functions return a value
of -1 if the item being looked for couldn't be found. */
/* Return the index of the first non-whitespace character in STRING. */
int
skip_whitespace (char *string)
{
register int i;
for (i = 0; string && whitespace (string[i]); i++);
return (i);
}
/* Return the index of the first non-whitespace or newline character in
STRING. */
int
skip_whitespace_and_newlines (char *string)
{
register int i;
for (i = 0; string && whitespace_or_newline (string[i]); i++);
return (i);
}
/* Return the index of the first whitespace character in STRING. */
int
skip_non_whitespace (char *string)
{
register int i;
for (i = 0; string && string[i] && !whitespace (string[i]); i++);
return (i);
}
/* Return the index of the first non-node character in STRING. Note that
this function contains quite a bit of hair to ignore periods in some
special cases. This is because we here at GNU ship some info files which
contain nodenames that contain periods. No such nodename can start with
a period, or continue with whitespace, newline, or ')' immediately following
the period. If second argument NEWLINES_OKAY is non-zero, newlines should
be skipped while parsing out the nodename specification. */
int
skip_node_characters (char *string, int newlines_okay)
{
register int c, i = 0;
int paren_seen = 0;
int paren = 0;
/* Handle special case. This is when another function has parsed out the
filename component of the node name, and we just want to parse out the
nodename proper. In that case, a period at the start of the nodename
indicates an empty nodename. */
if (string && *string == '.')
return (0);
if (string && *string == '(')
{
paren++;
paren_seen++;
i++;
}
for (; string && (c = string[i]); i++)
{
if (paren)
{
if (c == '(')
paren++;
else if (c == ')')
paren--;
continue;
}
/* If the character following the close paren is a space or period,
then this node name has no more characters associated with it. */
if (c == '\t' ||
c == ',' ||
c == INFO_TAGSEP ||
((!newlines_okay) && (c == '\n')) ||
((paren_seen && string[i - 1] == ')') &&
(c == ' ' || c == '.')) ||
(c == '.' &&
(
#if 0
/* This test causes a node name ending in a period, like `This.', not to
be found. The trailing . is stripped. This occurs in the jargon
file (`I see no X here.' is a node name). */
(!string[i + 1]) ||
#endif
(whitespace_or_newline (string[i + 1])) ||
(string[i + 1] == ')'))))
break;
}
return (i);
}
/* **************************************************************** */
/* */
/* Searching FILE_BUFFER's */
/* */
/* **************************************************************** */
/* Return the absolute position of the first occurence of a node separator in
BINDING-buffer. The search starts at BINDING->start. Return -1 if no node
separator was found. */
long
find_node_separator (SEARCH_BINDING *binding)
{
register long i;
char *body;
body = binding->buffer;
/* A node is started by [^L]^_[^L]\n. That is to say, the C-l's are
optional, but the DELETE and NEWLINE are not. This separator holds
true for all separated elements in an Info file, including the tags
table (if present) and the indirect tags table (if present). */
for (i = binding->start; i < binding->end - 1; i++)
if (((body[i] == INFO_FF && body[i + 1] == INFO_COOKIE) &&
(body[i + 2] == '\n' ||
(body[i + 2] == INFO_FF && body[i + 3] == '\n'))) ||
((body[i] == INFO_COOKIE) &&
(body[i + 1] == '\n' ||
(body[i + 1] == INFO_FF && body[i + 2] == '\n'))))
return (i);
return (-1);
}
/* Return the length of the node separator characters that BODY is
currently pointing at. */
int
skip_node_separator (char *body)
{
register int i;
i = 0;
if (body[i] == INFO_FF)
i++;
if (body[i++] != INFO_COOKIE)
return (0);
if (body[i] == INFO_FF)
i++;
if (body[i++] != '\n')
return (0);
return (i);
}
/* Return the number of characters from STRING to the start of
the next line. */
int
skip_line (char *string)
{
register int i;
for (i = 0; string && string[i] && string[i] != '\n'; i++);
if (string[i] == '\n')
i++;
return (i);
}
/* Return the absolute position of the beginning of a tags table in this
binding starting the search at binding->start. */
long
find_tags_table (SEARCH_BINDING *binding)
{
SEARCH_BINDING tmp_search;
long position;
tmp_search.buffer = binding->buffer;
tmp_search.start = binding->start;
tmp_search.end = binding->end;
tmp_search.flags = S_FoldCase;
while ((position = find_node_separator (&tmp_search)) != -1 )
{
tmp_search.start = position;
tmp_search.start += skip_node_separator (tmp_search.buffer
+ tmp_search.start);
if (looking_at (TAGS_TABLE_BEG_LABEL, &tmp_search))
return (position);
}
return (-1);
}
/* Return the absolute position of the node named NODENAME in BINDING.
This is a brute force search, and we wish to avoid it when possible.
This function is called when a tag (indirect or otherwise) doesn't
really point to the right node. It returns the absolute position of
the separator preceding the node. */
long
find_node_in_binding (char *nodename, SEARCH_BINDING *binding)
{
long position;
int offset, namelen;
SEARCH_BINDING tmp_search;
namelen = strlen (nodename);
tmp_search.buffer = binding->buffer;
tmp_search.start = binding->start;
tmp_search.end = binding->end;
tmp_search.flags = 0;
while ((position = find_node_separator (&tmp_search)) != -1)
{
tmp_search.start = position;
tmp_search.start += skip_node_separator
(tmp_search.buffer + tmp_search.start);
offset = string_in_line
(INFO_NODE_LABEL, tmp_search.buffer + tmp_search.start);
if (offset == -1)
continue;
tmp_search.start += offset;
tmp_search.start += skip_whitespace (tmp_search.buffer + tmp_search.start);
offset = skip_node_characters
(tmp_search.buffer + tmp_search.start, DONT_SKIP_NEWLINES);
/* Notice that this is an exact match. You cannot grovel through
the buffer with this function looking for random nodes. */
if ((offset == namelen) &&
(tmp_search.buffer[tmp_search.start] == nodename[0]) &&
(strncmp (tmp_search.buffer + tmp_search.start, nodename, offset) == 0))
return (position);
}
return (-1);
}

View File

@ -0,0 +1,77 @@
/* $NetBSD: search.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* search.h -- Structure used to search large bodies of text, with bounds.
Id: search.h,v 1.3 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1997, 1998, 2002, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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). */
/* The search functions take two arguments:
1) a string to search for, and
2) a pointer to a SEARCH_BINDING which contains the buffer, start,
and end of the search.
They return a long, which is the offset from the start of the buffer
at which the match was found. An offset of -1 indicates failure. */
#ifndef INFO_SEARCH_H
#define INFO_SEARCH_H
typedef struct {
char *buffer; /* The buffer of text to search. */
long start; /* Offset of the start of the search. */
long end; /* Offset of the end of the searh. */
int flags; /* Flags controlling the type of search. */
} SEARCH_BINDING;
#define S_FoldCase 0x01 /* Set means fold case in searches. */
#define S_SkipDest 0x02 /* Set means return pointing after the dest. */
SEARCH_BINDING *make_binding (char *buffer, long int start, long int end);
SEARCH_BINDING *copy_binding (SEARCH_BINDING *binding);
extern long search_forward (char *string, SEARCH_BINDING *binding);
extern long search_backward (char *input_string, SEARCH_BINDING *binding);
extern long search (char *string, SEARCH_BINDING *binding);
extern int looking_at (char *string, SEARCH_BINDING *binding);
/* Note that STRING_IN_LINE () always returns the offset of the 1st character
after the string. */
extern int string_in_line (char *string, char *line);
/* Function names that start with "skip" are passed a string, and return
an offset from the start of that string. Function names that start
with "find" are passed a SEARCH_BINDING, and return an absolute position
marker of the item being searched for. "Find" functions return a value
of -1 if the item being looked for couldn't be found. */
extern int skip_whitespace (char *string);
extern int skip_non_whitespace (char *string);
extern int skip_whitespace_and_newlines (char *string);
extern int skip_line (char *string);
extern int skip_node_characters (char *string, int newlines_okay);
extern int skip_node_separator (char *body);
#define DONT_SKIP_NEWLINES 0
#define SKIP_NEWLINES 1
extern long find_node_separator (SEARCH_BINDING *binding);
extern long find_tags_table (SEARCH_BINDING *binding);
extern long find_node_in_binding (char *nodename, SEARCH_BINDING *binding);
#endif /* not INFO_SEARCH_H */

5041
external/gpl2/texinfo/dist/info/session.c vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,239 @@
/* $NetBSD: session.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* session.h -- Functions found in session.c.
Id: session.h,v 1.3 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1998, 1999, 2001, 2002, 2004 Free Software
Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 SESSION_H
#define SESSION_H
#include "info.h"
#include "dribble.h"
/* All commands that can be invoked from within info_session () receive
arguments in the same way. This simple define declares the header
of a function named NAME, with associated documentation DOC. The
documentation string is groveled out of the source files by the
utility program `makedoc', which is also responsible for making
the documentation/function-pointer maps. */
#define DECLARE_INFO_COMMAND(name, doc) \
void name (WINDOW *window, int count, unsigned char key)
/* Variables found in session.h. */
extern VFunction *info_last_executed_command;
/* Variable controlling the garbage collection of files briefly visited
during searches. Such files are normally gc'ed, unless they were
compressed to begin with. If this variable is non-zero, it says
to gc even those file buffer contents which had to be uncompressed. */
extern int gc_compressed_files;
/* When non-zero, tiling takes place automatically when info_split_window
is called. */
extern int auto_tiling_p;
/* Variable controlling the behaviour of default scrolling when you are
already at the bottom of a node. */
extern int info_scroll_behaviour;
extern char *info_scroll_choices[];
/* Values for info_scroll_behaviour. */
#define IS_Continuous 0 /* Try to get first menu item, or failing that, the
"Next:" pointer, or failing that, the "Up:" and
"Next:" of the up. */
#define IS_NextOnly 1 /* Try to get "Next:" menu item. */
#define IS_PageOnly 2 /* Simply give up at the bottom of a node. */
/* Utility functions found in session.c */
extern void info_dispatch_on_key (unsigned char key, Keymap map);
extern unsigned char info_get_input_char (void);
extern unsigned char info_get_another_input_char (void);
extern unsigned char info_input_pending_p (void);
extern void remember_window_and_node (WINDOW *window, NODE *node);
extern void set_remembered_pagetop_and_point (WINDOW *window);
extern void set_window_pagetop (WINDOW *window, int desired_top);
extern void info_set_node_of_window (int remember, WINDOW *window,
NODE *node);
extern void initialize_keyseq (void);
extern void add_char_to_keyseq (char character);
extern void info_gather_typeahead (void);
extern FILE_BUFFER *file_buffer_of_window (WINDOW *window);
extern long info_search_in_node (char *string, NODE *node,
long int start, WINDOW *window, int dir, int case_sensitive);
extern long info_target_search_node (NODE *node, char *string,
long int start);
extern void info_select_reference (WINDOW *window, REFERENCE *entry);
extern int info_any_buffered_input_p (void);
extern void print_node (NODE *node);
extern void dump_node_to_file (NODE *node, char *filename,
int dump_subnodes);
extern void dump_nodes_to_file (char *filename, char **nodenames,
char *output_filename, int dump_subnodes);
extern char *program_name_from_file_name (char *file_name);
/* Do the physical deletion of WINDOW, and forget this window and
associated nodes. */
extern void info_delete_window_internal (WINDOW *window);
/* Tell Info that input is coming from the file FILENAME. */
extern void info_set_input_from_file (char *filename);
#define return_if_control_g(val) \
do { \
info_gather_typeahead (); \
if (info_input_pending_p () == Control ('g')) \
return (val); \
} while (0)
/* The names of the functions that run an info session. */
/* Starting an info session. */
extern void begin_multiple_window_info_session (char *filename,
char **nodenames);
extern void begin_info_session (NODE *initial_node);
extern void begin_info_session_with_error (NODE *initial_node,
char *format, void *arg1, void *arg2);
extern void info_session (void);
extern void initialize_info_session (NODE *node, int clear_screen);
extern void info_read_and_dispatch (void);
extern void info_intuit_options_node (WINDOW *window,
NODE *initial_node, char *program);
/* Moving the point within a node. */
extern void info_next_line (WINDOW *window, int count, unsigned char key);
extern void info_prev_line (WINDOW *window, int count, unsigned char key);
extern void info_end_of_line (WINDOW *window, int count, unsigned char key);
extern void info_beginning_of_line (WINDOW *window, int count, unsigned char key);
extern void info_forward_char (WINDOW *window, int count, unsigned char key);
extern void info_backward_char (WINDOW *window, int count, unsigned char key);
extern void info_forward_word (WINDOW *window, int count, unsigned char key);
extern void info_backward_word (WINDOW *window, int count, unsigned char key);
extern void info_beginning_of_node (WINDOW *window, int count, unsigned char key);
extern void info_end_of_node (WINDOW *window, int count, unsigned char key);
extern void info_move_to_prev_xref (WINDOW *window, int count, unsigned char key);
extern void info_move_to_next_xref (WINDOW *window, int count, unsigned char key);
/* Scrolling text within a window. */
extern void info_scroll_forward (WINDOW *window, int count, unsigned char key);
extern void info_scroll_backward (WINDOW *window, int count, unsigned char key);
extern void info_redraw_display (WINDOW *window, int count, unsigned char key);
extern void info_toggle_wrap (WINDOW *window, int count, unsigned char key);
extern void info_move_to_window_line (WINDOW *window, int count,
unsigned char key);
extern void info_up_line (WINDOW *window, int count, unsigned char key);
extern void info_down_line (WINDOW *window, int count, unsigned char key);
extern void info_scroll_half_screen_down (WINDOW *window, int count,
unsigned char key);
extern void info_scroll_half_screen_up (WINDOW *window, int count,
unsigned char key);
extern void info_scroll_forward_set_window (WINDOW *window, int count,
unsigned char key);
extern void info_scroll_forward_page_only (WINDOW *window, int count,
unsigned char key);
extern void info_scroll_forward_page_only_set_window (WINDOW *window, int count,
unsigned char key);
extern void info_scroll_backward_set_window (WINDOW *window, int count,
unsigned char key);
extern void info_scroll_backward_page_only (WINDOW *window, int count,
unsigned char key);
extern void info_scroll_backward_page_only_set_window (WINDOW *window, int count,
unsigned char key);
extern void info_scroll_other_window_backward (WINDOW *window, int count,
unsigned char key);
/* Manipulating multiple windows. */
extern void info_split_window (WINDOW *window, int count, unsigned char key);
extern void info_delete_window (WINDOW *window, int count, unsigned char key);
extern void info_keep_one_window (WINDOW *window, int count, unsigned char key);
extern void info_grow_window (WINDOW *window, int count, unsigned char key);
extern void info_scroll_other_window (WINDOW *window, int count,
unsigned char key);
extern void info_tile_windows (WINDOW *window, int count, unsigned char key);
extern void info_next_window (WINDOW *window, int count, unsigned char key);
extern void info_prev_window (WINDOW *window, int count, unsigned char key);
/* Selecting nodes. */
extern void info_next_node (WINDOW *window, int count, unsigned char key);
extern void info_prev_node (WINDOW *window, int count, unsigned char key);
extern void info_up_node (WINDOW *window, int count, unsigned char key);
extern void info_last_node (WINDOW *window, int count, unsigned char key);
extern void info_first_node (WINDOW *window, int count, unsigned char key);
extern void info_history_node (WINDOW *window, int count, unsigned char key);
extern void info_goto_node (WINDOW *window, int count, unsigned char key);
extern void info_goto_invocation_node (WINDOW *window, int count,
unsigned char key);
extern void info_top_node (WINDOW *window, int count, unsigned char key);
extern void info_dir_node (WINDOW *window, int count, unsigned char key);
extern void info_global_next_node (WINDOW *window, int count, unsigned char key);
extern void info_global_prev_node (WINDOW *window, int count, unsigned char key);
extern void info_kill_node (WINDOW *window, int count, unsigned char key);
extern void info_view_file (WINDOW *window, int count, unsigned char key);
extern void info_menu_sequence (WINDOW *window, int count, unsigned char key);
extern NODE *info_follow_menus (NODE *initial_node, char **menus,
const char **errstr, char **errarg1, char **errarg2);
extern void info_man (WINDOW *window, int count, unsigned char key);
extern void list_visited_nodes (WINDOW *window, int count, unsigned char key);
extern void select_visited_node (WINDOW *window, int count, unsigned char key);
/* Selecting cross references. */
extern void info_menu_digit (WINDOW *window, int count, unsigned char key);
extern void info_menu_item (WINDOW *window, int count, unsigned char key);
extern void info_xref_item (WINDOW *window, int count, unsigned char key);
extern void info_find_menu (WINDOW *window, int count, unsigned char key);
extern void info_select_reference_this_line (WINDOW *window, int count,
unsigned char key);
extern void info_last_menu_item (WINDOW *window, int count, unsigned char key);
extern void info_visit_menu (WINDOW *window, int count, unsigned char key);
/* Hacking numeric arguments. */
extern int info_explicit_arg, info_numeric_arg, info_numeric_arg_sign;
extern void info_add_digit_to_numeric_arg (WINDOW *window, int count,
unsigned char key);
extern void info_universal_argument (WINDOW *window, int count,
unsigned char key);
extern void info_initialize_numeric_arg (void);
extern void info_numeric_arg_digit_loop (WINDOW *window, int count,
unsigned char key);
/* Searching commands. */
extern void info_search (WINDOW *window, int count, unsigned char key);
extern void isearch_forward (WINDOW *window, int count, unsigned char key);
extern void isearch_backward (WINDOW *window, int count, unsigned char key);
extern void info_search_case_sensitively (WINDOW *window, int count,
unsigned char key);
extern void info_search_backward (WINDOW *window, int count, unsigned char key);
extern void info_search_next (WINDOW *window, int count, unsigned char key);
extern void info_search_previous (WINDOW *window, int count, unsigned char key);
/* Dumping and printing nodes. */
extern void info_print_node (WINDOW *window, int count, unsigned char key);
/* Footnotes. */
extern void info_show_footnotes (WINDOW *window, int count, unsigned char key);
/* Miscellaneous commands. */
extern void info_abort_key (WINDOW *window, int count, unsigned char key);
extern void info_quit (WINDOW *window, int count, unsigned char key);
extern void info_do_lowercase_version (WINDOW *window, int count,
unsigned char key);
#endif /* not SESSION_H */

View File

@ -0,0 +1,297 @@
/* $NetBSD: signals.c,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* signals.c -- install and maintain signal handlers.
Id: signals.c,v 1.7 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1994, 1995, 1998, 2002, 2003, 2004 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.
Originally written by Brian Fox (bfox@ai.mit.edu). */
#include "info.h"
#include "signals.h"
void initialize_info_signal_handler (void);
/* **************************************************************** */
/* */
/* Pretending That We Have POSIX Signals */
/* */
/* **************************************************************** */
#if !defined (HAVE_SIGPROCMASK) && defined (HAVE_SIGSETMASK)
/* Perform OPERATION on NEWSET, perhaps leaving information in OLDSET. */
static void
sigprocmask (int operation, int *newset, int *oldset)
{
switch (operation)
{
case SIG_UNBLOCK:
sigsetmask (sigblock (0) & ~(*newset));
break;
case SIG_BLOCK:
*oldset = sigblock (*newset);
break;
case SIG_SETMASK:
sigsetmask (*newset);
break;
default:
abort ();
}
}
#endif /* !HAVE_SIGPROCMASK && HAVE_SIGSETMASK */
/* **************************************************************** */
/* */
/* Signal Handling for Info */
/* */
/* **************************************************************** */
#if defined (HAVE_SIGACTION) || defined (HAVE_SIGPROCMASK) ||\
defined (HAVE_SIGSETMASK)
static void
mask_termsig (sigset_t *set)
{
# if defined (SIGTSTP)
sigaddset (set, SIGTSTP);
sigaddset (set, SIGTTOU);
sigaddset (set, SIGTTIN);
# endif
# if defined (SIGWINCH)
sigaddset (set, SIGWINCH);
# endif
#if defined (SIGQUIT)
sigaddset (set, SIGQUIT);
#endif
#if defined (SIGINT)
sigaddset (set, SIGINT);
#endif
# if defined (SIGUSR1)
sigaddset (set, SIGUSR1);
# endif
}
#endif /* HAVE_SIGACTION || HAVE_SIGPROCMASK || HAVE_SIGSETMASK */
static RETSIGTYPE info_signal_proc (int sig);
#if defined (HAVE_SIGACTION)
typedef struct sigaction signal_info;
signal_info info_signal_handler;
static void
set_termsig (int sig, signal_info *old)
{
sigaction (sig, &info_signal_handler, old);
}
static void
restore_termsig (int sig, const signal_info *saved)
{
sigaction (sig, saved, NULL);
}
#else /* !HAVE_SIGACTION */
typedef RETSIGTYPE (*signal_info) ();
#define set_termsig(sig, old) (void)(*(old) = signal (sig, info_signal_proc))
#define restore_termsig(sig, saved) (void)signal (sig, *(saved))
#define info_signal_handler info_signal_proc
static int term_conf_busy = 0;
#endif /* !HAVE_SIGACTION */
static signal_info old_TSTP, old_TTOU, old_TTIN;
static signal_info old_WINCH, old_INT, old_USR1;
static signal_info old_QUIT;
void
initialize_info_signal_handler (void)
{
#ifdef SA_NOCLDSTOP
/* (Based on info from Paul Eggert found in coreutils.) Don't use
HAVE_SIGACTION to decide whether to use the sa_handler, sa_flags,
sa_mask members, as some systems (Solaris 7+) don't define them. Use
SA_NOCLDSTOP instead; it's been part of POSIX.1 since day 1 (in 1988). */
info_signal_handler.sa_handler = info_signal_proc;
info_signal_handler.sa_flags = 0;
mask_termsig (&info_signal_handler.sa_mask);
#endif /* SA_NOCLDSTOP */
#if defined (SIGTSTP)
set_termsig (SIGTSTP, &old_TSTP);
set_termsig (SIGTTOU, &old_TTOU);
set_termsig (SIGTTIN, &old_TTIN);
#endif /* SIGTSTP */
#if defined (SIGWINCH)
set_termsig (SIGWINCH, &old_WINCH);
#endif
#if defined (SIGQUIT)
set_termsig (SIGQUIT, &old_QUIT);
#endif
#if defined (SIGINT)
set_termsig (SIGINT, &old_INT);
#endif
#if defined (SIGUSR1)
/* Used by DJGPP to simulate SIGTSTP on Ctrl-Z. */
set_termsig (SIGUSR1, &old_USR1);
#endif
}
static void
redisplay_after_signal (void)
{
terminal_clear_screen ();
display_clear_display (the_display);
window_mark_chain (windows, W_UpdateWindow);
display_update_display (windows);
display_cursor_at_point (active_window);
fflush (stdout);
}
static void
reset_info_window_sizes (void)
{
terminal_goto_xy (0, 0);
fflush (stdout);
terminal_unprep_terminal ();
terminal_get_screen_size ();
terminal_prep_terminal ();
display_initialize_display (screenwidth, screenheight);
window_new_screen_size (screenwidth, screenheight);
redisplay_after_signal ();
}
static RETSIGTYPE
info_signal_proc (int sig)
{
signal_info *old_signal_handler = NULL;
#if !defined (HAVE_SIGACTION)
/* best effort: first increment this counter and later block signals */
if (term_conf_busy)
return;
term_conf_busy++;
#if defined (HAVE_SIGPROCMASK) || defined (HAVE_SIGSETMASK)
{
sigset_t nvar, ovar;
sigemptyset (&nvar);
mask_termsig (&nvar);
sigprocmask (SIG_BLOCK, &nvar, &ovar);
}
#endif /* HAVE_SIGPROCMASK || HAVE_SIGSETMASK */
#endif /* !HAVE_SIGACTION */
switch (sig)
{
#if defined (SIGTSTP)
case SIGTSTP:
case SIGTTOU:
case SIGTTIN:
#endif
#if defined (SIGQUIT)
case SIGQUIT:
#endif
#if defined (SIGINT)
case SIGINT:
#endif
{
#if defined (SIGTSTP)
if (sig == SIGTSTP)
old_signal_handler = &old_TSTP;
if (sig == SIGTTOU)
old_signal_handler = &old_TTOU;
if (sig == SIGTTIN)
old_signal_handler = &old_TTIN;
#endif /* SIGTSTP */
#if defined (SIGQUIT)
if (sig == SIGQUIT)
old_signal_handler = &old_QUIT;
#endif /* SIGQUIT */
#if defined (SIGINT)
if (sig == SIGINT)
old_signal_handler = &old_INT;
#endif /* SIGINT */
/* For stop signals, restore the terminal IO, leave the cursor
at the bottom of the window, and stop us. */
terminal_goto_xy (0, screenheight - 1);
terminal_clear_to_eol ();
fflush (stdout);
terminal_unprep_terminal ();
restore_termsig (sig, old_signal_handler);
UNBLOCK_SIGNAL (sig);
kill (getpid (), sig);
/* The program is returning now. Restore our signal handler,
turn on terminal handling, redraw the screen, and place the
cursor where it belongs. */
terminal_prep_terminal ();
set_termsig (sig, old_signal_handler);
/* window size might be changed while sleeping */
reset_info_window_sizes ();
}
break;
#if defined (SIGWINCH) || defined (SIGUSR1)
#ifdef SIGWINCH
case SIGWINCH:
#endif
#ifdef SIGUSR1
case SIGUSR1:
#endif
{
/* Turn off terminal IO, tell our parent that the window has changed,
then reinitialize the terminal and rebuild our windows. */
#ifdef SIGWINCH
if (sig == SIGWINCH)
old_signal_handler = &old_WINCH;
#endif
#ifdef SIGUSR1
if (sig == SIGUSR1)
old_signal_handler = &old_USR1;
#endif
terminal_goto_xy (0, 0);
fflush (stdout);
terminal_unprep_terminal (); /* needless? */
restore_termsig (sig, old_signal_handler);
UNBLOCK_SIGNAL (sig);
kill (getpid (), sig);
/* After our old signal handler returns... */
set_termsig (sig, old_signal_handler); /* needless? */
terminal_prep_terminal ();
reset_info_window_sizes ();
}
break;
#endif /* SIGWINCH || SIGUSR1 */
}
#if !defined (HAVE_SIGACTION)
/* at this time it is safer to perform unblock after decrement */
term_conf_busy--;
#if defined (HAVE_SIGPROCMASK) || defined (HAVE_SIGSETMASK)
{
sigset_t nvar, ovar;
sigemptyset (&nvar);
mask_termsig (&nvar);
sigprocmask (SIG_UNBLOCK, &nvar, &ovar);
}
#endif /* HAVE_SIGPROCMASK || HAVE_SIGSETMASK */
#endif /* !HAVE_SIGACTION */
}
/* vim: set sw=2 cino={1s>2sn-s^-se-s: */

View File

@ -0,0 +1,98 @@
/* $NetBSD: signals.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* signals.h -- header to include system dependent signal definitions.
Id: signals.h,v 1.2 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1994, 1995, 1997, 2002, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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.
Originally written by Brian Fox (bfox@ai.mit.edu). */
#ifndef INFO_SIGNALS_H
#define INFO_SIGNALS_H
#include <sys/types.h>
#include <signal.h>
/* For sysV68 --phdm@info.ucl.ac.be. */
#if !defined (SIGCHLD) && defined (SIGCLD)
#define SIGCHLD SIGCLD
#endif
#if !defined (HAVE_SIGPROCMASK) && !defined (sigmask)
# define sigmask(x) (1 << ((x)-1))
#endif /* !HAVE_SIGPROCMASK && !sigmask */
/* Without SA_NOCLDSTOP, sigset_t might end up being undefined even
though we have sigprocmask, on older systems, according to Nelson
Beebe. The test is from coreutils/sort.c, via Paul Eggert. */
#if !defined (HAVE_SIGPROCMASK) || !defined (SA_NOCLDSTOP)
# if !defined (SIG_BLOCK)
# define SIG_UNBLOCK 1
# define SIG_BLOCK 2
# define SIG_SETMASK 3
# endif /* SIG_BLOCK */
/* Type of a signal set. */
# define sigset_t int
/* Make SET have no signals in it. */
# define sigemptyset(set) (*(set) = (sigset_t)0x0)
/* Make SET have the full range of signal specifications possible. */
# define sigfillset(set) (*(set) = (sigset_t)0xffffffffff)
/* Add SIG to the contents of SET. */
# define sigaddset(set, sig) *(set) |= sigmask (sig)
/* Delete SIG from the contents of SET. */
# define sigdelset(set, sig) *(set) &= ~(sigmask (sig))
/* Tell if SET contains SIG. */
# define sigismember(set, sig) (*(set) & (sigmask (sig)))
/* Suspend the process until the reception of one of the signals
not present in SET. */
# define sigsuspend(set) sigpause (*(set))
#endif /* !HAVE_SIGPROCMASK */
#if defined (HAVE_SIGPROCMASK) || defined (HAVE_SIGSETMASK)
/* These definitions are used both in POSIX and non-POSIX implementations. */
#define BLOCK_SIGNAL(sig) \
do { \
sigset_t nvar, ovar; \
sigemptyset (&nvar); \
sigemptyset (&ovar); \
sigaddset (&nvar, sig); \
sigprocmask (SIG_BLOCK, &nvar, &ovar); \
} while (0)
#define UNBLOCK_SIGNAL(sig) \
do { \
sigset_t nvar, ovar; \
sigemptyset (&ovar); \
sigemptyset (&nvar); \
sigaddset (&nvar, sig); \
sigprocmask (SIG_UNBLOCK, &nvar, &ovar); \
} while (0)
#else /* !HAVE_SIGPROCMASK && !HAVE_SIGSETMASK */
# define BLOCK_SIGNAL(sig)
# define UNBLOCK_SIGNAL(sig)
#endif /* !HAVE_SIGPROCMASK && !HAVE_SIGSETMASK */
#endif /* not INFO_SIGNALS_H */

View File

@ -0,0 +1,61 @@
/* $NetBSD: termdep.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */
/* termdep.h -- system things that terminal.c depends on.
Id: termdep.h,v 1.2 2004/04/11 17:56:46 karl Exp
Copyright (C) 1993, 1996, 1997, 1998, 2001, 2002 Free Software
Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Written by Brian Fox (bfox@ai.mit.edu). */
#ifndef INFO_TERMDEP_H
#define INFO_TERMDEP_H
/* NeXT supplies <termios.h> but it is broken. Probably Autoconf should
have a separate test, but anyway ... */
#ifdef NeXT
#undef HAVE_TERMIOS_H
#endif
#ifdef HAVE_TERMIOS_H
# include <termios.h>
#else
# if defined (HAVE_TERMIO_H)
# include <termio.h>
# if defined (HAVE_SYS_PTEM_H)
# if defined (M_UNIX) || !defined (M_XENIX)
# include <sys/stream.h>
# include <sys/ptem.h>
# undef TIOCGETC
# else /* M_XENIX */
# define tchars tc
# endif /* M_XENIX */
# endif /* HAVE_SYS_PTEM_H */
# else /* !HAVE_TERMIO_H */
# include <sgtty.h>
# endif /* !HAVE_TERMIO_H */
#endif /* !HAVE_TERMIOS_H */
#ifdef GWINSZ_IN_SYS_IOCTL
# include <sys/ioctl.h>
#endif
#ifdef HAVE_SYS_TTOLD_H
# include <sys/ttold.h>
#endif /* HAVE_SYS_TTOLD_H */
#endif /* not INFO_TERMDEP_H */

Some files were not shown because too many files have changed in this diff Show More