mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
Regenerated: /usr/bin/perl scripts/gen-FAQ.pl FAQ.in
This commit is contained in:
parent
8f0302ee67
commit
b710a6e220
50
FAQ
50
FAQ
@ -97,6 +97,8 @@ please let me know.
|
||||
2.25. I need lots of open files. What do I have to do?
|
||||
2.26. How do I get the same behavior on parsing /etc/passwd and
|
||||
/etc/group as I have with libc5 ?
|
||||
2.27. What needs to be recompiled when upgrading from glibc 2.0 to glibc
|
||||
2.1?
|
||||
|
||||
3. Source and binary incompatibilities, and what to do about them
|
||||
|
||||
@ -318,14 +320,14 @@ new kernel features when using old kernel headers for compiling the GNU C
|
||||
library.
|
||||
|
||||
{ZW} Even if you are using a 2.0 kernel on your machine, we recommend you
|
||||
compile GNU libc with 2.1 kernel headers. That way you won't have to
|
||||
recompile libc if you ever upgrade to kernel 2.1 or 2.2. To tell libc which
|
||||
compile GNU libc with 2.2 kernel headers. That way you won't have to
|
||||
recompile libc if you ever upgrade to kernel 2.2. To tell libc which
|
||||
headers to use, give configure the --with-headers switch
|
||||
(e.g. --with-headers=/usr/src/linux-2.1.107/include).
|
||||
(e.g. --with-headers=/usr/src/linux-2.2.0/include).
|
||||
|
||||
Note that you must configure the 2.1 kernel if you do this, otherwise libc
|
||||
Note that you must configure the 2.2 kernel if you do this, otherwise libc
|
||||
will be unable to find <linux/version.h>. Just change the current directory
|
||||
to the root of the 2.1 tree and do `make include/linux/version.h'.
|
||||
to the root of the 2.2 tree and do `make include/linux/version.h'.
|
||||
|
||||
|
||||
1.9. The compiler hangs while building iconvdata modules. What's
|
||||
@ -462,8 +464,8 @@ There are some failures which are not directly related to the GNU libc:
|
||||
checks have been used so that you can't build with it.
|
||||
- The kernel might have bugs. For example on Linux/Alpha 2.0.34 the
|
||||
floating point handling has quite a number of bugs and therefore most of
|
||||
the test cases in the math subdirectory will fail. The current Linux 2.1
|
||||
development kernels have fixes for the floating point support on Alpha.
|
||||
the test cases in the math subdirectory will fail. Linux 2.2 has
|
||||
fixes for the floating point support on Alpha.
|
||||
|
||||
|
||||
1.17. What is symbol versioning good for? Do I need it?
|
||||
@ -961,7 +963,7 @@ really screwed up.
|
||||
in the kernel and work-arounds are not suitable. Besides, some parts of the
|
||||
kernel are too buggy when it comes to using threads.
|
||||
|
||||
If you need nscd, you have to use a 2.1 kernel.
|
||||
If you need nscd, you have to use at least a 2.1 kernel.
|
||||
|
||||
Note that I have at this point no information about any other platform.
|
||||
|
||||
@ -1012,6 +1014,35 @@ passwd_compat: nis
|
||||
group_compat: nis
|
||||
shadow_compat: nis
|
||||
|
||||
|
||||
2.27. What needs to be recompiled when upgrading from glibc 2.0 to glibc
|
||||
2.1?
|
||||
|
||||
{AJ,CG} If you just upgrade the glibc from 2.0.x (x <= 7) to 2.1, binaries
|
||||
that have been linked against glibc 2.0 will continue to work.
|
||||
|
||||
If you compile your own binaries against glibc 2.1, you also need to
|
||||
recompile some other libraries. The problem is that libio had to be
|
||||
changed and therefore libraries that are based or depend on the libio
|
||||
of glibc, e.g. ncurses or slang, need to be recompiled. If you
|
||||
experience strange segmentation faults in your programs linked against
|
||||
glibc 2.1, you might need to recompile your libraries.
|
||||
|
||||
Another problem is that older binaries that were linked statically against
|
||||
glibc 2.0 will reference the older nss modules (libnss_files.so.1 instead of
|
||||
libnss_files.so.2), so don't remove them. Also, the old glibc-2.0 compiled
|
||||
static libraries (libfoo.a) which happen to depend on the older libio
|
||||
behavior will be broken by the glibc 2.1 upgrade. We plan to produce a
|
||||
compatibility library that people will be able to link in if they want
|
||||
to compile a static library generated against glibc 2.0 into a program
|
||||
on a glibc 2.1 system. You just add -lcompat and you should be fine.
|
||||
|
||||
The glibc-compat add-on will provide the libcompat.a library, the older
|
||||
nss modules, and a few other files. Together, they should make it
|
||||
possible to do development with old static libraries on a glibc 2.1
|
||||
system. This add-on is still in development. You can get it from <URL>
|
||||
but please keep in mind that it is experimental.
|
||||
|
||||
|
||||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||
|
||||
@ -1350,7 +1381,7 @@ define it this way and therefore programs must be adopted.
|
||||
3.16. Why has <netinet/ip_fw.h> disappeared?
|
||||
|
||||
{AJ} The corresponding Linux kernel data structures and constants are
|
||||
totally different in Linux 2.0 and Linux 2.1. This situation has to be
|
||||
totally different in Linux 2.0 and Linux 2.2. This situation has to be
|
||||
taken care in user programs using the firewall structures and therefore
|
||||
those programs (ipfw is AFAIK the only one) should deal with this problem
|
||||
themselves.
|
||||
@ -1480,6 +1511,7 @@ Answers were given by:
|
||||
{TK} Thorsten Kukuk, <kukuk@vt.uni-paderborn.de>
|
||||
{GK} Geoffrey Keating, <geoffk@ozemail.com.au>
|
||||
{HJ} H.J. Lu, <hjl@gnu.org>
|
||||
{CG} Cristian Gafton, <gafton@redhat.com>
|
||||
|
||||
Local Variables:
|
||||
mode:outline
|
||||
|
@ -3,9 +3,9 @@
|
||||
% Load plain if necessary, i.e., if running under initex.
|
||||
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
||||
%
|
||||
\def\texinfoversion{1998-12-15}%
|
||||
\def\texinfoversion{1999-01-24}%
|
||||
%
|
||||
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98
|
||||
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
||||
% Free Software Foundation, Inc.
|
||||
%
|
||||
% This texinfo.tex file is free software; you can redistribute it and/or
|
||||
@ -37,11 +37,11 @@
|
||||
% (and all CTAN mirrors, finger ctan@ctan.org for a list).
|
||||
% The texinfo.tex in the texinfo distribution itself could well be out
|
||||
% of date, so if that's what you're using, please check.
|
||||
%
|
||||
%
|
||||
% Send bug reports to bug-texinfo@gnu.org.
|
||||
% Please include a precise test case in each bug report,
|
||||
% including a complete document with which we can reproduce the problem.
|
||||
%
|
||||
%
|
||||
% To process a Texinfo manual with TeX, it's most reliable to use the
|
||||
% texi2dvi shell script that comes with the distribution. For simple
|
||||
% manuals, however, you can get away with:
|
||||
@ -92,19 +92,45 @@
|
||||
\newlinechar = `^^J
|
||||
|
||||
% Set up fixed words for English if not already set.
|
||||
\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
|
||||
\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
|
||||
\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
|
||||
\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
|
||||
\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
|
||||
\ifx\putwordon\undefined \gdef\putwordon{on}\fi
|
||||
\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
|
||||
\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
|
||||
\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
|
||||
\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
|
||||
\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
|
||||
\ifx\putwordShortContents\undefined \gdef\putwordShortContents{Short Contents}\fi
|
||||
\ifx\putwordTableofContents\undefined\gdef\putwordTableofContents{Table of Contents}\fi
|
||||
\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
|
||||
\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
|
||||
\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
|
||||
\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
|
||||
\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
|
||||
\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
|
||||
\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
|
||||
\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
|
||||
\ifx\putwordOf\undefined \gdef\putwordOf{of}\fi
|
||||
\ifx\putwordon\undefined \gdef\putwordon{on}\fi
|
||||
\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
|
||||
\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
|
||||
\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
|
||||
\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
|
||||
\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
|
||||
\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
|
||||
\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
|
||||
%
|
||||
\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
|
||||
\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
|
||||
\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
|
||||
\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
|
||||
\ifx\putwordMMai\undefined \gdef\putwordMMai{May}\fi
|
||||
\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
|
||||
\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
|
||||
\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
|
||||
\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
|
||||
\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
|
||||
\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
|
||||
\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
|
||||
%
|
||||
\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
|
||||
\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
|
||||
\ifx\putwordDefivar\undefined \gdef\putwordDefivar{Instance Variable}\fi
|
||||
\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
|
||||
\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
|
||||
\ifx\putwordDeftypevar\undefined \gdef\putwordDeftypevar{Variable}\fi
|
||||
\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
|
||||
\ifx\putwordDeftypefun\undefined \gdef\putwordDeftypefun{Function}\fi
|
||||
|
||||
% Ignore a token.
|
||||
%
|
||||
@ -143,7 +169,7 @@
|
||||
|
||||
% For @cropmarks command.
|
||||
% Do @cropmarks to get crop marks.
|
||||
%
|
||||
%
|
||||
\newif\ifcropmarks
|
||||
\let\cropmarks = \cropmarkstrue
|
||||
%
|
||||
@ -618,7 +644,7 @@ where each line of input produces a line of output.}
|
||||
}
|
||||
|
||||
% @enddots{} is an end-of-sentence ellipsis.
|
||||
%
|
||||
%
|
||||
\def\enddots{%
|
||||
\leavevmode
|
||||
\hbox to 2em{%
|
||||
@ -844,7 +870,7 @@ where each line of input produces a line of output.}
|
||||
% We need to warn folks that they may have trouble with TeX 3.0.
|
||||
% This uses \immediate\write16 rather than \message to get newlines.
|
||||
\immediate\write16{}
|
||||
\immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
|
||||
\immediate\write16{WARNING: for users of Unix TeX 3.0!}
|
||||
\immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
|
||||
\immediate\write16{If you are running another version of TeX, relax.}
|
||||
\immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
|
||||
@ -980,7 +1006,7 @@ where each line of input produces a line of output.}
|
||||
% contains other Texinfo commands, it's almost certain it will fail
|
||||
% (although perhaps we could fix that with sufficient work to do a
|
||||
% one-level expansion on the result, instead of complete).
|
||||
%
|
||||
%
|
||||
\def\expandablevalue#1{%
|
||||
\expandafter\ifx\csname SET#1\endcsname\relax
|
||||
{[No value for ``#1'']}%
|
||||
@ -1088,7 +1114,7 @@ where each line of input produces a line of output.}
|
||||
% So open here the files we need to have open while reading the input.
|
||||
% This makes it possible to make a .fmt file for texinfo.
|
||||
\def\setfilename{%
|
||||
\iflinks
|
||||
\iflinks
|
||||
\readauxfile
|
||||
\fi % \openindices needs to do some work in any case.
|
||||
\openindices
|
||||
@ -1107,7 +1133,7 @@ where each line of input produces a line of output.}
|
||||
}
|
||||
|
||||
% Called from \setfilename.
|
||||
%
|
||||
%
|
||||
\def\openindices{%
|
||||
\newindex{cp}%
|
||||
\newcodeindex{fn}%
|
||||
@ -1482,7 +1508,7 @@ where each line of input produces a line of output.}
|
||||
% @uref (abbreviation for `urlref') takes an optional second argument
|
||||
% specifying the text to display. First (mandatory) arg is the url.
|
||||
% Perhaps eventually put in a hypertex \special here.
|
||||
%
|
||||
%
|
||||
\def\uref#1{\urefxxx #1,,\finish}
|
||||
\def\urefxxx#1,#2,#3\finish{%
|
||||
\setbox0 = \hbox{\ignorespaces #2}%
|
||||
@ -1540,7 +1566,7 @@ where each line of input produces a line of output.}
|
||||
|
||||
% Do an implicit @contents or @shortcontents after @end titlepage if the
|
||||
% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
|
||||
%
|
||||
%
|
||||
\newif\ifsetcontentsaftertitlepage
|
||||
\let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
|
||||
\newif\ifsetshortcontentsaftertitlepage
|
||||
@ -1749,22 +1775,18 @@ where each line of input produces a line of output.}
|
||||
|
||||
% Subroutines used in generating headings
|
||||
% Produces Day Month Year style of output.
|
||||
\def\today{\number\day\space
|
||||
\ifcase\month\or
|
||||
January\or February\or March\or April\or May\or June\or
|
||||
July\or August\or September\or October\or November\or December\fi
|
||||
\space\number\year}
|
||||
\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}
|
||||
|
||||
% Use this if you want the Month Day, Year style of output.
|
||||
%\def\today{\ifcase\month\or
|
||||
%January\or February\or March\or April\or May\or June\or
|
||||
%July\or August\or September\or October\or November\or December\fi
|
||||
%\space\number\day, \number\year}
|
||||
|
||||
% @settitle line... specifies the title of the document, for headings
|
||||
% It generates no output of its own
|
||||
|
||||
\def\thistitle{No Title}
|
||||
% @settitle line... specifies the title of the document, for headings.
|
||||
% It generates no output of its own.
|
||||
\def\thistitle{\putwordNoTitle}
|
||||
\def\settitle{\parsearg\settitlezzz}
|
||||
\def\settitlezzz #1{\gdef\thistitle{#1}}
|
||||
|
||||
@ -1841,7 +1863,7 @@ July\or August\or September\or October\or November\or December\fi
|
||||
\itemxneedsnegativevskipfalse
|
||||
\else
|
||||
% The item text fits into the space. Start a paragraph, so that the
|
||||
% following text (if any) will end up on the same line.
|
||||
% following text (if any) will end up on the same line.
|
||||
\noindent
|
||||
% Do this with kerns and \unhbox so that if there is a footnote in
|
||||
% the item text, it can migrate to the main vertical list and
|
||||
@ -2138,38 +2160,51 @@ July\or August\or September\or October\or November\or December\fi
|
||||
\multitablelinespace=0pt
|
||||
|
||||
% Macros used to set up halign preamble:
|
||||
%
|
||||
%
|
||||
\let\endsetuptable\relax
|
||||
\def\xendsetuptable{\endsetuptable}
|
||||
\let\columnfractions\relax
|
||||
\def\xcolumnfractions{\columnfractions}
|
||||
\newif\ifsetpercent
|
||||
|
||||
% 2/1/96, to allow fractions to be given with more than one digit.
|
||||
\def\pickupwholefraction#1 {\global\advance\colcount by1 %
|
||||
\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
|
||||
\setuptable}
|
||||
% #1 is the part of the @columnfraction before the decimal point, which
|
||||
% is presumably either 0 or the empty string (but we don't check, we
|
||||
% just throw it away). #2 is the decimal part, which we use as the
|
||||
% percent of \hsize for this column.
|
||||
\def\pickupwholefraction#1.#2 {%
|
||||
\global\advance\colcount by 1
|
||||
\expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
|
||||
\setuptable
|
||||
}
|
||||
|
||||
\newcount\colcount
|
||||
\def\setuptable#1{\def\firstarg{#1}%
|
||||
\ifx\firstarg\xendsetuptable\let\go\relax%
|
||||
\else
|
||||
\ifx\firstarg\xcolumnfractions\global\setpercenttrue%
|
||||
\def\setuptable#1{%
|
||||
\def\firstarg{#1}%
|
||||
\ifx\firstarg\xendsetuptable
|
||||
\let\go = \relax
|
||||
\else
|
||||
\ifsetpercent
|
||||
\let\go\pickupwholefraction % In this case arg of setuptable
|
||||
% is the decimal point before the
|
||||
% number given in percent of hsize.
|
||||
% We don't need this so we don't use it.
|
||||
\ifx\firstarg\xcolumnfractions
|
||||
\global\setpercenttrue
|
||||
\else
|
||||
\global\advance\colcount by1
|
||||
\setbox0=\hbox{#1 }% Add a normal word space as a separator;
|
||||
% typically that is always in the input, anyway.
|
||||
\expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
|
||||
\ifsetpercent
|
||||
\let\go\pickupwholefraction
|
||||
\else
|
||||
\global\advance\colcount by 1
|
||||
\setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
|
||||
% typically that is always in the input, anyway.
|
||||
\expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
|
||||
\fi
|
||||
\fi
|
||||
\ifx\go\pickupwholefraction
|
||||
% Put the argument back for the \pickupwholefraction call, so
|
||||
% we'll always have a period there to be parsed.
|
||||
\def\go{\pickupwholefraction#1}%
|
||||
\else
|
||||
\let\go = \setuptable
|
||||
\fi%
|
||||
\fi%
|
||||
\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
|
||||
\fi\go}
|
||||
\fi
|
||||
\go
|
||||
}
|
||||
|
||||
% multitable syntax
|
||||
\def\tab{&\hskip1sp\relax} % 2/2/96
|
||||
@ -2177,7 +2212,7 @@ July\or August\or September\or October\or November\or December\fi
|
||||
% maintained, even if it is never used.
|
||||
|
||||
% @multitable ... @end multitable definitions:
|
||||
|
||||
%
|
||||
\def\multitable{\parsearg\dotable}
|
||||
\def\dotable#1{\bgroup
|
||||
\vskip\parskip
|
||||
@ -2216,15 +2251,15 @@ July\or August\or September\or October\or November\or December\fi
|
||||
% In order to keep entries from bumping into each other
|
||||
% we will add a \leftskip of \multitablecolspace to all columns after
|
||||
% the first one.
|
||||
%
|
||||
%
|
||||
% If a template has been used, we will add \multitablecolspace
|
||||
% to the width of each template entry.
|
||||
%
|
||||
%
|
||||
% If the user has set preamble in terms of percent of \hsize we will
|
||||
% use that dimension as the width of the column, and the \leftskip
|
||||
% will keep entries from bumping into each other. Table will start at
|
||||
% left margin and final column will justify at right margin.
|
||||
%
|
||||
%
|
||||
% Make sure we don't inherit \rightskip from the outer environment.
|
||||
\rightskip=0pt
|
||||
\ifnum\colcount=1
|
||||
@ -2388,9 +2423,11 @@ width0pt\relax} \fi
|
||||
% (Must be a way to avoid doing expansion at all, and thus not have to
|
||||
% laboriously list every single command here.)
|
||||
\def\@{@}% will be @@ when we switch to @ as escape char.
|
||||
% need these in case \tex is in effect and \{ is a \delimiter again.
|
||||
\let\{ = \lbracecmd
|
||||
\let\} = \rbracecmd
|
||||
% Need these in case \tex is in effect and \{ is a \delimiter again.
|
||||
% But can't use \lbracecmd and \rbracecmd because texindex assumes
|
||||
% braces and backslashes are used only as delimiters.
|
||||
\let\{ = \mylbrace
|
||||
\let\} = \myrbrace
|
||||
\def\_{{\realbackslash _}}%
|
||||
\def\w{\realbackslash w }%
|
||||
\def\bf{\realbackslash bf }%
|
||||
@ -2525,14 +2562,14 @@ width0pt\relax} \fi
|
||||
\def\emptymacro{\empty}
|
||||
|
||||
% Most index entries go through here, but \dosubind is the general case.
|
||||
%
|
||||
%
|
||||
\def\doind#1#2{\dosubind{#1}{#2}\empty}
|
||||
|
||||
% Workhorse for all \fooindexes.
|
||||
% #1 is name of index, #2 is stuff to put there, #3 is subentry --
|
||||
% \empty if called from \doind, as we usually are. The main exception
|
||||
% is with defuns, which call us directly.
|
||||
%
|
||||
%
|
||||
\def\dosubind#1#2#3{%
|
||||
% Put the index entry in the margin if desired.
|
||||
\ifx\SETmarginindex\relax\else
|
||||
@ -2586,12 +2623,12 @@ width0pt\relax} \fi
|
||||
% will have extra space inserted, because the \medbreak in the
|
||||
% start of the @defun won't see the skip inserted by the @end of
|
||||
% the previous defun.
|
||||
%
|
||||
%
|
||||
% But don't do any of this if we're not in vertical mode. We
|
||||
% don't want to do a \vskip and prematurely end a paragraph.
|
||||
%
|
||||
%
|
||||
% Avoid page breaks due to these extra skips, too.
|
||||
%
|
||||
%
|
||||
\iflinks
|
||||
\ifvmode
|
||||
\skip0 = \lastskip
|
||||
@ -2600,7 +2637,7 @@ width0pt\relax} \fi
|
||||
%
|
||||
\temp % do the write
|
||||
%
|
||||
%
|
||||
%
|
||||
\ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
|
||||
\fi
|
||||
}%
|
||||
@ -2664,7 +2701,7 @@ width0pt\relax} \fi
|
||||
% and it loses the chapter title and the aux file entries for the
|
||||
% index. The easiest way to prevent this problem is to make sure
|
||||
% there is some text.
|
||||
(Index is nonexistent)
|
||||
\putwordIndexNonexistent
|
||||
\else
|
||||
%
|
||||
% If the index file exists but is empty, then \openin leaves \ifeof
|
||||
@ -2672,7 +2709,7 @@ width0pt\relax} \fi
|
||||
% it can discover if there is anything in it.
|
||||
\read 1 to \temp
|
||||
\ifeof 1
|
||||
(Index is empty)
|
||||
\putwordIndexIsEmpty
|
||||
\else
|
||||
% Index files are almost Texinfo source, but we use \ as the escape
|
||||
% character. It would be better to use @, but that's too big a change
|
||||
@ -2697,7 +2734,7 @@ width0pt\relax} \fi
|
||||
%
|
||||
% Remove any glue we may have, we'll be inserting our own.
|
||||
\removelastskip
|
||||
%
|
||||
%
|
||||
% We like breaks before the index initials, so insert a bonus.
|
||||
\penalty -300
|
||||
%
|
||||
@ -2705,7 +2742,7 @@ width0pt\relax} \fi
|
||||
% baselineskips increases the chance of the dots lining up from column
|
||||
% to column. It still won't often be perfect, because of the stretch
|
||||
% we need before each entry, but it's better.
|
||||
%
|
||||
%
|
||||
% No shrink because it confuses \balancecolumns.
|
||||
\vskip 1.67\baselineskip plus .5\baselineskip
|
||||
\leftline{\secbf #1}%
|
||||
@ -2804,24 +2841,26 @@ width0pt\relax} \fi
|
||||
|
||||
\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
|
||||
% Grab any single-column material above us.
|
||||
\output = {\global\setbox\partialpage = \vbox{%
|
||||
%
|
||||
\output = {%
|
||||
%
|
||||
% Here is a possibility not foreseen in manmac: if we accumulate a
|
||||
% whole lot of material, we might end up calling this \output
|
||||
% routine twice in a row (see the doublecol-lose test, which is
|
||||
% essentially a couple of indexes with @setchapternewpage off). In
|
||||
% that case, we must prevent the second \partialpage from
|
||||
% simply overwriting the first, causing us to lose the page.
|
||||
% This will preserve it until a real output routine can ship it
|
||||
% out. Generally, \partialpage will be empty when this runs and
|
||||
% this will be a no-op.
|
||||
\unvbox\partialpage
|
||||
% that case we just ship out what is in \partialpage with the normal
|
||||
% output routine. Generally, \partialpage will be empty when this
|
||||
% runs and this will be a no-op. See the indexspread.tex test case.
|
||||
\ifvoid\partialpage \else
|
||||
\onepageout{\pagecontents\partialpage}%
|
||||
\fi
|
||||
%
|
||||
% Unvbox the main output page.
|
||||
\unvbox255
|
||||
\kern-\topskip \kern\baselineskip
|
||||
}}%
|
||||
\eject
|
||||
\global\setbox\partialpage = \vbox{%
|
||||
% Unvbox the main output page.
|
||||
\unvbox\PAGE
|
||||
\kern-\topskip \kern\baselineskip
|
||||
}%
|
||||
}%
|
||||
\eject % run that output routine to set \partialpage
|
||||
%
|
||||
% Use the double-column output routine for subsequent pages.
|
||||
\output = {\doublecolumnout}%
|
||||
@ -2855,7 +2894,7 @@ width0pt\relax} \fi
|
||||
|
||||
% The double-column output routine for all double-column pages except
|
||||
% the last.
|
||||
%
|
||||
%
|
||||
\def\doublecolumnout{%
|
||||
\splittopskip=\topskip \splitmaxdepth=\maxdepth
|
||||
% Get the available space for the double columns -- the normal
|
||||
@ -2873,7 +2912,6 @@ width0pt\relax} \fi
|
||||
\def\pagesofar{%
|
||||
% Re-output the contents of the output page -- any previous material,
|
||||
% followed by the two boxes we just split, in box0 and box2.
|
||||
\advance\vsize by \ht\partialpage
|
||||
\unvbox\partialpage
|
||||
%
|
||||
\hsize = \doublecolumnhsize
|
||||
@ -2882,7 +2920,7 @@ width0pt\relax} \fi
|
||||
}
|
||||
\def\enddoublecolumns{%
|
||||
\output = {%
|
||||
% Split the last of the double-column material. Leave on the
|
||||
% Split the last of the double-column material. Leave it on the
|
||||
% current page, no automatic page break.
|
||||
\balancecolumns
|
||||
%
|
||||
@ -2894,14 +2932,15 @@ width0pt\relax} \fi
|
||||
% called on to balance too much material, but if it is, this makes
|
||||
% the output somewhat more palatable.)
|
||||
\global\output = {\onepageout{\pagecontents\PAGE}}%
|
||||
%
|
||||
% \pagegoal was set to the doubled \vsize above, since we restarted
|
||||
% the current page. We're now back to normal single-column
|
||||
% typesetting, so reset \pagegoal to the normal \vsize.
|
||||
\pagegoal = \vsize
|
||||
}%
|
||||
\eject
|
||||
\endgroup % started in \begindoublecolumns
|
||||
%
|
||||
% \pagegoal was set to the doubled \vsize above, since we restarted
|
||||
% the current page. We're now back to normal single-column
|
||||
% typesetting, so reset \pagegoal to the normal \vsize (after the
|
||||
% \endgroup where \vsize got restored).
|
||||
\pagegoal = \vsize
|
||||
}
|
||||
\def\balancecolumns{%
|
||||
% Called at the end of the double column material.
|
||||
@ -3419,10 +3458,10 @@ width0pt\relax} \fi
|
||||
% Write an entry to the toc file, opening it if necessary.
|
||||
% Called from @chapter, etc. We supply {\folio} at the end of the
|
||||
% argument, which will end up as the last argument to the \...entry macro.
|
||||
%
|
||||
%
|
||||
% We open the .toc file here instead of at @setfilename or any other
|
||||
% given time so that @contents can be put in the document anywhere.
|
||||
%
|
||||
%
|
||||
\newif\iftocfileopened
|
||||
\def\writetocentry#1{%
|
||||
\iftocfileopened\else
|
||||
@ -3438,7 +3477,7 @@ width0pt\relax} \fi
|
||||
|
||||
% Finish up the main text and prepare to read what we've written
|
||||
% to \tocfile.
|
||||
%
|
||||
%
|
||||
\def\startcontents#1{%
|
||||
% If @setchapternewpage on, and @headings double, the contents should
|
||||
% start on an odd page, unlike chapters. Thus, we maintain
|
||||
@ -3466,13 +3505,14 @@ width0pt\relax} \fi
|
||||
|
||||
% Normal (long) toc.
|
||||
\def\contents{%
|
||||
\startcontents{\putwordTableofContents}%
|
||||
\startcontents{\putwordTOC}%
|
||||
\openin 1 \jobname.toc
|
||||
\ifeof 1 \else
|
||||
\closein 1
|
||||
\input \jobname.toc
|
||||
\fi
|
||||
\vfill \eject
|
||||
\contentsalignmacro % in case @setchapternewpage odd is in effect
|
||||
\endgroup
|
||||
\lastnegativepageno = \pageno
|
||||
\pageno = \savepageno
|
||||
@ -3480,7 +3520,7 @@ width0pt\relax} \fi
|
||||
|
||||
% And just the chapters.
|
||||
\def\summarycontents{%
|
||||
\startcontents{\putwordShortContents}%
|
||||
\startcontents{\putwordShortTOC}%
|
||||
%
|
||||
\let\chapentry = \shortchapentry
|
||||
\let\unnumbchapentry = \shortunnumberedentry
|
||||
@ -3502,6 +3542,7 @@ width0pt\relax} \fi
|
||||
\input \jobname.toc
|
||||
\fi
|
||||
\vfill \eject
|
||||
\contentsalignmacro % in case @setchapternewpage odd is in effect
|
||||
\endgroup
|
||||
\lastnegativepageno = \pageno
|
||||
\pageno = \savepageno
|
||||
@ -3826,7 +3867,7 @@ width0pt\relax} \fi
|
||||
|
||||
% Define the \E... control sequence only if we are inside the particular
|
||||
% environment, so the error checking in \end will work.
|
||||
%
|
||||
%
|
||||
% To end an @example-like environment, we first end the paragraph (via
|
||||
% \afterenvbreak's vertical glue), and then the group. That way we keep
|
||||
% the zero \parskip that the environments set -- \parskip glue will be
|
||||
@ -3851,7 +3892,7 @@ width0pt\relax} \fi
|
||||
% redefines). We must call \example (or whatever) last in the
|
||||
% definition, since it reads the return following the @example (or
|
||||
% whatever) command.
|
||||
%
|
||||
%
|
||||
% This actually allows (for example) @end display inside an
|
||||
% @smalldisplay. Too bad, but makeinfo will catch the error anyway.
|
||||
%
|
||||
@ -3907,7 +3948,7 @@ width0pt\relax} \fi
|
||||
\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
|
||||
|
||||
% @flushright.
|
||||
%
|
||||
%
|
||||
\def\flushright{\begingroup
|
||||
\let\nonarrowing = t
|
||||
\nonfillstart
|
||||
@ -4049,7 +4090,7 @@ width0pt\relax} \fi
|
||||
% #2 is the \...x control sequence for consecutive fns (which we define).
|
||||
% #3 is the control sequence to call to resume processing.
|
||||
% #4, delimited by the space, is the class name.
|
||||
%
|
||||
%
|
||||
\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
|
||||
\medbreak %
|
||||
% Define the end token that this defining construct specifies
|
||||
@ -4067,7 +4108,7 @@ width0pt\relax} \fi
|
||||
% #3 is the control sequence to call to resume processing.
|
||||
% #4, delimited by the space, is the class name.
|
||||
% #5 is the method's return type.
|
||||
%
|
||||
%
|
||||
\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV %
|
||||
\medbreak %
|
||||
% Define the end token that this defining construct specifies
|
||||
@ -4227,7 +4268,7 @@ width0pt\relax} \fi
|
||||
\def\defun{\defparsebody\Edefun\defunx\defunheader}
|
||||
|
||||
\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
|
||||
\begingroup\defname {#1}{Function}%
|
||||
\begingroup\defname {#1}{\putwordDeffunc}%
|
||||
\defunargs {#2}\endgroup %
|
||||
\catcode 61=\other % Turn off change made in \defparsebody
|
||||
}
|
||||
@ -4241,7 +4282,7 @@ width0pt\relax} \fi
|
||||
% #1 is the data type, #2 the name, #3 the args.
|
||||
\def\deftypefunheaderx #1#2 #3\relax{%
|
||||
\doind {fn}{\code{#2}}% Make entry in function index
|
||||
\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
|
||||
\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
|
||||
\deftypefunargs {#3}\endgroup %
|
||||
\catcode 61=\other % Turn off change made in \defparsebody
|
||||
}
|
||||
@ -4272,7 +4313,7 @@ width0pt\relax} \fi
|
||||
\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
|
||||
|
||||
\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
|
||||
\begingroup\defname {#1}{Macro}%
|
||||
\begingroup\defname {#1}{\putwordDefmac}%
|
||||
\defunargs {#2}\endgroup %
|
||||
\catcode 61=\other % Turn off change made in \defparsebody
|
||||
}
|
||||
@ -4282,7 +4323,7 @@ width0pt\relax} \fi
|
||||
\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
|
||||
|
||||
\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
|
||||
\begingroup\defname {#1}{Special Form}%
|
||||
\begingroup\defname {#1}{\putwordDefspec}%
|
||||
\defunargs {#2}\endgroup %
|
||||
\catcode 61=\other % Turn off change made in \defparsebody
|
||||
}
|
||||
@ -4307,7 +4348,7 @@ width0pt\relax} \fi
|
||||
|
||||
\def\defopheader #1#2#3{%
|
||||
\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
|
||||
\begingroup\defname {#2}{\defoptype{} on #1}%
|
||||
\begingroup\defname {#2}{\defoptype{}\putwordon\ #1}%
|
||||
\defunargs {#3}\endgroup %
|
||||
}
|
||||
|
||||
@ -4345,7 +4386,7 @@ width0pt\relax} \fi
|
||||
|
||||
\def\defcvarheader #1#2#3{%
|
||||
\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
|
||||
\begingroup\defname {#2}{\defcvtype{} of #1}%
|
||||
\begingroup\defname {#2}{\defcvtype{}\putwordOf\ #1}%
|
||||
\defvarargs {#3}\endgroup %
|
||||
}
|
||||
|
||||
@ -4355,7 +4396,7 @@ width0pt\relax} \fi
|
||||
|
||||
\def\defivarheader #1#2#3{%
|
||||
\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
|
||||
\begingroup\defname {#2}{Instance Variable of #1}%
|
||||
\begingroup\defname {#2}{\putwordDefivar\putwordOf\ #1}%
|
||||
\defvarargs {#3}\endgroup %
|
||||
}
|
||||
|
||||
@ -4388,7 +4429,7 @@ width0pt\relax} \fi
|
||||
\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
|
||||
|
||||
\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
|
||||
\begingroup\defname {#1}{Variable}%
|
||||
\begingroup\defname {#1}{\putwordDefvar}%
|
||||
\defvarargs {#2}\endgroup %
|
||||
}
|
||||
|
||||
@ -4397,7 +4438,7 @@ width0pt\relax} \fi
|
||||
\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
|
||||
|
||||
\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
|
||||
\begingroup\defname {#1}{User Option}%
|
||||
\begingroup\defname {#1}{\putwordDefopt}%
|
||||
\defvarargs {#2}\endgroup %
|
||||
}
|
||||
|
||||
@ -4409,7 +4450,7 @@ width0pt\relax} \fi
|
||||
% is actually part of the data type, which should not be put into the index.
|
||||
\def\deftypevarheader #1#2{%
|
||||
\dovarind#2 \relax% Make entry in variables index
|
||||
\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
|
||||
\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
|
||||
\interlinepenalty=10000
|
||||
\endgraf\nobreak\vskip -\parskip\nobreak
|
||||
\endgroup}
|
||||
@ -4455,7 +4496,7 @@ width0pt\relax} \fi
|
||||
\message{macros,}
|
||||
% @macro.
|
||||
|
||||
% To do this right we need a feature of e-TeX, \scantokens,
|
||||
% To do this right we need a feature of e-TeX, \scantokens,
|
||||
% which we arrange to emulate with a temporary file in ordinary TeX.
|
||||
\ifx\eTeXversion\undefined
|
||||
\newwrite\macscribble
|
||||
@ -4508,8 +4549,8 @@ width0pt\relax} \fi
|
||||
% all characters are catcode 10, 11 or 12, except \ which is active
|
||||
% (as in normal texinfo). It is necessary to change the definition of \.
|
||||
|
||||
% It's necessary to have hard CRs when the macro is executed. This is
|
||||
% done by making ^^M (\endlinechar) catcode 12 when reading the macro
|
||||
% It's necessary to have hard CRs when the macro is executed. This is
|
||||
% done by making ^^M (\endlinechar) catcode 12 when reading the macro
|
||||
% body, and then making it the \newlinechar in \scanmacro.
|
||||
|
||||
\def\macrobodyctxt{%
|
||||
@ -4538,7 +4579,7 @@ width0pt\relax} \fi
|
||||
\catcode`\\=12}
|
||||
|
||||
% \mbodybackslash is the definition of \ in @macro bodies.
|
||||
% It maps \foo\ => \csname macarg.foo\endcsname => #N
|
||||
% It maps \foo\ => \csname macarg.foo\endcsname => #N
|
||||
% where N is the macro parameter number.
|
||||
% We define \csname macarg.\endcsname to be \realbackslash, so
|
||||
% \\ in macro replacement text gets you a backslash.
|
||||
@ -4557,7 +4598,7 @@ width0pt\relax} \fi
|
||||
\ifx\argl\empty % no arguments
|
||||
\paramno=0%
|
||||
\else
|
||||
\expandafter\parsemargdef \argl;%
|
||||
\expandafter\parsemargdef \argl;%
|
||||
\fi
|
||||
\expandafter\ifx \csname macsave.\the\macname\endcsname \relax
|
||||
\cslet{macsave.\the\macname}{\the\macname}%
|
||||
@ -4566,7 +4607,7 @@ width0pt\relax} \fi
|
||||
\fi
|
||||
\begingroup \macrobodyctxt
|
||||
\ifrecursive \expandafter\parsermacbody
|
||||
\else \expandafter\parsemacbody
|
||||
\else \expandafter\parsemacbody
|
||||
\fi}
|
||||
|
||||
\def\unmacro{\parsearg\unmacroxxx}
|
||||
@ -4646,7 +4687,7 @@ width0pt\relax} \fi
|
||||
\expandafter\expandafter
|
||||
\expandafter\xdef
|
||||
\expandafter\expandafter
|
||||
\csname\the\macname xxx\endcsname
|
||||
\csname\the\macname xxx\endcsname
|
||||
\paramlist{\egroup\noexpand\scanmacro{\temp}}%
|
||||
\fi
|
||||
\else
|
||||
@ -4689,7 +4730,7 @@ width0pt\relax} \fi
|
||||
\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
|
||||
\def\braceorlinexxx{%
|
||||
\ifx\nchar\bgroup\else
|
||||
\expandafter\parsearg
|
||||
\expandafter\parsearg
|
||||
\fi \next}
|
||||
|
||||
|
||||
@ -4735,7 +4776,7 @@ width0pt\relax} \fi
|
||||
|
||||
|
||||
% @anchor{NAME} -- define xref target at arbitrary point.
|
||||
%
|
||||
%
|
||||
\def\anchor#1{\setref{#1}{Ynothing}}
|
||||
|
||||
|
||||
@ -4744,7 +4785,7 @@ width0pt\relax} \fi
|
||||
% to set \indexdummies so commands such as @code in a section title
|
||||
% aren't expanded. It would be nicer not to expand the titles in the
|
||||
% first place, but there's so many layers that that is hard to do.
|
||||
%
|
||||
%
|
||||
\def\setref#1#2{{%
|
||||
\indexdummies
|
||||
\dosetq{#1-title}{Ytitle}%
|
||||
@ -4808,7 +4849,7 @@ width0pt\relax} \fi
|
||||
\setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
|
||||
\ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
|
||||
}%
|
||||
% [mynode],
|
||||
% [mynode],
|
||||
[\printednodename],\space
|
||||
% page 3
|
||||
\turnoffactive \putwordpage\tie\refx{#1-pg}{}%
|
||||
@ -4897,7 +4938,7 @@ width0pt\relax} \fi
|
||||
}
|
||||
|
||||
% This is the macro invoked by entries in the aux file.
|
||||
%
|
||||
%
|
||||
\def\xrdef#1{\begingroup
|
||||
% Reenable \ as an escape while reading the second argument.
|
||||
\catcode`\\ = 0
|
||||
@ -5122,7 +5163,7 @@ width0pt\relax} \fi
|
||||
|
||||
% @image. We use the macros from epsf.tex to support this.
|
||||
% If epsf.tex is not installed and @image is used, we complain.
|
||||
%
|
||||
%
|
||||
% Check for and read epsf.tex up front. If we read it only at @image
|
||||
% time, we might be inside a group, and then its definitions would get
|
||||
% undone and the next image would fail.
|
||||
@ -5138,18 +5179,22 @@ width0pt\relax} \fi
|
||||
\newif\ifwarnednoepsf
|
||||
\newhelp\noepsfhelp{epsf.tex must be installed for images to
|
||||
work. It is also included in the Texinfo distribution, or you can get
|
||||
it from ftp://ftp.tug.org/tex/epsf.tex.}
|
||||
it from ftp://tug.org/tex/epsf.tex.}
|
||||
%
|
||||
% Only complain once about lack of epsf.tex.
|
||||
\def\image#1{%
|
||||
\ifx\epsfbox\undefined
|
||||
\ifwarnednoepsf \else
|
||||
\errhelp = \noepsfhelp
|
||||
\errmessage{epsf.tex not found, images will be ignored}%
|
||||
\global\warnednoepsftrue
|
||||
\ifx\pdfoutput\undefined
|
||||
\ifx\epsfbox\undefined
|
||||
\ifwarnednoepsf \else
|
||||
\errhelp = \noepsfhelp
|
||||
\errmessage{epsf.tex not found, images will be ignored}%
|
||||
\global\warnednoepsftrue
|
||||
\fi
|
||||
\else
|
||||
\imagexxx #1,,,\finish
|
||||
\fi
|
||||
\else
|
||||
\imagexxx #1,,,\finish
|
||||
\centerline{\pdfimage #1.pdf}%
|
||||
\fi
|
||||
}
|
||||
%
|
||||
@ -5168,6 +5213,7 @@ width0pt\relax} \fi
|
||||
\centerline{\epsfbox{#1.eps}}%
|
||||
\bigbreak
|
||||
\else
|
||||
% In the middle of a paragraph, no extra space.
|
||||
\epsfbox{#1.eps}%
|
||||
\fi
|
||||
}
|
||||
@ -5297,7 +5343,7 @@ width0pt\relax} \fi
|
||||
% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
|
||||
% Perhaps we should allow setting the margins, \topskip, \parskip,
|
||||
% and/or leading, also. Or perhaps we should compute them somehow.
|
||||
%
|
||||
%
|
||||
\def\pagesizes{\parsearg\pagesizesxxx}
|
||||
\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
|
||||
\def\pagesizesyyy#1,#2,#3\finish{{%
|
||||
@ -5311,7 +5357,7 @@ width0pt\relax} \fi
|
||||
}}
|
||||
|
||||
% Set default to letter.
|
||||
%
|
||||
%
|
||||
\letterpaper
|
||||
|
||||
\message{and turning on texinfo input format.}
|
||||
|
Loading…
Reference in New Issue
Block a user