%% TeX macros to handle latexinfo files
%% \include{ 5 page GNU copyleft here }
%   Copyright (C) 1985, 1986 Richard M. Stallman
%   Copyleft  (C) 1988, 1989, 1990 Michael E. Clarkson

% Modified by Takafumi Sakurai (sakurai@math.metro-u.ac.jp)
%	to add `yomi'-part to cindex
%	-- the idea from Japanese texinfo by S. Tomura

\def\latexinfoversion{1.3.5}
\message{Loading Latexinfo package [Version \latexinfoversion]:}
\message{}

\setcounter{tocdepth}{2}
\setcounter{secnumdepth}{3}

\def\oddfoot#1{\def\@oddfoot{#1}}
\def\evenfoot#1{\def\@evenfoot{#1}}

% Save some parts of plain tex whose names we will redefine.

\let\ptexlbrace=\{
\let\ptexrbrace=\}
\let\ptexdot=\.
\let\ptexstar=\*
\let\ptexend=\end
\let\ptexbullet=\bullet
\let\ptexb=\b
\let\ptexc=\c
\let\ptexi=\i
\let\ptext=\t
\let\ptexl=\l
\let\ptexL=\L
\def\pline{\hbox to\hsize}
\def\pleftline#1{\pline{#1\hss}}
\def\prightline#1{\pline{\hss#1}}

\def\centerline#1{\pline{\hss#1\hss}}

\def\tie{\penalty 10000\ }     % Save plain tex definition of ~.

\let\normal=\normalsize

\message{Basics,}
\chardef\other=12

\hyphenation{ap-pen-dix}
\hyphenation{mini-buf-fer mini-buf-fers}

% Parse an argument, then pass it to #1.
% The argument can be delimited with [...] or with "..." or braces
% or it can be a whole line.
% #1 should be a macro which expects
% an ordinary undelimited TeX argument.

\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}

\def\parseargx{%
\ifx \obeyedspace\temp \aftergroup\parseargdiscardspace \else%
\aftergroup \parseargline %
\fi \endgroup}

{\obeyspaces %
\gdef\parseargdiscardspace {\begingroup\obeylines\futurelet\temp\parseargx}}

\gdef\obeyedspace{\ }

\def\parseargline{\begingroup \obeylines \parsearglinex}
{\obeylines %
\gdef\parsearglinex #1^^M{\endgroup \next {#1}}}

\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}

% Single-spacing is done by various environments.

\newskip\singlespaceskip
\singlespaceskip = \baselineskip
\def\singlespace{%
{\advance \baselineskip by -\singlespaceskip
\kern \baselineskip}%
\baselineskip=\singlespaceskip
}

\def\arrow{$\rightarrow$}

% Used to generate quoted braces.

\def\mylbrace {{\tt \char '173}}
\def\myrbrace {{\tt \char '175}}
\let\{=\mylbrace
\let\}=\myrbrace

% \: forces normal size whitespace following.
\def\:{\spacefactor=1000 }

% \* forces a line break.
\def\*{\hfil\break}

% \. is an end-of-sentence period.
\def\.{.\spacefactor=3000 }

% \w prevents a word break
\def\w#1{\hbox{#1}}

% \br   forces paragraph break

\let\br = \par

% \dots{}  output some dots

\def\dots{$\ldots$}

% \page    forces the start of a new page
%\def\page{\clearpage}

% \exdent text....
% outputs text on separate line in roman font, starting at standard page margin

\def\exdent{\errmessage{@exdent in filled text}}
  % \lisp, etc, define \exdent locally from \internalexdent

{\obeyspaces
\gdef\internalexdent{\parsearg\exdentzzz}}

\def\exdentzzz #1{{\advance \leftskip by -\lispnarrowing
\advance \hsize by -\leftskip
\advance \hsize by -\rightskip
\leftline{{\rm#1}}}}

% \sp n   outputs n lines of vertical space
\def\sp#1{\par\vskip #1\baselineskip\relax}

% \comment ...line which is ignored...
% \c is the same as @comment
% \begin{ignore} ... \end{ignore}  is another way to write a comment
\def\comment{\parsearg \commentxxx}

\def\commentxxx #1{}

\let\c=\comment

% Some texinfo constructs that are trivial in tex
\newenvironment{iftex}{}{}

\catcode`@=11

\message{menus,}
{\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
{\@gobble}{\ignorespaces}}}

\chardef\active=13

{\catcode`\ =\active\gdef\@vobeyspaces{\catcode`\ \active \let \@xobeysp}}
 
\begingroup \catcode `|=0 \catcode `[= 1
\catcode`]=2 \catcode `\{=12 \catcode `\}=12
\catcode`\\=12 
|gdef|@xmenu#1\end{menu}[|end[menu]]
|gdef|@xifinfo#1\end{ifinfo}[|end[ifinfo]]
|gdef|@xignore#1\end{ignore}[|end[ignore]]
|endgroup

\def\@menu{\begingroup
\@tempswafalse 
\def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
\obeylines \let\do\@makeother \dospecials}

\def\menu{\@menu\@xmenu }
\let\endmenu=\endgroup
\def\ifinfo{\@menu\@xifinfo }
\let\endifinfo=\endgroup
\def\ignore{\@menu\@xignore }
\let\endignore=\endgroup

\def\node{\parsearg\nodezzz}
\def\nodezzz#1{\nodexxx [#1,]}
\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
%\def\node#1#2#3#4{\gdef\lastnode{#1}}
\let\lastnode=\relax


\let\refill=\relax

\let\setfilename=\comment

\def\inforef #1{\inforefzzz #1,,,,**}
\def\inforefzzz #1,#2,#3,#4**{See Info file \file{\losespace#3{}}, node `\losespace#1{}'}
\def\losespace #1{#1}

\message{fonts,}

% Font-change commands.

\def\li{\sf}

%% Add scribe-like font environments, plus \l for inline lisp (usually sans
%% serif) and \ii for TeX italic

\def\i#1{{\sl #1}}
\let\var=\i
\let\dfn=\i
\let\emph=\i

\def\b#1{{\bf #1}}
\let\strong=\b

\def\t#1{{\tt \rawbackslash #1}\null}
\let\ttfont=\t
\let\kbd=\t
\let\code=\t
\def\samp#1{`{\tt \rawbackslash #1}'\null}
\def\key#1{{\tt \uppercase{#1}}\null}
\def\ctrl#1{$\uparrow${\tt #1}}

\let\file=\samp

\def\l#1{{\li #1}\null}

\def\r#1{{\rm #1}}
\def\s#1{{\sc #1}}
\def\ii#1{{\it #1}}

\def\bullet{$\ptexbullet$}
\def\labelitemi{$\ptexbullet$}

\def\minus{$-$}

% Make altmode in file print out right

\catcode `\^^[=\active \def^^[{$\diamondsuit$}

\message{indexing,}
% Index generation facilities

% Define the texinfo user-accessible indexing commands for backwrds 
% compatability.

\def\findex{\fnindex}
\def\kindex{\kyindex}
\def\cindex{\cpindex}
\def\vindex{\vrindex}
\def\tindex{\tpindex}
\def\pindex{\pgindex}
\def\csubindex{\cpsubindex}


% \newindex {foo} defines an index named foo.
% It automatically defines \fooindex such that
% \fooindex ...rest of line... puts an entry in the index foo.
% It also defines \fooindfile to be the number of the output channel for
% the file that	accumulates this index.  The file's extension is foo.
% The name of an index should be no more than 2 characters long
% for the sake of vms.

\def\newindex#1{\csname newindex#1\endcsname}

% Yes I know this could be done shorter, but safer??

\def\newindexcp{\if@filesw \newwrite\@cpindexfile
  \immediate\openout\@cpindexfile=\jobname.cp
  \def\cpindex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrjindex\@cpindexfile}%
  \def\cpsubindex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrjsubindex\@cpindexfile}%
  \def\cpindexbold{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrjindexbold\@cpindexfile}
   \typeout{Writing concepts index file \jobname.cp }%
   \fi}

\def\cpindex{\@bsphack\begingroup \@sanitize\@index}
\def\cpsubindex{\@bsphack\begingroup \@sanitize\@index}
\def\cpindexbold{\@bsphack\begingroup \@sanitize\@index}

\def\@wrindex#1#2{\let\thepage\relax
   \xdef\@gtempa{\write#1{\string \entry{#2}{\thepage}{#2}}}\endgroup\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}

\def\@wrindexbold#1#2{\let\thepage\relax \let\bf\relax
   \xdef\@gtempa{\write#1{\string \entry{#2}{\string\b{\thepage}}{#2}}}\endgroup\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}

\def\@wrsubindex#1#2#3{\let\thepage\relax
	\xdef\@gtempa{\write#1{\string \entry{#2 #3}{\thepage}{#2}{#3}}}\endgroup%
	\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}

\def\@index#1{\endgroup\@esphack}

%*** patch by T. Sakurai 92-Apr-24
{\makeatother
\gdef\Jempty{}
\gdef\Jgetyomi#1{\Jgetym#1@@}
\gdef\Jgetym#1@#2@{\edef\Jsakuin{#1}\edef\Jyomi{#2}%
\ifx\Jempty\Jyomi \let\Jyomi\Jsakuin \let\Jnext\relax
\else \let\Jnext\Jyomigobble \fi \Jnext}
\gdef\Jyomigobble@{}
}

\def\@wrjindex#1#2{\let\thepage\relax
   \Jgetyomi{#2}%
   \xdef\@gtempa{\write#1{\string \entry{\Jyomi}{\thepage}{\Jsakuin}}}\endgroup\@gtempa
  \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}

\def\@wrjindexbold#1#2{\let\thepage\relax \let\bf\relax
   \Jgetyomi{#2}%
   \xdef\@gtempa{\write#1{\string \entry{\Jyomi}{\string\b{\thepage}}{\Jsakuin}}}\endgroup\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}

\def\@wrjsubindex#1#2#3{\let\thepage\relax
   \Jgetyomi{#2}\let\Jsakuinm@in\Jsakuin \let\Jyomim@in\Jyomi \Jgetyomi{#3}%
   \xdef\@gtempa{\write#1{\string \entry{\Jyomim@in\space\Jyomi}{\thepage}{\Jsakuinm@in}{\Jsakuin}}}\endgroup%
   \@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
%**** end of patch

\def\pgindex{\@bsphack\begingroup \@sanitize\@index}
\def\newindexpg{\if@filesw \newwrite\@pgindexfile
  \immediate\openout\@pgindexfile=\jobname.pg
  \def\pgindex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrindex\@pgindexfile}\typeout{Writing index file \jobname.pg }\fi}

\def\newindexvr{\if@filesw \newwrite\@vrindexfile
  \immediate\openout\@vrindexfile=\jobname.vr
  \def\vrindex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrindex\@vrindexfile}
  \def\vrindexbold{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrindexbold\@vrindexfile}
	\typeout{Writing variable index file \jobname.vr }\fi}

\def\vrindex{\@bsphack\begingroup \@sanitize\@index}
\def\vrindexbold{\@bsphack\begingroup \@sanitize\@index}

\def\newindextp{\if@filesw \newwrite\@tpindexfile
  \immediate\openout\@tpindexfile=\jobname.tp
  \def\tpindex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrindex\@tpindexfile}
	\typeout{Writing datatype index file \jobname.tp }\fi}

\def\tpindex{\@bsphack\begingroup \@sanitize\@index}

\def\newindexky{\if@filesw \newwrite\@kyindexfile
  \immediate\openout\@kyindexfile=\jobname.ky
  \def\kyindex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrindex\@kyindexfile}\typeout{Writing key index file \jobname.ky }\fi}

\def\kyindex{\@bsphack\begingroup \@sanitize\@index}

\def\newindexfn{\if@filesw \newwrite\@fnindexfile
  \immediate\openout\@fnindexfile=\jobname.fn
  \def\fnindex{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrindex\@fnindexfile}
  \def\fnindexbold{\@bsphack\begingroup
             \def\protect####1{\string####1\space}\@sanitize
             \@wrindexbold\@fnindexfile}
	\typeout{Writing function index file \jobname.fn }\fi}

\def\fnindex{\@bsphack\begingroup \@sanitize\@index}


% \synindex{foo}{bar}    makes index foo feed into index bar.
\def\synindex#1#2{\expandafter\xdef \csname @#1index\endcsname{%
	\noexpand\csname @#2index\endcsname}%
\expandafter \chardef \csname @#1indexfile\endcsname=\csname @#2indexfile\endcsname}


% 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.
% Write
% \section*{Function Index}
% \printindex{fn}

\newskip\secondaryindent
\secondaryindent=0.5cm

\def\printindex#1{
\def\indexbackslash{\rawbackslashxx}
\tolerance=9500 \advance\baselineskip -1pt
\openin 1 \jobname.#1s
\ifeof 1 \else \closein 1 \input \jobname.#1s
\fi
}

% These macros are used by the sorted index file itself.
% Change them to control the appearance of the index.

\def\Dotsbox{\hbox to 1em{\hss.\hss}} % Used by index macros

\def\initial#1{%
{\bigbreak\pline{\large\bf#1\hfill}\kern 2pt\penalty3000}}

\def\entry #1#2{
{\parfillskip=0in \parskip=0in \parindent=0in \small
\hangindent=1in \hangafter=1%
\noindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll\relax #2\par
}}

\def\primary #1{\pline{\small#1\hfil}}

\def\secondary #1#2{
{\parfillskip=0in \parskip=0in \small
\hangindent =1in \hangafter=1
\noindent\hskip\secondaryindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll#2\par
}}

%%% Args are the skip and penalty (usually negative)
\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}

\message{environments,}

% \begin{tex} ... \end{tex}    escapes into raw Tex temporarily.

\def\tex{\begingroup
\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
\catcode `\%=14
\catcode`\"=12
\catcode`\|=12
\catcode`\<=12
\catcode`\>=12

\let\{=\ptexlbrace
\let\}=\ptexrbrace
\let\.=\ptexdot
\let\*=\ptexstar
\let\bullet=\ptexbullet
\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
\let\L=\ptexL

\let\endtex=\endgroup}

% Define \lisp ... \endlisp.
% \lisp does a \begingroup so it can rebind things,
% including the definition of \endlisp (which normally is erroneous).

% Amount to narrow the margins by for \lisp.
\newskip\lispnarrowing \lispnarrowing=\parindent

% This is the definition that ^M gets inside \lisp
% phr: changed space to \null, to avoid overfull hbox problems.
{\obeyspaces%
\gdef\lisppar{\null\endgraf}}

% Cause \obeyspaces to make each Space cause a word-separation
% rather than the default which is that it acts punctuation.
% This is because space in tt font looks funny.
{\obeyspaces %
\gdef\sepspaces{\def {\ }}}

\newskip\aboveenvskipamount \aboveenvskipamount= 0pt
\def\aboveenvbreak{{\advance\aboveenvskipamount by \parskip
\endgraf \ifdim\lastskip<\aboveenvskipamount
\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}}

\def\afterenvbreak{\endgraf \ifdim\lastskip<\aboveenvskipamount
\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}

\newenvironment{example}{\aboveenvbreak
	\hfuzz=12truept % Don't be fussy
	\sepspaces % Make spaces be word-separators rather than space tokens.
	\singlespace % Single space lines
	% The following causes blank lines not to be ignored
	% by adding a space to the end of each line.
	\let\par=\lisppar
	\parskip=0pt \advance \rightskip by \lispnarrowing 
	\advance \leftskip by \lispnarrowing
	\parindent=0pt
	\let\exdent=\internalexdent
	\obeyspaces \obeylines \tt \rawbackslash \bgroup\samepage
	\def\next##1{}\next}{\egroup\afterenvbreak}

%same is the same as an enclosed \samepage
\newenvironment{same}{\bgroup\samepage}{\egroup}

% This is \begin{display}; same as \begin{lisp} except use roman font.

\newenvironment{display}{\aboveenvbreak
	% Make spaces be word-separators rather than space tokens.
	\sepspaces %
	% Single space lines
	\singlespace %
	% The following causes blank lines not to be ignored
	% by adding a space to the end of each line.
	\let\par=\lisppar
	\parskip=0pt \advance \rightskip by \lispnarrowing 
	\advance \leftskip by \lispnarrowing
	\parindent=0pt
	\let\exdent=\internalexdent
	\obeyspaces \obeylines
		\def\next##1{}\next}{\afterenvbreak}

% This is \format; same as \lisp except use roman font and don't narrow margins

\newenvironment{format}{\aboveenvbreak
	% Make spaces be word-separators rather than space tokens.
	\sepspaces %
	\singlespace %
	% The following causes blank lines not to be ignored
	% by adding a space to the end of each line.
	\let\par=\lisppar
	\parskip=0pt \parindent=0pt
	\obeyspaces \obeylines
	\def\next##1{}\next}{\afterenvbreak}

\message{cross reference,}
% Define cross-reference macros

% \xref and \pxref generate cross references to specified points.

\def\pxref #1{see \xrefX [#1,,,,,,,]}
\def\xref #1{See \xrefX [#1,,,,,,,]}

%\def\xrefX [#1,#2,#3,#4,#5,#6]{section \ref{#1} [%
%{\setbox0=\hbox{\losespace#3{}}%
%\ifdim \wd0 =0pt \losespace#1{}\else\unhbox0\fi}],
%page\tie \pageref{#1}}

\def\xrefX [#1,#2,#3,#4,#5,#6]{%
\setbox1=\hbox{\i{\losespace#5{}}}%
\setbox0=\hbox{\losespace#3{}}%
\ifdim \wd0 =0pt \setbox0=\hbox{\losespace#1{}}\fi%
\ifdim \wd1 >0pt%
section \unhbox0{} in \unhbox1%
\else%
\ref{#1} [\unhbox0], page\tie \pageref{#1}%
\fi }

\message{sectioning,}
% Define chapters, sections, etc.

\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
 \refstepcounter{chapter}
\ifx\lastnode\relax\else\label{\lastnode}\fi
\let\lastnode=\relax
 \typeout{\@chapapp\space\thechapter.}
 \addcontentsline{toc}{chapter}{\protect
 \numberline{\thechapter}#1}\else
 \addcontentsline{toc}{chapter}{#1}\fi
 \chaptermark{#1}
 \addtocontents{lof}{\protect\addvspace{10pt}}
\addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
\@topnewpage[\@makechapterhead{#2}] 
 \else \@makechapterhead{#2}
 \@afterheading \fi} 
\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
 \else \@makeschapterhead{#1} 
 \@afterheading\fi}

\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
     \def\@svsec{}\else 
     \refstepcounter{#1}
\ifx\lastnode\relax\else\label{\lastnode}\fi
\let\lastnode=\relax
	\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
     \@tempskipa #5\relax
      \ifdim \@tempskipa>\z@ 
        \begingroup #6\relax
          \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
        \endgroup
       \csname #1mark\endcsname{#7}\addcontentsline
         {toc}{#1}{\ifnum #2>\c@secnumdepth \else
                      \protect\numberline{\csname the#1\endcsname}\fi
                    #7}\else
        \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
                      {#7}\addcontentsline
                           {toc}{#1}{\ifnum #2>\c@secnumdepth \else
                             \protect\numberline{\csname the#1\endcsname}\fi
                       #7}}\fi
     \@xsect{#5}}

% Unnumbered
\def\unnumbered#1{\chapter*{#1}\@mkboth{\uppercase{#1}}{\uppercase{#1}}
\addcontentsline{toc}{chapter}{#1}}	 

% This is bogus if you use it in a book or report style
\def\unnumberedsec#1{\section*{#1}\@mkboth{\uppercase{#1}}{\uppercase{#1}}
\addcontentsline{toc}{section}{#1}}	 

\def\unnumberedsubsec#1{\subsection*{#1}\addcontentsline
	{toc}{subsection}{#1}}	 

\def\unnumberedsubsubsec#1{\subsubsection*{#1}\addcontentsline
	{toc}{subsubsection}{#1}}	 

% I doubt this still works - someone should write a style file.
\def\smallbook{
\global\lispnarrowing = 0.3in
\global\baselineskip 12pt
\global\parskip 3pt plus 1pt
\global\hsize = 5in
\global\doublecolumnhsize=2.4in \global\doublecolumnvsize=15.0in
\global\vsize=7.5in
\global\tolerance=700
\global\hfuzz=1pt

\global\pagewidth=\hsize
\global\pageheight=\vsize
\global\font\ninett=cmtt9

\global\let\smalllisp=\smalllispx
\global\let\smallexample=\smalllispx
\global\def\Esmallexample{\Esmalllisp}
}

%% For a final copy, take out the rectangles
%% that mark overfull boxes (in case you have decided
%% that the text looks ok even though it passes the margin).
\def\finalout{\overfullrule=0pt}

\message{and turning on texinfo input format.}

{\catcode`\@=0

% \rawbackslashxx output one backslash character in current font
{\catcode`\\=\other
@gdef@rawbackslashxx{\}}

% \rawbackslash redefines \ as input to do \rawbackslashxx.
{\catcode`\\=\active
@gdef@rawbackslash{@let\=@rawbackslashxx }}
}

% \back outputs one backslash in fixed width font.
\gdef\back{\tt\rawbackslashxx\ignorespaces}

\def\document{\endgroup
  \@colht\textheight  \@colroom\textheight \vsize\textheight
   \columnwidth\textwidth \@clubpenalty\clubpenalty
   \if@twocolumn \advance\columnwidth -\columnsep 
      \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue 
   \fi
  \hsize\columnwidth \linewidth\hsize
  \begingroup\@floatplacement\@dblfloatplacement
   \makeatletter\let\@writefile\@gobbletwo
   \@input{\jobname.aux}\endgroup 
  \if@filesw \immediate\openout\@mainaux=\jobname.aux
    \immediate\write\@mainaux{\relax}\fi
  \def\do##1{\let ##1\@notprerr}
  \@preamblecmds
  \let\do\noexpand
\@normalsize\everypar{}\nospecials}


% Here is a list of the characters that have been specially catcoded:
\def\dosomespecials{\do\$\do\&\do\#\do\%\do\~\do\^}

{\catcode`\"=\active
\catcode`\>=\active
\catcode`\<=\active
\catcode`\_=\active
\gdef\nospecials{
\catcode`\"=\active
\gdef\activedoublequote{{\tt \char '042}}
\let"=\activedoublequote
\catcode`\>=\active
\gdef\activegtr{{\tt \char '076}}
\let>=\activegtr
\catcode`\<=\active
\gdef\activeless{{\tt \char '074}}
\let<=\activeless
\catcode`\_=\active
\gdef\activeunderscore{{\tt \char '137}}
\let_=\activeunderscore
\@noligs\let\do\@makeother \dosomespecials}
}
