% macros for the appendix to "Errors of TeX" paper
\input manmac
\voffset=-.3in
\catcode`\^=7 % disable the indexing stuff
\font\sltt=cmsltt9
\font\logosl=logosl9
\ninepoint
\vsize=48pc \pageheight=\vsize
\hsize=33.5pc
\def\\{\bgroup\catcode`_=\active\identifier}
{\catcode`_=\active \global\let_=\_}
\def\identifier#1{\hbox{\it#1\/\kern.05em}\egroup} % italic type for identifiers
\newdimen\codesize \setbox0=\hbox{\enspace M} \codesize=\wd0
\setbox0=\hbox{\thinspace\S1111\kern\codesize} \rightskip=\wd0
\newdimen\itemnosize \setbox0=\hbox{\bf999} \itemnosize=\wd0
\setbox0=\hbox{$999\mapsto{}$\kern\itemnosize\enspace} \parindent=\wd0
\newdimen\datemar \setbox0=\hbox{\bf 15 Mar 1977}
\datemar=\hsize \advance\datemar-\wd0 \divide\datemar2
\newdimen\hangamount \hangamount=\parindent \advance\hangamount 1em
\everypar{\global\hangindent=\hangamount}
\parfillskip=-\rightskip
\finalhyphendemerits=0
\interlinepenalty=100
\smallskipamount=3pt plus 2pt
\def\smallbreak{\fin\penalty-50\smallskip}
\newbox\predec % for predecessor "mapsto" info
\newbox\code % for the code letter
\newbox\texsec % for TeX section numbers
\newbox\cbox % the symbol used on commentlines
\newbox\dbox % empty box used after datelines
\setbox\dbox=\hbox to\datemar{}
\setbox\cbox=\hbox to\itemnosize{\hfil$\bullet$}
\newif\ifnothing \newif\ifnobreak
\def\fin{\ifnothing\nothingfalse\else\endgroup
\unskip\nobreak\hfil\penalty500\enspace\null\nobreak\hfil\box\texsec
\box\code\endgraf\ifnobreak\nobreakfalse\nobreak\fi\fi}
\catcode`\ =12 % tabs are ordinary characters
\catcode`@=\active % @ signs denote a TeX section reference
{\obeylines \gdef@#1
{\global\setbox\texsec=\hbox{\S$#1$}\lookahead}}
\chardef\@=`\@
{\catcode`X=\active \gdef X{\X}}
\def\X{{\eightbf X}}
\def\lightX{\hbox{\eightrm X}}
\def\>#1\relax{\global\setbox\predec=\hbox{\let\X=\lightX
$#1\mapsto{}$}} % previous bug ref
\def\checkvalid#1{\expandafter\ifx\csname#1!\endcsname\okay\else\invalidcode\fi}
\def\okay{\okay}
\def\makevalid#1{\expandafter\let\csname#1!\endcsname=\okay}
\makevalid A % algorithm
\makevalid B % blunder
\makevalid C % cleanup
\makevalid D % data structure
\makevalid E % efficiency
\makevalid F % forgotten case
\makevalid G % generalization
\makevalid I % interaction
\makevalid L % language
\makevalid M % mismatch
\makevalid P % program organization
\makevalid Q % quality
\makevalid R % robustness
\makevalid S % surprise
\makevalid T % typo
\def\lookahead{\futurelet\next\looky} % we'll do this at end of every line
\def\looky{\if\next \let\cont\continuationline % tab mark
\else\if\next*\let\cont\dateline % asterisk
\else\if\next##\let\cont\commentline % sharp sign
\else\if\next\relax\let\cont\endit % \relax (gets us out)
\else\let\cont\dataline\fi\fi\fi\fi\cont} % otherwise should be a code letter
\def\continuationline { } % insert space if a tab mark starts the next line
\def\dateline* {\smallbreak\begingroup\bf\hfill\nobreaktrue
\global\setbox\code=\copy\dbox}
\def\dataline#1{\fin\checkvalid#1%
\global\setbox\code=\hbox to\codesize{\enspace
\hskip0pt plus 3fil\rm#1\hskip0pt plus1fil}%
\begingroup\rm\catcode`X=\active\itemnumber}
\def\itemnumber#1.{\catcode`X=11\setbox0=\hbox to\itemnosize{\bf\hss#1\relax}%
\setbox2=\hbox{\bf#1\relax}\ifdim\wd2>\wd0 \setbox0=\box2 \fi
\textindent{\hfil\box\predec\box0}}
\def\commentline{\fin\afterassignment\begincomment\let\next}
\def\begincomment{\begingroup\let\tt=\sltt
\let\MF=\slMF\sl\textindent{\hfil\copy\cbox}}
\def\leftheadline{\hbox to \hsize{%
\vbox to 10pt{}% strut to position the baseline
{\tenrm\folio\kern1pc}% folio to left of text
\hfil\eightrm D. \ E. \ KNUTH\hfil% running head
}}
\def\rightheadline{\hbox to \hsize{%
\vbox to 10pt{}% strut to position the baseline
\hfil\eightrm THE \ ERRORS \ OF \ \TeX\hfil% running head
{\kern1pc\tenrm\folio}% folio to right of text
}}
\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
\def\slMF{{\logosl META}\-{\logosl FONT}}
\def\endit{\fin\catcode`\^^M=5\let\par=\endgraf}
\let\par=\lookahead \obeylines \nothingtrue
|