Diff for /gforth/doc/Attic/texinfo.tex between versions 1.1 and 1.2

version 1.1, 1997/05/21 20:40:05 version 1.2, 1998/06/17 16:55:15
Line 1 Line 1
 %% TeX macros to handle texinfo files  % texinfo.tex -- TeX macros to handle Texinfo files.
   % $Id$
 %  Copyright (C) 1985, 86, 88, 90, 91, 92, 93,  %
 %                94, 95, 1996 Free Software Foundation, Inc.  % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98
   % Free Software Foundation, Inc.
 %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  % This texinfo.tex file is free software; you can redistribute it and/or
 %published by the Free Software Foundation; either version 2, or (at  % modify it under the terms of the GNU General Public License as
 %your option) any later version.  % published by the Free Software Foundation; either version 2, or (at
   % your option) any later version.
 %This texinfo.tex file is distributed in the hope that it will be  %
 %useful, but WITHOUT ANY WARRANTY; without even the implied warranty  % This texinfo.tex file is distributed in the hope that it will be
 %of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  % useful, but WITHOUT ANY WARRANTY; without even the implied warranty
 %General Public License for more details.  % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   % General Public License for more details.
 %You should have received a copy of the GNU General Public License  %
 %along with this texinfo.tex file; see the file COPYING.  If not, write  % You should have received a copy of the GNU General Public License
 %to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,  % along with this texinfo.tex file; see the file COPYING.  If not, write
 %Boston, MA 02111-1307, USA.  % to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   % Boston, MA 02111-1307, USA.
   %
 %In other words, you are welcome to use, share and improve this program.  % In other words, you are welcome to use, share and improve this program.
 %You are forbidden to forbid anyone else to use, share and improve  % You are forbidden to forbid anyone else to use, share and improve
 %what you give them.   Help stamp out software-hoarding!  % what you give them.   Help stamp out software-hoarding!
   %
   % Please try the latest version of texinfo.tex before submitting bug
 % Send bug reports to bug-texinfo@prep.ai.mit.edu.  % reports; you can get the latest version from:
 % Please include a *precise* test case in each bug report.  % ftp://ftp.cs.umb.edu/pub/tex/texinfo.tex
   % /home/gd/gnu/doc/texinfo.tex on the GNU machines.
   % 
   % Send bug reports to bug-texinfo@gnu.org.
   % Please include a precise test case in each bug report,
   % including a complete document with which we can reproduce the problem.
   % 
   % Texinfo macros (with @macro) are *not* supported by texinfo.tex.  You
   % have to run makeinfo -E to expand macros first; the texi2dvi script
   % does this.
   
   
 % Make it possible to create a .fmt file just by loading this file:  % Make it possible to create a .fmt file just by loading this file:
Line 53 Line 62
 \let\ptexdot=\.  \let\ptexdot=\.
 \let\ptexdots=\dots  \let\ptexdots=\dots
 \let\ptexend=\end  \let\ptexend=\end
 \let\ptexequiv = \equiv  \let\ptexequiv=\equiv
   \let\ptexexclam=\!
 \let\ptexi=\i  \let\ptexi=\i
 \let\ptexlbrace=\{  \let\ptexlbrace=\{
 \let\ptexrbrace=\}  \let\ptexrbrace=\}
 \let\ptexstar=\*  \let\ptexstar=\*
 \let\ptext=\t  \let\ptext=\t
 \let\ptextilde=\~  
   
 % Be sure we're in horizontal mode when doing a tie, since we make space  % Be sure we're in horizontal mode when doing a tie, since we make space
 % equivalent to this in @example-like environments. Otherwise, a space  % equivalent to this in @example-like environments. Otherwise, a space
Line 72 Line 81
  \global\let\tiepenalty = \@M   \global\let\tiepenalty = \@M
  \gdef\tie{\leavevmode\penalty\tiepenalty\ }   \gdef\tie{\leavevmode\penalty\tiepenalty\ }
 }  }
 \let\~ = \tie                  % And make it available as @~.  
   
   
 \message{Basics,}  \message{Basics,}
Line 102 Line 110
 \hyphenation{ap-pen-dix}  \hyphenation{ap-pen-dix}
 \hyphenation{mini-buf-fer mini-buf-fers}  \hyphenation{mini-buf-fer mini-buf-fers}
 \hyphenation{eshell}  \hyphenation{eshell}
   \hyphenation{white-space}
   
 % Margin to add to right of even pages, to left of odd pages.  % Margin to add to right of even pages, to left of odd pages.
 \newdimen \bindingoffset    \newdimen \bindingoffset
 \newdimen \normaloffset     \newdimen \normaloffset
 \newdimen\pagewidth \newdimen\pageheight  \newdimen\pagewidth \newdimen\pageheight
   
 % Sometimes it is convenient to have everything in the transcript file  % Sometimes it is convenient to have everything in the transcript file
Line 119 Line 128
    \showboxbreadth\maxdimen\showboxdepth\maxdimen     \showboxbreadth\maxdimen\showboxdepth\maxdimen
 }%  }%
   
 %---------------------Begin change-----------------------  % For @cropmarks command.
   % Do @cropmarks to get crop marks.
   % 
   \newif\ifcropmarks
   \let\cropmarks = \cropmarkstrue
 %  %
 %%%% For @cropmarks command.  % Dimensions to add cropmarks at corners.
 % Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986  % Added by P. A. MacKay, 12 Nov. 1986
 %  %
 \newdimen\cornerlong \newdimen\cornerthick  \newdimen\cornerlong \newdimen\cornerthick
 \newdimen \topandbottommargin  \newdimen\topandbottommargin
 \newdimen \outerhsize \newdimen \outervsize  \newdimen\outerhsize \newdimen\outervsize
 \cornerlong=1pc\cornerthick=.3pt        % These set size of cropmarks  \cornerlong=1pc\cornerthick=.3pt        % These set size of cropmarks
 \outerhsize=7in  \outerhsize=7in
 %\outervsize=9.5in  %\outervsize=9.5in
 % Alternative @smallbook page size is 9.25in  % Alternative @smallbook page size is 9.25in
 \outervsize=9.25in  \outervsize=9.25in
 \topandbottommargin=.75in  \topandbottommargin=.75in
 %  
 %---------------------End change-----------------------  % Main output routine.
   \chardef\PAGE = 255
   \output = {\onepageout{\pagecontents\PAGE}}
   
   \newbox\headlinebox
   \newbox\footlinebox
   
 % \onepageout takes a vbox as an argument.  Note that \pagecontents  % \onepageout takes a vbox as an argument.  Note that \pagecontents
 % does insertions, but you have to call it yourself.  % does insertions, but you have to call it yourself.
 \chardef\PAGE=255  \output={\onepageout{\pagecontents\PAGE}}  
 \def\onepageout#1{%  \def\onepageout#1{%
   \hoffset=\normaloffset    \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
     %
   \ifodd\pageno  \advance\hoffset by \bindingoffset    \ifodd\pageno  \advance\hoffset by \bindingoffset
   \else \advance\hoffset by -\bindingoffset\fi    \else \advance\hoffset by -\bindingoffset\fi
     %
     % Do this outside of the \shipout so @code etc. will be expanded in
     % the headline as they should be, not taken literally (outputting ''code).
     \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
     \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
     %
   {%    {%
     \escapechar = `\\ % use backslash in output files.      % Have to do this stuff outside the \shipout because we want it to
     \indexdummies      % take effect in \write's, yet the group defined by the \vbox ends
       % before the \shipout runs.
       %
       \escapechar = `\\     % use backslash in output files.
       \indexdummies         % don't expand commands in the output.
       \normalturnoffactive  % \ in index entries must not stay \, e.g., if
                      % the page break happens to be in the middle of an example.
     \shipout\vbox{%      \shipout\vbox{%
       {\let\hsize=\pagewidth \makeheadline}%        \ifcropmarks \vbox to \outervsize\bgroup
           \hsize = \outerhsize
           \line{\ewtop\hfil\ewtop}%
           \nointerlineskip
           \line{%
             \vbox{\moveleft\cornerthick\nstop}%
             \hfill
             \vbox{\moveright\cornerthick\nstop}%
           }%
           \vskip\topandbottommargin
           \line\bgroup
             \hfil % center the page within the outer (page) hsize.
             \ifodd\pageno\hskip\bindingoffset\fi
             \vbox\bgroup
         \fi
         %
         \unvbox\headlinebox
       \pagebody{#1}%        \pagebody{#1}%
       {\let\hsize=\pagewidth \makefootline}%        \ifdim\ht\footlinebox > 0pt
     }%          % Only leave this space if the footline is nonempty.
   }%          % (We lessened \vsize for it in \oddfootingxxx.)
           % The \baselineskip=24pt in plain's \makefootline has no effect.
           \vskip 2\baselineskip
           \unvbox\footlinebox
         \fi
         %
         \ifcropmarks
             \egroup % end of \vbox\bgroup
           \hfil\egroup % end of (centering) \line\bgroup
           \vskip\topandbottommargin plus1fill minus1fill
           \boxmaxdepth = \cornerthick
           \line{%
             \vbox{\moveleft\cornerthick\nsbot}%
             \hfill
             \vbox{\moveright\cornerthick\nsbot}%
           }%
           \nointerlineskip
           \line{\ewbot\hfil\ewbot}%
         \egroup % \vbox from first cropmarks clause
         \fi
       }% end of \shipout\vbox
     }% end of group with \turnoffactive
   \advancepageno    \advancepageno
   \ifnum\outputpenalty>-20000 \else\dosupereject\fi    \ifnum\outputpenalty>-20000 \else\dosupereject\fi
 }  }
   
 %%%% For @cropmarks command %%%%  
   
 % Here is a modification of the main output routine for Near East Publications  
 % This provides right-angle cropmarks at all four corners.  
 % The contents of the page are centerlined into the cropmarks,  
 % and any desired binding offset is added as an \hskip on either  
 % site of the centerlined box.  (P. A. MacKay, 12 November, 1986)  
 %  
 \def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up  
 {\escapechar=`\\\relax % makes sure backslash is used in output files.  
                  \shipout  
                  \vbox to \outervsize{\hsize=\outerhsize  
                  \vbox{\line{\ewtop\hfill\ewtop}}  
                  \nointerlineskip  
                  \line{\vbox{\moveleft\cornerthick\nstop}  
                        \hfill  
                        \vbox{\moveright\cornerthick\nstop}}  
                  \vskip \topandbottommargin  
                  \centerline{\ifodd\pageno\hskip\bindingoffset\fi  
                         \vbox{  
                         {\let\hsize=\pagewidth \makeheadline}  
                         \pagebody{#1}  
                         {\let\hsize=\pagewidth \makefootline}}  
                         \ifodd\pageno\else\hskip\bindingoffset\fi}  
                  \vskip \topandbottommargin plus1fill minus1fill  
                  \boxmaxdepth\cornerthick  
                  \line{\vbox{\moveleft\cornerthick\nsbot}  
                        \hfill  
                        \vbox{\moveright\cornerthick\nsbot}}  
                  \nointerlineskip  
                  \vbox{\line{\ewbot\hfill\ewbot}}  
         }}  
   \advancepageno  
   \ifnum\outputpenalty>-20000 \else\dosupereject\fi}  
 %  
 % Do @cropmarks to get crop marks  
 \def\cropmarks{\let\onepageout=\croppageout }  
   
 \newinsert\margin \dimen\margin=\maxdimen  \newinsert\margin \dimen\margin=\maxdimen
   
 \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}  \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
Line 207 Line 236
 \ifr@ggedbottom \kern-\dimen@ \vfil \fi}  \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
 }  }
   
 %  
 % Here are the rules for the cropmarks.  Note that they are  % Here are the rules for the cropmarks.  Note that they are
 % offset so that the space between them is truly \outerhsize or \outervsize  % offset so that the space between them is truly \outerhsize or \outervsize
 % (P. A. MacKay, 12 November, 1986)  % (P. A. MacKay, 12 November, 1986)
Line 422 Line 450
 % @. is an end-of-sentence period.  % @. is an end-of-sentence period.
 \def\.{.\spacefactor=3000 }  \def\.{.\spacefactor=3000 }
   
 % @enddots{} is an end-of-sentence ellipsis.  
 \gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}  
   
 % @! is an end-of-sentence bang.  % @! is an end-of-sentence bang.
 \gdef\!{!\spacefactor=3000 }  \def\!{!\spacefactor=3000 }
   
 % @? is an end-of-sentence query.  % @? is an end-of-sentence query.
 \gdef\?{?\spacefactor=3000 }  \def\?{?\spacefactor=3000 }
   
 % @w prevents a word break.  Without the \leavevmode, @w at the  % @w prevents a word break.  Without the \leavevmode, @w at the
 % beginning of a paragraph, when TeX is still in vertical mode, would  % beginning of a paragraph, when TeX is still in vertical mode, would
Line 554  where each line of input produces a line Line 579  where each line of input produces a line
   
 \let\br = \par  \let\br = \par
   
 % @dots{}  output some dots  % @dots{} output an ellipsis using the current font.
   % We do .5em per period so that it has the same spacing in a typewriter
   % font as three actual period characters.
   %
   \def\dots{\hbox to 1.5em{%
     \hskip 0pt plus 0.25fil minus 0.25fil
     .\hss.\hss.%
     \hskip 0pt plus 0.5fil minus 0.5fil
   }}
   
   % @enddots{} is an end-of-sentence ellipsis.
   % 
   \def\enddots{%
     \hbox to 2em{%
       \hskip 0pt plus 0.25fil minus 0.25fil
       .\hss.\hss.\hss.%
       \hskip 0pt plus 0.5fil minus 0.5fil
     }%
     \spacefactor=3000
   }
   
 \def\dots{$\ldots$}  
   
 % @page    forces the start of a new page  % @page    forces the start of a new page
   
Line 717  where each line of input produces a line Line 760  where each line of input produces a line
 %  %
 \def\ignore{\doignore{ignore}}  \def\ignore{\doignore{ignore}}
   
 % Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.  % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
 %  %
 \def\ifinfo{\doignore{ifinfo}}  \def\ifinfo{\doignore{ifinfo}}
 \def\ifhtml{\doignore{ifhtml}}  \def\ifhtml{\doignore{ifhtml}}
   \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}}
Line 747  where each line of input produces a line Line 791  where each line of input produces a line
   % Make sure that spaces turn into tokens that match what \doignoretext wants.    % Make sure that spaces turn into tokens that match what \doignoretext wants.
   \catcode32 = 10    \catcode32 = 10
   %    %
     % Ignore braces, too, so mismatched braces don't cause trouble.
     \catcode`\{ = 9
     \catcode`\} = 9
     %
   % And now expand that command.    % And now expand that command.
   \doignoretext    \doignoretext
 }  }
Line 838  where each line of input produces a line Line 886  where each line of input produces a line
     \pretolerance = 10000      \pretolerance = 10000
     %      %
     % Do not execute instructions in @tex      % Do not execute instructions in @tex
     \def\tex{\doignore{tex}}      \def\tex{\doignore{tex}}%
 }  }
   
 % @set VAR sets the variable VAR to an empty value.  % @set VAR sets the variable VAR to an empty value.
Line 850  where each line of input produces a line Line 898  where each line of input produces a line
 % didn't need it.  Make sure the catcode of space is correct to avoid  % didn't need it.  Make sure the catcode of space is correct to avoid
 % losing inside @example, for instance.  % losing inside @example, for instance.
 %  %
 \def\set{\begingroup\catcode` =10 \parsearg\setxxx}  \def\set{\begingroup\catcode` =10
     \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
     \parsearg\setxxx}
 \def\setxxx#1{\setyyy#1 \endsetyyy}  \def\setxxx#1{\setyyy#1 \endsetyyy}
 \def\setyyy#1 #2\endsetyyy{%  \def\setyyy#1 #2\endsetyyy{%
   \def\temp{#2}%    \def\temp{#2}%
Line 871  where each line of input produces a line Line 921  where each line of input produces a line
   
 % @value{foo} gets the text saved in variable foo.  % @value{foo} gets the text saved in variable foo.
 %  %
 \def\value#1{\expandafter  \def\value{\begingroup
                 \ifx\csname SET#1\endcsname\relax    \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
                         {\{No value for ``#1''\}}    \valuexxx}
                 \else \csname SET#1\endcsname \fi}  \def\valuexxx#1{%
     \expandafter\ifx\csname SET#1\endcsname\relax
       {\{No value for ``#1''\}}%
     \else
       \csname SET#1\endcsname
     \fi
   \endgroup}
   
 % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined  % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
 % with @set.  % with @set.
Line 906  where each line of input produces a line Line 962  where each line of input produces a line
 \def\ifclearfail{\nestedignore{ifclear}}  \def\ifclearfail{\nestedignore{ifclear}}
 \defineunmatchedend{ifclear}  \defineunmatchedend{ifclear}
   
 % @iftex always succeeds; we read the text following, through @end  % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
 % iftex).  But `@end iftex' should be valid only after an @iftex.  % following, through the first @end iftex (etc.).  Make `@end iftex'
   % (etc.) valid only after an @iftex.
 %  %
 \def\iftex{\conditionalsucceed{iftex}}  \def\iftex{\conditionalsucceed{iftex}}
   \def\ifnothtml{\conditionalsucceed{ifnothtml}}
   \def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
 \defineunmatchedend{iftex}  \defineunmatchedend{iftex}
   \defineunmatchedend{ifnothtml}
   \defineunmatchedend{ifnotinfo}
   
 % 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 (for example) and end it
 % at @end iftex, since then @set commands inside the conditional have no  % at @end iftex, since then @set commands inside the conditional have no
Line 986  where each line of input produces a line Line 1047  where each line of input produces a line
    \openindices     \openindices
    \fixbackslash  % Turn off hack to swallow `\input texinfo'.     \fixbackslash  % Turn off hack to swallow `\input texinfo'.
    \global\let\setfilename=\comment % Ignore extra @setfilename cmds.     \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
      %
      % If texinfo.cnf is present on the system, read it.
      % Useful for site-wide @afourpaper, etc.
      % Just to be on the safe side, close the input stream before the \input.
      \openin 1 texinfo.cnf
      \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
      \closein1
      \temp
      %
    \comment % Ignore the actual filename.     \comment % Ignore the actual filename.
 }  }
   
Line 1021  where each line of input produces a line Line 1091  where each line of input produces a line
 % We don't need math for this one.  % We don't need math for this one.
 \def\ttsl{\tenttsl}  \def\ttsl{\tenttsl}
   
 %% Try out Computer Modern fonts at \magstephalf  % Use Computer Modern fonts at \magstephalf (11pt).
 \let\mainmagstep=\magstephalf  \newcount\mainmagstep
   \mainmagstep=\magstephalf
   
 % 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').
Line 1094  where each line of input produces a line Line 1165  where each line of input produces a line
 \font\indi=cmmi9  \font\indi=cmmi9
 \font\indsy=cmsy9  \font\indsy=cmsy9
   
   % Fonts for title page:
   \setfont\titlerm\rmbshape{12}{\magstep3}
   \setfont\titleit\itbshape{10}{\magstep4}
   \setfont\titlesl\slbshape{10}{\magstep4}
   \setfont\titlett\ttbshape{12}{\magstep3}
   \setfont\titlettsl\ttslshape{10}{\magstep4}
   \setfont\titlesf\sfbshape{17}{\magstep1}
   \let\titlebf=\titlerm
   \setfont\titlesc\scbshape{10}{\magstep4}
   \font\titlei=cmmi12 scaled \magstep3
   \font\titlesy=cmsy10 scaled \magstep4
   \def\authorrm{\secrm}
   
 % Chapter (and unnumbered) fonts (17.28pt).  % Chapter (and unnumbered) fonts (17.28pt).
 \setfont\chaprm\rmbshape{12}{\magstep2}  \setfont\chaprm\rmbshape{12}{\magstep2}
 \setfont\chapit\itbshape{10}{\magstep3}  \setfont\chapit\itbshape{10}{\magstep3}
 \setfont\chapsl\slbshape{10}{\magstep3}  \setfont\chapsl\slbshape{10}{\magstep3}
 \setfont\chaptt\ttbshape{12}{\magstep2}  \setfont\chaptt\ttbshape{12}{\magstep2}
 \setfont\chapttsl\ttslshape{10}{\magstep3}  \setfont\chapttsl\ttslshape{10}{\magstep3}
 \setfont\chapsf\sfbshape{12}{\magstep2}  \setfont\chapsf\sfbshape{17}{1000}
 \let\chapbf=\chaprm  \let\chapbf=\chaprm
 \setfont\chapsc\scbshape{10}{\magstep3}  \setfont\chapsc\scbshape{10}{\magstep3}
 \font\chapi=cmmi12 scaled \magstep2  \font\chapi=cmmi12 scaled \magstep2
Line 1137  where each line of input produces a line Line 1221  where each line of input produces a line
 \setfont\ssecit\itbshape{10}{1315}  \setfont\ssecit\itbshape{10}{1315}
 \setfont\ssecsl\slbshape{10}{1315}  \setfont\ssecsl\slbshape{10}{1315}
 \setfont\ssectt\ttbshape{12}{\magstephalf}  \setfont\ssectt\ttbshape{12}{\magstephalf}
 \setfont\ssecttsl\ttslshape{10}{\magstep1}  \setfont\ssecttsl\ttslshape{10}{1315}
 \setfont\ssecsf\sfbshape{12}{\magstephalf}  \setfont\ssecsf\sfbshape{12}{\magstephalf}
 \let\ssecbf\ssecrm  \let\ssecbf\ssecrm
 \setfont\ssecsc\scbshape{10}{\magstep1}  \setfont\ssecsc\scbshape{10}{\magstep1}
 \font\sseci=cmmi12 scaled \magstephalf  \font\sseci=cmmi12 scaled \magstephalf
 \font\ssecsy=cmsy10 scaled \magstep1  \font\ssecsy=cmsy10 scaled 1315
 % The smallcaps and symbol fonts should actually be scaled \magstep1.5,  % The smallcaps and symbol fonts should actually be scaled \magstep1.5,
 % but that is not a standard magnification.  % but that is not a standard magnification.
   
 % Fonts for title page:  
 \setfont\titlerm\rmbshape{12}{\magstep3}  
 \let\authorrm = \secrm  
   
 % 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, we
Line 1174  where each line of input produces a line Line 1254  where each line of input produces a line
   \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}
   \def\titlefonts{%
     \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
     \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
     \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
     \let\tenttsl=\titlettsl
     \resetmathfonts \setleading{25pt}}
   \def\titlefont#1{{\titlefonts\rm #1}}
 \def\chapfonts{%  \def\chapfonts{%
   \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl    \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
   \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc    \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
Line 1200  where each line of input produces a line Line 1287  where each line of input produces a line
 %  %
 \textfonts  \textfonts
   
   % Define these so they can be easily changed for other fonts.
   \def\angleleft{$\langle$}
   \def\angleright{$\rangle$}
   
 % Count depth in font-changes, for error checks  % Count depth in font-changes, for error checks
 \newcount\fontdepth \fontdepth=0  \newcount\fontdepth \fontdepth=0
   
Line 1237  where each line of input produces a line Line 1328  where each line of input produces a line
   \null    \null
 }  }
 \let\ttfont=\t  \let\ttfont=\t
 \def\samp #1{`\tclose{#1}'\null}  \def\samp#1{`\tclose{#1}'\null}
 \setfont\smallrm\rmshape{8}{1000}  \setfont\smallrm\rmshape{8}{1000}
 \font\smallsy=cmsy9  \font\smallsy=cmsy9
 \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%  \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
   \raise0.4pt\hbox{$\langle$}\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{$\langle$}}#1}}%       \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
     \kern-0.4pt\hrule}%      \kern-0.4pt\hrule}%
   \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}    \kern-.06em\raise0.4pt\hbox{\angleright}}}}
 % The old definition, with no lozenge:  % The old definition, with no lozenge:
 %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}  %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
 \def\ctrl #1{{\tt \rawbackslash \hat}#1}  \def\ctrl #1{{\tt \rawbackslash \hat}#1}
   
 \let\file=\samp  \let\file=\samp
 \let\url=\samp % perhaps include a hypertex \special eventually  
 \def\email#1{$\langle${\tt #1}$\rangle$}  
   
 % @code is a modification of @t,  % @code is a modification of @t,
 % which makes spaces the same size as normal in the surrounding text.  % which makes spaces the same size as normal in the surrounding text.
Line 1289  where each line of input produces a line Line 1378  where each line of input produces a line
 {  {
 \catcode`\-=\active  \catcode`\-=\active
 \catcode`\_=\active  \catcode`\_=\active
   \catcode`\|=\active
 \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}  \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
 % The following is used by \doprintindex to insure that long function names  % The following is used by \doprintindex to insure that long function names
 % wrap around.  It is necessary for - and _ to be active before the index is  % wrap around.  It is necessary for - and _ to be active before the index is
 % read from the file, as \entry parses the arguments long before \code is  % read from the file, as \entry parses the arguments long before \code is
 % ever called.  -- mycroft  % ever called.  -- mycroft
 \global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}  % _ is always active; and it shouldn't be \let = to an _ that is a
   % subscript character anyway. Then, @cindex @samp{_} (for example)
   % fails.  --karl
   \global\def\indexbreaks{%
     \catcode`\-=\active \let-\realdash
   }
 }  }
   
 \def\realdash{-}  \def\realdash{-}
 \def\realunder{_}  
 \def\codedash{-\discretionary{}{}{}}  \def\codedash{-\discretionary{}{}{}}
 \def\codeunder{\normalunderscore\discretionary{}{}{}}  \def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
 \def\codex #1{\tclose{#1}\endgroup}  \def\codex #1{\tclose{#1}\endgroup}
   
 %\let\exp=\tclose  %Was temporary  %\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.
 %  
   % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
   %   `example' (@kbd uses ttsl only inside of @example and friends),
   %   or `code' (@kbd uses normal tty font always).
   \def\kbdinputstyle{\parsearg\kbdinputstylexxx}
   \def\kbdinputstylexxx#1{%
     \def\arg{#1}%
     \ifx\arg\worddistinct
       \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
     \else\ifx\arg\wordexample
       \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
     \else\ifx\arg\wordcode
       \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
     \fi\fi\fi
   }
   \def\worddistinct{distinct}
   \def\wordexample{example}
   \def\wordcode{code}
   
   % Default is kbdinputdistinct.  (Too much of a hassle to call the macro,
   % the catcodes are wrong for parsearg to work.)
   \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
   
 \def\xkey{\key}  \def\xkey{\key}
 \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%  \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
 \ifx\one\xkey\ifx\threex\three \key{#2}%  \ifx\one\xkey\ifx\threex\three \key{#2}%
 \else{\tclose{\ttsl\look}}\fi  \else{\tclose{\kbdfont\look}}\fi
 \else{\tclose{\ttsl\look}}\fi}  \else{\tclose{\kbdfont\look}}\fi}
   
   % @url.  Quotes do not seem necessary, so use \code.
   \let\url=\code
   
   % @uref (abbreviation for `urlref') takes an optional second argument
   % specifying the text to display.  First (mandatory) arg is the url.
   % Perhaps eventually put in a hypertex \special here.
   % 
   \def\uref#1{\urefxxx #1,,\finish}
   \def\urefxxx#1,#2,#3\finish{%
     \setbox0 = \hbox{\ignorespaces #2}%
     \ifdim\wd0 > 0pt
       \unhbox0\ (\code{#1})%
     \else
       \code{#1}%
     \fi
   }
   
   % rms does not like the angle brackets --karl, 17may97.
   % So now @email is just like @uref.
   %\def\email#1{\angleleft{\tt #1}\angleright}
   \let\email=\uref
   
 % 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
 % shrink), and it is reasonable to expect all typewriter fonts to have  % shrink), and it is reasonable to expect all typewriter fonts to have
 % this property, we can check that font parameter.  % this property, we can check that font parameter.
 %   %
 \def\ifmonospace{\ifdim\fontdimen3\font=0pt }  \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
   
 % Typeset a dimension, e.g., `in' or `pt'.  The only reason for the  % Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
Line 1349  where each line of input produces a line Line 1487  where each line of input produces a line
 \newskip\titlepagebottomglue \titlepagebottomglue = 2pc  \newskip\titlepagebottomglue \titlepagebottomglue = 2pc
   
 % First the title page.  Must do @settitle before @titlepage.  % First the title page.  Must do @settitle before @titlepage.
 \def\titlefont#1{{\titlerm #1}}  
   
 \newif\ifseenauthor  \newif\ifseenauthor
 \newif\iffinishedtitlepage  \newif\iffinishedtitlepage
   
Line 1372  where each line of input produces a line Line 1508  where each line of input produces a line
    %     %
    % Now you can print the title using @title.     % Now you can print the title using @title.
    \def\title{\parsearg\titlezzz}%     \def\title{\parsearg\titlezzz}%
    \def\titlezzz##1{\leftline{\titlefont{##1}}     \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
                     % print a rule at the page bottom also.                      % print a rule at the page bottom also.
                     \finishedtitlepagefalse                      \finishedtitlepagefalse
                     \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%                      \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
Line 1461  where each line of input produces a line Line 1597  where each line of input produces a line
 \gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%  \gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
 \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}  \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
   
 \gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}  \gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
 \gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%  
 \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}  
 \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}  
   
 \gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}  \gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
 \gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%  \gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
Line 1472  where each line of input produces a line Line 1605  where each line of input produces a line
   
 \gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}  \gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
 \gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%  \gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
 \global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}    \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
     %
     % Leave some space for the footline.  Hopefully ok to assume
     % @evenfooting will not be used by itself.
     \global\advance\pageheight by -\baselineskip
     \global\advance\vsize by -\baselineskip
   }
   
 \gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish}  \gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
 \gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%  
 \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}  
 \global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}  
 %  %
 }% unbind the catcode of @.  }% unbind the catcode of @.
   
Line 1861  July\or August\or September\or October\o Line 1997  July\or August\or September\or October\o
 \def\itemizeitem{%  \def\itemizeitem{%
 \advance\itemno by 1  \advance\itemno by 1
 {\let\par=\endgraf \smallbreak}%  {\let\par=\endgraf \smallbreak}%
 \ifhmode \errmessage{\in hmode at itemizeitem}\fi  \ifhmode \errmessage{In hmode at itemizeitem}\fi
 {\parskip=0in \hskip 0pt  {\parskip=0in \hskip 0pt
 \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%  \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
 \vadjust{\penalty 1200}}%  \vadjust{\penalty 1200}}%
Line 1879  July\or August\or September\or October\o Line 2015  July\or August\or September\or October\o
   
 % To make preamble:  % To make preamble:
 %  %
 % Either define widths of columns in terms of percent of \hsize:   % Either define widths of columns in terms of percent of \hsize:
 %   @multitable @columnfractions .25 .3 .45  %   @multitable @columnfractions .25 .3 .45
 %   @item ...  %   @item ...
 %  %
Line 1897  July\or August\or September\or October\o Line 2033  July\or August\or September\or October\o
 % the preamble, break the line within one argument and it  % the preamble, break the line within one argument and it
 % will parse correctly, i.e.,  % will parse correctly, i.e.,
 %  %
 %     @multitable {Column 1 template} {Column 2 template} {Column 3   %     @multitable {Column 1 template} {Column 2 template} {Column 3
 %      template}  %      template}
 % Not:  % Not:
 %     @multitable {Column 1 template} {Column 2 template}   %     @multitable {Column 1 template} {Column 2 template}
 %      {Column 3 template}  %      {Column 3 template}
   
 % Each new table line starts with @item, each subsequent new column   % Each new table line starts with @item, each subsequent new column
 % starts with @tab. Empty columns may be produced by supplying @tab's  % starts with @tab. Empty columns may be produced by supplying @tab's
 % with nothing between them for as many times as empty columns are needed,  % with nothing between them for as many times as empty columns are needed,
 % ie, @tab@tab@tab will produce two empty columns.  % ie, @tab@tab@tab will produce two empty columns.
Line 1915  July\or August\or September\or October\o Line 2051  July\or August\or September\or October\o
   
 %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}  %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
 %   @item first col stuff @tab second col stuff @tab third col  %   @item first col stuff @tab second col stuff @tab third col
 %   @item   %   @item
 %   first col stuff   %   first col stuff
 %   @tab   %   @tab
 %   second col stuff   %   second col stuff
 %   @tab   %   @tab
 %   third col   %   third col
 %   @item first col stuff @tab second col stuff   %   @item first col stuff @tab second col stuff
 %   @tab Many paragraphs of text may be used in any column.  %   @tab Many paragraphs of text may be used in any column.
 %       %
 %         They will wrap at the width determined by the template.  %         They will wrap at the width determined by the template.
 %   @item@tab@tab This will be in third column.  %   @item@tab@tab This will be in third column.
 %   @end multitable  %   @end multitable
Line 1935  July\or August\or September\or October\o Line 2071  July\or August\or September\or October\o
 % @multitablelinespace is space to leave between table items, baseline  % @multitablelinespace is space to leave between table items, baseline
 %                                                            to baseline.  %                                                            to baseline.
 %   0pt means it depends on current normal line spacing.  %   0pt means it depends on current normal line spacing.
   %
 %%%%  
 % Dimensions   
   
 \newskip\multitableparskip  \newskip\multitableparskip
 \newskip\multitableparindent  \newskip\multitableparindent
 \newdimen\multitablecolspace  \newdimen\multitablecolspace
Line 1948  July\or August\or September\or October\o Line 2081  July\or August\or September\or October\o
 \multitablecolspace=12pt  \multitablecolspace=12pt
 \multitablelinespace=0pt  \multitablelinespace=0pt
   
 %%%%  
 % Macros used to set up halign preamble:  % Macros used to set up halign preamble:
   % 
 \let\endsetuptable\relax  \let\endsetuptable\relax
 \def\xendsetuptable{\endsetuptable}  \def\xendsetuptable{\endsetuptable}
 \let\columnfractions\relax  \let\columnfractions\relax
 \def\xcolumnfractions{\columnfractions}  \def\xcolumnfractions{\columnfractions}
 \newif\ifsetpercent  \newif\ifsetpercent
   
 %% 2/1/96, to allow fractions to be given with more than one digit.  % 2/1/96, to allow fractions to be given with more than one digit.
 \def\pickupwholefraction#1 {\global\advance\colcount by1 %  \def\pickupwholefraction#1 {\global\advance\colcount by1 %
 \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%  \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
 \setuptable}  \setuptable}
Line 1982  July\or August\or September\or October\o Line 2115  July\or August\or September\or October\o
 \ifx\go\pickupwholefraction\else\let\go\setuptable\fi%  \ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
 \fi\go}  \fi\go}
   
 %%%%  
 % multitable syntax  % multitable syntax
 \def\tab{&\hskip1sp\relax} % 2/2/96  \def\tab{&\hskip1sp\relax} % 2/2/96
                            % tiny skip here makes sure this column space is                             % tiny skip here makes sure this column space is
                            % maintained, even if it is never used.                             % maintained, even if it is never used.
   
   
 %%%%  
 % @multitable ... @end multitable definitions:  % @multitable ... @end multitable definitions:
   
 \def\multitable{\parsearg\dotable}  \def\multitable{\parsearg\dotable}
   
 \def\dotable#1{\bgroup  \def\dotable#1{\bgroup
 \let\item\cr    \vskip\parskip
 \tolerance=9500    \let\item\crcr
 \hbadness=9500    \tolerance=9500
 \setmultitablespacing    \hbadness=9500
 \parskip=\multitableparskip    \setmultitablespacing
 \parindent=\multitableparindent    \parskip=\multitableparskip
 \overfullrule=0pt    \parindent=\multitableparindent
 \global\colcount=0\relax%    \overfullrule=0pt
 \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%    \global\colcount=0
  % To parse everything between @multitable and @item :    \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
 \setuptable#1 \endsetuptable    %
  % Need to reset this to 0 after \setuptable.    % To parse everything between @multitable and @item:
 \global\colcount=0\relax%     \setuptable#1 \endsetuptable
  %    %
  % This preamble sets up a generic column definition, which will    % \everycr will reset column counter, \colcount, at the end of
  % be used as many times as user calls for columns.    % each line. Every column entry will cause \colcount to advance by one.
  % \vtop will set a single line and will also let text wrap and     % The table preamble
  % continue for many paragraphs if desired.    % looks at the current \colcount to find the correct column width.
 \halign\bgroup&\global\advance\colcount by 1\relax%    \everycr{\noalign{%
 \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname    %
  % In order to keep entries from bumping into each other    % \filbreak%% keeps underfull box messages off when table breaks over pages.
  % we will add a \leftskip of \multitablecolspace to all columns after    % Maybe so, but it also creates really weird page breaks when the table
  % the first one.    % breaks over pages. Wouldn't \vfil be better?  Wait until the problem
  %  If a template has been used, we will add \multitablecolspace     % manifests itself, so it can be fixed for real --karl.
  % to the width of each template entry.      \global\colcount=0\relax}}%
  %  If user has set preamble in terms of percent of \hsize    %
  % we will use that dimension as the width of the column, and    % This preamble sets up a generic column definition, which will
  % the \leftskip will keep entries from bumping into each other.    % be used as many times as user calls for columns.
  % Table will start at left margin and final column will justify at    % \vtop will set a single line and will also let text wrap and
  % right margin.    % continue for many paragraphs if desired.
 \ifnum\colcount=1    \halign\bgroup&\global\advance\colcount by 1\relax
 \else      \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
   \ifsetpercent    %
     % In order to keep entries from bumping into each other
     % we will add a \leftskip of \multitablecolspace to all columns after
     % the first one.
     % 
     % If a template has been used, we will add \multitablecolspace
     % to the width of each template entry.
     % 
     % If the user has set preamble in terms of percent of \hsize we will
     % use that dimension as the width of the column, and the \leftskip
     % will keep entries from bumping into each other.  Table will start at
     % left margin and final column will justify at right margin.
     % 
     % Make sure we don't inherit \rightskip from the outer environment.
     \rightskip=0pt
     \ifnum\colcount=1
       % The first column will be indented with the surrounding text.
       \advance\hsize by\leftskip
   \else    \else
    % If user has <not> set preamble in terms of percent of \hsize      \ifsetpercent \else
    % we will advance \hsize by \multitablecolspace         % If user has not set preamble in terms of percent of \hsize
   \advance\hsize by \multitablecolspace        % we will advance \hsize by \multitablecolspace.
         \advance\hsize by \multitablecolspace
       \fi
      % In either case we will make \leftskip=\multitablecolspace:
     \leftskip=\multitablecolspace
   \fi    \fi
  % In either case we will make \leftskip=\multitablecolspace:    % Ignoring space at the beginning and end avoids an occasional spurious
 \leftskip=\multitablecolspace    % blank line, when TeX decides to break the line at the space before the
 \fi    % box from the multistrut, so the strut ends up on a line by itself.
 \noindent##\multistrut}\cr%    % For example:
  % \everycr will reset column counter, \colcount, at the end of    % @multitable @columnfractions .11 .89
  % each line. Every column  entry will cause \colcount to advance by one.     % @item @code{#}
  % The table preamble    % @tab Legal holiday which is valid in major parts of the whole country.
  % looks at the current \colcount to find the correct column width.    % Is automatically provided with highlighting sequences respectively marking
 \global\everycr{\noalign{%    % characters.
 \filbreak%% keeps underfull box messages off when table breaks over pages.    \noindent\ignorespaces##\unskip\multistrut}\cr
 \global\colcount=0\relax}}  
 }  }
   
 \def\setmultitablespacing{% test to see if user has set \multitablelinespace.  \def\setmultitablespacing{% test to see if user has set \multitablelinespace.
Line 2054  July\or August\or September\or October\o Line 2203  July\or August\or September\or October\o
 %% 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  %% Test to see if parskip is larger than space between lines of
 %% table. If not, do nothing.   %% table. If not, do nothing.
 %%        If so, set to same dimension as multitablelinespace.  %%        If so, set to same dimension as multitablelinespace.
 \else  \else
 \gdef\multistrut{\vrule height\multitablelinespace depth\dp0  \gdef\multistrut{\vrule height\multitablelinespace depth\dp0
Line 2189  width0pt\relax} \fi Line 2338  width0pt\relax} \fi
 %\def\char{\realbackslash char}%  %\def\char{\realbackslash char}%
 \def\TeX{\realbackslash TeX}%  \def\TeX{\realbackslash TeX}%
 \def\dots{\realbackslash dots }%  \def\dots{\realbackslash dots }%
 \def\copyright{\realbackslash copyright }%  \def\result{\realbackslash result}%
   \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\tclose##1{\realbackslash tclose {##1}}%
 \def\code##1{\realbackslash code {##1}}%  \def\code##1{\realbackslash code {##1}}%
 \def\dotless##1{\realbackslash dotless {##1}}%  \def\dotless##1{\realbackslash dotless {##1}}%
Line 2199  width0pt\relax} \fi Line 2354  width0pt\relax} \fi
 \def\r##1{\realbackslash r {##1}}%  \def\r##1{\realbackslash r {##1}}%
 \def\i##1{\realbackslash i {##1}}%  \def\i##1{\realbackslash i {##1}}%
 \def\b##1{\realbackslash b {##1}}%  \def\b##1{\realbackslash b {##1}}%
   \def\sc##1{\realbackslash sc {##1}}%
 \def\cite##1{\realbackslash cite {##1}}%  \def\cite##1{\realbackslash cite {##1}}%
 \def\key##1{\realbackslash key {##1}}%  \def\key##1{\realbackslash key {##1}}%
 \def\file##1{\realbackslash file {##1}}%  \def\file##1{\realbackslash file {##1}}%
Line 2206  width0pt\relax} \fi Line 2362  width0pt\relax} \fi
 \def\kbd##1{\realbackslash kbd {##1}}%  \def\kbd##1{\realbackslash kbd {##1}}%
 \def\dfn##1{\realbackslash dfn {##1}}%  \def\dfn##1{\realbackslash dfn {##1}}%
 \def\emph##1{\realbackslash emph {##1}}%  \def\emph##1{\realbackslash emph {##1}}%
   \def\value##1{\realbackslash value {##1}}%
 \unsepspaces  \unsepspaces
 }  }
   
Line 2296  width0pt\relax} \fi Line 2453  width0pt\relax} \fi
       \indexdummies % Must do this here, since \bf, etc expand at this stage        \indexdummies % Must do this here, since \bf, etc expand at this stage
       \escapechar=`\\        \escapechar=`\\
       {%        {%
         \let\folio=0 % We will expand all macros now EXCEPT \folio.          \let\folio=0% We will expand all macros now EXCEPT \folio.
         \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now          \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
         % so it will be output as is; and it will print as backslash.          % so it will be output as is; and it will print as backslash.
         %          %
Line 2370  width0pt\relax} \fi Line 2527  width0pt\relax} \fi
   
 % Define the macros used in formatting output of the sorted index material.  % Define the macros used in formatting output of the sorted index material.
   
 % This is what you call to cause a particular index to get printed.  % @printindex causes a particular index (the ??s file) to get printed.
 % Write  % It does not print any chapter heading (usually an @unnumbered).
 % @unnumbered Function Index  %
 % @printindex fn  
   
 \def\printindex{\parsearg\doprintindex}  \def\printindex{\parsearg\doprintindex}
   
 \def\doprintindex#1{\begingroup  \def\doprintindex#1{\begingroup
   \dobreak \chapheadingskip{10000}%    \dobreak \chapheadingskip{10000}%
   %    %
   \indexfonts \rm    \indexfonts \rm
   \tolerance = 9500    \tolerance = 9500
   \indexbreaks    \indexbreaks
   \def\indexbackslash{\rawbackslashxx}%  
   % Index files are almost Texinfo source, but we use \ as the escape  
   % character.  It would be better to use @, but that's too big a change  
   % to make right now.  
   \catcode`\\ = 0  
   \catcode`\@ = 11  
   \escapechar = `\\  
   \begindoublecolumns  
   %    %
   % See if the index file exists and is nonempty.    % See if the index file exists and is nonempty.
     % Change catcode of @ here so that if the index file contains
     % \initial {@}
     % as its first line, TeX doesn't complain about mismatched braces
     % (because it thinks @} is a control sequence).
     \catcode`\@ = 11
   \openin 1 \jobname.#1s    \openin 1 \jobname.#1s
   \ifeof 1    \ifeof 1
     % \enddoublecolumns gets confused if there is no text in the index,      % \enddoublecolumns gets confused if there is no text in the index,
Line 2409  width0pt\relax} \fi Line 2560  width0pt\relax} \fi
     \ifeof 1      \ifeof 1
       (Index is empty)        (Index is empty)
     \else      \else
         % Index files are almost Texinfo source, but we use \ as the escape
         % character.  It would be better to use @, but that's too big a change
         % to make right now.
         \def\indexbackslash{\rawbackslashxx}%
         \catcode`\\ = 0
         \escapechar = `\\
         \begindoublecolumns
       \input \jobname.#1s        \input \jobname.#1s
         \enddoublecolumns
     \fi      \fi
   \fi    \fi
   \closein 1    \closein 1
   \enddoublecolumns  
 \endgroup}  \endgroup}
   
 % These macros are used by the sorted index file itself.  % These macros are used by the sorted index file itself.
Line 2515  width0pt\relax} \fi Line 2673  width0pt\relax} \fi
   
 \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns  \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
   % Grab any single-column material above us.    % Grab any single-column material above us.
   \output = {\global\setbox\partialpage    \output = {\global\setbox\partialpage = \vbox{%
     =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%      % 
       % Here is a possibility not foreseen in manmac: if we accumulate a
       % whole lot of material, we might end up calling this \output
       % routine twice in a row (see the doublecol-lose test, which is
       % essentially a couple of indexes with @setchapternewpage off).  In
       % that case, we must prevent the second \partialpage from
       % simply overwriting the first, causing us to lose the page.
       % This will preserve it until a real output routine can ship it
       % out.  Generally, \partialpage will be empty when this runs and
       % this will be a no-op.
       \unvbox\partialpage
       %
       % Unvbox the main output page.
       \unvbox255
       \kern-\topskip \kern\baselineskip
     }}%
   \eject    \eject
   %    %
   % Now switch to the double-column output routine.    % Use the double-column output routine for subsequent pages.
   \output={\doublecolumnout}%    \output = {\doublecolumnout}%
   %    %
   % Change the page size parameters.  We could do this once outside this    % Change the page size parameters.  We could do this once outside this
   % routine, in each of @smallbook, @afourpaper, and the default 8.5x11    % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
   % format, but then we repeat the same computation.  Repeating a couple    % format, but then we repeat the same computation.  Repeating a couple
   % of assignments once per index is clearly meaningless for the    % of assignments once per index is clearly meaningless for the
   % execution time, so we may as well do it once.    % execution time, so we may as well do it in one place.
   %    %
   % First we halve the line length, less a little for the gutter between    % First we halve the line length, less a little for the gutter between
   % the columns.  We compute the gutter based on the line length, so it    % the columns.  We compute the gutter based on the line length, so it
   % changes automatically with the paper format.  The magic constant    % changes automatically with the paper format.  The magic constant
   % below is chosen so that the gutter has the same value (well, +- <    % below is chosen so that the gutter has the same value (well, +-<1pt)
   % 1pt) as it did when we hard-coded it.    % as it did when we hard-coded it.
   %    %
   % We put the result in a separate register, \doublecolumhsize, so we    % We put the result in a separate register, \doublecolumhsize, so we
   % can restore it in \pagesofar, after \hsize itself has (potentially)    % can restore it in \pagesofar, after \hsize itself has (potentially)
Line 2553  width0pt\relax} \fi Line 2726  width0pt\relax} \fi
   % (undoubled) page height minus any material left over from the    % (undoubled) page height minus any material left over from the
   % previous page.    % previous page.
   \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage    \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
   % box0 will be the left-hand column, box1 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@
   \onepageout\pagesofar    \onepageout\pagesofar
   \unvbox255 \penalty\outputpenalty    \unvbox255
     \penalty\outputpenalty
 }  }
 \def\pagesofar{%  \def\pagesofar{%
   % The contents of the output page -- any previous material,    % Re-output the contents of the output page -- any previous material,
   % followed by the two boxes we just split.    % followed by the two boxes we just split.
   \unvbox\partialpage    \unvbox\partialpage
   \hsize = \doublecolumnhsize    \hsize = \doublecolumnhsize
   \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%    \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
 }  }
 \def\enddoublecolumns{%  \def\enddoublecolumns{%
   \output={\balancecolumns}\eject % split what we have    \output = {\balancecolumns}\eject % split what we have
   \endgroup    \endgroup % started in \begindoublecolumns
     %
   % Back to normal single-column typesetting, but take account of the    % Back to normal single-column typesetting, but take account of the
   % fact that we just accumulated some stuff on the output page.    % fact that we just accumulated some stuff on the output page.
   \pagegoal=\vsize     \pagegoal = \vsize
 }  }
 \def\balancecolumns{%  \def\balancecolumns{%
   % Called on the last page of the double column material.    % Called at the end of the double column material.
   \setbox0=\vbox{\unvbox255}%    \setbox0 = \vbox{\unvbox255}%
   \dimen@ = \ht0    \dimen@ = \ht0
   \advance\dimen@ by \topskip    \advance\dimen@ by \topskip
   \advance\dimen@ by-\baselineskip    \advance\dimen@ by-\baselineskip
   \divide\dimen@ by 2    \divide\dimen@ by 2
   \splittopskip = \topskip    \splittopskip = \topskip
   % Loop until we get a decent breakpoint.    % Loop until we get a decent breakpoint.
   {\vbadness=10000 \loop \global\setbox3=\copy0    {\vbadness=10000 \loop
       \global\setbox3=\copy0
     \global\setbox1=\vsplit3 to\dimen@      \global\setbox1=\vsplit3 to\dimen@
     \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}%      \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt
      \repeat}%
   \setbox0=\vbox to\dimen@{\unvbox1}%    \setbox0=\vbox to\dimen@{\unvbox1}%
   \setbox2=\vbox to\dimen@{\unvbox3}%    \setbox2=\vbox to\dimen@{\unvbox3}%
   \pagesofar    \pagesofar
 }  }
 \catcode `\@=\other  \catcode`\@ = \other
   
   
 \message{sectioning,}  \message{sectioning,}
 % Define chapters, sections, etc.  % Define chapters, sections, etc.
   
 \newcount \chapno  \newcount\chapno
 \newcount \secno        \secno=0  \newcount\secno        \secno=0
 \newcount \subsecno     \subsecno=0  \newcount\subsecno     \subsecno=0
 \newcount \subsubsecno  \subsubsecno=0  \newcount\subsubsecno  \subsubsecno=0
   
 % 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\the\appendixno}  \def\appendixletter{\char\the\appendixno}
   
 \newwrite \contentsfile  \newwrite\contentsfile
 % This is called from \setfilename.  % This is called from \setfilename.
 \def\opencontents{\openout \contentsfile = \jobname.toc}  \def\opencontents{\openout\contentsfile = \jobname.toc }
   
 % 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
   
 \def\thischapter{} \def\thissection{}  \def\thischapter{} \def\thissection{}
 \def\seccheck#1{\if \pageno<0 %  \def\seccheck#1{\ifnum \pageno<0
 \errmessage{@#1 not allowed after generating table of contents}\fi    \errmessage{@#1 not allowed after generating table of contents}%
 %  \fi}
 }  
   
 \def\chapternofonts{%  \def\chapternofonts{%
 \let\rawbackslash=\relax%    \let\rawbackslash=\relax
 \let\frenchspacing=\relax%    \let\frenchspacing=\relax
 \def\result{\realbackslash result}    \def\result{\realbackslash result}%
 \def\equiv{\realbackslash equiv}    \def\equiv{\realbackslash equiv}%
 \def\expansion{\realbackslash expansion}    \def\expansion{\realbackslash expansion}%
 \def\print{\realbackslash print}    \def\print{\realbackslash print}%
 \def\TeX{\realbackslash TeX}    \def\TeX{\realbackslash TeX}%
 \def\dots{\realbackslash dots}    \def\dots{\realbackslash dots}%
 \def\copyright{\realbackslash copyright}    \def\result{\realbackslash result}%
 \def\tt{\realbackslash tt}    \def\equiv{\realbackslash equiv}%
 \def\bf{\realbackslash bf }    \def\expansion{\realbackslash expansion}%
 \def\w{\realbackslash w}    \def\print{\realbackslash print}%
 \def\less{\realbackslash less}    \def\error{\realbackslash error}%
 \def\gtr{\realbackslash gtr}    \def\point{\realbackslash point}%
 \def\hat{\realbackslash hat}    \def\copyright{\realbackslash copyright}%
 \def\char{\realbackslash char}    \def\tt{\realbackslash tt}%
 \def\tclose##1{\realbackslash tclose {##1}}    \def\bf{\realbackslash bf}%
 \def\code##1{\realbackslash code {##1}}    \def\w{\realbackslash w}%
 \def\samp##1{\realbackslash samp {##1}}    \def\less{\realbackslash less}%
 \def\r##1{\realbackslash r {##1}}    \def\gtr{\realbackslash gtr}%
 \def\b##1{\realbackslash b {##1}}    \def\hat{\realbackslash hat}%
 \def\key##1{\realbackslash key {##1}}    \def\char{\realbackslash char}%
 \def\file##1{\realbackslash file {##1}}    \def\tclose##1{\realbackslash tclose{##1}}%
 \def\kbd##1{\realbackslash kbd {##1}}    \def\code##1{\realbackslash code{##1}}%
 % These are redefined because @smartitalic wouldn't work inside xdef.    \def\samp##1{\realbackslash samp{##1}}%
 \def\i##1{\realbackslash i {##1}}    \def\r##1{\realbackslash r{##1}}%
 \def\cite##1{\realbackslash cite {##1}}    \def\b##1{\realbackslash b{##1}}%
 \def\var##1{\realbackslash var {##1}}    \def\key##1{\realbackslash key{##1}}%
 \def\emph##1{\realbackslash emph {##1}}    \def\file##1{\realbackslash file{##1}}%
 \def\dfn##1{\realbackslash dfn {##1}}    \def\kbd##1{\realbackslash kbd{##1}}%
     % These are redefined because @smartitalic wouldn't work inside xdef.
     \def\i##1{\realbackslash i{##1}}%
     \def\cite##1{\realbackslash cite{##1}}%
     \def\var##1{\realbackslash var{##1}}%
     \def\emph##1{\realbackslash emph{##1}}%
     \def\dfn##1{\realbackslash dfn{##1}}%
 }  }
   
 \newcount\absseclevel % used to calculate proper heading level  \newcount\absseclevel % used to calculate proper heading level
Line 2733  width0pt\relax} \fi Line 2915  width0pt\relax} \fi
 % because we don't want its macros evaluated now.  % because we don't want its macros evaluated now.
 \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%  \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%  \toks0 = {#1}%
   \edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp  %  \write \contentsfile \temp  %
 \donoderef %  \donoderef %
Line 2752  width0pt\relax} \fi Line 2935  width0pt\relax} \fi
 \gdef\thischaptername{#1}%  \gdef\thischaptername{#1}%
 \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%  \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash chapentry  \toks0 = {#1}%
   {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%  \edef\temp{{\realbackslash chapentry{\the\toks0}%
     {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp  %  \write \contentsfile \temp  %
 \appendixnoderef %  \appendixnoderef %
Line 2787  width0pt\relax} \fi Line 2971  width0pt\relax} \fi
 \unnumbchapmacro {#1}%  \unnumbchapmacro {#1}%
 \gdef\thischapter{#1}\gdef\thissection{#1}%  \gdef\thischapter{#1}\gdef\thissection{#1}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%  \toks0 = {#1}%
   \edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp  %  \write \contentsfile \temp  %
 \unnumbnoderef %  \unnumbnoderef %
Line 2802  width0pt\relax} \fi Line 2987  width0pt\relax} \fi
 \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %  \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
 \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%  \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
 {\chapternofonts%  {\chapternofonts%
   \toks0 = {#1}%
 \edef\temp{{\realbackslash secentry %  \edef\temp{{\realbackslash secentry %
 {#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%  {\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp %  \write \contentsfile \temp %
 \donoderef %  \donoderef %
Line 2817  width0pt\relax} \fi Line 3003  width0pt\relax} \fi
 \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %  \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%  \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
 {\chapternofonts%  {\chapternofonts%
   \toks0 = {#1}%
 \edef\temp{{\realbackslash secentry %  \edef\temp{{\realbackslash secentry %
 {#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%  {\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp %  \write \contentsfile \temp %
 \appendixnoderef %  \appendixnoderef %
Line 2830  width0pt\relax} \fi Line 3017  width0pt\relax} \fi
 \def\unnumberedseczzz #1{\seccheck{unnumberedsec}%  \def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
 \plainsecheading {#1}\gdef\thissection{#1}%  \plainsecheading {#1}\gdef\thissection{#1}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%  \toks0 = {#1}%
   \edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp %  \write \contentsfile \temp %
 \unnumbnoderef %  \unnumbnoderef %
Line 2843  width0pt\relax} \fi Line 3031  width0pt\relax} \fi
 \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %  \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
 \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%  \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
 {\chapternofonts%  {\chapternofonts%
   \toks0 = {#1}%
 \edef\temp{{\realbackslash subsecentry %  \edef\temp{{\realbackslash subsecentry %
 {#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%  {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp %  \write \contentsfile \temp %
 \donoderef %  \donoderef %
Line 2857  width0pt\relax} \fi Line 3046  width0pt\relax} \fi
 \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %  \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
 \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%  \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
 {\chapternofonts%  {\chapternofonts%
   \toks0 = {#1}%
 \edef\temp{{\realbackslash subsecentry %  \edef\temp{{\realbackslash subsecentry %
 {#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%  {\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp %  \write \contentsfile \temp %
 \appendixnoderef %  \appendixnoderef %
Line 2870  width0pt\relax} \fi Line 3060  width0pt\relax} \fi
 \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%  \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
 \plainsubsecheading {#1}\gdef\thissection{#1}%  \plainsubsecheading {#1}\gdef\thissection{#1}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%  \toks0 = {#1}%
   \edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp %  \write \contentsfile \temp %
 \unnumbnoderef %  \unnumbnoderef %
Line 2884  width0pt\relax} \fi Line 3075  width0pt\relax} \fi
 \subsubsecheading {#1}  \subsubsecheading {#1}
   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%    {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash subsubsecentry %  \toks0 = {#1}%
   {#1}  \edef\temp{{\realbackslash subsubsecentry{\the\toks0}
   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}    {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
   {\noexpand\folio}}}%    {\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
Line 2901  width0pt\relax} \fi Line 3092  width0pt\relax} \fi
 \subsubsecheading {#1}  \subsubsecheading {#1}
   {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%    {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash subsubsecentry{#1}%  \toks0 = {#1}%
   \edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
   {\appendixletter}    {\appendixletter}
   {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%    {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
Line 2915  width0pt\relax} \fi Line 3107  width0pt\relax} \fi
 \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%  \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
 \plainsubsubsecheading {#1}\gdef\thissection{#1}%  \plainsubsubsecheading {#1}\gdef\thissection{#1}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%  \toks0 = {#1}%
   \edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
 \write \contentsfile \temp %  \write \contentsfile \temp %
 \unnumbnoderef %  \unnumbnoderef %
Line 3096  width0pt\relax} \fi Line 3289  width0pt\relax} \fi
   
   
 % Print any size section title.  % Print any size section title.
 %   %
 % #1 is the section type (sec/subsec/subsubsec), #2 is the section  % #1 is the section type (sec/subsec/subsubsec), #2 is the section
 % number (maybe empty), #3 the text.  % number (maybe empty), #3 the text.
 \def\sectionheading#1#2#3{%  \def\sectionheading#1#2#3{%
Line 3140  width0pt\relax} \fi Line 3333  width0pt\relax} \fi
    \unnumbchapmacro{#1}\def\thischapter{}%     \unnumbchapmacro{#1}\def\thischapter{}%
    \begingroup                  % Set up to handle contents files properly.     \begingroup                  % Set up to handle contents files properly.
       \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11        \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
       \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi        % We can't do this, because then an actual ^ in a section
         % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
         %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
       \raggedbottom             % Worry more about breakpoints than the bottom.        \raggedbottom             % Worry more about breakpoints than the bottom.
       \advance\hsize by -\contentsrightmargin % Don't use the full line length.        \advance\hsize by -\contentsrightmargin % Don't use the full line length.
 }  }
Line 3265  width0pt\relax} \fi Line 3460  width0pt\relax} \fi
 % the index entries, but we want to suppress hyphenation here.  (We  % the index entries, but we want to suppress hyphenation here.  (We
 % can't do that in the \entry macro, since index entries might consist  % can't do that in the \entry macro, since index entries might consist
 % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)  % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
 %  
 % \turnoffactive is for the sake of @" used for umlauts.  
 \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
   \entry{\turnoffactive #1}{\turnoffactive #2}%    % Do not use \turnoffactive in these arguments.  Since the toc is
     % typeset in cmr, so characters such as _ would come out wrong; we
     % have to do the usual translation tricks.
     \entry{#1}{#2}%
 \endgroup}  \endgroup}
   
 % Space between chapter (or whatever) number and the title.  % Space between chapter (or whatever) number and the title.
Line 3335  width0pt\relax} \fi Line 3531  width0pt\relax} \fi
 % But \@ or @@ will get a plain tex @ character.  % But \@ or @@ will get a plain tex @ character.
   
 \def\tex{\begingroup  \def\tex{\begingroup
 \catcode `\\=0 \catcode `\{=1 \catcode `\}=2    \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6    \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
 \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie    \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
 \catcode `\%=14    \catcode `\%=14
 \catcode 43=12 % plus    \catcode 43=12 % plus
 \catcode`\"=12    \catcode`\"=12
 \catcode`\==12    \catcode`\==12
 \catcode`\|=12    \catcode`\|=12
 \catcode`\<=12    \catcode`\<=12
 \catcode`\>=12    \catcode`\>=12
 \escapechar=`\\    \escapechar=`\\
 %    %
 \let\,=\ptexcomma    \let\b=\ptexb
 \let\~=\ptextilde    \let\bullet=\ptexbullet
 \let\{=\ptexlbrace    \let\c=\ptexc
 \let\}=\ptexrbrace    \let\,=\ptexcomma
 \let\.=\ptexdot    \let\.=\ptexdot
 \let\*=\ptexstar    \let\dots=\ptexdots
 \let\dots=\ptexdots    \let\equiv=\ptexequiv
 \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}    \let\!=\ptexexclam
 \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}    \let\i=\ptexi
 \def\@{@}%    \let\{=\ptexlbrace
 \let\bullet=\ptexbullet    \let\}=\ptexrbrace
 \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext    \let\*=\ptexstar
 %    \let\t=\ptext
     %
     \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
     \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
     \def\@{@}%
 \let\Etex=\endgroup}  \let\Etex=\endgroup}
   
 % Define @lisp ... @endlisp.  % Define @lisp ... @endlisp.
Line 3496  width0pt\relax} \fi Line 3696  width0pt\relax} \fi
 %  %
 \def\nonfillfinish{\afterenvbreak\endgroup}%  \def\nonfillfinish{\afterenvbreak\endgroup}%
   
 % This macro is  
 \def\lisp{\begingroup  \def\lisp{\begingroup
   \nonfillstart    \nonfillstart
   \let\Elisp = \nonfillfinish    \let\Elisp = \nonfillfinish
   \tt    \tt
     % Make @kbd do something special, if requested.
     \let\kbdfont\kbdexamplefont
   \rawbackslash % have \ input char produce \ char from current font    \rawbackslash % have \ input char produce \ char from current font
   \gobble    \gobble
 }  }
Line 3618  width0pt\relax} \fi Line 3819  width0pt\relax} \fi
   
 % Definitions of (, ) and & used in args for functions.  % Definitions of (, ) and & used in args for functions.
 % This is the definition of ( outside of all parentheses.  % This is the definition of ( outside of all parentheses.
 \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %  \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
 \global\advance\parencount by 1 }    \global\advance\parencount by 1
   }
 %  %
 % This is the definition of ( when already inside a level of parens.  % This is the definition of ( when already inside a level of parens.
 \gdef\opnested{\char`\(\global\advance\parencount by 1 }  \gdef\opnested{\char`\(\global\advance\parencount by 1 }
 %  %
 \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.  \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
 % also in that case restore the outer-level definition of (.    % also in that case restore the outer-level definition of (.
 \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi    \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
 \global\advance \parencount by -1 }    \global\advance \parencount by -1 }
 % If we encounter &foo, then turn on ()-hacking afterwards  % If we encounter &foo, then turn on ()-hacking afterwards
 \gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }  \gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
 %  %
Line 3635  width0pt\relax} \fi Line 3837  width0pt\relax} \fi
 } % End of definition inside \activeparens  } % End of definition inside \activeparens
 %% These parens (in \boldbrax) actually are a little bolder than the  %% These parens (in \boldbrax) actually are a little bolder than the
 %% contained text.  This is especially needed for [ and ]  %% contained text.  This is especially needed for [ and ]
 \def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}  \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
 \def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}  \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
   \def\ampnr{\&}
   \def\lbrb{{\bf\char`\[}}
   \def\rbrb{{\bf\char`\]}}
   
 % First, defname, which formats the header line itself.  % First, defname, which formats the header line itself.
 % #1 should be the function name.  % #1 should be the function name.
Line 3729  width0pt\relax} \fi Line 3934  width0pt\relax} \fi
   
 % This is used for \def{tp,vr}parsebody.  It could probably be used for  % This is used for \def{tp,vr}parsebody.  It could probably be used for
 % some of the others, too, with some judicious conditionals.  % some of the others, too, with some judicious conditionals.
 %   %
 \def\parsebodycommon#1#2#3{%  \def\parsebodycommon#1#2#3{%
   \begingroup\inENV %    \begingroup\inENV %
   \medbreak %    \medbreak %
Line 3763  width0pt\relax} \fi Line 3968  width0pt\relax} \fi
 }  }
   
 % Fine, but then we have to eventually remove the \empty *and* the  % Fine, but then we have to eventually remove the \empty *and* the
 % braces (if any).  That's what this does, putting the result in \tptemp.  % braces (if any).  That's what this does.
 %   %
 \def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}%  \def\removeemptybraces\empty#1\relax{#1}
   
 % After \spacesplit has done its work, this is called -- #1 is the final  % After \spacesplit has done its work, this is called -- #1 is the final
 % thing to call, #2 the type name (which starts with \empty), and #3  % thing to call, #2 the type name (which starts with \empty), and #3
 % (which might be empty) the arguments.  % (which might be empty) the arguments.
 %   %
 \def\parsetpheaderline#1#2#3{%  \def\parsetpheaderline#1#2#3{%
   \removeemptybraces#2\relax    #1{\removeemptybraces#2\relax}{#3}%
   #1{\tptemp}{#3}%  
 }%  }%
   
 \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %  \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
Line 3814  width0pt\relax} \fi Line 4018  width0pt\relax} \fi
 \hyphenchar\tensl=0  \hyphenchar\tensl=0
 #1%  #1%
 \hyphenchar\tensl=45  \hyphenchar\tensl=45
 \ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\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
 \endgraf\penalty 10000\vskip -\parskip\penalty 10000%  \endgraf\penalty 10000\vskip -\parskip\penalty 10000%
Line 3915  width0pt\relax} \fi Line 4119  width0pt\relax} \fi
 \def\defmacx #1 {\errmessage{@defmacx in invalid context}}  \def\defmacx #1 {\errmessage{@defmacx in invalid context}}
 \def\defspecx #1 {\errmessage{@defspecx in invalid context}}  \def\defspecx #1 {\errmessage{@defspecx in invalid context}}
 \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}  \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
   \def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
 \def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}  \def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
   
 % @defmethod, and so on  % @defmethod, and so on
Line 3930  width0pt\relax} \fi Line 4135  width0pt\relax} \fi
 \defunargs {#3}\endgroup %  \defunargs {#3}\endgroup %
 }  }
   
   % @deftypemethod foo-class return-type foo-method args
   %
   \def\deftypemethod{%
     \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
   %
   % #1 is the class name, #2 the data type, #3 the method name, #4 the args.
   \def\deftypemethodheader#1#2#3#4{%
     \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
   }
   
 % @defmethod == @defop Method  % @defmethod == @defop Method
   
 \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}  \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
Line 4007  width0pt\relax} \fi Line 4222  width0pt\relax} \fi
   
 \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}  \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
   
 % #1 is the data type.  #2 is the name.  % #1 is the data type.  #2 is the name, perhaps followed by text that
   % is actually part of the data type, which should not be put into the index.
 \def\deftypevarheader #1#2{%  \def\deftypevarheader #1#2{%
 \doind {vr}{\code{#2}}% Make entry in variables index  \dovarind#2 \relax% Make entry in variables index
 \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%  \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
 \interlinepenalty=10000  \interlinepenalty=10000
 \endgraf\penalty 10000\vskip -\parskip\penalty 10000  \endgraf\penalty 10000\vskip -\parskip\penalty 10000
 \endgroup}  \endgroup}
   \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
   
 % @deftypevr {Global Flag} int enable  % @deftypevr {Global Flag} int enable
   
 \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}  \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
   
 \def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}%  \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\penalty 10000\vskip -\parskip\penalty 10000  \endgraf\penalty 10000\vskip -\parskip\penalty 10000
Line 4142  width0pt\relax} \fi Line 4359  width0pt\relax} \fi
   
 % Use \turnoffactive so that punctuation chars such as underscore  % Use \turnoffactive so that punctuation chars such as underscore
 % work in node names.  % work in node names.
 \def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat%  \def\dosetq #1#2{{\let\folio=0 \turnoffactive
 \edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%  \edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
 \next}}  \next}}
   
Line 4195  width0pt\relax} \fi Line 4412  width0pt\relax} \fi
 \def\refx#1#2{%  \def\refx#1#2{%
   \expandafter\ifx\csname X#1\endcsname\relax    \expandafter\ifx\csname X#1\endcsname\relax
     % If not defined, say something at least.      % If not defined, say something at least.
     $\langle$un\-de\-fined$\rangle$%      \angleleft un\-de\-fined\angleright
     \ifhavexrefs      \ifhavexrefs
       \message{\linenumber Undefined cross reference `#1'.}%        \message{\linenumber Undefined cross reference `#1'.}%
     \else      \else
Line 4211  width0pt\relax} \fi Line 4428  width0pt\relax} \fi
   #2% Output the suffix in any case.    #2% Output the suffix in any case.
 }  }
   
 % Read the last existing aux file, if any.  No error if none exists.  
   
 % This is the macro invoked by entries in the aux file.  % This is the macro invoked by entries in the aux file.
 \def\xrdef #1#2{  % 
 {\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}  \def\xrdef#1{\begingroup
     % Reenable \ as an escape while reading the second argument.
     \catcode`\\ = 0
     \afterassignment\endgroup
     \expandafter\gdef\csname X#1\endcsname
   }
   
 \def\readauxfile{%  % Read the last existing aux file, if any.  No error if none exists.
 \begingroup  \def\readauxfile{\begingroup
 \catcode `\^^@=\other    \catcode`\^^@=\other
 \catcode `\&=\other    \catcode`\^^A=\other
 \catcode `\=\other    \catcode`\^^B=\other
 \catcode `\^^C=\other    \catcode`\^^C=\other
 \catcode `\^^D=\other    \catcode`\^^D=\other
 \catcode `\^^E=\other    \catcode`\^^E=\other
 \catcode `\^^F=\other    \catcode`\^^F=\other
 \catcode `\^^G=\other    \catcode`\^^G=\other
 \catcode `\^^H=\other    \catcode`\^^H=\other
 \catcode `\ =\other    \catcode`\^^K=\other
 \catcode `\^^L=\other    \catcode`\^^L=\other
 \catcode `\=\other    \catcode`\^^N=\other
 \catcode `\=\other    \catcode`\^^P=\other
 \catcode `\=\other    \catcode`\^^Q=\other
 \catcode `\=\other    \catcode`\^^R=\other
 \catcode `\=\other    \catcode`\^^S=\other
 \catcode `\=\other    \catcode`\^^T=\other
 \catcode `\=\other    \catcode`\^^U=\other
 \catcode `\=\other    \catcode`\^^V=\other
 \catcode `\=\other    \catcode`\^^W=\other
 \catcode `\=\other    \catcode`\^^X=\other
 \catcode `\=\other    \catcode`\^^Z=\other
 \catcode `\=\other    \catcode`\^^[=\other
 \catcode 26=\other    \catcode`\^^\=\other
 \catcode `\^^[=\other    \catcode`\^^]=\other
 \catcode `\^^\=\other    \catcode`\^^^=\other
 \catcode `\^^]=\other    \catcode`\^^_=\other
 \catcode `\^^^=\other    \catcode`\@=\other
 \catcode `\^^_=\other    \catcode`\^=\other
 \catcode `\@=\other    % It was suggested to define this as 7, which would allow ^^e4 etc.
 \catcode `\^=\other    % in xref tags, i.e., node names.  But since ^^e4 notation isn't
 \catcode `\~=\other    % supported in the main text, it doesn't seem desirable.  Furthermore,
 \catcode `\[=\other    % that is not enough: for node names that actually contain a ^
 \catcode `\]=\other    % character, we would end up writing a line like this: 'xrdef {'hat
 \catcode`\"=\other    % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
 \catcode`\_=\other    % argument, and \hat is not an expandable control sequence.  It could
 \catcode`\|=\other    % all be worked out, but why?  Either we support ^^ or we don't.
 \catcode`\<=\other    %
 \catcode`\>=\other    % The other change necessary for this was to define \auxhat:
 \catcode `\$=\other    % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
 \catcode `\#=\other    % and then to call \auxhat in \setq.
 \catcode `\&=\other    %
 % `\+ does not work, so use 43.    \catcode`\~=\other
 \catcode 43=\other    \catcode`\[=\other
 % Make the characters 128-255 be printing characters    \catcode`\]=\other
 {%    \catcode`\"=\other
   \count 1=128    \catcode`\_=\other
   \def\loop{%    \catcode`\|=\other
     \catcode\count 1=\other    \catcode`\<=\other
     \advance\count 1 by 1    \catcode`\>=\other
     \ifnum \count 1<256 \loop \fi    \catcode`\$=\other
     \catcode`\#=\other
     \catcode`\&=\other
     % `\+ does not work, so use 43.
     \catcode43=\other
     % Make the characters 128-255 be printing characters
     {%
       \count 1=128
       \def\loop{%
         \catcode\count 1=\other
         \advance\count 1 by 1
         \ifnum \count 1<256 \loop \fi
       }%
   }%    }%
 }%    % The aux file uses ' as the escape (for now).
 % the aux file uses ' as the escape.    % Turn off \ as an escape so we do not lose on
 % Turn off \ as an escape so we do not lose on    % entries which were dumped with control sequences in their names.
 % entries which were dumped with control sequences in their names.    % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
 % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^    % Reference to such entries still does not work the way one would wish,
 % Reference to such entries still does not work the way one would wish,    % but at least they do not bomb out when the aux file is read in.
 % but at least they do not bomb out when the aux file is read in.    \catcode`\{=1
 \catcode `\{=1 \catcode `\}=2    \catcode`\}=2
 \catcode `\%=\other    \catcode`\%=\other
 \catcode `\'=0    \catcode`\'=0
 \catcode`\^=7 % to make ^^e4 etc usable in xref tags     \catcode`\\=\other
 \catcode `\\=\other    %
 \openin 1 \jobname.aux    \openin 1 \jobname.aux
 \ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue    \ifeof 1 \else
 \global\warnedobstrue      \closein 1
 \fi      \input \jobname.aux
 % Open the new aux file.  Tex will close it automatically at exit.      \global\havexrefstrue
 \openout \auxfile=\jobname.aux      \global\warnedobstrue
     \fi
     % Open the new aux file.  TeX will close it automatically at exit.
     \openout\auxfile=\jobname.aux
 \endgroup}  \endgroup}
   
   
Line 4303  width0pt\relax} \fi Line 4538  width0pt\relax} \fi
 % space to prevent strange expansion errors.)  % space to prevent strange expansion errors.)
 \def\supereject{\par\penalty -20000\footnoteno =0 }  \def\supereject{\par\penalty -20000\footnoteno =0 }
   
 % @footnotestyle is meaningful for info output only..  % @footnotestyle is meaningful for info output only.
 \let\footnotestyle=\comment  \let\footnotestyle=\comment
   
 \let\ptexfootnote=\footnote  \let\ptexfootnote=\footnote
Line 4329  width0pt\relax} \fi Line 4564  width0pt\relax} \fi
 % Don't bother with the trickery in plain.tex to not require the  % Don't bother with the trickery in plain.tex to not require the
 % footnote text as a parameter.  Our footnotes don't need to be so general.  % footnote text as a parameter.  Our footnotes don't need to be so general.
 %  %
 \long\gdef\footnotezzz#1{\insert\footins{%  % Oh yes, they do; otherwise, @ifset and anything else that uses
   % \parseargline fail inside footnotes because the tokens are fixed when
   % the footnote is read.  --karl, 16nov96.
   %
   \long\gdef\footnotezzz{\insert\footins\bgroup
   % We want to typeset this text as a normal paragraph, even if the    % We want to typeset this text as a normal paragraph, even if the
   % footnote reference occurs in (for example) a display environment.    % footnote reference occurs in (for example) a display environment.
   % So reset some parameters.    % So reset some parameters.
Line 4351  width0pt\relax} \fi Line 4590  width0pt\relax} \fi
   % expands into a box, it must come within the paragraph, lest it    % expands into a box, it must come within the paragraph, lest it
   % provide a place where TeX can split the footnote.    % provide a place where TeX can split the footnote.
   \footstrut    \footstrut
   #1\strut}%    \futurelet\next\fo@t
 }  }
   \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
     \else\let\next\f@t\fi \next}
   \def\f@@t{\bgroup\aftergroup\@foot\let\next}
   \def\f@t#1{#1\@foot}
   \def\@foot{\strut\egroup}
   
 }%end \catcode `\@=11  }%end \catcode `\@=11
   
Line 4409  width0pt\relax} \fi Line 4653  width0pt\relax} \fi
 %  %
 \def\finalout{\overfullrule=0pt}  \def\finalout{\overfullrule=0pt}
   
   % @image.  We use the macros from epsf.tex to support this.
   % If epsf.tex is not installed and @image is used, we complain.
   % 
   % Check for and read epsf.tex up front.  If we read it only at @image
   % time, we might be inside a group, and then its definitions would get
   % undone and the next image would fail.
   \openin 1 = epsf.tex
   \ifeof 1 \else
     \closein 1
     \def\epsfannounce{\toks0 = }% do not bother showing banner
     \input epsf.tex
   \fi
   %
   \newif\ifwarnednoepsf
   \newhelp\noepsfhelp{epsf.tex must be installed for images to
     work.  It is also included in the Texinfo distribution, or you can get
     it from ftp://ftp.tug.org/tex/epsf.tex.}
   %
   % Only complain once about lack of epsf.tex.
   \def\image#1{%
     \ifx\epsfbox\undefined
       \ifwarnednoepsf \else
         \errhelp = \noepsfhelp
         \errmessage{epsf.tex not found, images will be ignored}%
         \global\warnednoepsftrue
       \fi
     \else
       \imagexxx #1,,,\finish
     \fi
   }
   %
   % Arguments to @image:
   % #1 is (mandatory) image filename; we tack on .eps extension.
   % #2 is (optional) width, #3 is (optional) height.
   % #4 is just the usual extra ignored arg for parsing this stuff.
   \def\imagexxx#1,#2,#3,#4\finish{%
     % \epsfbox itself resets \epsf?size at each figure.
     \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
     \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
     \epsfbox{#1.eps}%
   }
   
 % End of control word definitions.  % End of control word definitions.
   
   
 \message{and turning on texinfo input format.}  \message{and turning on texinfo input format.}
   
 \def\openindices{%  \def\openindices{%
Line 4584  width0pt\relax} \fi Line 4870  width0pt\relax} \fi
 \def~{{\tt \char '176}}  \def~{{\tt \char '176}}
 \chardef\hat=`\^  \chardef\hat=`\^
 \catcode`\^=\active  \catcode`\^=\active
 \def\auxhat{\def^{'hat}}  
 \def^{{\tt \hat}}  \def^{{\tt \hat}}
   
 \catcode`\_=\active  \catcode`\_=\active

Removed from v.1.1  
changed lines
  Added in v.1.2


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