Diff for /freem/doc/texinfo.tex between versions 1.1.1.1 and 1.5

version 1.1.1.1, 2025/01/19 02:04:04 version 1.5, 2025/05/13 20:03:53
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{2021-04-25.21}  \def\texinfoversion{2020-02-11.09}
 %  %
 % Copyright 1985, 1986, 1988, 1990-2021 Free Software Foundation, Inc.  % Copyright 1985, 1986, 1988, 1990-2019 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 33 Line 33
 % The texinfo.tex in any given distribution could well be out  % The texinfo.tex in any given 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.
 %  %
 % Send bug reports to bug-texinfo@gnu.org.  Please include 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
 % problem.  Patches are, of course, greatly appreciated.  % problem.  Patches are, of course, greatly appreciated.
 %  %
Line 349 Line 349
   \ifodd\pageno  \advance\hoffset by \bindingoffset    \ifodd\pageno  \advance\hoffset by \bindingoffset
   \else \advance\hoffset by -\bindingoffset\fi    \else \advance\hoffset by -\bindingoffset\fi
   %    %
   \checkchapterpage  
   %  
   % Retrieve the information for the headings from the marks in the page,    % Retrieve the information for the headings from the marks in the page,
   % and call Plain TeX's \makeheadline and \makefootline, which use the    % and call Plain TeX's \makeheadline and \makefootline, which use the
   % values in \headline and \footline.    % values in \headline and \footline.
   %    %
     % This is used to check if we are on the first page of a chapter.
     \ifcase1\the\savedtopmark\fi
     \let\prevchaptername\thischaptername
     \ifcase0\firstmark\fi
     \let\curchaptername\thischaptername
     %
     \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
     %
     \ifx\curchaptername\prevchaptername
       \let\thischapterheading\thischapter
     \else
       % \thischapterheading is the same as \thischapter except it is blank
       % for the first page of a chapter.  This is to prevent the chapter name
       % being shown twice.
       \def\thischapterheading{}%
     \fi
     %
   % Common context changes for both heading and footing.    % Common context changes for both heading and footing.
   % Do this outside of the \shipout so @code etc. will be expanded in    % Do this outside of the \shipout so @code etc. will be expanded in
   % the headline as they should be, not taken literally (outputting ''code).    % the headline as they should be, not taken literally (outputting ''code).
   \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars}    \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars}
   %    %
   \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi  
   \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}%    \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}%
     %
   \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi    \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
   \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}%    \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}%
   %    %
Line 408 Line 423
 \ifr@ggedbottom \kern-\dimen@ \vfil \fi}  \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
 }  }
   
 % Check if we are on the first page of a chapter.  Used for printing headings.  
 \newif\ifchapterpage  
 \def\checkchapterpage{%  
   % Get the chapter that was current at the end of the last page  
   \ifcase1\the\savedtopmark\fi  
   \let\prevchaptername\thischaptername  
   %  
   \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi  
   \let\curchaptername\thischaptername  
   %  
   \ifx\curchaptername\prevchaptername  
     \chapterpagefalse  
   \else  
     \chapterpagetrue  
   \fi  
 }  
   
 % Argument parsing  % Argument parsing
   
Line 572 Line 571
   \fi    \fi
 }  }
   
   % @end foo executes the definition of \Efoo.
 % @end foo calls \checkenv and executes the definition of \Efoo.  % But first, it executes a specialized version of \checkenv
   %
 \parseargdef\end{%  \parseargdef\end{%
   \if 1\csname iscond.#1\endcsname    \if 1\csname iscond.#1\endcsname
   \else    \else
Line 1002  where each line of input produces a line Line 1002  where each line of input produces a line
   \global\everypar = {}%    \global\everypar = {}%
 }  }
   
 % leave vertical mode without cancelling any first paragraph indent  
 \gdef\imageindent{%  
   \toks0=\everypar  
   \everypar={}%  
   \ptexnoindent  
   \global\everypar=\toks0  
 }  
   
   
 % @refill is a no-op.  % @refill is a no-op.
 \let\refill=\relax  \let\refill=\relax
Line 1018  where each line of input produces a line Line 1010  where each line of input produces a line
 \let\setfilename=\comment  \let\setfilename=\comment
   
 % @bye.  % @bye.
 \outer\def\bye{\chappager\pagelabels\tracingstats=1\ptexend}  \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
   
   
 \message{pdf,}  \message{pdf,}
Line 1145  where each line of input produces a line Line 1137  where each line of input produces a line
 \fi  \fi
   
   
 % Output page labels information.  
 % See PDF reference v.1.7 p.594, section 8.3.1.  
 \ifpdf  
 \def\pagelabels{%  
   \def\title{0 << /P (T-) /S /D >>}%  
   \edef\roman{\the\romancount << /S /r >>}%  
   \edef\arabic{\the\arabiccount << /S /D >>}%  
   %  
   % Page label ranges must be increasing.  Remove any duplicates.  
   % (There is a slight chance of this being wrong if e.g. there is  
   % a @contents but no @titlepage, etc.)  
   %  
   \ifnum\romancount=0 \def\roman{}\fi  
   \ifnum\arabiccount=0 \def\title{}%  
   \else  
     \ifnum\romancount=\arabiccount \def\roman{}\fi  
   \fi  
   %  
   \ifnum\romancount<\arabiccount  
     \pdfcatalog{/PageLabels << /Nums [\title \roman \arabic ] >> }\relax  
   \else  
     \pdfcatalog{/PageLabels << /Nums [\title \arabic \roman ] >> }\relax  
   \fi  
 }  
 \else  
   \let\pagelabels\relax  
 \fi  
   
 \newcount\pagecount \pagecount=0  
 \newcount\romancount \romancount=0  
 \newcount\arabiccount \arabiccount=0  
 \ifpdf  
   \let\ptxadvancepageno\advancepageno  
   \def\advancepageno{%  
     \ptxadvancepageno\global\advance\pagecount by 1  
   }  
 \fi  
   
   
 % PDF uses PostScript string constants for the names of xref targets,  % PDF uses PostScript string constants for the names of xref targets,
 % for display in the outlines, and in other places.  Thus, we have to  % for display in the outlines, and in other places.  Thus, we have to
 % double any backslashes.  Otherwise, a name like "\node" will be  % double any backslashes.  Otherwise, a name like "\node" will be
Line 1474  output) for that.)} Line 1427  output) for that.)}
       % subentries, which we calculated on our first read of the .toc above.        % subentries, which we calculated on our first read of the .toc above.
       %        %
       % We use the node names as the destinations.        % We use the node names as the destinations.
       %  
       % Currently we prefix the section name with the section number  
       % for chapter and appendix headings only in order to avoid too much  
       % horizontal space being required in the PDF viewer.  
       \def\numchapentry##1##2##3##4{%        \def\numchapentry##1##2##3##4{%
         \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}%  
       \def\unnchapentry##1##2##3##4{%  
         \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%          \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
       \def\numsecentry##1##2##3##4{%        \def\numsecentry##1##2##3##4{%
         \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%          \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
Line 1722  output) for that.)} Line 1669  output) for that.)}
       % Therefore, we read toc only once.        % Therefore, we read toc only once.
       %        %
       % We use node names as destinations.        % We use node names as destinations.
       %  
       % Currently we prefix the section name with the section number  
       % for chapter and appendix headings only in order to avoid too much  
       % horizontal space being required in the PDF viewer.  
       \def\partentry##1##2##3##4{}% ignore parts in the outlines        \def\partentry##1##2##3##4{}% ignore parts in the outlines
       \def\numchapentry##1##2##3##4{%        \def\numchapentry##1##2##3##4{%
         \dopdfoutline{##2 ##1}{1}{##3}{##4}}%          \dopdfoutline{##1}{1}{##3}{##4}}%
       \def\numsecentry##1##2##3##4{%        \def\numsecentry##1##2##3##4{%
         \dopdfoutline{##1}{2}{##3}{##4}}%          \dopdfoutline{##1}{2}{##3}{##4}}%
       \def\numsubsecentry##1##2##3##4{%        \def\numsubsecentry##1##2##3##4{%
Line 1740  output) for that.)} Line 1683  output) for that.)}
       \let\appsecentry\numsecentry%        \let\appsecentry\numsecentry%
       \let\appsubsecentry\numsubsecentry%        \let\appsubsecentry\numsubsecentry%
       \let\appsubsubsecentry\numsubsubsecentry%        \let\appsubsubsecentry\numsubsubsecentry%
       \def\unnchapentry##1##2##3##4{%        \let\unnchapentry\numchapentry%
         \dopdfoutline{##1}{1}{##3}{##4}}%  
       \let\unnsecentry\numsecentry%        \let\unnsecentry\numsecentry%
       \let\unnsubsecentry\numsubsecentry%        \let\unnsubsecentry\numsubsecentry%
       \let\unnsubsubsecentry\numsubsubsecentry%        \let\unnsubsubsecentry\numsubsubsecentry%
Line 1870  output) for that.)} Line 1812  output) for that.)}
       \closein 1        \closein 1
     \endgroup      \endgroup
     %      %
     % Putting an \hbox around the image can prevent an over-long line      \def\xetexpdfext{pdf}%
     % after the image.      \ifx\xeteximgext\xetexpdfext
     \hbox\bgroup        \XeTeXpdffile "#1".\xeteximgext ""
       \def\xetexpdfext{pdf}%      \else
         \def\xetexpdfext{PDF}%
       \ifx\xeteximgext\xetexpdfext        \ifx\xeteximgext\xetexpdfext
         \XeTeXpdffile "#1".\xeteximgext ""          \XeTeXpdffile "#1".\xeteximgext ""
       \else        \else
         \def\xetexpdfext{PDF}%          \XeTeXpicfile "#1".\xeteximgext ""
         \ifx\xeteximgext\xetexpdfext  
           \XeTeXpdffile "#1".\xeteximgext ""  
         \else  
           \XeTeXpicfile "#1".\xeteximgext ""  
         \fi  
       \fi        \fi
       \ifdim \wd0 >0pt width \xeteximagewidth \fi      \fi
       \ifdim \wd2 >0pt height \xeteximageheight \fi \relax      \ifdim \wd0 >0pt width \xeteximagewidth \fi
     \egroup      \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
   }    }
 \fi  \fi
   
Line 2558  end Line 2496  end
 \def\it{\fam=\itfam \setfontstyle{it}}  \def\it{\fam=\itfam \setfontstyle{it}}
 \def\sl{\fam=\slfam \setfontstyle{sl}}  \def\sl{\fam=\slfam \setfontstyle{sl}}
 \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}  \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
 \def\tt{\fam=\ttfam \setfontstyle{tt}}\def\ttstylename{tt}  \def\tt{\fam=\ttfam \setfontstyle{tt}}
   
 % Texinfo sort of supports the sans serif font style, which plain TeX does not.  % Texinfo sort of supports the sans serif font style, which plain TeX does not.
 % So we set up a \sf.  % So we set up a \sf.
Line 2684  end Line 2622  end
 \definetextfontsizexi  \definetextfontsizexi
   
   
   \message{markup,}
   
 % 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
Line 2691  end Line 2631  end
 %  %
 \def\ifmonospace{\ifdim\fontdimen3\font=0pt }  \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
   
   % Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
   % define and register \INITMACRO to be called on markup style changes.
   % \INITMACRO can check \currentmarkupstyle for the innermost
   % style.
   
   \let\currentmarkupstyle\empty
   
   \def\setupmarkupstyle#1{%
     \def\currentmarkupstyle{#1}%
     \markupstylesetup
   }
   
   \let\markupstylesetup\empty
   
   \def\defmarkupstylesetup#1{%
     \expandafter\def\expandafter\markupstylesetup
       \expandafter{\markupstylesetup #1}%
     \def#1%
   }
   
   % Markup style setup for left and right quotes.
   \defmarkupstylesetup\markupsetuplq{%
     \expandafter\let\expandafter \temp
       \csname markupsetuplq\currentmarkupstyle\endcsname
     \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
   }
   
   \defmarkupstylesetup\markupsetuprq{%
     \expandafter\let\expandafter \temp
       \csname markupsetuprq\currentmarkupstyle\endcsname
     \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
   }
   
 {  {
 \catcode`\'=\active  \catcode`\'=\active
 \catcode`\`=\active  \catcode`\`=\active
   
 \gdef\setcodequotes{\let`\codequoteleft \let'\codequoteright}  \gdef\markupsetuplqdefault{\let`\lq}
 \gdef\setregularquotes{\let`\lq \let'\rq}  \gdef\markupsetuprqdefault{\let'\rq}
   
   \gdef\markupsetcodequoteleft{\let`\codequoteleft}
   \gdef\markupsetcodequoteright{\let'\codequoteright}
 }  }
   
   \let\markupsetuplqcode \markupsetcodequoteleft
   \let\markupsetuprqcode \markupsetcodequoteright
   %
   \let\markupsetuplqexample \markupsetcodequoteleft
   \let\markupsetuprqexample \markupsetcodequoteright
   %
   \let\markupsetuplqkbd     \markupsetcodequoteleft
   \let\markupsetuprqkbd     \markupsetcodequoteright
   %
   \let\markupsetuplqsamp \markupsetcodequoteleft
   \let\markupsetuprqsamp \markupsetcodequoteright
   %
   \let\markupsetuplqverb \markupsetcodequoteleft
   \let\markupsetuprqverb \markupsetcodequoteright
   %
   \let\markupsetuplqverbatim \markupsetcodequoteleft
   \let\markupsetuprqverbatim \markupsetcodequoteright
   
 % Allow an option to not use regular directed right quote/apostrophe  % Allow an option to not use regular directed right quote/apostrophe
 % (char 0x27), but instead the undirected quote from cmtt (char 0x0d).  % (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
 % The undirected quote is ugly, so don't make it the default, but it  % The undirected quote is ugly, so don't make it the default, but it
Line 2861  end Line 2855  end
 }  }
   
 % @samp.  % @samp.
 \def\samp#1{{\setcodequotes\lq\tclose{#1}\rq\null}}  \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
   
 % @indicateurl is \samp, that is, with quotes.  % @indicateurl is \samp, that is, with quotes.
 \let\indicateurl=\samp  \let\indicateurl=\samp
Line 2904  end Line 2898  end
   \global\let'=\rq \global\let`=\lq  % default definitions    \global\let'=\rq \global\let`=\lq  % default definitions
   %    %
   \global\def\code{\begingroup    \global\def\code{\begingroup
     \setcodequotes      \setupmarkupstyle{code}%
       % The following should really be moved into \setupmarkupstyle handlers.
     \catcode\dashChar=\active  \catcode\underChar=\active      \catcode\dashChar=\active  \catcode\underChar=\active
     \ifallowcodebreaks      \ifallowcodebreaks
      \let-\codedash       \let-\codedash
Line 2992  end Line 2987  end
 % arg (if given), and not the url (which is then just the link target).  % arg (if given), and not the url (which is then just the link target).
 \newif\ifurefurlonlylink  \newif\ifurefurlonlylink
   
 % The default \pretolerance setting stops the penalty inserted in  
 % \urefallowbreak being a discouragement to line breaking.  Set it to  
 % a negative value for this paragraph only.  Hopefully this does not  
 % conflict with redefinitions of \par done elsewhere.  
 \def\nopretolerance{%  
 \pretolerance=-1  
 \def\par{\endgraf\pretolerance=100 \let\par\endgraf}%  
 }  
   
 % The main macro is \urefbreak, which allows breaking at expected  % The main macro is \urefbreak, which allows breaking at expected
 % places within the url.  % places within the url.  (There used to be another version, which
 \def\urefbreak{\nopretolerance \begingroup \urefcatcodes \dourefbreak}  % didn't support automatic breaking.)
   \def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
 \let\uref=\urefbreak  \let\uref=\urefbreak
 %  %
 \def\dourefbreak#1{\urefbreakfinish #1,,,\finish}  \def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
Line 3058  end Line 3045  end
   \urefcatcodes    \urefcatcodes
   %    %
   \global\def\urefcode{\begingroup    \global\def\urefcode{\begingroup
     \setcodequotes      \setupmarkupstyle{code}%
     \urefcatcodes      \urefcatcodes
     \let&\urefcodeamp      \let&\urefcodeamp
     \let.\urefcodedot      \let.\urefcodedot
Line 3114  end Line 3101  end
   
 % Allow a ragged right output to aid breaking long URL's.  There can  % Allow a ragged right output to aid breaking long URL's.  There can
 % be a break at the \allowbreak with no extra glue (if the existing stretch in  % be a break at the \allowbreak with no extra glue (if the existing stretch in
 % the line is sufficient), a break at the \penalty with extra glue added  % the line is sufficent), a break at the \penalty100 with extra glue added
 % at the end of the line, or no break at all here.  % at the end of the line, or no break at all here.
 %   Changing the value of the penalty and/or the amount of stretch affects how  %   Changing the value of the penalty and/or the amount of stretch affects how
 % preferable one choice is over the other.  % preferrable one choice is over the other.
 \def\urefallowbreak{%  \def\urefallowbreak{%
   \penalty0\relax    \allowbreak
   \hskip 0pt plus 2 em\relax    \hskip 0pt plus 2 em\relax
   \penalty1000\relax    \penalty300
   \hskip 0pt plus -2 em\relax    \hskip 0pt plus -2 em\relax
 }  }
   
Line 3179  end Line 3166  end
 \def\kbdsub#1#2#3\par{%  \def\kbdsub#1#2#3\par{%
   \def\one{#1}\def\three{#3}\def\threex{??}%    \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{\kbdfont\setcodequotes\look}}\fi    \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
   \else{\tclose{\kbdfont\setcodequotes\look}}\fi    \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
 }  }
   
 % definition of @key that produces a lozenge.  Doesn't adjust to text size.  % definition of @key that produces a lozenge.  Doesn't adjust to text size.
Line 3197  end Line 3184  end
 % monospace, don't change it; that way, we respect @kbdinputstyle.  But  % monospace, don't change it; that way, we respect @kbdinputstyle.  But
 % if it isn't monospace, then use \tt.  % if it isn't monospace, then use \tt.
 %  %
 \def\key#1{{\setregularquotes  \def\key#1{{\setupmarkupstyle{key}%
   \nohyphenation    \nohyphenation
   \ifmonospace\else\tt\fi    \ifmonospace\else\tt\fi
   #1}\null}    #1}\null}
Line 3318  end Line 3305  end
 \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}  \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
 \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}%  \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}%
   
 % provide this command from LaTeX as it is very common  
 \def\frac#1#2{{{#1}\over{#2}}}  
   
 % @displaymath.  
 % \globaldefs is needed to recognize the end lines in \tex and  
 % \end tex.  Set \thisenv as @end displaymath is seen before @end tex.  
 {\obeylines  
 \globaldefs=1  
 \envdef\displaymath{%  
 \tex%  
 \def\thisenv{\displaymath}%  
 \begingroup\let\end\displaymathend%  
 $$%  
 }  
   
 \def\displaymathend{$$\endgroup\end}%  
   
 \def\Edisplaymath{%  
 \def\thisenv{\tex}%  
 \end tex  
 }}  
   
   
 % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.  % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
 % Ignore unless FMTNAME == tex; then it is like @iftex and @tex,  % Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
 % except specified as a normal braced arg, so no newlines to worry about.  % except specified as a normal braced arg, so no newlines to worry about.
Line 3545  $$% Line 3509  $$%
   
 % @pounds{} is a sterling sign, which Knuth put in the CM italic font.  % @pounds{} is a sterling sign, which Knuth put in the CM italic font.
 %  %
 \def\pounds{\ifmonospace{\ecfont\char"BF}\else{\it\$}\fi}  \def\pounds{{\it\$}}
   
 % @euro{} comes from a separate font, depending on the current style.  % @euro{} comes from a separate font, depending on the current style.
 % We use the free feym* fonts from the eurosym package by Henrik  % We use the free feym* fonts from the eurosym package by Henrik
Line 3694  $$% Line 3658  $$%
 \fi  \fi
   
 % Quotes.  % Quotes.
   \chardef\quotedblleft="5C
   \chardef\quotedblright=`\"
 \chardef\quoteleft=`\`  \chardef\quoteleft=`\`
 \chardef\quoteright=`\'  \chardef\quoteright=`\'
   
 % only change font for tt for correct kerning and to avoid using  
 % \ecfont unless necessary.  
 \def\quotedblleft{%  
   \ifmonospace{\ecfont\char"10}\else{\char"5C}\fi  
 }  
   
 \def\quotedblright{%  
   \ifmonospace{\ecfont\char"11}\else{\char`\"}\fi  
 }  
   
   
 \message{page headings,}  \message{page headings,}
   
Line 3828  $$% Line 3784  $$%
   
 \newtoks\evenheadline    % headline on even pages  \newtoks\evenheadline    % headline on even pages
 \newtoks\oddheadline     % headline on odd pages  \newtoks\oddheadline     % headline on odd pages
 \newtoks\evenchapheadline% headline on even pages with a new chapter  
 \newtoks\oddchapheadline % headline on odd pages with a new chapter  
 \newtoks\evenfootline    % footline on even pages  \newtoks\evenfootline    % footline on even pages
 \newtoks\oddfootline     % footline on odd pages  \newtoks\oddfootline     % footline on odd pages
   
 % Now make \makeheadline and \makefootline in Plain TeX use those variables  % Now make \makeheadline and \makefootline in Plain TeX use those variables
 \headline={{\textfonts\rm  \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
             \ifchapterpage                              \else \the\evenheadline \fi}}
               \ifodd\pageno\the\oddchapheadline\else\the\evenchapheadline\fi  
             \else  
               \ifodd\pageno\the\oddheadline\else\the\evenheadline\fi  
             \fi}}  
   
 \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline  \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
                             \else \the\evenfootline \fi}\HEADINGShook}                              \else \the\evenfootline \fi}\HEADINGShook}
 \let\HEADINGShook=\relax  \let\HEADINGShook=\relax
Line 3856  $$% Line 3805  $$%
 \def\evenheading{\parsearg\evenheadingxxx}  \def\evenheading{\parsearg\evenheadingxxx}
 \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}  \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
 \def\evenheadingyyy #1\|#2\|#3\|#4\finish{%  \def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
   \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}  \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
   \global\evenchapheadline=\evenheadline}  
   
 \def\oddheading{\parsearg\oddheadingxxx}  \def\oddheading{\parsearg\oddheadingxxx}
 \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}  \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
 \def\oddheadingyyy #1\|#2\|#3\|#4\finish{%  \def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
   \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}%  \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
   \global\oddchapheadline=\oddheadline}  
   
 \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%  \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
   
Line 3930  $$% Line 3877  $$%
 \parseargdef\headings{\csname HEADINGS#1\endcsname}  \parseargdef\headings{\csname HEADINGS#1\endcsname}
   
 \def\headingsoff{% non-global headings elimination  \def\headingsoff{% non-global headings elimination
   \evenheadline={\hfil}\evenfootline={\hfil}\evenchapheadline={\hfil}%    \evenheadline={\hfil}\evenfootline={\hfil}%
    \oddheadline={\hfil}\oddfootline={\hfil}\oddchapheadline={\hfil}%     \oddheadline={\hfil}\oddfootline={\hfil}%
 }  }
   
 \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting  \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
 \HEADINGSoff  % it's the default  \HEADINGSoff  % it's the default
   
 % When we turn headings on, set the page number to 1.  % When we turn headings on, set the page number to 1.
 \def\pageone{  
   \global\pageno=1  
   \global\arabiccount = \pagecount  
 }  
   
 % For double-sided printing, put current file name in lower left corner,  % For double-sided printing, put current file name in lower left corner,
 % chapter name on inside top of right hand pages, document  % chapter name on inside top of right hand pages, document
 % title on inside top of left hand pages, and page numbers on outside top  % title on inside top of left hand pages, and page numbers on outside top
 % edge of all pages.  % edge of all pages.
 \def\HEADINGSdouble{%  \def\HEADINGSdouble{%
 \pageone  \global\pageno=1
 \HEADINGSdoublex  \global\evenfootline={\hfil}
   \global\oddfootline={\hfil}
   \global\evenheadline={\line{\folio\hfil\thistitle}}
   \global\oddheadline={\line{\thischapterheading\hfil\folio}}
   \global\let\contentsalignmacro = \chapoddpage
 }  }
 \let\contentsalignmacro = \chappager  \let\contentsalignmacro = \chappager
   
 % For single-sided printing, chapter title goes across top left of page,  % For single-sided printing, chapter title goes across top left of page,
 % page number on top right.  % page number on top right.
 \def\HEADINGSsingle{%  \def\HEADINGSsingle{%
 \pageone  \global\pageno=1
 \HEADINGSsinglex  \global\evenfootline={\hfil}
   \global\oddfootline={\hfil}
   \global\evenheadline={\line{\thischapterheading\hfil\folio}}
   \global\oddheadline={\line{\thischapterheading\hfil\folio}}
   \global\let\contentsalignmacro = \chappager
 }  }
 \def\HEADINGSon{\HEADINGSdouble}  \def\HEADINGSon{\HEADINGSdouble}
   
Line 3967  $$% Line 3917  $$%
 \global\evenfootline={\hfil}  \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}  \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}  \global\evenheadline={\line{\folio\hfil\thistitle}}
 \global\oddheadline={\line{\thischapter\hfil\folio}}  \global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\evenchapheadline={\line{\folio\hfil}}  
 \global\oddchapheadline={\line{\hfil\folio}}  
 \global\let\contentsalignmacro = \chapoddpage  \global\let\contentsalignmacro = \chapoddpage
 }  }
   
Line 3977  $$% Line 3925  $$%
 \def\HEADINGSsinglex{%  \def\HEADINGSsinglex{%
 \global\evenfootline={\hfil}  \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}  \global\oddfootline={\hfil}
 \global\evenheadline={\line{\thischapter\hfil\folio}}  \global\evenheadline={\line{\thischapterheading\hfil\folio}}
 \global\oddheadline={\line{\thischapter\hfil\folio}}  \global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\evenchapheadline={\line{\hfil\folio}}  
 \global\oddchapheadline={\line{\hfil\folio}}  
 \global\let\contentsalignmacro = \chappager  
 }  
   
 % for @setchapternewpage off  
 \def\HEADINGSsinglechapoff{%  
 \pageone  
 \global\evenfootline={\hfil}  
 \global\oddfootline={\hfil}  
 \global\evenheadline={\line{\thischapter\hfil\folio}}  
 \global\oddheadline={\line{\thischapter\hfil\folio}}  
 \global\evenchapheadline=\evenheadline  
 \global\oddchapheadline=\oddheadline  
 \global\let\contentsalignmacro = \chappager  \global\let\contentsalignmacro = \chappager
 }  }
   
Line 4301  $$% Line 4235  $$%
   \doitemize{#1.}\flushcr    \doitemize{#1.}\flushcr
 }  }
   
   % @alphaenumerate and @capsenumerate are abbreviations for giving an arg
   % to @enumerate.
   %
   \def\alphaenumerate{\enumerate{a}}
   \def\capsenumerate{\enumerate{A}}
   \def\Ealphaenumerate{\Eenumerate}
   \def\Ecapsenumerate{\Eenumerate}
   
   
 % @multitable macros  % @multitable macros
   % Amy Hendrickson, 8/18/94, 3/6/96
   %
   % @multitable ... @end multitable will make as many columns as desired.
   % Contents of each column will wrap at width given in preamble.  Width
   % can be specified either with sample text given in a template line,
   % or in percent of \hsize, the current width of text on page.
   
   % Table can continue over pages but will only break between lines.
   
   % To make preamble:
   %
   % Either define widths of columns in terms of percent of \hsize:
   %   @multitable @columnfractions .25 .3 .45
   %   @item ...
   %
   %   Numbers following @columnfractions are the percent of the total
   %   current hsize to be used for each column. You may use as many
   %   columns as desired.
   
   
   % Or use a template:
   %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
   %   @item ...
   %   using the widest term desired in each column.
   
   % Each new table line starts with @item, each subsequent new column
   % 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,
   % ie, @tab@tab@tab will produce two empty columns.
   
   % @item, @tab do not need to be on their own lines, but it will not hurt
   % if they are.
   
   % Sample multitable:
   
   %   @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 first col stuff @tab second col stuff
   %   @tab Many paragraphs of text may be used in any column.
   %
   %         They will wrap at the width determined by the template.
   %   @item@tab@tab This will be in third column.
   %   @end multitable
   
   % Default dimensions may be reset by user.
   % @multitableparskip is vertical space between paragraphs in table.
   % @multitableparindent is paragraph indent in table.
   % @multitablecolmargin is horizontal space to be left between columns.
   % @multitablelinespace is space to leave between table items, baseline
   %                                                            to baseline.
   %   0pt means it depends on current normal line spacing.
   %
   \newskip\multitableparskip
   \newskip\multitableparindent
   \newdimen\multitablecolspace
   \newskip\multitablelinespace
   \multitableparskip=0pt
   \multitableparindent=6pt
   \multitablecolspace=12pt
   \multitablelinespace=0pt
   
 % Macros used to set up halign preamble:  % Macros used to set up halign preamble:
 %  %
Line 4350  $$% Line 4358  $$%
   \go    \go
 }  }
   
   % multitable-only commands.
   %
 % @headitem starts a heading row, which we typeset in bold.  Assignments  % @headitem starts a heading row, which we typeset in bold.  Assignments
 % have to be global since we are inside the implicit group of an  % have to be global since we are inside the implicit group of an
 % alignment entry.  \everycr below resets \everytab so we don't have to  % alignment entry.  \everycr below resets \everytab so we don't have to
Line 4366  $$% Line 4376  $$%
 % default for tables with no headings.  % default for tables with no headings.
 \let\headitemcrhook=\relax  \let\headitemcrhook=\relax
 %  %
   % A \tab used to include \hskip1sp.  But then the space in a template
   % line is not enough.  That is bad.  So let's go back to just `&' until
   % we again encounter the problem the 1sp was intended to solve.
   %                                       --karl, nathan@acm.org, 20apr99.
 \def\tab{\checkenv\multitable &\the\everytab}%  \def\tab{\checkenv\multitable &\the\everytab}%
   
   % @multitable ... @end multitable definitions:
   %
 \newtoks\everytab  % insert after every tab.  \newtoks\everytab  % insert after every tab.
 %  %
 \envdef\multitable{%  \envdef\multitable{%
Line 4382  $$% Line 4398  $$%
   %    %
   \tolerance=9500    \tolerance=9500
   \hbadness=9500    \hbadness=9500
   \parskip=0pt    \setmultitablespacing
   \parindent=6pt    \parskip=\multitableparskip
     \parindent=\multitableparindent
   \overfullrule=0pt    \overfullrule=0pt
   \global\colcount=0    \global\colcount=0
   %    %
Line 4413  $$% Line 4430  $$%
   % continue for many paragraphs if desired.    % continue for many paragraphs if desired.
   \halign\bgroup &%    \halign\bgroup &%
     \global\advance\colcount by 1      \global\advance\colcount by 1
     \strut      \multistrut
     \vtop{%      \vtop{%
       \advance\hsize by -1\leftskip        % Use the current \colcount to find the correct column width:
       % Find the correct column width  
       \hsize=\expandafter\csname col\the\colcount\endcsname        \hsize=\expandafter\csname col\the\colcount\endcsname
       %        %
         % 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        \rightskip=0pt
       \ifnum\colcount=1        \ifnum\colcount=1
         \advance\hsize by\leftskip % Add indent of surrounding text          % The first column will be indented with the surrounding text.
           \advance\hsize by\leftskip
       \else        \else
         % In order to keep entries from bumping into each other.          \ifsetpercent \else
         \leftskip=12pt            % If user has not set preamble in terms of percent of \hsize
         \ifsetpercent \else            % we will advance \hsize by \multitablecolspace.
           % If a template has been used            \advance\hsize by \multitablecolspace
           \advance\hsize by \leftskip          \fi
         \fi         % In either case we will make \leftskip=\multitablecolspace:
         \leftskip=\multitablecolspace
       \fi        \fi
       \noindent\ignorespaces##\unskip\strut        % Ignoring space at the beginning and end avoids an occasional spurious
         % blank line, when TeX decides to break the line at the space before the
         % box from the multistrut, so the strut ends up on a line by itself.
         % For example:
         % @multitable @columnfractions .11 .89
         % @item @code{#}
         % @tab Legal holiday which is valid in major parts of the whole country.
         % Is automatically provided with highlighting sequences respectively
         % marking characters.
         \noindent\ignorespaces##\unskip\multistrut
     }\cr      }\cr
 }  }
 \def\Emultitable{%  \def\Emultitable{%
Line 4439  $$% Line 4479  $$%
   \global\setpercentfalse    \global\setpercentfalse
 }  }
   
   \def\setmultitablespacing{%
     \def\multistrut{\strut}% just use the standard line spacing
     %
     % Compute \multitablelinespace (if not defined by user) for use in
     % \multitableparskip calculation.  We used define \multistrut based on
     % this, but (ironically) that caused the spacing to be off.
     % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
   \ifdim\multitablelinespace=0pt
   \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
   \global\advance\multitablelinespace by-\ht0
   \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
   \global\multitableparskip=\multitablelinespace
   \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
                                         % than skip between lines in the table.
   \fi%
   \ifdim\multitableparskip=0pt
   \global\multitableparskip=\multitablelinespace
   \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
                                         % than skip between lines in the table.
   \fi}
   
   
 \message{conditionals,}  \message{conditionals,}
   
Line 4776  $$% Line 4841  $$%
   
 % like the previous two, but they put @code around the argument.  % like the previous two, but they put @code around the argument.
 \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}  \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
 \def\docodeindexxxx #1{\docind{\indexname}{#1}}  \def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
   
   
 % Used for the aux, toc and index files to prevent expansion of Texinfo  % Used for the aux, toc and index files to prevent expansion of Texinfo
Line 5073  $$% Line 5138  $$%
   \def\ss{ss}%    \def\ss{ss}%
   \def\th{th}%    \def\th{th}%
   %    %
   \let\do\indexnofontsdef    \def\LaTeX{LaTeX}%
   %    \def\TeX{TeX}%
   \do\LaTeX{LaTeX}%  
   \do\TeX{TeX}%  
   %    %
   % Assorted special characters.    % Assorted special characters.  \defglyph gives the control sequence a
   \do\atchar{@}%    % definition that removes the {} that follows its use.
   \do\arrow{->}%    \defglyph\atchar{@}%
   \do\bullet{bullet}%    \defglyph\arrow{->}%
   \do\comma{,}%    \defglyph\bullet{bullet}%
   \do\copyright{copyright}%    \defglyph\comma{,}%
   \do\dots{...}%    \defglyph\copyright{copyright}%
   \do\enddots{...}%    \defglyph\dots{...}%
   \do\equiv{==}%    \defglyph\enddots{...}%
   \do\error{error}%    \defglyph\equiv{==}%
   \do\euro{euro}%    \defglyph\error{error}%
   \do\expansion{==>}%    \defglyph\euro{euro}%
   \do\geq{>=}%    \defglyph\expansion{==>}%
   \do\guillemetleft{<<}%    \defglyph\geq{>=}%
   \do\guillemetright{>>}%    \defglyph\guillemetleft{<<}%
   \do\guilsinglleft{<}%    \defglyph\guillemetright{>>}%
   \do\guilsinglright{>}%    \defglyph\guilsinglleft{<}%
   \do\leq{<=}%    \defglyph\guilsinglright{>}%
   \do\lbracechar{\{}%    \defglyph\leq{<=}%
   \do\minus{-}%    \defglyph\lbracechar{\{}%
   \do\point{.}%    \defglyph\minus{-}%
   \do\pounds{pounds}%    \defglyph\point{.}%
   \do\print{-|}%    \defglyph\pounds{pounds}%
   \do\quotedblbase{"}%    \defglyph\print{-|}%
   \do\quotedblleft{"}%    \defglyph\quotedblbase{"}%
   \do\quotedblright{"}%    \defglyph\quotedblleft{"}%
   \do\quoteleft{`}%    \defglyph\quotedblright{"}%
   \do\quoteright{'}%    \defglyph\quoteleft{`}%
   \do\quotesinglbase{,}%    \defglyph\quoteright{'}%
   \do\rbracechar{\}}%    \defglyph\quotesinglbase{,}%
   \do\registeredsymbol{R}%    \defglyph\rbracechar{\}}%
   \do\result{=>}%    \defglyph\registeredsymbol{R}%
   \do\textdegree{o}%    \defglyph\result{=>}%
     \defglyph\textdegree{o}%
   %    %
   % We need to get rid of all macros, leaving only the arguments (if present).    % We need to get rid of all macros, leaving only the arguments (if present).
   % Of course this is not nearly correct, but it is the best we can do for now.    % Of course this is not nearly correct, but it is the best we can do for now.
Line 5125  $$% Line 5189  $$%
   \macrolist    \macrolist
   \let\value\indexnofontsvalue    \let\value\indexnofontsvalue
 }  }
   \def\defglyph#1#2{\def#1##1{#2}} % see above
 % Give the control sequence a definition that removes the {} that follows  
 % its use, e.g. @AA{} -> AA  
 \def\indexnofontsdef#1#2{\def#1##1{#2}}%  
   
   
   
Line 5147  $$% Line 5208  $$%
   \fi    \fi
 }  }
   
 % Same as \doind, but for code indices  
 \def\docind#1#2{%  
   \iflinks  
   {%  
     %  
     \requireopenindexfile{#1}%  
     \edef\writeto{\csname#1indfile\endcsname}%  
     %  
     \def\indextext{#2}%  
     \safewhatsit\docindwrite  
   }%  
   \fi  
 }  
   
 % Check if an index file has been opened, and if not, open it.  % Check if an index file has been opened, and if not, open it.
 \def\requireopenindexfile#1{%  \def\requireopenindexfile#1{%
 \ifnum\csname #1indfile\endcsname=0  \ifnum\csname #1indfile\endcsname=0
Line 5227  $$% Line 5274  $$%
     % trim spaces.      % trim spaces.
     \edef\trimmed{\segment}%      \edef\trimmed{\segment}%
     \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%      \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
     \ifincodeindex  
       \edef\trimmed{\noexpand\code{\trimmed}}%  
     \fi  
     %      %
     \xdef\bracedtext{\bracedtext{\trimmed}}%      \xdef\bracedtext{\bracedtext{\trimmed}}%
     %      %
Line 5295  $$% Line 5339  $$%
   
 % Write the entry in \indextext to the index file.  % Write the entry in \indextext to the index file.
 %  %
   \def\doindwrite{%
 \newif\ifincodeindex  
 \def\doindwrite{\incodeindexfalse\doindwritex}  
 \def\docindwrite{\incodeindextrue\doindwritex}  
   
 \def\doindwritex{%  
   \maybemarginindex    \maybemarginindex
   %    %
   \atdummies    \atdummies
Line 5520  might help (with 'rm \jobname.?? \jobnam Line 5559  might help (with 'rm \jobname.?? \jobnam
   \else    \else
     \begindoublecolumns      \begindoublecolumns
     \catcode`\\=0\relax      \catcode`\\=0\relax
     %      \catcode`\@=12\relax
     % Make @ an escape character to give macros a chance to work.  This  
     % should work because we (hopefully) don't otherwise use @ in index files.  
     %\catcode`\@=12\relax  
     \catcode`\@=0\relax  
     \input \jobname.\indexname s      \input \jobname.\indexname s
     \enddoublecolumns      \enddoublecolumns
   \fi    \fi
Line 6366  might help (with 'rm \jobname.?? \jobnam Line 6401  might help (with 'rm \jobname.?? \jobnam
 \def\CHAPPAGoff{%  \def\CHAPPAGoff{%
 \global\let\contentsalignmacro = \chappager  \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chapbreak  \global\let\pchapsepmacro=\chapbreak
 \global\def\HEADINGSon{\HEADINGSsinglechapoff}}  \global\let\pagealignmacro=\chappager}
   
 \def\CHAPPAGon{%  \def\CHAPPAGon{%
 \global\let\contentsalignmacro = \chappager  \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chappager  \global\let\pchapsepmacro=\chappager
   \global\let\pagealignmacro=\chappager
 \global\def\HEADINGSon{\HEADINGSsingle}}  \global\def\HEADINGSon{\HEADINGSsingle}}
   
 \def\CHAPPAGodd{%  \def\CHAPPAGodd{%
 \global\let\contentsalignmacro = \chapoddpage  \global\let\contentsalignmacro = \chapoddpage
 \global\let\pchapsepmacro=\chapoddpage  \global\let\pchapsepmacro=\chapoddpage
   \global\let\pagealignmacro=\chapoddpage
 \global\def\HEADINGSon{\HEADINGSdouble}}  \global\def\HEADINGSon{\HEADINGSdouble}}
   
 \CHAPPAGon  \CHAPPAGon
Line 6740  might help (with 'rm \jobname.?? \jobnam Line 6777  might help (with 'rm \jobname.?? \jobnam
 %  %
 \def\startcontents#1{%  \def\startcontents#1{%
   % If @setchapternewpage on, and @headings double, the contents should    % If @setchapternewpage on, and @headings double, the contents should
   % start on an odd page, unlike chapters.    % start on an odd page, unlike chapters.  Thus, we maintain
     % \contentsalignmacro in parallel with \pagealignmacro.
     % From: Torbjorn Granlund <tege@matematik.su.se>
   \contentsalignmacro    \contentsalignmacro
   \immediate\closeout\tocfile    \immediate\closeout\tocfile
   %    %
Line 6755  might help (with 'rm \jobname.?? \jobnam Line 6794  might help (with 'rm \jobname.?? \jobnam
     %      %
     % Roman numerals for page numbers.      % Roman numerals for page numbers.
     \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi      \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
     \def\thistitle{}% no title in double-sided headings  
     % Record where the Roman numerals started.  
     \ifnum\romancount=0 \global\romancount=\pagecount \fi  
 }  }
   
 % redefined for the two-volume lispref.  We always output on  % redefined for the two-volume lispref.  We always output on
Line 6780  might help (with 'rm \jobname.?? \jobnam Line 6816  might help (with 'rm \jobname.?? \jobnam
     \fi      \fi
     \closein 1      \closein 1
   \endgroup    \endgroup
   \contentsendroman    \lastnegativepageno = \pageno
     \global\pageno = \savepageno
 }  }
   
 % And just the chapters.  % And just the chapters.
Line 6815  might help (with 'rm \jobname.?? \jobnam Line 6852  might help (with 'rm \jobname.?? \jobnam
     \vfill \eject      \vfill \eject
     \contentsalignmacro % in case @setchapternewpage odd is in effect      \contentsalignmacro % in case @setchapternewpage odd is in effect
   \endgroup    \endgroup
   \contentsendroman  
 }  
 \let\shortcontents = \summarycontents  
   
 % Get ready to use Arabic numerals again  
 \def\contentsendroman{%  
   \lastnegativepageno = \pageno    \lastnegativepageno = \pageno
   \global\pageno = \savepageno    \global\pageno = \savepageno
   %  
   % If \romancount > \arabiccount, the contents are at the end of the  
   % document.  Otherwise, advance where the Arabic numerals start for  
   % the page numbers.  
   \ifnum\romancount>\arabiccount\else\global\arabiccount=\pagecount\fi  
 }  }
   \let\shortcontents = \summarycontents
   
 % 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., `A' for an appendix, or `3' for a chapter.  % The arg is, e.g., `A' for an appendix, or `3' for a chapter.
Line 6970  might help (with 'rm \jobname.?? \jobnam Line 6997  might help (with 'rm \jobname.?? \jobnam
 % But \@ or @@ will get a plain @ character.  % But \@ or @@ will get a plain @ character.
   
 \envdef\tex{%  \envdef\tex{%
   \setregularquotes    \setupmarkupstyle{tex}%
   \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 `\~=\active \let~=\tie    \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
Line 7196  might help (with 'rm \jobname.?? \jobnam Line 7223  might help (with 'rm \jobname.?? \jobnam
 % If you want all examples etc. small: @set dispenvsize small.  % If you want all examples etc. small: @set dispenvsize small.
 % If you want even small examples the full size: @set dispenvsize nosmall.  % If you want even small examples the full size: @set dispenvsize nosmall.
 % This affects the following displayed environments:  % This affects the following displayed environments:
 %    @example, @display, @format, @lisp, @verbatim  %    @example, @display, @format, @lisp
 %  %
 \def\smallword{small}  \def\smallword{small}
 \def\nosmallword{nosmall}  \def\nosmallword{nosmall}
Line 7242  might help (with 'rm \jobname.?? \jobnam Line 7269  might help (with 'rm \jobname.?? \jobnam
 %  %
 \maketwodispenvdef{lisp}{example}{%  \maketwodispenvdef{lisp}{example}{%
   \nonfillstart    \nonfillstart
   \tt\setcodequotes    \tt\setupmarkupstyle{example}%
   \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.    \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
   \parsearg\gobble    \gobble % eat return
 }  }
 % @display/@smalldisplay: same as @lisp except keep current font.  % @display/@smalldisplay: same as @lisp except keep current font.
 %  %
Line 7402  might help (with 'rm \jobname.?? \jobnam Line 7429  might help (with 'rm \jobname.?? \jobnam
 \def\setupverb{%  \def\setupverb{%
   \tt  % easiest (and conventionally used) font for verbatim    \tt  % easiest (and conventionally used) font for verbatim
   \def\par{\leavevmode\endgraf}%    \def\par{\leavevmode\endgraf}%
   \setcodequotes    \setupmarkupstyle{verb}%
   \tabeightspaces    \tabeightspaces
   % Respect line breaks,    % Respect line breaks,
   % print special symbols as themselves, and    % print special symbols as themselves, and
Line 7417  might help (with 'rm \jobname.?? \jobnam Line 7444  might help (with 'rm \jobname.?? \jobnam
 \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount  \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
 %  %
 % We typeset each line of the verbatim in an \hbox, so we can handle  % We typeset each line of the verbatim in an \hbox, so we can handle
 % tabs.  % tabs.  The \global is in case the verbatim line starts with an accent,
   % or some other command that starts with a begin-group.  Otherwise, the
   % entire \verbbox would disappear at the corresponding end-group, before
   % it is typeset.  Meanwhile, we can't have nested verbatim commands
   % (can we?), so the \global won't be overwriting itself.
 \newbox\verbbox  \newbox\verbbox
 \def\starttabbox{\setbox\verbbox=\hbox\bgroup}  \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
 %  %
 \begingroup  \begingroup
   \catcode`\^^I=\active    \catcode`\^^I=\active
Line 7430  might help (with 'rm \jobname.?? \jobnam Line 7461  might help (with 'rm \jobname.?? \jobnam
       \divide\dimen\verbbox by\tabw        \divide\dimen\verbbox by\tabw
       \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw        \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
       \advance\dimen\verbbox by\tabw  % advance to next multiple of \tabw        \advance\dimen\verbbox by\tabw  % advance to next multiple of \tabw
       \wd\verbbox=\dimen\verbbox        \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
       \leavevmode\box\verbbox \starttabbox  
     }%      }%
   }    }
 \endgroup  \endgroup
Line 7441  might help (with 'rm \jobname.?? \jobnam Line 7471  might help (with 'rm \jobname.?? \jobnam
   \let\nonarrowing = t%    \let\nonarrowing = t%
   \nonfillstart    \nonfillstart
   \tt % easiest (and conventionally used) font for verbatim    \tt % easiest (and conventionally used) font for verbatim
   \def\par{\egroup\leavevmode\box\verbbox\endgraf\starttabbox}%    % The \leavevmode here is for blank lines.  Otherwise, we would
     % never \starttabbox and the \egroup would end verbatim mode.
     \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
   \tabexpand    \tabexpand
   \setcodequotes    \setupmarkupstyle{verbatim}%
   % Respect line breaks,    % Respect line breaks,
   % print special symbols as themselves, and    % print special symbols as themselves, and
   % make each space count.    % make each space count.
   % Must do in this order:    % Must do in this order:
   \obeylines \uncatcodespecials \sepspaces    \obeylines \uncatcodespecials \sepspaces
     \everypar{\starttabbox}%
 }  }
   
 % Do the @verb magic: verbatim text is quoted by unique  % Do the @verb magic: verbatim text is quoted by unique
Line 7483  might help (with 'rm \jobname.?? \jobnam Line 7516  might help (with 'rm \jobname.?? \jobnam
   % ignore everything up to the first ^^M, that's the newline at the end    % ignore everything up to the first ^^M, that's the newline at the end
   % of the @verbatim input line itself.  Otherwise we get an extra blank    % of the @verbatim input line itself.  Otherwise we get an extra blank
   % line in the output.    % line in the output.
   \xdef\doverbatim#1^^M#2@end verbatim{%    \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
     \starttabbox#2\egroup\noexpand\end\gobble verbatim}%  
   % We really want {...\end verbatim} in the body of the macro, but    % We really want {...\end verbatim} in the body of the macro, but
   % without the active space; thus we have to use \xdef and \gobble.    % without the active space; thus we have to use \xdef and \gobble.
   % The \egroup ends the \verbbox started at the end of the last line in  
   % the block.  
 \endgroup  \endgroup
 %  %
 \envdef\verbatim{%  \envdef\verbatim{%
     \setnormaldispenv\setupverbatim\doverbatim      \setupverbatim\doverbatim
 }  }
 \let\Everbatim = \afterenvbreak  \let\Everbatim = \afterenvbreak
   
Line 7510  might help (with 'rm \jobname.?? \jobnam Line 7540  might help (with 'rm \jobname.?? \jobnam
       \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%        \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
       \edef\tmp{\noexpand\input #1 }        \edef\tmp{\noexpand\input #1 }
       \expandafter        \expandafter
     }\expandafter\starttabbox\tmp\egroup      }\tmp
     \afterenvbreak      \afterenvbreak
   }%    }%
 }  }
Line 7862  might help (with 'rm \jobname.?? \jobnam Line 7892  might help (with 'rm \jobname.?? \jobnam
   % leave the code in, but it's strange for @var to lead to typewriter.    % leave the code in, but it's strange for @var to lead to typewriter.
   % Nowadays we recommend @code, since the difference between a ttsl hyphen    % Nowadays we recommend @code, since the difference between a ttsl hyphen
   % and a tt hyphen is pretty tiny.  @code also disables ?` !`.    % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
   \def\var##1{{\setregularquotes\ttslanted{##1}}}%    \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
   #1%    #1%
   \sl\hyphenchar\font=45    \sl\hyphenchar\font=45
 }  }
Line 7971  might help (with 'rm \jobname.?? \jobnam Line 8001  might help (with 'rm \jobname.?? \jobnam
   }    }
 \fi  \fi
   
 \let\E=\expandafter  
   
 % Used at the time of macro expansion.  % Used at the time of macro expansion.
 % Argument is macro body with arguments substituted  % Argument is macro body with arguments substituted
 \def\scanmacro#1{%  \def\scanmacro#1{%
   \newlinechar`\^^M    \newlinechar`\^^M
   % expand the expansion of \eatleadingcr twice to maybe remove a leading    \def\xeatspaces{\eatspaces}%
   % newline (and \else and \fi tokens), then call \eatspaces on the result.  
   \def\xeatspaces##1{%  
     \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1%  
   }}%  
   \def\xempty##1{}%  
   %    %
   % Process the macro body under the current catcode regime.    % Process the macro body under the current catcode regime.
   \scantokens{#1@comment}%    \scantokens{#1@comment}%
Line 8035  might help (with 'rm \jobname.?? \jobnam Line 8058  might help (with 'rm \jobname.?? \jobnam
 \unbrace{\gdef\trim@@@ #1 } #2@{#1}  \unbrace{\gdef\trim@@@ #1 } #2@{#1}
 }  }
   
 {\catcode`\^^M=\other%  
 \gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}%  
 % Warning: this won't work for a delimited argument  
 % or for an empty argument  
   
 % Trim a single trailing ^^M off a string.  % Trim a single trailing ^^M off a string.
 {\catcode`\^^M=\other \catcode`\Q=3%  {\catcode`\^^M=\other \catcode`\Q=3%
 \gdef\eatcr #1{\eatcra #1Q^^MQ}%  \gdef\eatcr #1{\eatcra #1Q^^MQ}%
Line 8206  might help (with 'rm \jobname.?? \jobnam Line 8224  might help (with 'rm \jobname.?? \jobnam
   \let\hash\relax    \let\hash\relax
   % \hash is redefined to `#' later to get it into definitions    % \hash is redefined to `#' later to get it into definitions
   \let\xeatspaces\relax    \let\xeatspaces\relax
   \let\xempty\relax  
   \parsemargdefxxx#1,;,%    \parsemargdefxxx#1,;,%
   \ifnum\paramno<10\relax\else    \ifnum\paramno<10\relax\else
     \paramno0\relax      \paramno0\relax
Line 8218  might help (with 'rm \jobname.?? \jobnam Line 8235  might help (with 'rm \jobname.?? \jobnam
   \else \let\next=\parsemargdefxxx    \else \let\next=\parsemargdefxxx
     \advance\paramno by 1      \advance\paramno by 1
     \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname      \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
         {\xeatspaces{\hash\the\paramno\noexpand\xempty{}}}%          {\xeatspaces{\hash\the\paramno}}%
     \edef\paramlist{\paramlist\hash\the\paramno,}%      \edef\paramlist{\paramlist\hash\the\paramno,}%
   \fi\next}    \fi\next}
 % the \xempty{} is to give \eatleadingcr an argument in the case of an  
 % empty macro argument.  
   
 % \parsemacbody, \parsermacbody  % \parsemacbody, \parsermacbody
 %  %
Line 8811  might help (with 'rm \jobname.?? \jobnam Line 8826  might help (with 'rm \jobname.?? \jobnam
       \else        \else
         \ifhavexrefs          \ifhavexrefs
           % We (should) know the real title if we have the xref values.            % We (should) know the real title if we have the xref values.
           \def\printedrefname{\refx{#1-title}}%            \def\printedrefname{\refx{#1-title}{}}%
         \else          \else
           % Otherwise just copy the Info node name.            % Otherwise just copy the Info node name.
           \def\printedrefname{\ignorespaces #1}%            \def\printedrefname{\ignorespaces #1}%
Line 8905  might help (with 'rm \jobname.?? \jobnam Line 8920  might help (with 'rm \jobname.?? \jobnam
     % If the user specified the print name (third arg) to the ref,      % If the user specified the print name (third arg) to the ref,
     % print it instead of our usual "Figure 1.2".      % print it instead of our usual "Figure 1.2".
     \ifdim\wd\printedrefnamebox = 0pt      \ifdim\wd\printedrefnamebox = 0pt
       \refx{#1-snt}%        \refx{#1-snt}{}%
     \else      \else
       \printedrefname        \printedrefname
     \fi      \fi
Line 8940  might help (with 'rm \jobname.?? \jobnam Line 8955  might help (with 'rm \jobname.?? \jobnam
     \else      \else
       % Reference within this manual.        % Reference within this manual.
       %        %
       % Only output a following space if the -snt ref is nonempty, as the ref        % Only output a following space if the -snt ref is nonempty; for
       % will be empty for @unnumbered and @anchor.        % @unnumbered and @anchor, it won't be.
       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}}%        \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi        \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
       %        %
       % output the `[mynode]' via the macro below so it can be overridden.        % output the `[mynode]' via the macro below so it can be overridden.
       \xrefprintnodename\printedrefname        \xrefprintnodename\printedrefname
       %        %
       \expandafter\ifx\csname SETtxiomitxrefpg\endcsname\relax        % But we always want a comma and a space:
         % But we always want a comma and a space:        ,\space
         ,\space        %
         %        % output the `page 3'.
         % output the `page 3'.        \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
         \turnoffactive \putwordpage\tie\refx{#1-pg}%        % Add a , if xref followed by a space
         % Add a , if xref followed by a space        \if\space\noexpand\tokenafterxref ,%
         \if\space\noexpand\tokenafterxref ,%        \else\ifx\        \tokenafterxref ,% @TAB
         \else\ifx\      \tokenafterxref ,% @TAB        \else\ifx\*\tokenafterxref ,%   @*
         \else\ifx\*\tokenafterxref ,%   @*        \else\ifx\ \tokenafterxref ,%   @SPACE
         \else\ifx\ \tokenafterxref ,%   @SPACE        \else\ifx\
         \else\ifx\                  \tokenafterxref ,%    @NL
                   \tokenafterxref ,%    @NL        \else\ifx\tie\tokenafterxref ,% @tie
         \else\ifx\tie\tokenafterxref ,% @tie        \fi\fi\fi\fi\fi\fi
         \fi\fi\fi\fi\fi\fi  
       \fi  
     \fi\fi      \fi\fi
   \fi    \fi
   \endlink    \endlink
Line 9030  might help (with 'rm \jobname.?? \jobnam Line 9043  might help (with 'rm \jobname.?? \jobnam
   \fi\fi\fi    \fi\fi\fi
 }  }
   
 % \refx{NAME} - reference a cross-reference string named NAME.  % \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME.  SUFFIX
 \def\refx#1{%  % is output afterwards if non-empty.
   \def\refx#1#2{%
   \requireauxfile    \requireauxfile
   {%    {%
     \indexnofonts      \indexnofonts
Line 9058  might help (with 'rm \jobname.?? \jobnam Line 9072  might help (with 'rm \jobname.?? \jobnam
     % It's defined, so just use it.      % It's defined, so just use it.
     \thisrefX      \thisrefX
   \fi    \fi
     #2% Output the suffix in any case.
 }  }
   
 % This is the macro invoked by entries in the aux file.  Define a control  % This is the macro invoked by entries in the aux file.  Define a control
Line 9167  might help (with 'rm \jobname.?? \jobnam Line 9182  might help (with 'rm \jobname.?? \jobnam
   \catcode`\[=\other    \catcode`\[=\other
   \catcode`\]=\other    \catcode`\]=\other
   \catcode`\"=\other    \catcode`\"=\other
   \catcode`\_=\active    \catcode`\_=\other
   \catcode`\|=\active    \catcode`\|=\other
   \catcode`\<=\active    \catcode`\<=\other
   \catcode`\>=\active    \catcode`\>=\other
   \catcode`\$=\other    \catcode`\$=\other
   \catcode`\#=\other    \catcode`\#=\other
   \catcode`\&=\other    \catcode`\&=\other
Line 9391  might help (with 'rm \jobname.?? \jobnam Line 9406  might help (with 'rm \jobname.?? \jobnam
 \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup  \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
   \catcode`\^^M = 5     % in case we're inside an example    \catcode`\^^M = 5     % in case we're inside an example
   \normalturnoffactive  % allow _ et al. in names    \normalturnoffactive  % allow _ et al. in names
   \makevalueexpandable    \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro
   % If the image is by itself, center it.    % If the image is by itself, center it.
   \ifvmode    \ifvmode
     \imagevmodetrue      \imagevmodetrue
Line 9417  might help (with 'rm \jobname.?? \jobnam Line 9432  might help (with 'rm \jobname.?? \jobnam
   % On the other hand, if we are in the case of @center @image, we don't    % On the other hand, if we are in the case of @center @image, we don't
   %  want to start a paragraph, which will create a hsize-width box and    %  want to start a paragraph, which will create a hsize-width box and
   %  eradicate the centering.    %  eradicate the centering.
   \ifx\centersub\centerV \else \imageindent \fi    \ifx\centersub\centerV\else \noindent \fi
   %    %
   % Output the image.    % Output the image.
   \ifpdf    \ifpdf
Line 10691  directory should work if nowhere else do Line 10706  directory should work if nowhere else do
   \DeclareUnicodeCharacter{0233}{\=y}%    \DeclareUnicodeCharacter{0233}{\=y}%
   \DeclareUnicodeCharacter{0237}{\dotless{j}}%    \DeclareUnicodeCharacter{0237}{\dotless{j}}%
   %    %
   \DeclareUnicodeCharacter{02BC}{'}%  
   %  
   \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%    \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%
   %    %
   % Greek letters upper case    % Greek letters upper case
Line 11327  directory should work if nowhere else do Line 11340  directory should work if nowhere else do
   \globaldefs = 0    \globaldefs = 0
 }}  }}
   
 \def\bsixpaper{{\globaldefs = 1  
   \afourpaper  
   \internalpagesizes{140mm}{100mm}%  
                     {-6.35mm}{-12.7mm}%  
                     {\bindingoffset}{14pt}%  
                     {176mm}{125mm}%  
   \let\SETdispenvsize=\smallword  
   \lispnarrowing = 0.2in  
   \globaldefs = 0  
 }}  
   
   
 % @pagesizes TEXTHEIGHT[,TEXTWIDTH]  % @pagesizes TEXTHEIGHT[,TEXTWIDTH]
 % Perhaps we should allow setting the margins, \topskip, \parskip,  % Perhaps we should allow setting the margins, \topskip, \parskip,
 % and/or leading, also. Or perhaps we should compute them somehow.  % and/or leading, also. Or perhaps we should compute them somehow.
Line 11352  directory should work if nowhere else do Line 11353  directory should work if nowhere else do
   \setleading{\textleading}%    \setleading{\textleading}%
   %    %
   \dimen0 = #1\relax    \dimen0 = #1\relax
   \advance\dimen0 by 2.5in % default 1in margin above heading line    \advance\dimen0 by \voffset
                            % and 1.5in to include heading, footing and    \advance\dimen0 by 1in % reference point for DVI is 1 inch from top of page
                            % bottom margin  
   %    %
   \dimen2 = \hsize    \dimen2 = \hsize
   \advance\dimen2 by 2in % default to 1 inch margin on each side    \advance\dimen2 by \normaloffset
     \advance\dimen2 by 1in % reference point is 1 inch from left edge of page
   %    %
   \internalpagesizes{#1}{\hsize}%    \internalpagesizes{#1}{\hsize}%
                     {\voffset}{\normaloffset}%                      {\voffset}{\normaloffset}%
Line 11444  directory should work if nowhere else do Line 11445  directory should work if nowhere else do
   \let> = \activegtr    \let> = \activegtr
   \let~ = \activetilde    \let~ = \activetilde
   \let^ = \activehat    \let^ = \activehat
   \setregularquotes    \markupsetuplqdefault \markupsetuprqdefault
   \let\b = \strong    \let\b = \strong
   \let\i = \smartitalic    \let\i = \smartitalic
   % in principle, all other definitions in \tex have to be undone too.    % in principle, all other definitions in \tex have to be undone too.
Line 11503  directory should work if nowhere else do Line 11504  directory should work if nowhere else do
    @let|=@normalverticalbar     @let|=@normalverticalbar
    @let~=@normaltilde     @let~=@normaltilde
    @let\=@ttbackslash     @let\=@ttbackslash
    @setregularquotes     @markupsetuplqdefault
      @markupsetuprqdefault
    @unsepspaces     @unsepspaces
  }   }
 }  }
Line 11596  directory should work if nowhere else do Line 11598  directory should work if nowhere else do
 @c Do this last of all since we use ` in the previous @catcode assignments.  @c Do this last of all since we use ` in the previous @catcode assignments.
 @catcode`@'=@active  @catcode`@'=@active
 @catcode`@`=@active  @catcode`@`=@active
 @setregularquotes  @markupsetuplqdefault
   @markupsetuprqdefault
   
 @c Local variables:  @c Local variables:
 @c eval: (add-hook 'before-save-hook 'time-stamp)  @c eval: (add-hook 'before-save-hook 'time-stamp)
Line 11609  directory should work if nowhere else do Line 11612  directory should work if nowhere else do
 @c vim:sw=2:  @c vim:sw=2:
   
 @enablebackslashhack  @enablebackslashhack
   

Removed from v.1.1.1.1  
changed lines
  Added in v.1.5


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