\chardef\escape=0 \chardef\subscript=8 \chardef\letter=11 \chardef\other=12 %\chardef\active=13 % is defined in Plain already \chardef\atcode=\catcode`\@ \chardef\uscode=\catcode`\_ \catcode`\@=\letter \catcode`\_=\letter \font\tentex=cmtex10 % typewriter extended ASCII 10pt \let\ttex=\tentex % only for PLAIN with base size 10pt \def\setup_verbatim{% \def\do##1{\catcode`##1\other}\dospecials \parskip\z@skip \parindent\z@ \obeylines \obeyspaces \obeytabs \frenchspacing \ttex } \let\tab=\space \begingroup \catcode`\^^I=\active% % Attention: no tabs! \gdef\obeytabs{\catcode`\^^I=\active\def^^I{\tab}} \global\let^^I=\tab% % if an active tab appears in a \write \endgroup \let\origvert=| \chardef\vbar=`\| \catcode`\|=\active \def|{% \leavevmode \hbox\bgroup \let\par\space \setup_verbatim \let|\egroup } \newif\if@print \def\begin_verbatim{% \endgraf \bigbreak \begingroup \setup_verbatim \catcode`\|\other \@printtrue \ignore_rest_line } \let\end_verbatim=\endgroup % internal command ! \begingroup \obeylines% % ^^M is active! ==> every line must end with % \gdef\ignore_rest_line#1^^M{\set_next_line}% \gdef\set_next_line#1^^M{\do_set{#1}}% \endgroup \def\do_set#1{% \endgraf \check_print{#1}% \if@print \indent \print_char#1\end_line\end_line \else \let\set_next_line\end_verbatim \fi \set_next_line } \let\end_line=\relax \begingroup \obeyspaces\obeytabs \gdef\check_print#1{\cut_at_tab#1^^I\end_line} \gdef\cut_at_tab#1^^I#2\end_line{\check_first_part#1 \end_line}% blank ! \gdef\check_first_part#1 #2\end_line{\do_check{#1}} \endgroup \def\do_check#1{% \def\@line{#1}% \ifx \@line\end_verbatim_line \@printfalse \fi } \newcount\char_count \char_count\z@ \def\print_char#1#2\end_line{% \print_first_char{#1}% \print_rest_of_line{#2}% } {\obeytabs\gdef\@tab{^^I}} \def\print_first_char#1{% \def\@char{#1}% \advance \char_count\@ne \ifx \@char\@tab \print_tab \else \@char \fi } \newcount\count_mod_viii \def\mod_viii#1{% \count@ #1\relax \count_mod_viii\count@ \divide \count@ 8\relax \multiply \count@ 8\relax \advance \count_mod_viii -\count@ } \def\print_tab{% \loop \space \mod_viii\char_count \ifnum \count_mod_viii>\z@ \advance \char_count\@ne \repeat } \def\print_rest_of_line#1{% \def\@line{#1}% \ifx \@line\empty \char_count\z@ \def\next##1\end_line{\relax}% \else \let\next\print_char \fi \next#1\end_line } {\catcode`\/=\escape \catcode`\\=\other % / is temporary escape char /gdef/beginprog{% /gdef/end_verbatim_line{\endprog}% /begin_verbatim } /gdef/beginverbatim{% /gdef/end_verbatim_line{\endverbatim}% /begin_verbatim } } % here \endgroup can't be used \newcount\sectno \sectno=\@ne \newtoks\title \title{} \def\toc_file_name{\jobname.toc } % <--- Space!! \newwrite\toc_file \immediate\openout\toc_file=\toc_file_name \immediate\write\toc_file{\relax} \let\tocline=\relax \headline{% \tenrm \S\topmark \qquad \the\title \hfil \main_title \qquad \tenrm \folio } \footline{\hfil} \vbox to \vsize{} \output={% \setbox\z@ \vbox{\unvbox\@cclv}% % throw away the first page \global\output{\plainoutput}% % restore Plain output routine } \def\chap#1.{% \endgraf \mark{\number\sectno}% % gather information for headline \vfill\supereject \begingroup \def\protect##1{\string ##1 }% % <--- Space!! \edef\write_toc_sectno{\write\toc_file{\tocline{\number\sectno}}}% \write_toc_sectno \write\toc_file{{#1}{\folio}}% \endgroup \gdef\main_title{#1}% % more information for headline \noindent {\bf \number\sectno.\quad #1.}% \global\advance \sectno\@ne \endgraf \medskip \nobreak \everypar{% % remove next parindent \setbox0\lastbox \global\everypar{}% }% } \def\sect{% \endgraf \mark{\number\sectno}% % gather information for headline \vskip 2pc plus 1pc minus 6dd \goodbreak \noindent {\bf \number\sectno.}\quad \ignorespaces \global\advance \sectno\@ne } \def\byebye{\par\vfil\supereject\end} % original definition of \bye \def\bye{% \endgraf \vfill \supereject \immediate\closeout\toc_file \message{Table of contents:}% \leftskip\z@skip \rightskip\z@skip \parskip\z@skip \parindent\z@ \parfillskip\z@skip \normalbaselines \headline{\hfil}% \footline{\hfil \folio \hfil}% \def\HeaderToc{\rightline{Section\hbox to\thr@@ em{\hss Page}}}% \def\tocline##1##2##3{% \line{% \ignorespaces ##2% \leaders\hbox to .5em{.\hfil}\hfil \ ##1% \hbox to \thr@@ em{\hss ##3}% }% } \pageno\m@ne % table of contents gets roman page numbers \topofcontents % may redefine \HeaderToc and \tocline! \HeaderToc \catcode`\@\letter % @ and _ are letters (for reading private macros) \catcode`\_\letter \input \toc_file_name \catcode`\@\atcode % @ and _ are no more letters \catcode`\_\uscode \botofcontents \byebye % print the contents page(s) and terminate } \font\titlefont=cmr7 scaled\magstep4 % title on the contents page \font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title \def\topofcontents{ \null \vfill \centerline{\let\tt\ttitlefont \titlefont \the\title} \vskip 1cm } \def\botofcontents{ \vfill\vfill } \catcode`\@=\atcode \catcode`\_=\uscode \endinput