[BACK]Return to texinfo.tex CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp

Diff for /OpenXM_contrib/gmp/Attic/texinfo.tex between version 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2000/09/09 14:12:15 version 1.1.1.3, 2003/08/25 16:05:59
Line 3 
Line 3 
 % Load plain if necessary, i.e., if running under initex.  % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi  \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %  %
 \def\texinfoversion{1999-03-31.13}%  \def\texinfoversion{2002-03-26.08}
 %  %
 % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99  % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
 % Free Software Foundation, Inc.  %               2000, 01, 02 Free Software Foundation, Inc.
 %  %
 % This texinfo.tex file is free software; you can redistribute it and/or  % This texinfo.tex file is free software; you can redistribute it and/or
 % modify it under the terms of the GNU General Public License as  % modify it under the terms of the GNU General Public License as
Line 29 
Line 29 
 %  %
 % Please try the latest version of texinfo.tex before submitting bug  % Please try the latest version of texinfo.tex before submitting bug
 % reports; you can get the latest version from:  % reports; you can get the latest version from:
 %   ftp://ftp.gnu.org/pub/gnu/texinfo.tex  %   ftp://ftp.gnu.org/gnu/texinfo.tex
 %   (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)  %     (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
   %   ftp://texinfo.org/texinfo/texinfo.tex
 %   ftp://tug.org/tex/texinfo.tex  %   ftp://tug.org/tex/texinfo.tex
 %   ftp://ctan.org/macros/texinfo/texinfo.tex  %     (and all CTAN mirrors, see http://www.ctan.org),
 %   (and all CTAN mirrors, finger ctan@ctan.org for a list).  %   and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
 %   /home/gd/gnu/doc/texinfo.tex on the GNU machines.  %
 % The texinfo.tex in any given Texinfo distribution could well be out  % The texinfo.tex in any given Texinfo distribution could well be out
 % of date, so if that's what you're using, please check.  % of date, so if that's what you're using, please check.
 % There is a small home page for Texinfo at http://texinfo.org/.  %
   % Texinfo has a small home page at http://texinfo.org/ and also
   % http://www.gnu.org/software/texinfo.
 %  %
 % Send bug reports to bug-texinfo@gnu.org.  Please include including a  % Send bug reports to bug-texinfo@gnu.org.  Please include including a
 % complete document in each bug report with which we can reproduce the  % complete document in each bug report with which we can reproduce the
Line 50 
Line 53 
 %   texindex foo.??  %   texindex foo.??
 %   tex foo.texi  %   tex foo.texi
 %   tex foo.texi  %   tex foo.texi
 %   dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.  %   dvips foo.dvi -o  # or whatever; this makes foo.ps.
 % The extra runs of TeX get the cross-reference information correct.  % The extra TeX runs get the cross-reference information correct.
 % Sometimes one run after texindex suffices, and sometimes you need more  % Sometimes one run after texindex suffices, and sometimes you need more
 % than two; texi2dvi does it as many times as necessary.  % than two; texi2dvi does it as many times as necessary.
 %  %
 % It is possible to adapt texinfo.tex for other languages.  You can get  % It is possible to adapt texinfo.tex for other languages.  You can get
 % the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.  % the existing language-specific files from the full Texinfo distribution.
   
 \message{Loading texinfo [version \texinfoversion]:}  \message{Loading texinfo [version \texinfoversion]:}
   
Line 67 
Line 70 
   \catcode`+=\active \catcode`\_=\active}    \catcode`+=\active \catcode`\_=\active}
   
 % Save some parts of plain tex whose names we will redefine.  % Save some parts of plain tex whose names we will redefine.
   
 \let\ptexb=\b  \let\ptexb=\b
 \let\ptexbullet=\bullet  \let\ptexbullet=\bullet
 \let\ptexc=\c  \let\ptexc=\c
Line 87 
Line 89 
 % For @tex, we can use \tabalign.  % For @tex, we can use \tabalign.
 \let\+ = \relax  \let\+ = \relax
   
   
 \message{Basics,}  \message{Basics,}
 \chardef\other=12  \chardef\other=12
   
Line 172 
Line 173 
 }%  }%
 \fi  \fi
   
   % add check for \lastpenalty to plain's definitions.  If the last thing
   % we did was a \nobreak, we don't want to insert more space.
   %
   \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
     \removelastskip\penalty-50\smallskip\fi\fi}
   \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
     \removelastskip\penalty-100\medskip\fi\fi}
   \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
     \removelastskip\penalty-200\bigskip\fi\fi}
   
 % For @cropmarks command.  % For @cropmarks command.
 % Do @cropmarks to get crop marks.  % Do @cropmarks to get crop marks.
 %  %
Line 216 
Line 227 
     \normalturnoffactive  % \ in index entries must not stay \, e.g., if      \normalturnoffactive  % \ in index entries must not stay \, e.g., if
                    % the page break happens to be in the middle of an example.                     % the page break happens to be in the middle of an example.
     \shipout\vbox{%      \shipout\vbox{%
         % Do this early so pdf references go to the beginning of the page.
         \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
         %
       \ifcropmarks \vbox to \outervsize\bgroup        \ifcropmarks \vbox to \outervsize\bgroup
         \hsize = \outerhsize          \hsize = \outerhsize
         \vskip-\topandbottommargin          \vskip-\topandbottommargin
Line 430 
Line 444 
   % environments.  --karl, 6may93    % environments.  --karl, 6may93
   %{\advance \baselineskip by -\singlespaceskip    %{\advance \baselineskip by -\singlespaceskip
   %\kern \baselineskip}%    %\kern \baselineskip}%
   \setleading \singlespaceskip    \setleading\singlespaceskip
 }  }
   
 %% Simple single-character @ commands  %% Simple single-character @ commands
Line 599  where each line of input produces a line of output.}
Line 613  where each line of input produces a line of output.}
 %}}  %}}
   
 \def\needx#1{%  \def\needx#1{%
   % Go into vertical mode, so we don't make a big box in the middle of a    % Ensure vertical mode, so we don't make a big box in the middle of a
   % paragraph.    % paragraph.
   \par    \par
   %    %
   % Don't add any leading before our big empty box, but allow a page    % If the @need value is less than one line space, it's useless.
   % break, since the best break might be right here.    \dimen0 = #1\mil
   \allowbreak    \dimen2 = \ht\strutbox
   \nointerlineskip    \advance\dimen2 by \dp\strutbox
   \vtop to #1\mil{\vfil}%    \ifdim\dimen0 > \dimen2
   %      %
   % TeX does not even consider page breaks if a penalty added to the      % Do a \strut just to make the height of this box be normal, so the
   % main vertical list is 10000 or more.  But in order to see if the      % normal leading is inserted relative to the preceding line.
   % empty box we just added fits on the page, we must make it consider      % And a page break here is fine.
   % page breaks.  On the other hand, we don't want to actually break the      \vtop to #1\mil{\strut\vfil}%
   % page after the empty box.  So we use a penalty of 9999.      %
   %      % TeX does not even consider page breaks if a penalty added to the
   % There is an extremely small chance that TeX will actually break the      % main vertical list is 10000 or more.  But in order to see if the
   % page at this \penalty, if there are no other feasible breakpoints in      % empty box we just added fits on the page, we must make it consider
   % sight.  (If the user is using lots of big @group commands, which      % page breaks.  On the other hand, we don't want to actually break the
   % almost-but-not-quite fill up a page, TeX will have a hard time doing      % page after the empty box.  So we use a penalty of 9999.
   % good page breaking, for example.)  However, I could not construct an      %
   % example where a page broke at this \penalty; if it happens in a real      % There is an extremely small chance that TeX will actually break the
   % document, then we can reconsider our strategy.      % page at this \penalty, if there are no other feasible breakpoints in
   \penalty9999      % sight.  (If the user is using lots of big @group commands, which
   %      % almost-but-not-quite fill up a page, TeX will have a hard time doing
   % Back up by the size of the box, whether we did a page break or not.      % good page breaking, for example.)  However, I could not construct an
   \kern -#1\mil      % example where a page broke at this \penalty; if it happens in a real
   %      % document, then we can reconsider our strategy.
   % Do not allow a page break right after this kern.      \penalty9999
   \nobreak      %
       % Back up by the size of the box, whether we did a page break or not.
       \kern -#1\mil
       %
       % Do not allow a page break right after this kern.
       \nobreak
     \fi
 }  }
   
 % @br   forces paragraph break  % @br   forces paragraph break
Line 681  where each line of input produces a line of output.}
Line 701  where each line of input produces a line of output.}
 \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount  \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
 \leftline{\hskip\leftskip{\rm#1}}}}  \leftline{\hskip\leftskip{\rm#1}}}}
   
 % @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.  % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
   % paragraph.  For more general purposes, use the \margin insertion
 \def\inmargin#1{%  % class.  WHICH is `l' or `r'.
 \strut\vadjust{\nobreak\kern-\strutdepth  %
   \vtop to \strutdepth{\baselineskip\strutdepth\vss  
   \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}  
 \newskip\inmarginspacing \inmarginspacing=1cm  \newskip\inmarginspacing \inmarginspacing=1cm
 \def\strutdepth{\dp\strutbox}  \def\strutdepth{\dp\strutbox}
   %
   \def\doinmargin#1#2{\strut\vadjust{%
     \nobreak
     \kern-\strutdepth
     \vtop to \strutdepth{%
       \baselineskip=\strutdepth
       \vss
       % if you have multiple lines of stuff to put here, you'll need to
       % make the vbox yourself of the appropriate size.
       \ifx#1l%
         \llap{\ignorespaces #2\hskip\inmarginspacing}%
       \else
         \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
       \fi
       \null
     }%
   }}
   \def\inleftmargin{\doinmargin l}
   \def\inrightmargin{\doinmargin r}
   %
   % @inmargin{TEXT [, RIGHT-TEXT]}
   % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
   % else use TEXT for both).
   %
   \def\inmargin#1{\parseinmargin #1,,\finish}
   \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
     \setbox0 = \hbox{\ignorespaces #2}%
     \ifdim\wd0 > 0pt
       \def\lefttext{#1}%  have both texts
       \def\righttext{#2}%
     \else
       \def\lefttext{#1}%  have only one text
       \def\righttext{#1}%
     \fi
     %
     \ifodd\pageno
       \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
     \else
       \def\temp{\inleftmargin\lefttext}%
     \fi
     \temp
   }
   
 %\hbox{{\rm#1}}\hfil\break}}  
   
 % @include file    insert text of that file as input.  % @include file    insert text of that file as input.
 % Allow normal characters that  we make active in the argument (a file name).  % Allow normal characters that  we make active in the argument (a file name).
 \def\include{\begingroup  \def\include{\begingroup
Line 778  where each line of input produces a line of output.}
Line 836  where each line of input produces a line of output.}
 %  %
 \def\asis#1{#1}  \def\asis#1{#1}
   
 % @math means output in math mode.  % @math outputs its argument in math mode.
 % We don't use $'s directly in the definition of \math because control  % We don't use $'s directly in the definition of \math because we need
 % sequences like \math are expanded when the toc file is written.  Then,  % to set catcodes according to plain TeX first, to allow for subscripts,
 % we read the toc file back, the $'s will be normal characters (as they  % superscripts, special math chars, etc.
 % should be, according to the definition of Texinfo).  So we must use a  %
 % control sequence to switch into and out of math mode.  % @math does not do math typesetting in section titles, index
   % entries, and other such contexts where the catcodes are set before
   % @math gets a chance to work.  This could perhaps be fixed, but for now
   % at least we can have real math in the main text, where it's needed most.
 %  %
 % This isn't quite enough for @math to work properly in indices, but it  \let\implicitmath = $%$ font-lock fix
 % seems unlikely it will ever be needed there.  
 %  %
 \let\implicitmath = $  % One complication: _ usually means subscripts, but it could also mean
 \def\math#1{\implicitmath #1\implicitmath}  % an actual _ character, as in @math{@var{some_variable} + 1}.  So make
   % _ within @math be active (mathcode "8000), and distinguish by seeing
   % if the current family is \slfam, which is what @var uses.
   %
   {\catcode95 = \active  % 95 = _
   \gdef\mathunderscore{%
     \catcode95=\active
     \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
   }}
   %
   % Another complication: we want \\ (and @\) to output a \ character.
   % FYI, plain.tex uses \\ as a temporary control sequence (why?), but
   % this is not advertised and we don't care.  Texinfo does not
   % otherwise define @\.
   %
   % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
   \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
   %
   \def\math{%
     \tex
     \mathcode`\_="8000 \mathunderscore
     \let\\ = \mathbackslash
     \implicitmath\finishmath}
   \def\finishmath#1{#1\implicitmath\Etex}
   
 % @bullet and @minus need the same treatment as @math, just above.  % @bullet and @minus need the same treatment as @math, just above.
 \def\bullet{\implicitmath\ptexbullet\implicitmath}  \def\bullet{\implicitmath\ptexbullet\implicitmath}
Line 842  where each line of input produces a line of output.}
Line 925  where each line of input produces a line of output.}
 \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}  \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
   
   
   \message{pdf,}
   % adobe `portable' document format
   \newcount\tempnum
   \newcount\lnkcount
   \newtoks\filename
   \newcount\filenamelength
   \newcount\pgn
   \newtoks\toksA
   \newtoks\toksB
   \newtoks\toksC
   \newtoks\toksD
   \newbox\boxA
   \newcount\countA
   \newif\ifpdf
   \newif\ifpdfmakepagedest
   
   \ifx\pdfoutput\undefined
     \pdffalse
     \let\pdfmkdest = \gobble
     \let\pdfurl = \gobble
     \let\endlink = \relax
     \let\linkcolor = \relax
     \let\pdfmakeoutlines = \relax
   \else
     \pdftrue
     \pdfoutput = 1
     \input pdfcolor
     \def\dopdfimage#1#2#3{%
       \def\imagewidth{#2}%
       \def\imageheight{#3}%
       % without \immediate, pdftex seg faults when the same image is
       % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
       \ifnum\pdftexversion < 14
         \immediate\pdfimage
       \else
         \immediate\pdfximage
       \fi
         \ifx\empty\imagewidth\else width \imagewidth \fi
         \ifx\empty\imageheight\else height \imageheight \fi
         \ifnum\pdftexversion<13
            #1.pdf%
          \else
            {#1.pdf}%
          \fi
       \ifnum\pdftexversion < 14 \else
         \pdfrefximage \pdflastximage
       \fi}
     \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
     \def\pdfmkpgn#1{#1}
     \let\linkcolor = \Blue  % was Cyan, but that seems light?
     \def\endlink{\Black\pdfendlink}
     % Adding outlines to PDF; macros for calculating structure of outlines
     % come from Petr Olsak
     \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
       \else \csname#1\endcsname \fi}
     \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
       \advance\tempnum by1
       \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
     \def\pdfmakeoutlines{{%
       \openin 1 \jobname.toc
       \ifeof 1\else\begingroup
         \closein 1
         \indexnofonts
         \def\tt{}
         \let\_ = \normalunderscore
         % Thanh's hack / proper braces in bookmarks
         \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
         \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
         %
         \def\chapentry ##1##2##3{}
         \let\appendixentry = \chapentry
         \def\unnumbchapentry ##1##2{}
         \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
         \def\unnumbsecentry ##1##2##3{\advancenumber{chap##2}}
         \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
         \def\unnumbsubsecentry ##1##2##3##4{\advancenumber{sec##2.##3}}
         \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
         \def\unnumbsubsubsecentry ##1##2##3##4##5{\advancenumber{subsec##2.##3.##4}}
         \input \jobname.toc
         \def\chapentry ##1##2##3{%
           \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
         \let\appendixentry = \chapentry
         \def\unnumbchapentry ##1##2{%
           \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
         \def\secentry ##1##2##3##4{%
           \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
         \def\unnumbsecentry ##1##2##3{%
           \pdfoutline goto name{\pdfmkpgn{##3}}{##1}}
         \def\subsecentry ##1##2##3##4##5{%
           \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
         \def\unnumbsubsecentry ##1##2##3##4{%
           \pdfoutline goto name{\pdfmkpgn{##4}}{##1}}
         \def\subsubsecentry ##1##2##3##4##5##6{%
           \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
         \def\unnumbsubsubsecentry ##1##2##3##4##5{%
           \pdfoutline goto name{\pdfmkpgn{##5}}{##1}}
         \input \jobname.toc
       \endgroup\fi
     }}
     \def\makelinks #1,{%
       \def\params{#1}\def\E{END}%
       \ifx\params\E
         \let\nextmakelinks=\relax
       \else
         \let\nextmakelinks=\makelinks
         \ifnum\lnkcount>0,\fi
         \picknum{#1}%
         \startlink attr{/Border [0 0 0]}
           goto name{\pdfmkpgn{\the\pgn}}%
         \linkcolor #1%
         \advance\lnkcount by 1%
         \endlink
       \fi
       \nextmakelinks
     }
     \def\picknum#1{\expandafter\pn#1}
     \def\pn#1{%
       \def\p{#1}%
       \ifx\p\lbrace
         \let\nextpn=\ppn
       \else
         \let\nextpn=\ppnn
         \def\first{#1}
       \fi
       \nextpn
     }
     \def\ppn#1{\pgn=#1\gobble}
     \def\ppnn{\pgn=\first}
     \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
     \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
     \def\skipspaces#1{\def\PP{#1}\def\D{|}%
       \ifx\PP\D\let\nextsp\relax
       \else\let\nextsp\skipspaces
         \ifx\p\space\else\addtokens{\filename}{\PP}%
           \advance\filenamelength by 1
         \fi
       \fi
       \nextsp}
     \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
     \ifnum\pdftexversion < 14
       \let \startlink \pdfannotlink
     \else
       \let \startlink \pdfstartlink
     \fi
     \def\pdfurl#1{%
       \begingroup
         \normalturnoffactive\def\@{@}%
         \let\value=\expandablevalue
         \leavevmode\Red
         \startlink attr{/Border [0 0 0]}%
           user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
           % #1
       \endgroup}
     \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
     \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
     \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
     \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
     \def\maketoks{%
       \expandafter\poptoks\the\toksA|ENDTOKS|
       \ifx\first0\adn0
       \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
       \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
       \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
       \else
         \ifnum0=\countA\else\makelink\fi
         \ifx\first.\let\next=\done\else
           \let\next=\maketoks
           \addtokens{\toksB}{\the\toksD}
           \ifx\first,\addtokens{\toksB}{\space}\fi
         \fi
       \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
       \next}
     \def\makelink{\addtokens{\toksB}%
       {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
     \def\pdflink#1{%
       \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
       \linkcolor #1\endlink}
     \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
   \fi % \ifx\pdfoutput
   
   
 \message{fonts,}  \message{fonts,}
 % Font-change commands.  % Font-change commands.
   
Line 854  where each line of input produces a line of output.}
Line 1118  where each line of input produces a line of output.}
 % We don't need math for this one.  % We don't need math for this one.
 \def\ttsl{\tenttsl}  \def\ttsl{\tenttsl}
   
 % Use Computer Modern fonts at \magstephalf (11pt).  % Default leading.
 \newcount\mainmagstep  \newdimen\textleading  \textleading = 13.2pt
 \mainmagstep=\magstephalf  
   
   % Set the baselineskip to #1, and the lineskip and strut size
   % correspondingly.  There is no deep meaning behind these magic numbers
   % used as factors; they just match (closely enough) what Knuth defined.
   %
   \def\lineskipfactor{.08333}
   \def\strutheightpercent{.70833}
   \def\strutdepthpercent {.29167}
   %
   \def\setleading#1{%
     \normalbaselineskip = #1\relax
     \normallineskip = \lineskipfactor\normalbaselineskip
     \normalbaselines
     \setbox\strutbox =\hbox{%
       \vrule width0pt height\strutheightpercent\baselineskip
                       depth \strutdepthpercent \baselineskip
     }%
   }
   
 % Set the font macro #1 to the font named #2, adding on the  % Set the font macro #1 to the font named #2, adding on the
 % specified font prefix (normally `cm').  % specified font prefix (normally `cm').
 % #3 is the font's design size, #4 is a scale factor  % #3 is the font's design size, #4 is a scale factor
Line 886  where each line of input produces a line of output.}
Line 1167  where each line of input produces a line of output.}
 \def\scshape{csc}  \def\scshape{csc}
 \def\scbshape{csc}  \def\scbshape{csc}
   
   \newcount\mainmagstep
 \ifx\bigger\relax  \ifx\bigger\relax
 \let\mainmagstep=\magstep1    % not really supported.
 \setfont\textrm\rmshape{12}{1000}    \let\mainmagstep=\magstep1
 \setfont\texttt\ttshape{12}{1000}    \setfont\textrm\rmshape{12}{1000}
     \setfont\texttt\ttshape{12}{1000}
 \else  \else
 \setfont\textrm\rmshape{10}{\mainmagstep}    \mainmagstep=\magstephalf
 \setfont\texttt\ttshape{10}{\mainmagstep}    \setfont\textrm\rmshape{10}{\mainmagstep}
     \setfont\texttt\ttshape{10}{\mainmagstep}
 \fi  \fi
 % Instead of cmb10, you many want to use cmbx10.  % Instead of cmb10, you many want to use cmbx10.
 % cmbx10 is a prettier font on its own, but cmb10  % cmbx10 is a prettier font on its own, but cmb10
Line 911  where each line of input produces a line of output.}
Line 1195  where each line of input produces a line of output.}
 \setfont\deftt\ttshape{10}{\magstep1}  \setfont\deftt\ttshape{10}{\magstep1}
 \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}  \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
   
 % Fonts for indices and small examples (9pt).  % Fonts for indices, footnotes, small examples (9pt).
 % We actually use the slanted font rather than the italic,  \setfont\smallrm\rmshape{9}{1000}
 % because texinfo normally uses the slanted fonts for that.  \setfont\smalltt\ttshape{9}{1000}
 % Do not make many font distinctions in general in the index, since they  \setfont\smallbf\bfshape{10}{900}
 % aren't very useful.  \setfont\smallit\itshape{9}{1000}
 \setfont\ninett\ttshape{9}{1000}  \setfont\smallsl\slshape{9}{1000}
 \setfont\ninettsl\ttslshape{10}{900}  \setfont\smallsf\sfshape{9}{1000}
 \setfont\indrm\rmshape{9}{1000}  \setfont\smallsc\scshape{10}{900}
 \setfont\indit\itshape{9}{1000}  \setfont\smallttsl\ttslshape{10}{900}
 \setfont\indsl\slshape{9}{1000}  \font\smalli=cmmi9
 \let\indtt=\ninett  \font\smallsy=cmsy9
 \let\indttsl=\ninettsl  
 \let\indsf=\indrm  
 \let\indbf=\indrm  
 \setfont\indsc\scshape{10}{900}  
 \font\indi=cmmi9  
 \font\indsy=cmsy9  
   
   % Fonts for small examples (8pt).
   \setfont\smallerrm\rmshape{8}{1000}
   \setfont\smallertt\ttshape{8}{1000}
   \setfont\smallerbf\bfshape{10}{800}
   \setfont\smallerit\itshape{8}{1000}
   \setfont\smallersl\slshape{8}{1000}
   \setfont\smallersf\sfshape{8}{1000}
   \setfont\smallersc\scshape{10}{800}
   \setfont\smallerttsl\ttslshape{10}{800}
   \font\smalleri=cmmi8
   \font\smallersy=cmsy8
   
 % Fonts for title page:  % Fonts for title page:
 \setfont\titlerm\rmbshape{12}{\magstep3}  \setfont\titlerm\rmbshape{12}{\magstep3}
 \setfont\titleit\itbshape{10}{\magstep4}  \setfont\titleit\itbshape{10}{\magstep4}
Line 966  where each line of input produces a line of output.}
Line 1256  where each line of input produces a line of output.}
 \font\seci=cmmi12 scaled \magstep1  \font\seci=cmmi12 scaled \magstep1
 \font\secsy=cmsy10 scaled \magstep2  \font\secsy=cmsy10 scaled \magstep2
   
 % \setfont\ssecrm\bxshape{10}{\magstep1}    % This size an font looked bad.  
 % \setfont\ssecit\itshape{10}{\magstep1}    % The letters were too crowded.  
 % \setfont\ssecsl\slshape{10}{\magstep1}  
 % \setfont\ssectt\ttshape{10}{\magstep1}  
 % \setfont\ssecsf\sfshape{10}{\magstep1}  
   
 %\setfont\ssecrm\bfshape{10}{1315}      % Note the use of cmb rather than cmbx.  
 %\setfont\ssecit\itshape{10}{1315}      % Also, the size is a little larger than  
 %\setfont\ssecsl\slshape{10}{1315}      % being scaled magstep1.  
 %\setfont\ssectt\ttshape{10}{1315}  
 %\setfont\ssecsf\sfshape{10}{1315}  
   
 %\let\ssecbf=\ssecrm  
   
 % Subsection fonts (13.15pt).  % Subsection fonts (13.15pt).
 \setfont\ssecrm\rmbshape{12}{\magstephalf}  \setfont\ssecrm\rmbshape{12}{\magstephalf}
 \setfont\ssecit\itbshape{10}{1315}  \setfont\ssecit\itbshape{10}{1315}
Line 996  where each line of input produces a line of output.}
Line 1272  where each line of input produces a line of output.}
   
 % In order for the font changes to affect most math symbols and letters,  % In order for the font changes to affect most math symbols and letters,
 % we have to define the \textfont of the standard families.  Since  % we have to define the \textfont of the standard families.  Since
 % texinfo doesn't allow for producing subscripts and superscripts, we  % texinfo doesn't allow for producing subscripts and superscripts except
 % don't bother to reset \scriptfont and \scriptscriptfont (which would  % in the main text, we don't bother to reset \scriptfont and
 % also require loading a lot more fonts).  % \scriptscriptfont (which would also require loading a lot more fonts).
 %  %
 \def\resetmathfonts{%  \def\resetmathfonts{%
   \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy    \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
   \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf    \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
   \textfont\ttfam = \tentt \textfont\sffam = \tensf    \textfont\ttfam=\tentt \textfont\sffam=\tensf
 }  }
   
   
 % The font-changing commands redefine the meanings of \tenSTYLE, instead  % The font-changing commands redefine the meanings of \tenSTYLE, instead
 % of just \STYLE.  We do this so that font changes will continue to work  % of just \STYLE.  We do this so that font changes will continue to work
 % in math mode, where it is the current \fam that is relevant in most  % in math mode, where it is the current \fam that is relevant in most
Line 1017  where each line of input produces a line of output.}
Line 1292  where each line of input produces a line of output.}
   \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl    \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
   \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc    \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
   \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl    \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
   \resetmathfonts}    \resetmathfonts \setleading{\textleading}}
 \def\titlefonts{%  \def\titlefonts{%
   \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl    \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
   \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc    \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
Line 1041  where each line of input produces a line of output.}
Line 1316  where each line of input produces a line of output.}
   \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl    \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
   \resetmathfonts \setleading{15pt}}    \resetmathfonts \setleading{15pt}}
 \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?  \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
 \def\indexfonts{%  \def\smallfonts{%
   \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl    \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
   \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc    \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
   \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl    \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
   \resetmathfonts \setleading{12pt}}    \let\tenttsl=\smallttsl
     \resetmathfonts \setleading{10.5pt}}
   \def\smallerfonts{%
     \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
     \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
     \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
     \let\tenttsl=\smallerttsl
     \resetmathfonts \setleading{9.5pt}}
   \let\smallexamplefonts = \smallerfonts
   
 % Set up the default fonts, so we can use them for creating boxes.  % Set up the default fonts, so we can use them for creating boxes.
 %  %
Line 1094  where each line of input produces a line of output.}
Line 1377  where each line of input produces a line of output.}
 }  }
 \let\ttfont=\t  \let\ttfont=\t
 \def\samp#1{`\tclose{#1}'\null}  \def\samp#1{`\tclose{#1}'\null}
 \setfont\smallrm\rmshape{8}{1000}  \setfont\keyrm\rmshape{8}{1000}
 \font\smallsy=cmsy9  \font\keysy=cmsy9
 \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%  \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
   \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%    \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
     \vbox{\hrule\kern-0.4pt      \vbox{\hrule\kern-0.4pt
      \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%       \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
Line 1159  where each line of input produces a line of output.}
Line 1442  where each line of input produces a line of output.}
   
 \def\realdash{-}  \def\realdash{-}
 \def\codedash{-\discretionary{}{}{}}  \def\codedash{-\discretionary{}{}{}}
 \def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}  \def\codeunder{%
     % this is all so @math{@code{var_name}+1} can work.  In math mode, _
     % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
     % will therefore expand the active definition of _, which is us
     % (inside @code that is), therefore an endless loop.
     \ifusingtt{\ifmmode
                  \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
                \else\normalunderscore \fi
                \discretionary{}{}{}}%
               {\_}%
   }
 \def\codex #1{\tclose{#1}\endgroup}  \def\codex #1{\tclose{#1}\endgroup}
   
 %\let\exp=\tclose  %Was temporary  
   
 % @kbd is like @code, except that if the argument is just one @key command,  % @kbd is like @code, except that if the argument is just one @key command,
 % then @kbd has no effect.  % then @kbd has no effect.
   
Line 1207  where each line of input produces a line of output.}
Line 1498  where each line of input produces a line of output.}
 % a hypertex \special here.  % a hypertex \special here.
 %  %
 \def\uref#1{\douref #1,,,\finish}  \def\uref#1{\douref #1,,,\finish}
 \def\douref#1,#2,#3,#4\finish{%  \def\douref#1,#2,#3,#4\finish{\begingroup
     \unsepspaces
     \pdfurl{#1}%
   \setbox0 = \hbox{\ignorespaces #3}%    \setbox0 = \hbox{\ignorespaces #3}%
   \ifdim\wd0 > 0pt    \ifdim\wd0 > 0pt
     \unhbox0 % third arg given, show only that      \unhbox0 % third arg given, show only that
   \else    \else
     \setbox0 = \hbox{\ignorespaces #2}%      \setbox0 = \hbox{\ignorespaces #2}%
     \ifdim\wd0 > 0pt      \ifdim\wd0 > 0pt
       \unhbox0\ (\code{#1})% second arg given, show both it and url        \ifpdf
           \unhbox0             % PDF: 2nd arg given, show only it
         \else
           \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
         \fi
     \else      \else
       \code{#1}% only url given, so show it        \code{#1}% only url given, so show it
     \fi      \fi
   \fi    \fi
 }    \endlink
   \endgroup}
   
 % rms does not like the angle brackets --karl, 17may97.  % rms does not like angle brackets --karl, 17may97.
 % So now @email is just like @uref.  % So now @email is just like @uref, unless we are pdf.
   %
 %\def\email#1{\angleleft{\tt #1}\angleright}  %\def\email#1{\angleleft{\tt #1}\angleright}
 \let\email=\uref  \ifpdf
     \def\email#1{\doemail#1,,\finish}
     \def\doemail#1,#2,#3\finish{\begingroup
       \unsepspaces
       \pdfurl{mailto:#1}%
       \setbox0 = \hbox{\ignorespaces #2}%
       \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
       \endlink
     \endgroup}
   \else
     \let\email=\uref
   \fi
   
 % Check if we are currently using a typewriter font.  Since all the  % Check if we are currently using a typewriter font.  Since all the
 % Computer Modern typewriter fonts have zero interword stretch (and  % Computer Modern typewriter fonts have zero interword stretch (and
Line 1329  where each line of input produces a line of output.}
Line 1639  where each line of input produces a line of output.}
    \oldpage     \oldpage
    \endgroup     \endgroup
    %     %
      % Need this before the \...aftertitlepage checks so that if they are
      % in effect the toc pages will come out with page numbers.
      \HEADINGSon
      %
    % If they want short, they certainly want long too.     % If they want short, they certainly want long too.
    \ifsetshortcontentsaftertitlepage     \ifsetshortcontentsaftertitlepage
      \shortcontents       \shortcontents
Line 1342  where each line of input produces a line of output.}
Line 1656  where each line of input produces a line of output.}
      \global\let\contents = \relax       \global\let\contents = \relax
      \global\let\shortcontents = \relax       \global\let\shortcontents = \relax
    \fi     \fi
    %  
    \HEADINGSon  
 }  }
   
 \def\finishtitlepage{%  \def\finishtitlepage{%
Line 1476  where each line of input produces a line of output.}
Line 1788  where each line of input produces a line of output.}
 }  }
   
 % Subroutines used in generating headings  % Subroutines used in generating headings
 % Produces Day Month Year style of output.  % This produces Day Month Year style of output.
   % Only define if not already defined, in case a txi-??.tex file has set
   % up a different format (e.g., txi-cs.tex does this).
   \ifx\today\undefined
 \def\today{%  \def\today{%
   \number\day\space    \number\day\space
   \ifcase\month    \ifcase\month
Line 1485  where each line of input produces a line of output.}
Line 1800  where each line of input produces a line of output.}
   \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec    \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
   \fi    \fi
   \space\number\year}    \space\number\year}
   \fi
   
 % @settitle line...  specifies the title of the document, for headings.  % @settitle line...  specifies the title of the document, for headings.
 % It generates no output of its own.  % It generates no output of its own.
Line 1908  where each line of input produces a line of output.}
Line 2224  where each line of input produces a line of output.}
   \go    \go
 }  }
   
 % multitable syntax  % This used to have \hskip1sp.  But then the space in a template line is
 \def\tab{&\hskip1sp\relax} % 2/2/96  % not enough.  That is bad.  So let's go back to just & until we
                            % tiny skip here makes sure this column space is  % encounter the problem it was intended to solve again.
                            % maintained, even if it is never used.  % --karl, nathan@acm.org, 20apr99.
   \def\tab{&}
   
 % @multitable ... @end multitable definitions:  % @multitable ... @end multitable definitions:
 %  %
Line 1992  where each line of input produces a line of output.}
Line 2309  where each line of input produces a line of output.}
 % If so, do nothing. If not, give it an appropriate dimension based on  % If so, do nothing. If not, give it an appropriate dimension based on
 % current baselineskip.  % current baselineskip.
 \ifdim\multitablelinespace=0pt  \ifdim\multitablelinespace=0pt
   \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
   \global\advance\multitablelinespace by-\ht0
 %% strut to put in table in case some entry doesn't have descenders,  %% strut to put in table in case some entry doesn't have descenders,
 %% to keep lines equally spaced  %% to keep lines equally spaced
 \let\multistrut = \strut  \let\multistrut = \strut
 %% Test to see if parskip is larger than space between lines of  
 %% table. If not, do nothing.  
 %%        If so, set to same dimension as multitablelinespace.  
 \else  \else
   %% FIXME: what is \box0 supposed to be?
 \gdef\multistrut{\vrule height\multitablelinespace depth\dp0  \gdef\multistrut{\vrule height\multitablelinespace depth\dp0
 width0pt\relax} \fi  width0pt\relax} \fi
   %% Test to see if parskip is larger than space between lines of
   %% table. If not, do nothing.
   %%        If so, set to same dimension as multitablelinespace.
 \ifdim\multitableparskip>\multitablelinespace  \ifdim\multitableparskip>\multitablelinespace
 \global\multitableparskip=\multitablelinespace  \global\multitableparskip=\multitablelinespace
 \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller  \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
Line 2063  width0pt\relax} \fi
Line 2383  width0pt\relax} \fi
   \let\deftypefn = \relax    \let\deftypefn = \relax
   \let\deftypefun = \relax    \let\deftypefun = \relax
   \let\deftypeivar = \relax    \let\deftypeivar = \relax
     \let\deftypeop = \relax
   \let\deftypevar = \relax    \let\deftypevar = \relax
   \let\deftypevr = \relax    \let\deftypevr = \relax
   \let\defun = \relax    \let\defun = \relax
Line 2092  width0pt\relax} \fi
Line 2413  width0pt\relax} \fi
   \let\item = \relax    \let\item = \relax
 }  }
   
 % Ignore @ignore ... @end ignore.  % Ignore @ignore, @ifhtml, @ifinfo, @ifplaintext, @ifnottex, @html, @menu,
   % @direntry, and @documentdescription.
 %  %
 \def\ignore{\doignore{ignore}}  \def\ignore{\doignore{ignore}}
   
 % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.  
 %  
 \def\ifinfo{\doignore{ifinfo}}  
 \def\ifhtml{\doignore{ifhtml}}  \def\ifhtml{\doignore{ifhtml}}
   \def\ifinfo{\doignore{ifinfo}}
   \def\ifplaintext{\doignore{ifplaintext}}
 \def\ifnottex{\doignore{ifnottex}}  \def\ifnottex{\doignore{ifnottex}}
 \def\html{\doignore{html}}  \def\html{\doignore{html}}
 \def\menu{\doignore{menu}}  \def\menu{\doignore{menu}}
 \def\direntry{\doignore{direntry}}  \def\direntry{\doignore{direntry}}
   \def\documentdescription{\doignore{documentdescription}}
   \def\documentdescriptionword{documentdescription}
   
 % @dircategory CATEGORY  -- specify a category of the dir file  % @dircategory CATEGORY  -- specify a category of the dir file
 % which this file should belong to.  Ignore this in TeX.  % which this file should belong to.  Ignore this in TeX.
Line 2130  width0pt\relax} \fi
Line 2452  width0pt\relax} \fi
   % We must not have @c interpreted as a control sequence.    % We must not have @c interpreted as a control sequence.
   \catcode`\@ = 12    \catcode`\@ = 12
   %    %
   % Make the letter c a comment character so that the rest of the line    \def\ignoreword{#1}%
   % will be ignored. This way, the document can have (for example)    \ifx\ignoreword\documentdescriptionword
   %   @c @end ifinfo      % The c kludge breaks documentdescription, since
   % and the @end ifinfo will be properly ignored.      % `documentdescription' contains a `c'.  Means not everything will
   % (We've just changed @ to catcode 12.)      % be ignored inside @documentdescription, but oh well...
   \catcode`\c = 14    \else
       % Make the letter c a comment character so that the rest of the line
       % will be ignored. This way, the document can have (for example)
       %   @c @end ifinfo
       % and the @end ifinfo will be properly ignored.
       % (We've just changed @ to catcode 12.)
       \catcode`\c = 14
     \fi
   %    %
   % And now expand that command.    % And now expand the command defined above.
   \doignoretext    \doignoretext
 }  }
   
Line 2206  width0pt\relax} \fi
Line 2535  width0pt\relax} \fi
     % stuff compared to the main input.      % stuff compared to the main input.
     %      %
     \nullfont      \nullfont
     \let\tenrm = \nullfont  \let\tenit = \nullfont  \let\tensl = \nullfont      \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
     \let\tenbf = \nullfont  \let\tentt = \nullfont  \let\smallcaps = \nullfont      \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
     \let\tensf = \nullfont      \let\tensf=\nullfont
     % Similarly for index fonts (mostly for their use in      % Similarly for index fonts.
     % smallexample)      \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
     \let\indrm = \nullfont  \let\indit = \nullfont  \let\indsl = \nullfont      \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
     \let\indbf = \nullfont  \let\indtt = \nullfont  \let\indsc = \nullfont      \let\smallsf=\nullfont
     \let\indsf = \nullfont      % Similarly for smallexample fonts.
       \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
       \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
       \let\smallersf=\nullfont
     %      %
     % Don't complain when characters are missing from the fonts.      % Don't complain when characters are missing from the fonts.
     \tracinglostchars = 0      \tracinglostchars = 0
Line 2325  width0pt\relax} \fi
Line 2657  width0pt\relax} \fi
 \def\ifclearfail{\nestedignore{ifclear}}  \def\ifclearfail{\nestedignore{ifclear}}
 \defineunmatchedend{ifclear}  \defineunmatchedend{ifclear}
   
 % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text  % @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
 % following, through the first @end iftex (etc.).  Make `@end iftex'  % read the text following, through the first @end iftex (etc.).  Make
 % (etc.) valid only after an @iftex.  % `@end iftex' (etc.) valid only after an @iftex.
 %  %
 \def\iftex{\conditionalsucceed{iftex}}  \def\iftex{\conditionalsucceed{iftex}}
 \def\ifnothtml{\conditionalsucceed{ifnothtml}}  \def\ifnothtml{\conditionalsucceed{ifnothtml}}
 \def\ifnotinfo{\conditionalsucceed{ifnotinfo}}  \def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
   \def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
 \defineunmatchedend{iftex}  \defineunmatchedend{iftex}
 \defineunmatchedend{ifnothtml}  \defineunmatchedend{ifnothtml}
 \defineunmatchedend{ifnotinfo}  \defineunmatchedend{ifnotinfo}
   \defineunmatchedend{ifnotplaintext}
   
 % We can't just want to start a group at @iftex (for example) and end it  % We can't just want to start a group at @iftex (etc.) and end it at
 % at @end iftex, since then @set commands inside the conditional have no  % @end iftex, since then @set commands inside the conditional have no
 % effect (they'd get reverted at the end of the group).  So we must  % effect (they'd get reverted at the end of the group).  So we must
 % define \Eiftex to redefine itself to be its previous value.  (We can't  % define \Eiftex to redefine itself to be its previous value.  (We can't
 % just define it to fail again with an ``unmatched end'' error, since  % just define it to fail again with an ``unmatched end'' error, since
Line 2389  width0pt\relax} \fi
Line 2723  width0pt\relax} \fi
 }  }
   
 % @defindex foo  ==  \newindex{foo}  % @defindex foo  ==  \newindex{foo}
   %
 \def\defindex{\parsearg\newindex}  \def\defindex{\parsearg\newindex}
   
 % Define @defcodeindex, like @defindex except put all entries in @code.  % Define @defcodeindex, like @defindex except put all entries in @code.
   %
   \def\defcodeindex{\parsearg\newcodeindex}
   %
 \def\newcodeindex#1{%  \def\newcodeindex#1{%
   \iflinks    \iflinks
     \expandafter\newwrite \csname#1indfile\endcsname      \expandafter\newwrite \csname#1indfile\endcsname
     \openout \csname#1indfile\endcsname \jobname.#1      \openout \csname#1indfile\endcsname \jobname.#1
   \fi    \fi
   \expandafter\xdef\csname#1index\endcsname{%    \expandafter\xdef\csname#1index\endcsname{%
     \noexpand\docodeindex{#1}}      \noexpand\docodeindex{#1}}%
 }  }
   
 \def\defcodeindex{\parsearg\newcodeindex}  
   
 % @synindex foo bar    makes index foo feed into index bar.  % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.  % Do this instead of @defindex foo if you don't want it as a separate index.
 % The \closeout helps reduce unnecessary open files; the limit on the  %
 % Acorn RISC OS is a mere 16 files.  
 \def\synindex#1 #2 {%  
   \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname  
   \expandafter\closeout\csname#1indfile\endcsname  
   \expandafter\let\csname#1indfile\endcsname=\synindexfoo  
   \expandafter\xdef\csname#1index\endcsname{% define \xxxindex  
     \noexpand\doindex{#2}}%  
 }  
   
 % @syncodeindex foo bar   similar, but put all entries made for index foo  % @syncodeindex foo bar   similar, but put all entries made for index foo
 % inside @code.  % inside @code.
 \def\syncodeindex#1 #2 {%  %
   \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname  \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
   \expandafter\closeout\csname#1indfile\endcsname  \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
   \expandafter\let\csname#1indfile\endcsname=\synindexfoo  
   \expandafter\xdef\csname#1index\endcsname{% define \xxxindex  % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
     \noexpand\docodeindex{#2}}%  % #3 the target index (bar).
   \def\dosynindex#1#2#3{%
     % Only do \closeout if we haven't already done it, else we'll end up
     % closing the target index.
     \expandafter \ifx\csname donesynindex#2\endcsname \undefined
       % The \closeout helps reduce unnecessary open files; the limit on the
       % Acorn RISC OS is a mere 16 files.
       \expandafter\closeout\csname#2indfile\endcsname
       \expandafter\let\csname\donesynindex#2\endcsname = 1
     \fi
     % redefine \fooindfile:
     \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
     \expandafter\let\csname#2indfile\endcsname=\temp
     % redefine \fooindex:
     \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
 }  }
   
 % Define \doindex, the driver for all \fooindex macros.  % Define \doindex, the driver for all \fooindex macros.
Line 2444  width0pt\relax} \fi
Line 2784  width0pt\relax} \fi
 \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}  \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
 \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}  \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
   
   % Take care of texinfo commands likely to appear in an index entry.
   % (Must be a way to avoid doing expansion at all, and thus not have to
   % laboriously list every single command here.)
   %
 \def\indexdummies{%  \def\indexdummies{%
 \def\ { }%  \def\ { }%
   \def\@{@}% change to @@ when we switch to @ as escape char in aux files.
   % 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 _}}%
   \normalturnoffactive
   %
 % Take care of the plain tex accent commands.  % Take care of the plain tex accent commands.
   \def\,##1{\realbackslash ,{##1}}%
 \def\"{\realbackslash "}%  \def\"{\realbackslash "}%
 \def\`{\realbackslash `}%  \def\`{\realbackslash `}%
 \def\'{\realbackslash '}%  \def\'{\realbackslash '}%
Line 2459  width0pt\relax} \fi
Line 2813  width0pt\relax} \fi
 \def\u{\realbackslash u}%  \def\u{\realbackslash u}%
 \def\v{\realbackslash v}%  \def\v{\realbackslash v}%
 \def\H{\realbackslash H}%  \def\H{\realbackslash H}%
   \def\dotless##1{\realbackslash dotless {##1}}%
 % Take care of the plain tex special European modified letters.  % Take care of the plain tex special European modified letters.
 \def\oe{\realbackslash oe}%  
 \def\ae{\realbackslash ae}%  
 \def\aa{\realbackslash aa}%  
 \def\OE{\realbackslash OE}%  
 \def\AE{\realbackslash AE}%  
 \def\AA{\realbackslash AA}%  \def\AA{\realbackslash AA}%
 \def\o{\realbackslash o}%  \def\AE{\realbackslash AE}%
   \def\L{\realbackslash L}%
   \def\OE{\realbackslash OE}%
 \def\O{\realbackslash O}%  \def\O{\realbackslash O}%
   \def\aa{\realbackslash aa}%
   \def\ae{\realbackslash ae}%
 \def\l{\realbackslash l}%  \def\l{\realbackslash l}%
 \def\L{\realbackslash L}%  \def\oe{\realbackslash oe}%
   \def\o{\realbackslash o}%
 \def\ss{\realbackslash ss}%  \def\ss{\realbackslash ss}%
 % Take care of texinfo commands likely to appear in an index entry.  %
 % (Must be a way to avoid doing expansion at all, and thus not have to  % Although these internals commands shouldn't show up, sometimes they do.
 % 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.  
 % 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 }%  \def\bf{\realbackslash bf }%
   \def\gtr{\realbackslash gtr}%
   \def\hat{\realbackslash hat}%
   \def\less{\realbackslash less}%
 %\def\rm{\realbackslash rm }%  %\def\rm{\realbackslash rm }%
 \def\sl{\realbackslash sl }%  
 \def\sf{\realbackslash sf}%  \def\sf{\realbackslash sf}%
   \def\sl{\realbackslash sl }%
   \def\tclose##1{\realbackslash tclose {##1}}%
 \def\tt{\realbackslash tt}%  \def\tt{\realbackslash tt}%
 \def\gtr{\realbackslash gtr}%  %
 \def\less{\realbackslash less}%  \def\b##1{\realbackslash b {##1}}%
 \def\hat{\realbackslash hat}%  \def\i##1{\realbackslash i {##1}}%
   \def\sc##1{\realbackslash sc {##1}}%
   \def\t##1{\realbackslash t {##1}}%
   \def\r##1{\realbackslash r {##1}}%
   %
 \def\TeX{\realbackslash TeX}%  \def\TeX{\realbackslash TeX}%
 \def\dots{\realbackslash dots }%  \def\acronym##1{\realbackslash acronym {##1}}%
 \def\result{\realbackslash result}%  \def\cite##1{\realbackslash cite {##1}}%
 \def\equiv{\realbackslash equiv}%  
 \def\expansion{\realbackslash expansion}%  
 \def\print{\realbackslash print}%  
 \def\error{\realbackslash error}%  
 \def\point{\realbackslash point}%  
 \def\copyright{\realbackslash copyright}%  
 \def\tclose##1{\realbackslash tclose {##1}}%  
 \def\code##1{\realbackslash code {##1}}%  \def\code##1{\realbackslash code {##1}}%
 \def\uref##1{\realbackslash uref {##1}}%  
 \def\url##1{\realbackslash url {##1}}%  
 \def\env##1{\realbackslash env {##1}}%  
 \def\command##1{\realbackslash command {##1}}%  \def\command##1{\realbackslash command {##1}}%
   \def\dfn##1{\realbackslash dfn {##1}}%
   \def\dots{\realbackslash dots }%
   \def\emph##1{\realbackslash emph {##1}}%
   \def\env##1{\realbackslash env {##1}}%
   \def\file##1{\realbackslash file {##1}}%
   \def\kbd##1{\realbackslash kbd {##1}}%
   \def\key##1{\realbackslash key {##1}}%
   \def\math##1{\realbackslash math {##1}}%
 \def\option##1{\realbackslash option {##1}}%  \def\option##1{\realbackslash option {##1}}%
 \def\dotless##1{\realbackslash dotless {##1}}%  
 \def\samp##1{\realbackslash samp {##1}}%  \def\samp##1{\realbackslash samp {##1}}%
 \def\,##1{\realbackslash ,{##1}}%  \def\strong##1{\realbackslash strong {##1}}%
 \def\t##1{\realbackslash t {##1}}%  \def\uref##1{\realbackslash uref {##1}}%
 \def\r##1{\realbackslash r {##1}}%  \def\url##1{\realbackslash url {##1}}%
 \def\i##1{\realbackslash i {##1}}%  
 \def\b##1{\realbackslash b {##1}}%  
 \def\sc##1{\realbackslash sc {##1}}%  
 \def\cite##1{\realbackslash cite {##1}}%  
 \def\key##1{\realbackslash key {##1}}%  
 \def\file##1{\realbackslash file {##1}}%  
 \def\var##1{\realbackslash var {##1}}%  \def\var##1{\realbackslash var {##1}}%
 \def\kbd##1{\realbackslash kbd {##1}}%  \def\w{\realbackslash w }%
 \def\dfn##1{\realbackslash dfn {##1}}%  
 \def\emph##1{\realbackslash emph {##1}}%  
 \def\acronym##1{\realbackslash acronym {##1}}%  
 %  %
   % These math commands don't seem likely to be used in index entries.
   \def\copyright{\realbackslash copyright}%
   \def\equiv{\realbackslash equiv}%
   \def\error{\realbackslash error}%
   \def\expansion{\realbackslash expansion}%
   \def\point{\realbackslash point}%
   \def\print{\realbackslash print}%
   \def\result{\realbackslash result}%
   %
 % Handle some cases of @value -- where the variable name does not  % Handle some cases of @value -- where the variable name does not
 % contain - or _, and the value does not contain any  % contain - or _, and the value does not contain any
 % (non-fully-expandable) commands.  % (non-fully-expandable) commands.
Line 2535  width0pt\relax} \fi
Line 2886  width0pt\relax} \fi
   
 % If an index command is used in an @example environment, any spaces  % If an index command is used in an @example environment, any spaces
 % therein should become regular spaces in the raw index file, not the  % therein should become regular spaces in the raw index file, not the
 % expansion of \tie (\\leavevmode \penalty \@M \ ).  % expansion of \tie (\leavevmode \penalty \@M \ ).
 {\obeyspaces  {\obeyspaces
  \gdef\unsepspaces{\obeyspaces\let =\space}}   \gdef\unsepspaces{\obeyspaces\let =\space}}
   
Line 2546  width0pt\relax} \fi
Line 2897  width0pt\relax} \fi
 \def\indexdummydots{...}  \def\indexdummydots{...}
   
 \def\indexnofonts{%  \def\indexnofonts{%
 % Just ignore accents.  \def\@{@}%
   % how to handle braces?
   \def\_{\normalunderscore}%
   %
 \let\,=\indexdummyfont  \let\,=\indexdummyfont
 \let\"=\indexdummyfont  \let\"=\indexdummyfont
 \let\`=\indexdummyfont  \let\`=\indexdummyfont
Line 2562  width0pt\relax} \fi
Line 2916  width0pt\relax} \fi
 \let\H=\indexdummyfont  \let\H=\indexdummyfont
 \let\dotless=\indexdummyfont  \let\dotless=\indexdummyfont
 % Take care of the plain tex special European modified letters.  % Take care of the plain tex special European modified letters.
 \def\oe{oe}%  
 \def\ae{ae}%  
 \def\aa{aa}%  
 \def\OE{OE}%  
 \def\AE{AE}%  
 \def\AA{AA}%  \def\AA{AA}%
 \def\o{o}%  \def\AE{AE}%
   \def\L{L}%
   \def\OE{OE}%
 \def\O{O}%  \def\O{O}%
   \def\aa{aa}%
   \def\ae{ae}%
 \def\l{l}%  \def\l{l}%
 \def\L{L}%  \def\oe{oe}%
   \def\o{o}%
 \def\ss{ss}%  \def\ss{ss}%
 \let\w=\indexdummyfont  %
 \let\t=\indexdummyfont  % Don't no-op \tt, since it isn't a user-level command
 \let\r=\indexdummyfont  % and is used in the definitions of the active chars like <, >, |, etc.
 \let\i=\indexdummyfont  % Likewise with the other plain tex font commands.
   %\let\tt=\indexdummyfont
   %
 \let\b=\indexdummyfont  \let\b=\indexdummyfont
 \let\emph=\indexdummyfont  \let\i=\indexdummyfont
 \let\strong=\indexdummyfont  \let\r=\indexdummyfont
 \let\cite=\indexdummyfont  
 \let\sc=\indexdummyfont  \let\sc=\indexdummyfont
 %Don't no-op \tt, since it isn't a user-level command  \let\t=\indexdummyfont
 % and is used in the definitions of the active chars like <, >, |...  %
 %\let\tt=\indexdummyfont  \let\TeX=\indexdummytex
 \let\tclose=\indexdummyfont  \let\acronym=\indexdummyfont
   \let\cite=\indexdummyfont
 \let\code=\indexdummyfont  \let\code=\indexdummyfont
 \let\url=\indexdummyfont  
 \let\uref=\indexdummyfont  
 \let\env=\indexdummyfont  
 \let\command=\indexdummyfont  \let\command=\indexdummyfont
 \let\option=\indexdummyfont  \let\dfn=\indexdummyfont
   \let\dots=\indexdummydots
   \let\emph=\indexdummyfont
   \let\env=\indexdummyfont
 \let\file=\indexdummyfont  \let\file=\indexdummyfont
 \let\samp=\indexdummyfont  
 \let\kbd=\indexdummyfont  \let\kbd=\indexdummyfont
 \let\key=\indexdummyfont  \let\key=\indexdummyfont
   \let\math=\indexdummyfont
   \let\option=\indexdummyfont
   \let\samp=\indexdummyfont
   \let\strong=\indexdummyfont
   \let\uref=\indexdummyfont
   \let\url=\indexdummyfont
 \let\var=\indexdummyfont  \let\var=\indexdummyfont
 \let\TeX=\indexdummytex  \let\w=\indexdummyfont
 \let\dots=\indexdummydots  
 \def\@{@}%  
 }  }
   
 % To define \realbackslash, we must make \ not be an escape.  % To define \realbackslash, we must make \ not be an escape.
Line 2655  width0pt\relax} \fi
Line 3014  width0pt\relax} \fi
         % Now the real index entry with the fonts.          % Now the real index entry with the fonts.
         \toks0 = {#2}%          \toks0 = {#2}%
         %          %
         % If third (subentry) arg is present, add it to the index          % If the third (subentry) arg is present, add it to the index
         % string.  And include a space.          % line to write.
         \ifx\thirdarg\emptymacro \else          \ifx\thirdarg\emptymacro \else
           \toks0 = \expandafter{\the\toks0 \space #3}%            \toks0 = \expandafter{\the\toks0{#3}}%
         \fi          \fi
         %          %
         % Set up the complete index entry, with both the sort key          % Set up the complete index entry, with both the sort key and
         % and the original text, including any font commands.  We write          % the original text, including any font commands.  We write
         % three arguments to \entry to the .?? file, texindex reduces to          % three arguments to \entry to the .?? file (four in the
         % two when writing the .??s sorted result.          % subentry case), texindex reduces to two when writing the .??s
           % sorted result.
         \edef\temp{%          \edef\temp{%
           \write\csname#1indfile\endcsname{%            \write\csname#1indfile\endcsname{%
             \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%              \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
Line 2743  width0pt\relax} \fi
Line 3103  width0pt\relax} \fi
 \def\doprintindex#1{\begingroup  \def\doprintindex#1{\begingroup
   \dobreak \chapheadingskip{10000}%    \dobreak \chapheadingskip{10000}%
   %    %
   \indexfonts \rm    \smallfonts \rm
   \tolerance = 9500    \tolerance = 9500
   \indexbreaks    \indexbreaks
   %    %
Line 2870  width0pt\relax} \fi
Line 3230  width0pt\relax} \fi
     % The `\ ' here is removed by the implicit \unskip that TeX does as      % The `\ ' here is removed by the implicit \unskip that TeX does as
     % part of (the primitive) \par.  Without it, a spurious underfull      % part of (the primitive) \par.  Without it, a spurious underfull
     % \hbox ensues.      % \hbox ensues.
     \ #2% The page number ends the paragraph.      \ifpdf
         \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
       \else
         \ #2% The page number ends the paragraph.
       \fi
   \fi%    \fi%
   \par    \par
 \endgroup}  \endgroup}
Line 2882  width0pt\relax} \fi
Line 3246  width0pt\relax} \fi
 \def\primary #1{\line{#1\hfil}}  \def\primary #1{\line{#1\hfil}}
   
 \newskip\secondaryindent \secondaryindent=0.5cm  \newskip\secondaryindent \secondaryindent=0.5cm
   \def\secondary#1#2{{%
 \def\secondary #1#2{    \parfillskip=0in
 {\parfillskip=0in \parskip=0in    \parskip=0in
 \hangindent =1in \hangafter=1    \hangindent=1in
 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par    \hangafter=1
     \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
     \ifpdf
       \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
     \else
       #2
     \fi
     \par
 }}  }}
   
 % Define two-column mode, which we use to typeset indexes.  % Define two-column mode, which we use to typeset indexes.
Line 2946  width0pt\relax} \fi
Line 3317  width0pt\relax} \fi
   %    %
   % Double the \vsize as well.  (We don't need a separate register here,    % Double the \vsize as well.  (We don't need a separate register here,
   % since nobody clobbers \vsize.)    % since nobody clobbers \vsize.)
   \advance\vsize by -\ht\partialpage  
   \vsize = 2\vsize    \vsize = 2\vsize
 }  }
   
Line 2960  width0pt\relax} \fi
Line 3330  width0pt\relax} \fi
   % previous page.    % previous page.
   \dimen@ = \vsize    \dimen@ = \vsize
   \divide\dimen@ by 2    \divide\dimen@ by 2
     \advance\dimen@ by -\ht\partialpage
   %    %
   % box0 will be the left-hand column, box2 the right.    % box0 will be the left-hand column, box2 the right.
   \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@    \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
Line 2967  width0pt\relax} \fi
Line 3338  width0pt\relax} \fi
   \unvbox255    \unvbox255
   \penalty\outputpenalty    \penalty\outputpenalty
 }  }
   %
   % Re-output the contents of the output page -- any previous material,
   % followed by the two boxes we just split, in box0 and box2.
 \def\pagesofar{%  \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.  
   \unvbox\partialpage    \unvbox\partialpage
   %    %
   \hsize = \doublecolumnhsize    \hsize = \doublecolumnhsize
   \wd0=\hsize \wd2=\hsize    \wd0=\hsize \wd2=\hsize
   \hbox to\pagewidth{\box0\hfil\box2}%    \hbox to\pagewidth{\box0\hfil\box2}%
 }  }
   %
   % All done with double columns.
 \def\enddoublecolumns{%  \def\enddoublecolumns{%
   \output = {%    \output = {%
     % Split the last of the double-column material.  Leave it on the      % Split the last of the double-column material.  Leave it on the
Line 3000  width0pt\relax} \fi
Line 3374  width0pt\relax} \fi
   % \endgroup where \vsize got restored).    % \endgroup where \vsize got restored).
   \pagegoal = \vsize    \pagegoal = \vsize
 }  }
   %
   % Called at the end of the double column material.
 \def\balancecolumns{%  \def\balancecolumns{%
   % Called at the end of the double column material.  
   \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.    \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
   \dimen@ = \ht0    \dimen@ = \ht0
   \advance\dimen@ by \topskip    \advance\dimen@ by \topskip
Line 3029  width0pt\relax} \fi
Line 3404  width0pt\relax} \fi
   
   
 \message{sectioning,}  \message{sectioning,}
 % Define chapters, sections, etc.  % Chapters, sections, etc.
   
 \newcount\chapno  \newcount\chapno
 \newcount\secno        \secno=0  \newcount\secno        \secno=0
Line 3038  width0pt\relax} \fi
Line 3413  width0pt\relax} \fi
   
 % This counter is funny since it counts through charcodes of letters A, B, ...  % This counter is funny since it counts through charcodes of letters A, B, ...
 \newcount\appendixno  \appendixno = `\@  \newcount\appendixno  \appendixno = `\@
 \def\appendixletter{\char\appendixno}  % \def\appendixletter{\char\the\appendixno}
   % We do the following for the sake of pdftex, which needs the actual
   % letter in the expansion, not just typeset.
   \def\appendixletter{%
     \ifnum\appendixno=`A A%
     \else\ifnum\appendixno=`B B%
     \else\ifnum\appendixno=`C C%
     \else\ifnum\appendixno=`D D%
     \else\ifnum\appendixno=`E E%
     \else\ifnum\appendixno=`F F%
     \else\ifnum\appendixno=`G G%
     \else\ifnum\appendixno=`H H%
     \else\ifnum\appendixno=`I I%
     \else\ifnum\appendixno=`J J%
     \else\ifnum\appendixno=`K K%
     \else\ifnum\appendixno=`L L%
     \else\ifnum\appendixno=`M M%
     \else\ifnum\appendixno=`N N%
     \else\ifnum\appendixno=`O O%
     \else\ifnum\appendixno=`P P%
     \else\ifnum\appendixno=`Q Q%
     \else\ifnum\appendixno=`R R%
     \else\ifnum\appendixno=`S S%
     \else\ifnum\appendixno=`T T%
     \else\ifnum\appendixno=`U U%
     \else\ifnum\appendixno=`V V%
     \else\ifnum\appendixno=`W W%
     \else\ifnum\appendixno=`X X%
     \else\ifnum\appendixno=`Y Y%
     \else\ifnum\appendixno=`Z Z%
     % The \the is necessary, despite appearances, because \appendixletter is
     % expanded while writing the .toc file.  \char\appendixno is not
     % expandable, thus it is written literally, thus all appendixes come out
     % with the same letter (or @) in the toc without it.
     \else\char\the\appendixno
     \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
     \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
   
 % Each @chapter defines this as the name of the chapter.  % Each @chapter defines this as the name of the chapter.
 % page headings and footings can use it.  @section does likewise.  % page headings and footings can use it.  @section does likewise.
Line 3149  width0pt\relax} \fi
Line 3560  width0pt\relax} \fi
 \gdef\thischaptername{#1}%  \gdef\thischaptername{#1}%
 \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%  \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
 \toks0 = {#1}%  \toks0 = {#1}%
 \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%  \edef\temp{\noexpand\writetocentry{\realbackslash appendixentry{\the\toks0}%
                        {\putwordAppendix{} \appendixletter}}}%                         {\appendixletter}}}%
 \temp  \temp
 \appendixnoderef  \appendixnoderef
 \global\let\section = \appendixsec  \global\let\section = \appendixsec
Line 3227  width0pt\relax} \fi
Line 3638  width0pt\relax} \fi
 \def\unnumberedseczzz #1{%  \def\unnumberedseczzz #1{%
 \plainsecheading {#1}\gdef\thissection{#1}%  \plainsecheading {#1}\gdef\thissection{#1}%
 \toks0 = {#1}%  \toks0 = {#1}%
 \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry%
     {\the\toks0}{\the\chapno}}}%
 \temp  \temp
 \unnumbnoderef  \unnumbnoderef
 \nobreak  \nobreak
Line 3266  width0pt\relax} \fi
Line 3678  width0pt\relax} \fi
 \plainsubsecheading {#1}\gdef\thissection{#1}%  \plainsubsecheading {#1}\gdef\thissection{#1}%
 \toks0 = {#1}%  \toks0 = {#1}%
 \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
                                     {\the\toks0}}}%    {\the\toks0}{\the\chapno}{\the\secno}}}%
 \temp  \temp
 \unnumbnoderef  \unnumbnoderef
 \nobreak  \nobreak
Line 3307  width0pt\relax} \fi
Line 3719  width0pt\relax} \fi
 \plainsubsubsecheading {#1}\gdef\thissection{#1}%  \plainsubsubsecheading {#1}\gdef\thissection{#1}%
 \toks0 = {#1}%  \toks0 = {#1}%
 \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
                                     {\the\toks0}}}%    {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}}}%
 \temp  \temp
 \unnumbnoderef  \unnumbnoderef
 \nobreak  \nobreak
Line 3511  width0pt\relax} \fi
Line 3923  width0pt\relax} \fi
   
   
 \message{toc,}  \message{toc,}
   % Table of contents.
 \newwrite\tocfile  \newwrite\tocfile
   
 % Write an entry to the toc file, opening it if necessary.  % Write an entry to the toc file, opening it if necessary.
Line 3518  width0pt\relax} \fi
Line 3931  width0pt\relax} \fi
 % argument, which will end up as the last argument to the \...entry macro.  % 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  % 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.  % fixed time so that @contents can be put in the document anywhere.
 %  %
 \newif\iftocfileopened  \newif\iftocfileopened
 \def\writetocentry#1{%  \def\writetocentry#1{%
Line 3527  width0pt\relax} \fi
Line 3940  width0pt\relax} \fi
     \global\tocfileopenedtrue      \global\tocfileopenedtrue
   \fi    \fi
   \iflinks \write\tocfile{#1{\folio}}\fi    \iflinks \write\tocfile{#1{\folio}}\fi
     %
     % Tell \shipout to create a page destination if we're doing pdf, which
     % will be the target of the links in the table of contents.  We can't
     % just do it on every page because the title pages are numbered 1 and
     % 2 (the page numbers aren't printed), and so are the first two pages
     % of the document.  Thus, we'd have two destinations named `1', and
     % two named `2'.
     \ifpdf \pdfmakepagedesttrue \fi
 }  }
   
 \newskip\contentsrightmargin \contentsrightmargin=1in  \newskip\contentsrightmargin \contentsrightmargin=1in
Line 3571  width0pt\relax} \fi
Line 3992  width0pt\relax} \fi
      \fi       \fi
      \vfill \eject       \vfill \eject
      \contentsalignmacro % in case @setchapternewpage odd is in effect       \contentsalignmacro % in case @setchapternewpage odd is in effect
        \pdfmakeoutlines
    \endgroup     \endgroup
    \lastnegativepageno = \pageno     \lastnegativepageno = \pageno
    \pageno = \savepageno     \pageno = \savepageno
Line 3581  width0pt\relax} \fi
Line 4003  width0pt\relax} \fi
    \startcontents{\putwordShortTOC}%     \startcontents{\putwordShortTOC}%
       %        %
       \let\chapentry = \shortchapentry        \let\chapentry = \shortchapentry
         \let\appendixentry = \shortappendixentry
       \let\unnumbchapentry = \shortunnumberedentry        \let\unnumbchapentry = \shortunnumberedentry
       % We want a true roman here for the page numbers.        % We want a true roman here for the page numbers.
       \secfonts        \secfonts
Line 3589  width0pt\relax} \fi
Line 4012  width0pt\relax} \fi
       \hyphenpenalty = 10000        \hyphenpenalty = 10000
       \advance\baselineskip by 1pt % Open it up a little.        \advance\baselineskip by 1pt % Open it up a little.
       \def\secentry ##1##2##3##4{}        \def\secentry ##1##2##3##4{}
       \def\unnumbsecentry ##1##2{}        \def\unnumbsecentry ##1##2##3{}
       \def\subsecentry ##1##2##3##4##5{}        \def\subsecentry ##1##2##3##4##5{}
       \def\unnumbsubsecentry ##1##2{}        \def\unnumbsubsecentry ##1##2##3##4{}
       \def\subsubsecentry ##1##2##3##4##5##6{}        \def\subsubsecentry ##1##2##3##4##5##6{}
       \def\unnumbsubsubsecentry ##1##2{}        \def\unnumbsubsubsecentry ##1##2##3##4##5{}
       \openin 1 \jobname.toc        \openin 1 \jobname.toc
       \ifeof 1 \else        \ifeof 1 \else
         \closein 1          \closein 1
Line 3607  width0pt\relax} \fi
Line 4030  width0pt\relax} \fi
 }  }
 \let\shortcontents = \summarycontents  \let\shortcontents = \summarycontents
   
   \ifpdf
     \pdfcatalog{/PageMode /UseOutlines}%
   \fi
   
 % These macros generate individual entries in the table of contents.  % These macros generate individual entries in the table of contents.
 % The first argument is the chapter or section name.  % The first argument is the chapter or section name.
 % The last argument is the page number.  % The last argument is the page number.
 % The arguments in between are the chapter number, section number, ...  % The arguments in between are the chapter number, section number, ...
   
 % Chapter-level things, for both the long and short contents.  % Chapters, in the main contents.
 \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}  \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
   %
 % See comments in \dochapentry re vbox and related settings  % Chapters, in the short toc.
   % See comments in \dochapentry re vbox and related settings.
 \def\shortchapentry#1#2#3{%  \def\shortchapentry#1#2#3{%
   \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%    \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
 }  }
   
   % Appendices, in the main contents.
   \def\appendixentry#1#2#3{\dochapentry{\putwordAppendix{} #2\labelspace#1}{#3}}
   %
   % Appendices, in the short toc.
   \let\shortappendixentry = \shortchapentry
   
 % Typeset the label for a chapter or appendix for the short contents.  % Typeset the label for a chapter or appendix for the short contents.
 % The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.  % The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter.
 % We could simplify the code here by writing out an \appendixentry  % We could simplify the code here by writing out an \appendixentry
 % command in the toc file for appendices, instead of using \chapentry  % command in the toc file for appendices, instead of using \chapentry
 % for both, but it doesn't seem worth it.  % for both, but it doesn't seem worth it.
 \setbox0 = \hbox{\shortcontrm \putwordAppendix }  %
 \newdimen\shortappendixwidth \shortappendixwidth = \wd0  \newdimen\shortappendixwidth
   %
 \def\shortchaplabel#1{%  \def\shortchaplabel#1{%
   % We typeset #1 in a box of constant width, regardless of the text of    % This space should be enough, since a single number is .5em, and the
   % #1, so the chapter titles will come out aligned.  
   \setbox0 = \hbox{#1}%  
   \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi  
   %  
   % This space should be plenty, since a single number is .5em, and the  
   % widest letter (M) is 1em, at least in the Computer Modern fonts.    % widest letter (M) is 1em, at least in the Computer Modern fonts.
     % But use \hss just in case.
   % (This space doesn't include the extra space that gets added after    % (This space doesn't include the extra space that gets added after
   % the label; that gets put in by \shortchapentry above.)    % the label; that gets put in by \shortchapentry above.)
   \advance\dimen0 by 1.1em    \dimen0 = 1em
   \hbox to \dimen0{#1\hfil}%    \hbox to \dimen0{#1\hss}%
 }  }
   
   % Unnumbered chapters.
 \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}  \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
 \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}  \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
   
 % Sections.  % Sections.
 \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}  \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
 \def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}  \def\unnumbsecentry#1#2#3{\dosecentry{#1}{#3}}
   
 % Subsections.  % Subsections.
 \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}  \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
 \def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}  \def\unnumbsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
   
 % And subsubsections.  % And subsubsections.
 \def\subsubsecentry#1#2#3#4#5#6{%  \def\subsubsecentry#1#2#3#4#5#6{%
   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}    \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
 \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}  \def\unnumbsubsubsecentry#1#2#3#4#5{\dosubsubsecentry{#1}{#5}}
   
 % This parameter controls the indentation of the various levels.  % This parameter controls the indentation of the various levels.
 \newdimen\tocindent \tocindent = 3pc  \newdimen\tocindent \tocindent = 3pc
Line 3670  width0pt\relax} \fi
Line 4101  width0pt\relax} \fi
    \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip     \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    \begingroup     \begingroup
      \chapentryfonts       \chapentryfonts
      \tocentry{#1}{\dopageno{#2}}%       \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    \endgroup     \endgroup
    \nobreak\vskip .25\baselineskip plus.1\baselineskip     \nobreak\vskip .25\baselineskip plus.1\baselineskip
 }  }
   
 \def\dosecentry#1#2{\begingroup  \def\dosecentry#1#2{\begingroup
   \secentryfonts \leftskip=\tocindent    \secentryfonts \leftskip=\tocindent
   \tocentry{#1}{\dopageno{#2}}%    \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}  \endgroup}
   
 \def\dosubsecentry#1#2{\begingroup  \def\dosubsecentry#1#2{\begingroup
   \subsecentryfonts \leftskip=2\tocindent    \subsecentryfonts \leftskip=2\tocindent
   \tocentry{#1}{\dopageno{#2}}%    \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}  \endgroup}
   
 \def\dosubsubsecentry#1#2{\begingroup  \def\dosubsubsecentry#1#2{\begingroup
   \subsubsecentryfonts \leftskip=3\tocindent    \subsubsecentryfonts \leftskip=3\tocindent
   \tocentry{#1}{\dopageno{#2}}%    \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}  \endgroup}
   
 % Final typesetting of a toc entry; we use the same \entry macro as for  % Final typesetting of a toc entry; we use the same \entry macro as for
Line 3697  width0pt\relax} \fi
Line 4128  width0pt\relax} \fi
 \def\tocentry#1#2{\begingroup  \def\tocentry#1#2{\begingroup
   \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks    \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
   % Do not use \turnoffactive in these arguments.  Since the toc is    % Do not use \turnoffactive in these arguments.  Since the toc is
   % typeset in cmr, so characters such as _ would come out wrong; we    % typeset in cmr, characters such as _ would come out wrong; we
   % have to do the usual translation tricks.    % have to do the usual translation tricks.
   \entry{#1}{#2}%    \entry{#1}{#2}%
 \endgroup}  \endgroup}
Line 3715  width0pt\relax} \fi
Line 4146  width0pt\relax} \fi
   
   
 \message{environments,}  \message{environments,}
   % @foo ... @end foo.
   
   % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
   %
 % Since these characters are used in examples, it should be an even number of  % Since these characters are used in examples, it should be an even number of
 % \tt widths. Each \tt character is 1en, so two makes it 1em.  % \tt widths. Each \tt character is 1en, so two makes it 1em.
 % Furthermore, these definitions must come after we define our fonts.  %
 \newbox\dblarrowbox    \newbox\longdblarrowbox  
 \newbox\pushcharbox    \newbox\bullbox  
 \newbox\equivbox       \newbox\errorbox  
   
 %{\tentt  
 %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}  
 %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}  
 %\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}  
 %\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}  
 % Adapted from the manmac format (p.420 of TeXbook)  
 %\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex  
 %                                      depth .1ex\hfil}  
 %}  
   
 % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.  
 \def\point{$\star$}  \def\point{$\star$}
 \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}  \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
 \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}  \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
 \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}  \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
 \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}  \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
   
   % The @error{} command.
 % Adapted from the TeXbook's \boxit.  % Adapted from the TeXbook's \boxit.
   %
   \newbox\errorbox
   %
 {\tentt \global\dimen0 = 3em}% Width of the box.  {\tentt \global\dimen0 = 3em}% Width of the box.
 \dimen2 = .55pt % Thickness of rules  \dimen2 = .55pt % Thickness of rules
 % The text. (`r' is open on the right, `e' somewhat less so on the left.)  % The text. (`r' is open on the right, `e' somewhat less so on the left.)
 \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}  \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
   %
 \global\setbox\errorbox=\hbox to \dimen0{\hfil  \global\setbox\errorbox=\hbox to \dimen0{\hfil
    \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.     \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
    \advance\hsize by -2\dimen2 % Rules.     \advance\hsize by -2\dimen2 % Rules.
Line 3756  width0pt\relax} \fi
Line 4179  width0pt\relax} \fi
          \kern3pt\vrule width\dimen2}% Space to right.           \kern3pt\vrule width\dimen2}% Space to right.
       \hrule height\dimen2}        \hrule height\dimen2}
     \hfil}      \hfil}
   %
 % The @error{} command.  
 \def\error{\leavevmode\lower.7ex\copy\errorbox}  \def\error{\leavevmode\lower.7ex\copy\errorbox}
   
 % @tex ... @end tex    escapes into raw Tex temporarily.  % @tex ... @end tex    escapes into raw Tex temporarily.
Line 3797  width0pt\relax} \fi
Line 4219  width0pt\relax} \fi
   \def\@{@}%    \def\@{@}%
 \let\Etex=\endgroup}  \let\Etex=\endgroup}
   
 % Define @lisp ... @endlisp.  % Define @lisp ... @end lisp.
 % @lisp does a \begingroup so it can rebind things,  % @lisp does a \begingroup so it can rebind things,
 % including the definition of @endlisp (which normally is erroneous).  % including the definition of @end lisp (which normally is erroneous).
   
 % Amount to narrow the margins by for @lisp.  % Amount to narrow the margins by for @lisp.
 \newskip\lispnarrowing \lispnarrowing=0.4in  \newskip\lispnarrowing \lispnarrowing=0.4in
Line 3830  width0pt\relax} \fi
Line 4252  width0pt\relax} \fi
 % is reset to zero; thus the \afterenvbreak inserts no space -- but the  % is reset to zero; thus the \afterenvbreak inserts no space -- but the
 % start of the next paragraph will insert \parskip  % start of the next paragraph will insert \parskip
 %  %
 \def\aboveenvbreak{{\advance\envskipamount by \parskip  \def\aboveenvbreak{{%
 \endgraf \ifdim\lastskip<\envskipamount    \ifnum\lastpenalty < 10000
 \removelastskip \penalty-50 \vskip\envskipamount \fi}}      \advance\envskipamount by \parskip
       \endgraf
       \ifdim\lastskip<\envskipamount
         \removelastskip
         \penalty-50
         \vskip\envskipamount
       \fi
     \fi
   }}
   
 \let\afterenvbreak = \aboveenvbreak  \let\afterenvbreak = \aboveenvbreak
   
Line 3964  width0pt\relax} \fi
Line 4394  width0pt\relax} \fi
 \def\smalllispx{\begingroup  \def\smalllispx{\begingroup
   \def\Esmalllisp{\nonfillfinish\endgroup}%    \def\Esmalllisp{\nonfillfinish\endgroup}%
   \def\Esmallexample{\nonfillfinish\endgroup}%    \def\Esmallexample{\nonfillfinish\endgroup}%
   \indexfonts    \smallexamplefonts
   \lisp    \lisp
 }  }
   
Line 3975  width0pt\relax} \fi
Line 4405  width0pt\relax} \fi
   \let\Edisplay = \nonfillfinish    \let\Edisplay = \nonfillfinish
   \gobble    \gobble
 }  }
   %
 % @smalldisplay (when @smallbook): @display plus smaller fonts.  % @smalldisplay (when @smallbook): @display plus smaller fonts.
 %  %
 \def\smalldisplayx{\begingroup  \def\smalldisplayx{\begingroup
   \def\Esmalldisplay{\nonfillfinish\endgroup}%    \def\Esmalldisplay{\nonfillfinish\endgroup}%
   \indexfonts \rm    \smallexamplefonts \rm
   \display    \display
 }  }
   
Line 3992  width0pt\relax} \fi
Line 4422  width0pt\relax} \fi
   \let\Eformat = \nonfillfinish    \let\Eformat = \nonfillfinish
   \gobble    \gobble
 }  }
   %
 % @smallformat (when @smallbook): @format plus smaller fonts.  % @smallformat (when @smallbook): @format plus smaller fonts.
 %  %
 \def\smallformatx{\begingroup  \def\smallformatx{\begingroup
   \def\Esmallformat{\nonfillfinish\endgroup}%    \def\Esmallformat{\nonfillfinish\endgroup}%
   \indexfonts \rm    \smallexamplefonts \rm
   \format    \format
 }  }
   
Line 4015  width0pt\relax} \fi
Line 4445  width0pt\relax} \fi
   \gobble    \gobble
 }  }
   
   
 % @quotation does normal linebreaking (hence we can't use \nonfillstart)  % @quotation does normal linebreaking (hence we can't use \nonfillstart)
 % and narrows the margins.  % and narrows the margins.
 %  %
Line 4037  width0pt\relax} \fi
Line 4468  width0pt\relax} \fi
 }  }
   
   
   % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
   % If we want to allow any <char> as delimiter,
   % we need the curly braces so that makeinfo sees the @verb command, eg:
   % `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
   %
   % [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
   %
   % [Knuth] p. 344; only we need to do '@' too
   \def\dospecials{%
     \do\ \do\\\do\@\do\{\do\}\do\$\do\&%
     \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
   %
   % [Knuth] p. 380
   \def\uncatcodespecials{%
     \def\do##1{\catcode`##1=12}\dospecials}
   %
   % [Knuth] pp. 380,381,391
   % Disable Spanish ligatures ?` and !` of \tt font
   \begingroup
     \catcode`\`=\active\gdef`{\relax\lq}
   \endgroup
   %
   % Setup for the @verb command.
   %
   % Eight spaces for a tab
   \begingroup
     \catcode`\^^I=\active
     \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
   \endgroup
   %
   \def\setupverb{%
     \tt  % easiest (and conventionally used) font for verbatim
     \def\par{\leavevmode\endgraf}%
     \catcode`\`=\active
     \tabeightspaces
     % Respect line breaks,
     % print special symbols as themselves, and
     % make each space count
     % must do in this order:
     \obeylines \uncatcodespecials \sepspaces
   }
   
   % Setup for the @verbatim environment
   %
   % Real tab expansion
   \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
   %
   \def\starttabbox{\setbox0=\hbox\bgroup}
   \begingroup
     \catcode`\^^I=\active
     \gdef\tabexpand{%
       \catcode`\^^I=\active
       \def^^I{\leavevmode\egroup
         \dimen0=\wd0 % the width so far, or since the previous tab
         \divide\dimen0 by\tabw
         \multiply\dimen0 by\tabw % compute previous multiple of \tabw
         \advance\dimen0 by\tabw  % advance to next multiple of \tabw
         \wd0=\dimen0 \box0 \starttabbox
       }%
     }
   \endgroup
   \def\setupverbatim{%
     % Easiest (and conventionally used) font for verbatim
     \tt
     \def\par{\leavevmode\egroup\box0\endgraf}%
     \catcode`\`=\active
     \tabexpand
     % Respect line breaks,
     % print special symbols as themselves, and
     % make each space count
     % must do in this order:
     \obeylines \uncatcodespecials \sepspaces
     \everypar{\starttabbox}%
   }
   
   % Do the @verb magic: verbatim text is quoted by unique
   % delimiter characters.  Before first delimiter expect a
   % right brace, after last delimiter expect closing brace:
   %
   %    \def\doverb'{'<char>#1<char>'}'{#1}
   %
   % [Knuth] p. 382; only eat outer {}
   \begingroup
     \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12
     \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
   \endgroup
   %
   \def\verb{\begingroup\setupverb\doverb}
   %
   %
   % Do the @verbatim magic: define the macro \doverbatim so that
   % the (first) argument ends when '@end verbatim' is reached, ie:
   %
   %     \def\doverbatim#1@end verbatim{#1}
   %
   % For Texinfo it's a lot easier than for LaTeX,
   % because texinfo's \verbatim doesn't stop at '\end{verbatim}':
   % we need not redefine '\', '{' and '}'
   %
   % Inspired by LaTeX's verbatim command set [latex.ltx]
   %% Include LaTeX hack for completeness -- never know
   %% \begingroup
   %% \catcode`|=0 \catcode`[=1
   %% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active
   %% \catcode`\\=12|gdef|doverbatim#1@end verbatim[
   %% #1|endgroup|def|Everbatim[]|end[verbatim]]
   %% |endgroup
   \begingroup
     \catcode`\ =\active
     \gdef\doverbatim#1@end verbatim{#1\end{verbatim}}
   \endgroup
   %
   \def\verbatim{%
     \def\Everbatim{\nonfillfinish\endgroup}%
     \begingroup
       \nonfillstart
       \advance\leftskip by -\defbodyindent
       \begingroup\setupverbatim\doverbatim
   }
   
   % @verbatiminclude FILE - insert text of file in verbatim environment.
   %
   % Allow normal characters that we make active in the argument (a file name).
   \def\verbatiminclude{%
     \begingroup
       \catcode`\\=12
       \catcode`~=12
       \catcode`^=12
       \catcode`_=12
       \catcode`|=12
       \catcode`<=12
       \catcode`>=12
       \catcode`+=12
       \parsearg\doverbatiminclude
   }
   \def\setupverbatiminclude{%
     \begingroup
       \nonfillstart
       \advance\leftskip by -\defbodyindent
       \begingroup\setupverbatim
   }
   %
   \def\doverbatiminclude#1{%
        % Restore active chars for included file.
     \endgroup
     \begingroup
     \def\thisfile{#1}%
     \expandafter\expandafter\setupverbatiminclude\input\thisfile
     \endgroup\nonfillfinish\endgroup
   }
   
   % @copying ... @end copying.
   % Save the text away for @insertcopying later.
   %
   \newbox\copyingbox
   %
   \def\copying{\begingroup
     \parindent = 0pt  % looks wrong on title page
     \def\Ecopying{\egroup\endgroup}%
     \global\setbox\copyingbox = \vbox\bgroup
   }
   
   % @insertcopying.
   %
   \def\insertcopying{\unvcopy\copyingbox}
   
   
 \message{defuns,}  \message{defuns,}
 % Define formatter for defuns  % @defun etc.
 % First, allow user to change definition object font (\df) internally  
   % Allow user to change definition object font (\df) internally
 \def\setdeffont #1 {\csname DEF#1\endcsname}  \def\setdeffont #1 {\csname DEF#1\endcsname}
   
 \newskip\defbodyindent \defbodyindent=.4in  \newskip\defbodyindent \defbodyindent=.4in
Line 4166  width0pt\relax} \fi
Line 4765  width0pt\relax} \fi
 \exdentamount=\defbodyindent  \exdentamount=\defbodyindent
 \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}  \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
   
 % @deftypemethod has an extra argument that nothing else does.  Sigh.  % Used for @deftypemethod and @deftypeivar.
 % #1 is the \E... control sequence to end the definition (which we define).  % #1 is the \E... control sequence to end the definition (which we define).
 % #2 is the \...x control sequence for consecutive fns (which we define).  % #2 is the \...x control sequence for consecutive fns (which we define).
 % #3 is the control sequence to call to resume processing.  % #3 is the control sequence to call to resume processing.
 % #4, delimited by the space, is the class name.  % #4, delimited by a space, is the class name.
 % #5 is the method's return type.  % #5 is the method's return type.
 %  %
 \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV %  \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
 \medbreak %    \medbreak
 % Define the end token that this defining construct specifies    \def#1{\endgraf\endgroup\medbreak}%
 % so that it will exit this group.    \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
 \def#1{\endgraf\endgroup\medbreak}%    \parindent=0in
 \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%    \advance\leftskip by \defbodyindent
 \parindent=0in    \exdentamount=\defbodyindent
 \advance\leftskip by \defbodyindent    \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
 \exdentamount=\defbodyindent  
 \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}  
   
   % Used for @deftypeop.  The change from \deftypemethparsebody is an
   % extra argument at the beginning which is the `category', instead of it
   % being the hardwired string `Method' or `Instance Variable'.  We have
   % to account for this both in the \...x definition and in parsing the
   % input at hand.  Thus also need a control sequence (passed as #5) for
   % the \E... definition to assign the category name to.
   %
   \def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
     \medbreak
     \def#1{\endgraf\endgroup\medbreak}%
     \def#2##1 ##2 ##3 {%
       \def#4{##1}%
       \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
     \parindent=0in
     \advance\leftskip by \defbodyindent
     \exdentamount=\defbodyindent
     \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
   
 \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %  \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
 \medbreak %  \medbreak %
 % Define the end token that this defining construct specifies  % Define the end token that this defining construct specifies
Line 4293  width0pt\relax} \fi
Line 4908  width0pt\relax} \fi
 % First, define the processing that is wanted for arguments of \defun  % First, define the processing that is wanted for arguments of \defun
 % Use this to expand the args and terminate the paragraph they make up  % Use this to expand the args and terminate the paragraph they make up
   
 \def\defunargs #1{\functionparens \sl  \def\defunargs#1{\functionparens \sl
 % Expand, preventing hyphenation at `-' chars.  % Expand, preventing hyphenation at `-' chars.
 % Note that groups don't affect changes in \hyphenchar.  % Note that groups don't affect changes in \hyphenchar.
 \hyphenchar\tensl=0  % Set the font temporarily and use \font in case \setfont made \tensl a macro.
   {\tensl\hyphenchar\font=0}%
 #1%  #1%
 \hyphenchar\tensl=45  {\tensl\hyphenchar\font=45}%
 \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%  \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
 \interlinepenalty=10000  \interlinepenalty=10000
 \advance\rightskip by 0pt plus 1fil  \advance\rightskip by 0pt plus 1fil
Line 4346  width0pt\relax} \fi
Line 4962  width0pt\relax} \fi
 % #1 is the data type, #2 the name, #3 the args.  % #1 is the data type, #2 the name, #3 the args.
 \def\deftypefunheaderx #1#2 #3\relax{%  \def\deftypefunheaderx #1#2 #3\relax{%
 \doind {fn}{\code{#2}}% Make entry in function index  \doind {fn}{\code{#2}}% Make entry in function index
 \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%  \begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}%
 \deftypefunargs {#3}\endgroup %  \deftypefunargs {#3}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody  \catcode 61=\other % Turn off change made in \defparsebody
 }  }
Line 4355  width0pt\relax} \fi
Line 4971  width0pt\relax} \fi
   
 \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}  \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
   
 % \defheaderxcond#1\relax$$$  % \defheaderxcond#1\relax$.$
 % puts #1 in @code, followed by a space, but does nothing if #1 is null.  % puts #1 in @code, followed by a space, but does nothing if #1 is null.
 \def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}  \def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi}
   
 % #1 is the classification.  #2 is the data type.  #3 is the name and args.  % #1 is the classification.  #2 is the data type.  #3 is the name and args.
 \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}  \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
Line 4367  width0pt\relax} \fi
Line 4983  width0pt\relax} \fi
 \begingroup  \begingroup
 \normalparens % notably, turn off `&' magic, which prevents  \normalparens % notably, turn off `&' magic, which prevents
 %               at least some C++ text from working  %               at least some C++ text from working
 \defname {\defheaderxcond#2\relax$$$#3}{#1}%  \defname {\defheaderxcond#2\relax$.$#3}{#1}%
 \deftypefunargs {#4}\endgroup %  \deftypefunargs {#4}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody  \catcode 61=\other % Turn off change made in \defparsebody
 }  }
Line 4397  width0pt\relax} \fi
Line 5013  width0pt\relax} \fi
 \def\defop #1 {\def\defoptype{#1}%  \def\defop #1 {\def\defoptype{#1}%
 \defopparsebody\Edefop\defopx\defopheader\defoptype}  \defopparsebody\Edefop\defopx\defopheader\defoptype}
 %  %
 \def\defopheader #1#2#3{%  \def\defopheader#1#2#3{%
 \dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index  \dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
 \begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%  \begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
 \defunargs {#3}\endgroup %  \defunargs {#3}\endgroup %
 }  }
   
 % @deftypemethod CLASS RETURN-TYPE METHOD ARG...  % @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
 %  %
   \def\deftypeop #1 {\def\deftypeopcategory{#1}%
     \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
                          \deftypeopcategory}
   %
   % #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
   \def\deftypeopheader#1#2#3#4{%
     \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
     \begingroup
       \defname{\defheaderxcond#2\relax$.$#3}
               {\deftypeopcategory\ \putwordon\ \code{#1}}%
       \deftypefunargs{#4}%
     \endgroup
   }
   
   % @deftypemethod CLASS TYPE METHOD ARG...
   %
 \def\deftypemethod{%  \def\deftypemethod{%
   \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}    \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
 %  %
Line 4412  width0pt\relax} \fi
Line 5044  width0pt\relax} \fi
 \def\deftypemethodheader#1#2#3#4{%  \def\deftypemethodheader#1#2#3#4{%
   \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
   \begingroup    \begingroup
     \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%      \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
     \deftypefunargs{#4}%      \deftypefunargs{#4}%
   \endgroup    \endgroup
 }  }
Line 4426  width0pt\relax} \fi
Line 5058  width0pt\relax} \fi
 \def\deftypeivarheader#1#2#3{%  \def\deftypeivarheader#1#2#3{%
   \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index    \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
   \begingroup    \begingroup
     \defname{#3}{\putwordInstanceVariableof\ \code{#1}}%      \defname{\defheaderxcond#2\relax$.$#3}
               {\putwordInstanceVariableof\ \code{#1}}%
     \defvarargs{#3}%      \defvarargs{#3}%
   \endgroup    \endgroup
 }  }
Line 4508  width0pt\relax} \fi
Line 5141  width0pt\relax} \fi
 % is actually part of the data type, which should not be put into the index.  % is actually part of the data type, which should not be put into the index.
 \def\deftypevarheader #1#2{%  \def\deftypevarheader #1#2{%
 \dovarind#2 \relax% Make entry in variables index  \dovarind#2 \relax% Make entry in variables index
 \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%  \begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}%
 \interlinepenalty=10000  \interlinepenalty=10000
 \endgraf\nobreak\vskip -\parskip\nobreak  \endgraf\nobreak\vskip -\parskip\nobreak
 \endgroup}  \endgroup}
Line 4519  width0pt\relax} \fi
Line 5152  width0pt\relax} \fi
 \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}  \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
   
 \def\deftypevrheader #1#2#3{\dovarind#3 \relax%  \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
 \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}  \begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
 \interlinepenalty=10000  \interlinepenalty=10000
 \endgraf\nobreak\vskip -\parskip\nobreak  \endgraf\nobreak\vskip -\parskip\nobreak
 \endgroup}  \endgroup}
Line 4552  width0pt\relax} \fi
Line 5185  width0pt\relax} \fi
 \def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}  \def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
 \def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}  \def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
 \def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}  \def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
   \def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
 \def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}  \def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
 \def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}  \def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
 \def\defunx#1 {\errmessage{@defunx in invalid context}}  \def\defunx#1 {\errmessage{@defunx in invalid context}}
Line 4678  width0pt\relax} \fi
Line 5312  width0pt\relax} \fi
      \message{Warning: redefining \the\macname}%       \message{Warning: redefining \the\macname}%
   \else    \else
      \expandafter\ifx\csname \the\macname\endcsname \relax       \expandafter\ifx\csname \the\macname\endcsname \relax
      \else \errmessage{The name \the\macname\space is reserved}\fi       \else \errmessage{Macro name \the\macname\space already defined}\fi
      \global\cslet{macsave.\the\macname}{\the\macname}%       \global\cslet{macsave.\the\macname}{\the\macname}%
      \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%       \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
      % Add the macroname to \macrolist       % Add the macroname to \macrolist
Line 4839  width0pt\relax} \fi
Line 5473  width0pt\relax} \fi
   
   
 % @alias.  % @alias.
 \def\alias#1=#2{\gdef#1{#2}}  % We need some trickery to remove the optional spaces around the equal
   % sign.  Just make them active and then expand them all to nothing.
   \def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
   \def\aliasxxx #1{\aliasyyy#1\relax}
   \def\aliasyyy #1=#2\relax{\ignoreactivespaces
   \edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
              \expandafter\noexpand\csname#2\endcsname}%
   \expandafter\endgroup\next}
   
   
 \message{cross references,}  \message{cross references,}
   % @xref etc.
   
 \newwrite\auxfile  \newwrite\auxfile
   
 \newif\ifhavexrefs    % True if xref values are known.  \newif\ifhavexrefs    % True if xref values are known.
Line 4885  width0pt\relax} \fi
Line 5528  width0pt\relax} \fi
   
 % @anchor{NAME} -- define xref target at arbitrary point.  % @anchor{NAME} -- define xref target at arbitrary point.
 %  %
 { \catcode`\@ = 11  \newcount\savesfregister
 % From latex.ltx, to make @anchor truely invisible.  \gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
 \newdimen\@savsk  \gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
 \newcount\@savsf  \gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
 \gdef\@bsphack{\relax  
   \ifhmode \@savsk\lastskip \@savsf\spacefactor \fi  
 }  
 \gdef\@esphack{\relax  
   \ifhmode \spacefactor\@savsf  
     \ifdim\@savsk>\z@ \ignorespaces \fi  
   \fi  
 }  
 \gdef\anchor#1{\@bsphack \setref{#1}{Ynothing}\@esphack}  
 }  
   
 % \setref{NAME}{SNT} defines a cross-reference point NAME, namely  % \setref{NAME}{SNT} defines a cross-reference point NAME, namely
 % NAME-title, NAME-pg, and NAME-SNT.  Called from \foonoderef.  We have  % NAME-title, NAME-pg, and NAME-SNT.  Called from \foonoderef.  We have
Line 4908  width0pt\relax} \fi
Line 5541  width0pt\relax} \fi
 %  %
 \def\setref#1#2{{%  \def\setref#1#2{{%
   \indexdummies    \indexdummies
     \pdfmkdest{#1}%
   \dosetq{#1-title}{Ytitle}%    \dosetq{#1-title}{Ytitle}%
   \dosetq{#1-pg}{Ypagenumber}%    \dosetq{#1-pg}{Ypagenumber}%
   \dosetq{#1-snt}{#2}%    \dosetq{#1-snt}{#2}%
Line 4922  width0pt\relax} \fi
Line 5556  width0pt\relax} \fi
 \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}  \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
 \def\ref#1{\xrefX[#1,,,,,,,]}  \def\ref#1{\xrefX[#1,,,,,,,]}
 \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup  \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
     \unsepspaces
   \def\printedmanual{\ignorespaces #5}%    \def\printedmanual{\ignorespaces #5}%
   \def\printednodename{\ignorespaces #3}%    \def\printednodename{\ignorespaces #3}%
   \setbox1=\hbox{\printedmanual}%    \setbox1=\hbox{\printedmanual}%
Line 4955  width0pt\relax} \fi
Line 5590  width0pt\relax} \fi
   % are best written with fairly long node names, containing hyphens, this    % are best written with fairly long node names, containing hyphens, this
   % is a loss.  Therefore, we give the text of the node name again, so it    % is a loss.  Therefore, we give the text of the node name again, so it
   % is as if TeX is seeing it for the first time.    % is as if TeX is seeing it for the first time.
     \ifpdf
       \leavevmode
       \getfilename{#4}%
       {\normalturnoffactive
        \ifnum\filenamelength>0
          \startlink attr{/Border [0 0 0]}%
            goto file{\the\filename.pdf} name{#1}%
        \else
          \startlink attr{/Border [0 0 0]}%
            goto name{#1}%
        \fi
       }%
       \linkcolor
     \fi
     %
   \ifdim \wd1 > 0pt    \ifdim \wd1 > 0pt
     \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%      \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
   \else    \else
Line 4974  width0pt\relax} \fi
Line 5624  width0pt\relax} \fi
     % page 3      % page 3
     \turnoffactive \putwordpage\tie\refx{#1-pg}{}%      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
   \fi    \fi
     \endlink
 \endgroup}  \endgroup}
   
 % \dosetq is the interface for calls from other macros  % \dosetq is the interface for calls from other macros
Line 5210  width0pt\relax} \fi
Line 5861  width0pt\relax} \fi
   \xspaceskip\z@skip    \xspaceskip\z@skip
   \parindent\defaultparindent    \parindent\defaultparindent
   %    %
   % Hang the footnote text off the number.    \smallfonts \rm
   \hang    %
     % Because we use hanging indentation in footnotes, a @noindent appears
     % to exdent this text, so make it be a no-op.  makeinfo does not use
     % hanging indentation so @noindent can still be needed within footnote
     % text after an @example or the like (not that this is good style).
     \let\noindent = \relax
     %
     % Hang the footnote text off the number.  Use \everypar in case the
     % footnote extends for more than one paragraph.
     \everypar = {\hang}%
   \textindent{\thisfootno}%    \textindent{\thisfootno}%
   %    %
   % Don't crash into the line above the footnote text.  Since this    % Don't crash into the line above the footnote text.  Since this
Line 5224  width0pt\relax} \fi
Line 5884  width0pt\relax} \fi
   \else\let\next\f@t\fi \next}    \else\let\next\f@t\fi \next}
 \def\f@@t{\bgroup\aftergroup\@foot\let\next}  \def\f@@t{\bgroup\aftergroup\@foot\let\next}
 \def\f@t#1{#1\@foot}  \def\f@t#1{#1\@foot}
 \def\@foot{\strut\egroup}  \def\@foot{\strut\par\egroup}
   
 }%end \catcode `\@=11  }%end \catcode `\@=11
   
 % Set the baselineskip to #1, and the lineskip and strut size  
 % correspondingly.  There is no deep meaning behind these magic numbers  
 % used as factors; they just match (closely enough) what Knuth defined.  
 %  
 \def\lineskipfactor{.08333}  
 \def\strutheightpercent{.70833}  
 \def\strutdepthpercent {.29167}  
 %  
 \def\setleading#1{%  
   \normalbaselineskip = #1\relax  
   \normallineskip = \lineskipfactor\normalbaselineskip  
   \normalbaselines  
   \setbox\strutbox =\hbox{%  
     \vrule width0pt height\strutheightpercent\baselineskip  
                     depth \strutdepthpercent \baselineskip  
   }%  
 }  
   
 % @| inserts a changebar to the left of the current line.  It should  % @| inserts a changebar to the left of the current line.  It should
 % surround any changed text.  This approach does *not* work if the  % surround any changed text.  This approach does *not* work if the
 % change spans more than two lines of output.  To handle that, we would  % change spans more than two lines of output.  To handle that, we would
Line 5310  width0pt\relax} \fi
Line 5952  width0pt\relax} \fi
       \global\warnednoepsftrue        \global\warnednoepsftrue
     \fi      \fi
   \else    \else
     \imagexxx #1,,,\finish      \imagexxx #1,,,,,\finish
   \fi    \fi
 }  }
 %  %
 % Arguments to @image:  % Arguments to @image:
 % #1 is (mandatory) image filename; we tack on .eps extension.  % #1 is (mandatory) image filename; we tack on .eps extension.
 % #2 is (optional) width, #3 is (optional) height.  % #2 is (optional) width, #3 is (optional) height.
 % #4 is just the usual extra ignored arg for parsing this stuff.  % #4 is (ignored optional) html alt text.
 \def\imagexxx#1,#2,#3,#4\finish{%  % #5 is (ignored optional) extension.
   \ifx\pdfoutput\undefined  % #6 is just the usual extra ignored arg for parsing this stuff.
   \newif\ifimagevmode
   \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
     \catcode`\^^M = 5     % in case we're inside an example
     \normalturnoffactive  % allow _ et al. in names
     % If the image is by itself, center it.
     \ifvmode
       \imagevmodetrue
       \nobreak\bigskip
       % Usually we'll have text after the image which will insert
       % \parskip glue, so insert it here too to equalize the space
       % above and below.
       \nobreak\vskip\parskip
       \nobreak
       \line\bgroup\hss
     \fi
     %
     % Output the image.
     \ifpdf
       \dopdfimage{#1}{#2}{#3}%
     \else
     % \epsfbox itself resets \epsf?size at each figure.      % \epsfbox itself resets \epsf?size at each figure.
     \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi      \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
     \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi      \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
     \begingroup      \epsfbox{#1.eps}%
       \catcode`\^^M = 5 % in case we're inside an example  
       % If the image is by itself, center it.  
       \ifvmode  
         \nobreak\bigskip  
         % Usually we'll have text after the image which will insert  
         % \parskip glue, so insert it here too to equalize the space  
         % above and below.  
         \nobreak\vskip\parskip  
         \nobreak  
         \centerline{\epsfbox{#1.eps}}%  
         \bigbreak  
       \else  
         % In the middle of a paragraph, no extra space.  
         \epsfbox{#1.eps}%  
       \fi  
     \endgroup  
   \else  
     \centerline{\pdfimage #1.pdf}%  
   \fi    \fi
 }    %
     \ifimagevmode \hss \egroup \bigbreak \fi  % space after the image
   \endgroup}
   
   
 \message{localization,}  \message{localization,}
   % and i18n.
   
 % @documentlanguage is usually given very early, just after  % @documentlanguage is usually given very early, just after
 % @setfilename.  If done too late, it may not override everything  % @setfilename.  If done too late, it may not override everything
Line 5406  should work if nowhere else does.}
Line 6053  should work if nowhere else does.}
     % Allow us to assign to \emergencystretch anyway.      % Allow us to assign to \emergencystretch anyway.
     \def\emergencystretch{\dimen0}%      \def\emergencystretch{\dimen0}%
   \else    \else
     \emergencystretch = \hsize      \emergencystretch = .15\hsize
     \divide\emergencystretch by 40  
   \fi    \fi
 }  }
   
 % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;  % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
 % 4) hoffset; 5) binding offset; 6) topskip.  Then whoever calls us can  % 4) hoffset; 5) binding offset; 6) topskip.  We also call
 % set \parskip and call \setleading for \baselineskip.  % \setleading{\textleading}, so the caller should define \textleading.
   % The caller should also set \parskip.
 %  %
 \def\internalpagesizes#1#2#3#4#5#6{%  \def\internalpagesizes#1#2#3#4#5#6{%
   \voffset = #3\relax    \voffset = #3\relax
Line 5434  should work if nowhere else does.}
Line 6081  should work if nowhere else does.}
   \normaloffset = #4\relax    \normaloffset = #4\relax
   \bindingoffset = #5\relax    \bindingoffset = #5\relax
   %    %
     \setleading{\textleading}
     %
   \parindent = \defaultparindent    \parindent = \defaultparindent
   \setemergencystretch    \setemergencystretch
 }  }
   
   % Use `small' versions.
   %
   \def\smallenvironments{%
     \let\smalldisplay = \smalldisplayx
     \let\smallexample = \smalllispx
     \let\smallformat = \smallformatx
     \let\smalllisp = \smalllispx
   }
   
 % @letterpaper (the default).  % @letterpaper (the default).
 \def\letterpaper{{\globaldefs = 1  \def\letterpaper{{\globaldefs = 1
   \parskip = 3pt plus 2pt minus 1pt    \parskip = 3pt plus 2pt minus 1pt
   \setleading{13.2pt}%    \textleading = 13.2pt
   %    %
   % If page is nothing but text, make it come out even.    % If page is nothing but text, make it come out even.
   \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%    \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
Line 5450  should work if nowhere else does.}
Line 6108  should work if nowhere else does.}
 % Use @smallbook to reset parameters for 7x9.5 (or so) format.  % Use @smallbook to reset parameters for 7x9.5 (or so) format.
 \def\smallbook{{\globaldefs = 1  \def\smallbook{{\globaldefs = 1
   \parskip = 2pt plus 1pt    \parskip = 2pt plus 1pt
   \setleading{12pt}%    \textleading = 12pt
   %    %
   \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%    \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
   %    %
Line 5460  should work if nowhere else does.}
Line 6118  should work if nowhere else does.}
   \contentsrightmargin = 0pt    \contentsrightmargin = 0pt
   \deftypemargin = 0pt    \deftypemargin = 0pt
   \defbodyindent = .5cm    \defbodyindent = .5cm
   %    \smallenvironments
   \let\smalldisplay = \smalldisplayx  
   \let\smallexample = \smalllispx  
   \let\smallformat = \smallformatx  
   \let\smalllisp = \smalllispx  
 }}  }}
   
 % Use @afourpaper to print on European A4 paper.  % Use @afourpaper to print on European A4 paper.
 \def\afourpaper{{\globaldefs = 1  \def\afourpaper{{\globaldefs = 1
   \setleading{12pt}%  
   \parskip = 3pt plus 2pt minus 1pt    \parskip = 3pt plus 2pt minus 1pt
     \textleading = 12pt
   %    %
   \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%    \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
   %    %
Line 5478  should work if nowhere else does.}
Line 6132  should work if nowhere else does.}
   \hfuzz = 1pt    \hfuzz = 1pt
 }}  }}
   
   % Use @afivepaper to print on European A5 paper.
   % From romildo@urano.iceb.ufop.br, 2 July 2000.
   % He also recommends making @example and @lisp be small.
   \def\afivepaper{{\globaldefs = 1
     \parskip = 2pt plus 1pt minus 0.1pt
     \textleading = 12.5pt
     %
     \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}%
     %
     \lispnarrowing = 0.2in
     \tolerance = 800
     \hfuzz = 1.2pt
     \contentsrightmargin = 0mm
     \deftypemargin = 0pt
     \defbodyindent = 2mm
     \tableindent = 12mm
     %
     \smallenvironments
   }}
   
 % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin  % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
 % 29mm, hence bottom margin 28mm, nominal side margin 3cm.  % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
 \def\afourlatex{{\globaldefs = 1  \def\afourlatex{{\globaldefs = 1
   \setleading{13.6pt}%    \textleading = 13.6pt
   %    %
   \afourpaper    \afourpaper
   \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%    \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
   %    %
     % Must explicitly reset to 0 because we call \afourpaper, apparently,
     % although this does not entirely make sense.
   \globaldefs = 0    \globaldefs = 0
 }}  }}
   
 % Use @afourwide to print on European A4 paper in wide format.  % Use @afourwide to print on European A4 paper in wide format.
 \def\afourwide{%  \def\afourwide{%
   \afourpaper    \afourpaper
   \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%    \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
   %  
   \globaldefs = 0  
 }  }
   
 % @pagesizes TEXTHEIGHT[,TEXTWIDTH]  % @pagesizes TEXTHEIGHT[,TEXTWIDTH]
Line 5508  should work if nowhere else does.}
Line 6182  should work if nowhere else does.}
   \globaldefs = 1    \globaldefs = 1
   %    %
   \parskip = 3pt plus 2pt minus 1pt    \parskip = 3pt plus 2pt minus 1pt
   \setleading{13.2pt}%    \setleading{\textleading}%
   %    %
   \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%    \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
 }}  }}
Line 5517  should work if nowhere else does.}
Line 6191  should work if nowhere else does.}
 %  %
 \letterpaper  \letterpaper
   
   
 \message{and turning on texinfo input format.}  \message{and turning on texinfo input format.}
   
 % Define macros to output various characters with catcode for normal text.  % Define macros to output various characters with catcode for normal text.
Line 5537  should work if nowhere else does.}
Line 6212  should work if nowhere else does.}
 \def\normalless{<}  \def\normalless{<}
 \def\normalgreater{>}  \def\normalgreater{>}
 \def\normalplus{+}  \def\normalplus{+}
 \def\normaldollar{$}  \def\normaldollar{$}%$ font-lock fix
   
 % This macro is used to make a character print one way in ttfont  % This macro is used to make a character print one way in ttfont
 % where it can probably just be output, and another way in other fonts,  % where it can probably just be output, and another way in other fonts,
Line 5586  should work if nowhere else does.}
Line 6261  should work if nowhere else does.}
 \catcode`\+=\active  \catcode`\+=\active
 \def+{{\tt \char 43}}  \def+{{\tt \char 43}}
 \catcode`\$=\active  \catcode`\$=\active
 \def${\ifusingit{{\sl\$}}\normaldollar}  \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
 %\catcode 27=\active  %\catcode 27=\active
 %\def^^[{$\diamondsuit$}  %\def^^[{$\diamondsuit$}
   
Line 5631  should work if nowhere else does.}
Line 6306  should work if nowhere else does.}
 @let<=@normalless  @let<=@normalless
 @let>=@normalgreater  @let>=@normalgreater
 @let+=@normalplus  @let+=@normalplus
 @let$=@normaldollar}  @let$=@normaldollar}%$ font-lock fix
   
 @def@normalturnoffactive{@let"=@normaldoublequote  @def@normalturnoffactive{@let"=@normaldoublequote
 @let\=@normalbackslash  @let\=@normalbackslash
Line 5642  should work if nowhere else does.}
Line 6317  should work if nowhere else does.}
 @let<=@normalless  @let<=@normalless
 @let>=@normalgreater  @let>=@normalgreater
 @let+=@normalplus  @let+=@normalplus
 @let$=@normaldollar}  @let$=@normaldollar}%$ font-lock fix
   
 % Make _ and + \other characters, temporarily.  % Make _ and + \other characters, temporarily.
 % This is canceled by @fixbackslash.  % This is canceled by @fixbackslash.
Line 5684  should work if nowhere else does.}
Line 6359  should work if nowhere else does.}
 @c eval: (add-hook 'write-file-hooks 'time-stamp)  @c eval: (add-hook 'write-file-hooks 'time-stamp)
 @c page-delimiter: "^\\\\message"  @c page-delimiter: "^\\\\message"
 @c time-stamp-start: "def\\\\texinfoversion{"  @c time-stamp-start: "def\\\\texinfoversion{"
 @c time-stamp-format: "%:y-%02m-%02d.%H"  @c time-stamp-format: "%:y-%02m-%02d.%02H"
 @c time-stamp-end: "}"  @c time-stamp-end: "}"
 @c End:  @c End:

Legend:
Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>