% This is MANMAC.TEX in text format, as of May 13, 1986. 
% Macros for The TeXbook 
 
\catcode`@=11 % borrow the private macros of PLAIN (with care) 
 
\font\tentex=cmtex10 
 
\font\inchhigh=cminch 
\font\titlefont=cmssdc10 scaled\magstep5%org= at 40pt 
 
\font\ninerm=cmr9 
\font\eightrm=cmr8 
\font\sixrm=cmr6 
 
\font\ninei=cmmi9 
\font\eighti=cmmi8 
\font\sixi=cmmi6 
\skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177 
 
\font\ninesy=cmsy9 
\font\eightsy=cmsy8 
\font\sixsy=cmsy6 
\skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60 
 
\font\eightss=cmssq8 
 
\font\eightssi=cmssqi8 
 
\font\ninebf=cmbx9 
\font\eightbf=cmbx8 
\font\sixbf=cmbx6 
 
\font\ninett=cmtt9 
\font\eighttt=cmtt8 
 
\hyphenchar\tentt=-1 % inhibit hyphenation in typewriter type 
\hyphenchar\ninett=-1 
\hyphenchar\eighttt=-1 
 
\font\ninesl=cmsl9 
\font\eightsl=cmsl8 
 
\font\nineit=cmti9 
\font\eightit=cmti8 
 
\font\tenu=cmu10 % unslanted text italic 
\font\magnifiedfiverm=cmr5 at 10pt 
\font\manual=cmss10 %org= manual% font used for the METAFONT logo, etc. 
\font\cmman=cmss10 %org= cmman% font used for miscellaneous Computer Modern variations 
 
\newskip\ttglue 
\def\tenpoint{\def\rm{\fam0\tenrm}% 
  \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm 
  \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei 
  \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy 
  \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex 
  \def\it{\fam\itfam\tenit}% 
  \textfont\itfam=\tenit 
  \def\sl{\fam\slfam\tensl}% 
  \textfont\slfam=\tensl 
  \def\bf{\fam\bffam\tenbf}% 
  \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf 
   \scriptscriptfont\bffam=\fivebf 
  \def\tt{\fam\ttfam\tentt}% 
  \textfont\ttfam=\tentt 
  \tt \ttglue=.5em plus.25em minus.15em 
  \normalbaselineskip=12pt 
  \def\MF{{\manual META}\-{\manual FONT}}% 
  \let\sc=\eightrm 
  \let\big=\tenbig 
  \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}% 
  \normalbaselines\rm} 
 
\def\ninepoint{\def\rm{\fam0\ninerm}% 
  \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm 
  \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei 
  \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy 
  \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex 
  \def\it{\fam\itfam\nineit}% 
  \textfont\itfam=\nineit 
  \def\sl{\fam\slfam\ninesl}% 
  \textfont\slfam=\ninesl 
  \def\bf{\fam\bffam\ninebf}% 
  \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf 
   \scriptscriptfont\bffam=\fivebf 
  \def\tt{\fam\ttfam\ninett}% 
  \textfont\ttfam=\ninett 
  \tt \ttglue=.5em plus.25em minus.15em 
  \normalbaselineskip=11pt 
  \def\MF{{\manual hijk}\-{\manual lmnj}}% 
  \let\sc=\sevenrm 
  \let\big=\ninebig 
  \setbox\strutbox=\hbox{\vrule height8pt depth3pt width\z@}% 
  \normalbaselines\rm} 
 
\def\eightpoint{\def\rm{\fam0\eightrm}% 
  \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm 
  \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei 
  \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy 
  \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex 
  \def\it{\fam\itfam\eightit}% 
  \textfont\itfam=\eightit 
  \def\sl{\fam\slfam\eightsl}% 
  \textfont\slfam=\eightsl 
  \def\bf{\fam\bffam\eightbf}% 
  \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf 
   \scriptscriptfont\bffam=\fivebf 
  \def\tt{\fam\ttfam\eighttt}% 
  \textfont\ttfam=\eighttt 
  \tt \ttglue=.5em plus.25em minus.15em 
  \normalbaselineskip=9pt 
  \def\MF{{\manual opqr}\-{\manual stuq}}% 
  \let\sc=\sixrm 
  \let\big=\eightbig 
  \setbox\strutbox=\hbox{\vrule height7pt depth2pt width\z@}% 
  \normalbaselines\rm} 
 
\def\tenmath{\tenpoint\fam-1 } % use after $ in ninepoint sections 
\def\tenbig#1{{\hbox{$\left#1\vbox to8.5pt{}\right.\n@space$}}} 
\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy 
  \left#1\vbox to7.25pt{}\right.\n@space$}}} 
\def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy 
  \left#1\vbox to6.5pt{}\right.\n@space$}}} 
 
% Page layout 
\newdimen\pagewidth \newdimen\pageheight \newdimen\ruleht 
\hsize=29pc  \vsize=44pc  \maxdepth=2.2pt  \parindent=3pc 
\pagewidth=\hsize \pageheight=\vsize \ruleht=.5pt 
\abovedisplayskip=6pt plus 3pt minus 1pt 
\belowdisplayskip=6pt plus 3pt minus 1pt 
\abovedisplayshortskip=0pt plus 3pt 
\belowdisplayshortskip=4pt plus 3pt 
 
%\newinsert\footins 
\def\footnote#1{\edef\@sf{\spacefactor\the\spacefactor}#1\@sf 
      \insert\footins\bgroup\eightpoint 
      \interlinepenalty100 \let\par=\endgraf 
        \leftskip=\z@skip \rightskip=\z@skip 
        \splittopskip=10pt plus 1pt minus 1pt \floatingpenalty=20000 
        \smallskip\item{#1}\bgroup\strut\aftergroup\@foot\let\next} 
\skip\footins=12pt plus 2pt minus 4pt % space added when footnote is present 
%\count\footins=1000 % footnote magnification factor (1 to 1) 
\dimen\footins=30pc % maximum footnotes per page 
 
\newinsert\margin 
\dimen\margin=\maxdimen 
%\count\margin=0 \skip\margin=0pt % marginal inserts take up no space 
 
\newif\iftitle 
\def\titlepage{\global\titletrue} % for pages without headlines 
\def\rhead{} % \rhead contains the running headline 
 
\def\leftheadline{\hbox to \pagewidth{% 
    \vbox to 10pt{}% strut to position the baseline 
    \llap{\tenbf\folio\kern1pc}% folio to left of text 
    \tenit\rhead\hfil% running head flush left 
    }} 
\def\rightheadline{\hbox to \pagewidth{% 
    \vbox to 10pt{}% strut to position the baseline 
    \hfil\tenit\rhead\/% running head flush right 
    \rlap{\kern1pc\tenbf\folio}% folio to right of text 
    }} 
 
\def\onepageout#1{\shipout\vbox{ % here we define one page of output 
    \offinterlineskip % butt the boxes together 
    \vbox to 3pc{ % this part goes on top of the 44pc pages 
      \iftitle % the next is used for title pages 
        \global\titlefalse % reset the titlepage switch 
        \setcornerrules % for camera alignment 
      \else\ifodd\pageno \rightheadline\else\leftheadline\fi\fi 
      \vfill} % this completes the \vbox to 3pc 
    \vbox to \pageheight{ 
      \ifvoid\margin\else % marginal info is present 
        \rlap{\kern31pc\vbox to\z@{\kern4pt\box\margin \vss}}\fi 
      #1 % now insert the main information 
      \ifvoid\footins\else % footnote info is present 
        \vskip\skip\footins \kern-3pt 
        \hrule height\ruleht width\pagewidth \kern-\ruleht \kern3pt 
        \unvbox\footins\fi 
      \boxmaxdepth=\maxdepth 
      } % this completes the \vbox to \pageheight 
    } 
  \advancepageno} 
 
\def\setcornerrules{\hbox to \pagewidth{\vrule width 1pc height\ruleht 
    \hfil \vrule width 1pc} 
  \hbox to \pagewidth{\llap{\sevenrm(page \folio)\kern1pc}% 
    \vrule height1pc width\ruleht depth\z@ 
    \hfil \vrule width\ruleht depth\z@}} 
 
\output{\onepageout{\unvbox255}} 
 
\newbox\partialpage 
\def\begindoublecolumns{\begingroup 
  \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject 
  \output={\doublecolumnout} \hsize=14pc \vsize=89pc} 
\def\enddoublecolumns{\output={\balancecolumns}\eject 
  \endgroup \pagegoal=\vsize} 
 
\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth 
  \dimen@=44pc \advance\dimen@ by-\ht\partialpage 
  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ 
  \onepageout\pagesofar 
  \unvbox255 \penalty\outputpenalty} 
\def\pagesofar{\unvbox\partialpage 
  \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}} 
\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0 
  \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip 
  \divide\dimen@ by2 \splittopskip=\topskip 
  {\vbadness=10000 \loop \global\setbox3=\copy0 
    \global\setbox1=\vsplit3 to\dimen@ 
    \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat} 
  \setbox0=\vbox to\dimen@{\unvbox1} 
  \setbox2=\vbox to\dimen@{\unvbox3} 
  \pagesofar} 
 
% Chapter formatting 
% The preface and table of contents are formatted in place, not here 
 
\newcount\exno % for the number of exercises in the current chapter 
\newcount\subsecno % for the number of subsections in the current chapter 
 
\def\beginchapter#1 #2#3. #4\par{\global\exno=0 
  \subsecno=0 
  \def\chapno{#2#3} 
  \ifodd\pageno 
    \errmessage{You had too much text on that last page; I'm backing up} 
    \advance\pageno by-1 \fi 
  \titlepage 
  \def\\{ } % \\'s in the title will be treated as spaces 
  \message{#1 #2#3:} % show the chapter title on the terminal 
  \def\MF{{\manual 89:;<=>:}} % slant the logo 
  \xdef\rhead{#1 #2#3: #4\unskip} 
  {\def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.06em X} 
    \def\MF{{\vbox to30pt{}\manual ()*+,-.*}} 
    \def\\{#3} 
    \ifx\empty\\ \rightline{\inchhigh #2\kern-.04em} 
    \else\rightline{\inchhigh #2\kern-.06em#3\kern-.04em}\fi 
    \vskip 1.75pc 
    \baselineskip 36pt \lineskiplimit \titlelsl \lineskip 12pt 
    \let\\=\cr % now the \\'s are line dividers 
    \halign{\line{\titlefont\hfil##}\\#4\unskip\\} 
    \vfill\eject} % output the chapter title page 
  \tenpoint 
  \noindent\ignorespaces} % the first paragraph of a chapter is not indented 
\newdimen\titlelsl \titlelsl=1pt 
 
\outer\def\endchapter{\ifodd\pageno \else\vfill\eject\null\fi 
  \begingroup\bigskip\vfill % beginning of the quotes 
  \def\eject{\endgroup\eject} 
  \def\par{\ifhmode\/\endgraf\fi}\obeylines 
  \def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X} 
  \def\MF{{\manual opqr}\-{\manual stuq}} 
  \eightpoint \let\tt=\ninett 
  \baselineskip 10pt 
  \parfillskip \z@ 
  \interlinepenalty 10000 
  \leftskip \z@ plus 40pc minus \parindent 
  \let\rm=\eightss \let\sl=\eightssi 
  \everypar{\sl}} 
\def\author#1(#2){\smallskip\noindent\rm--- #1\unskip\enspace(#2)} 
 
\def\dbend{{\manual\char127}} % dangerous bend sign 
\def\d@nger{\medbreak\begingroup\clubpenalty=10000 
  \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2 
  \hbox to0pt{\hskip-\hangindent\dbend\hfill}\ninepoint} 
\outer\def\danger{\d@nger} 
\def\dd@nger{\medbreak\begingroup\clubpenalty=10000 
  \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2 
  \hbox to0pt{\hskip-\hangindent\dbend\kern1pt\dbend\hfill}\ninepoint} 
\outer\def\ddanger{\dd@nger} 
\def\enddanger{\endgraf\endgroup} % omits the \medbreak 
 
\outer\def\subsection#1. {\medbreak\advance\subsecno by 1 
  \noindent{\it \the\subsecno.\enspace#1.\enspace}} 
\def\ansno#1.#2:{\medbreak\noindent 
  \hbox to\parindent{\bf\hss#1.#2.\enspace}\ignorespaces} 
 
% Composition macros 
\hyphenation{man-u-script man-u-scripts ap-pen-dix xscaled} 
 
\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em 
  S$-\TeX} 
\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet 
\def\SS{{\it SS}} % scriptscript style 
\def\|{\leavevmode\hbox{\tt\char`\|}} % vertical line 
\def\dn{\leavevmode\hbox{\tt\char'14}} % downward arrow 
\def\up{\leavevmode\hbox{\tt\char'13}} % upward arrow 
\def\]{\leavevmode\hbox{\tt\char`\ }} % visible space 
 
\def\pt{\,{\rm pt}} % units of points, in math formulas 
\def\em{\,{\rm em}} % units of ems, in math formulas 
\def\<#1>{\leavevmode\hbox{$\langle$#1\/$\rangle$}} % syntactic quantity 
\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant 
\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant 
\def\cstok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt 
        \hbox{\vphantom{\tt/}\thinspace{\tt#1}\thinspace}} 
      \kern1pt\hrule}\vrule}\thinspace} % control sequence token 
 
{\obeyspaces\gdef {\ }} 
\def\parbreak{\hfil\break\indent\strut} 
\def\stretch{\nobreak\hskip0pt plus2pt\relax} 
 
% macros for non-centered displays 
\outer\def\begindisplay{\obeylines\startdisplay} 
{\obeylines\gdef\startdisplay#1 
 {\catcode`\^^M=5$$#1\halign\bgroup\indent##\hfil&&\qquad##\hfil\cr}} 
\outer\def\enddisplay{\crcr\egroup$$} 
 
% (the following \begin...\end-type macros do not appear in Appendix E) 
% macros for demonstrating math constructions 
\outer\def\beginmathdemo{$$\advance\baselineskip by2pt 
  \halign\bgroup\indent\hbox to 160pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}} 
\outer\def\begindisplaymathdemo {$$\advance\baselineskip by15pt 
  \halign\bgroup\indent\hbox to 160pt{##\hfil}&$\displaystyle{##}$\hfil\cr 
  \noalign{\vskip-15pt}} 
\outer\def\beginlongmathdemo{$$\advance\baselineskip by2pt 
  \halign\bgroup\indent\hbox to 210pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}} 
\outer\def\beginlongdisplaymathdemo {$$\advance\baselineskip by15pt 
  \halign\bgroup\indent\hbox to 210pt{##\hfil}&$\displaystyle{##}$\hfil\cr 
  \noalign{\vskip-15pt}} 
\outer\def\endmathdemo{\egroup$$} 
 
% macros for font tables 
\def\oddline#1{\cr 
  \noalign{\nointerlineskip} 
  \multispan{19}\hrulefill& 
  \setbox0=\hbox{\lower 2.3pt\hbox{\hex{#1x}}}\smash{\box0}\cr 
  \noalign{\nointerlineskip}} 
\def\evenline{\cr\noalign{\hrule}} 
\def\chartstrut{\lower4.5pt\vbox to14pt{}} 
\def\beginchart#1{$$\postdisplaypenalty=-10000 \global\count@=0 #1 
  \halign to\hsize\bgroup 
    \chartstrut##\tabskip0pt plus10pt& 
    &\hfil##\hfil&\vrule##\cr 
    \lower6.5pt\null 
    &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline} 
\def\endchart{\raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B& 
  &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$} 
\def\:{\setbox0=\hbox{\char\count@}% 
  \ifdim\ht0>7.5pt\reposition 
  \else\ifdim\dp0>2.5pt\reposition\fi\fi 
  \box0\global\advance\count@ by1 } 
\def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}} 
\def\normalchart{% 
  &\oct{00x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline0 
  &\oct{01x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline 
  &\oct{02x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline1 
  &\oct{03x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline 
  &\oct{04x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2 
  &\oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline 
  &\oct{06x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline3 
  &\oct{07x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline 
  &\oct{10x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline4 
  &\oct{11x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline 
  &\oct{12x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline5 
  &\oct{13x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline 
  &\oct{14x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline6 
  &\oct{15x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline 
  &\oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7 
  &\oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline} 
 
% (now Appendix E resumes again) 
% macros for verbatim scanning 
\chardef\other=12 
\def\ttverbatim{\begingroup 
  \catcode`\\=\other 
  \catcode`\{=\other 
  \catcode`\}=\other 
  \catcode`\$=\other 
  \catcode`\&=\other 
  \catcode`\#=\other 
  \catcode`\%=\other 
  \catcode`\^=\other 
  \catcode`\_=\other 
  \catcode`\~=\other 
  \obeyspaces \obeylines \tt} 
 
\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@ 
  \catcode`\|=0 \rightskip-5pc \ttfinish} 
{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character 
  |obeylines % end of line is active 
  |gdef|ttfinish#1^^M#2\endtt{#1|vbox{#2}|endgroup$$}} 
 
\catcode`\|=\active 
{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\  \let|=\endgroup}} 
 
% macros for syntax rules (again, not in Appendix E) 
\def\[#1]{\silenttrue\xref|#1|\thinspace{\tt#1}\thinspace} % keyword in syntax 
\def\beginsyntax{\endgraf\nobreak\medskip 
  \begingroup \catcode`<=13 \catcode`[=13 
  \let\par=\endsyntaxline \obeylines} 
\def\endsyntaxline{\futurelet\next\syntaxswitch} 
\def\syntaxswitch{\ifx\next\<\let\next=\syntaxrule 
  \else\ifx\next\endsyntax\let\next=\endgroup 
  \else\let\next=\continuerule\fi\fi \next} 
\def\continuerule{\hfil\break\indent\qquad} 
\def\endsyntax{\medbreak\noindent} 
{\catcode`<=13 \catcode`[=13 
  \global\let<=\< \global\let[=\[ 
  \gdef\syntaxrule<#1>{\endgraf\indent\silentfalse\xref\<#1>}} 
\def\is{\ $\longrightarrow$ } 
\def\alt{\ $\vert$ } 
 
% macros to demarcate lines quoted from TeX source files 
\def\beginlines{\par\begingroup\nobreak\medskip\parindent\z@ \obeylines 
  \hrule\kern1pt\nobreak \everypar{\strut}} 
\def\endlines{\kern1pt\hrule\endgroup\medbreak\noindent} 
\def\weakendlines{\kern1pt\hrule\endgroup\medskip\noindent} 
\def\finalendlines{\kern1pt\hrule\endgroup\medbreak} 
 
\outer\def\exercise{\medbreak 
  \global\advance\exno by 1 
  \noindent\llap{\manual\char'170\rm\kern.15em}% triangle in margin 
  {\ninebf EXERCISE \bf\chapno.\the\exno}\par\nobreak\noindent} 
\def\dexercise{\global\advance\exno by 1 
  \llap{\manual\char'170\rm\kern.15em}% triangle in indented space 
  {\eightbf EXERCISE \bf\chapno.\the\exno}\hfil\break} 
\outer\def\dangerexercise{\d@nger \dexercise} 
\outer\def\ddangerexercise{\dd@nger \dexercise} 
 
\newwrite\ans 
\immediate\openout\ans=answers % file for answers to exercises 
\outer\def\answer{\par\medbreak 
  \immediate\write\ans{} 
  \immediate\write\ans{\string\ansno\chapno.\the\exno:} 
  \copytoblankline} 
\def\copytoblankline{\begingroup\setupcopy\copyans} 
\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials 
  \catcode`\|=\other \obeylines} 
{\obeylines \gdef\copyans#1 
  {\def\next{#1}% 
  \ifx\next\empty\let\next=\endgroup % 
  \else\immediate\write\ans{\next} \let\next=\copyans\fi\next}} 
 
% Editorial notes: some things to watch for. 
 
% f |\ and f ~|\ => insert \/  [e.g., if\/ |\hbox|...] 
% appendi => check for \null  [e.g., Appendix~B\null.] 
% ly- => the hyphen is probably omittable 
% ''. and '', => transpose to .'' and ,'' 
% dgement => dgment 
% in MFbook: f@' and \MF, and \MF. 
 
% Macros for drawing figures (not in Appendix E) 
\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2 } 
\def\hidevrule#1#2{\kern-#1{\dimen0=#1 
    \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 } 
% \makeblankbox puts rules at the edges of a blank box 
% whose dimensions are those of \box0 (assuming nonnegative wd,ht,dp) 
% #1 is rule thickness outside, #2 is rule thickness inside 
\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}% 
    \kern-#1% overlap the rules at the corners 
    \hbox to\wd0{\hidevrule{#1}{#2}% 
      \raise\ht0\vbox to #1{}% set the vrule height 
      \lower\dp0\vtop to #1{}% set the vrule depth 
      \hfil\hidevrule{#2}{#1}}% 
    \kern-#1\hidehrule{#2}{#1}}}} 
\def\maketypebox{\makeblankbox{0pt}{1pt}} 
\def\makelightbox{\makeblankbox{.2pt}{.2pt}} 
 
% \box\bigdot is a null box with a bullet at its reference point 
\newbox\bigdot \newbox\smalldot 
\setbox0=\hbox{$\vcenter{}$} % \ht0 is the axis height 
\setbox1=\hbox to\z@{$\hss\bullet\hss$} % bullet is centered on the axis 
\setbox\bigdot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss} 
\setbox1=\hbox to\z@{$\hss\cdot\hss$} % cdot is centered on the axis 
\setbox\smalldot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss} 
 
% \arrows makes things like <--- text ---> 
\def\arrows#1#2{% #1=width, #2=text 
  {\setbox0=\hbox{$\mkern-2mu\mathord-\mkern-2mu$} 
    \hbox to #1{\kern-.055556em$\leftarrow\mkern-6mu$% 
      \cleaders\copy0\hfil 
      \kern.4em #2\kern.4em 
      \cleaders\copy0\hfil 
      $\mkern-6mu\rightarrow$\kern-.055556em}}} 
 
% \samplebox makes the outline of a box, with big dot at reference point 
\def\samplebox#1#2#3#4{% #1=ht, #2=dp, #3=wd, #4=text 
  {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss} 
      \nointerlineskip 
      \vbox to #2{}}% now \box0 has the desired ht, dp, and wd 
    \hbox{\copy\bigdot 
      \vrule height.2pt depth.2pt width#3% 
      \kern-#3% 
      \makelightbox 
      \kern-#3% 
      \raise#1\vbox{\hbox to #3{\hss#4\hss} 
        \kern 3pt}}}} 
 
% \sampleglue makes glue between sample boxes 
\newdimen\varunit 
\varunit=\hsize \advance\varunit by-2\parindent 
\divide\varunit by 58 % illustrations in Chapter 12 
\def\sampleglue#1#2{% #1=width, #2=text 
  \vtop{\hbox to #1{\xleaders\hbox to .5\varunit{\hss\copy\smalldot\hss}\hfil} 
    \kern3pt 
    \tabskip \z@ plus 1fil 
    \halign to #1{\hfil##\cr#2\cr}}} 
 
% Indexing macros 
\newif\ifproofmode 
\proofmodetrue % this should be false when making camera-ready copy 
\newwrite\inx 
\immediate\openout\inx=index % file for index reminders 
\newif\ifsilent 
\def\specialhat{\ifmmode\def\next{^}\else\let\next=\beginxref\fi\next} 
\def\beginxref{\futurelet\next\beginxrefswitch} 
\def\beginxrefswitch{\ifx\next\specialhat\let\next=\silentxref 
  \else\silentfalse\let\next=\xref\fi \next} 
\catcode`\^=\active \let ^=\specialhat 
\def\silentxref^{\silenttrue\xref} 
 
\def\marginstyle{\vrule height6pt depth2pt width\z@ \sevenrm} 
 
\chardef\bslash=`\\ 
\def\xref{\futurelet\next\xrefswitch} 
\def\xrefswitch{\begingroup 
  \ifx\next|\aftergroup\vxref % case 1 or 2, |arg| or |\arg| 
  \else\ifx\next\<\aftergroup\anglexref % case 3, "\<arg>" means angle brackets 
    \else\aftergroup\normalxref \fi\fi\endgroup} % case 0, "{arg}" 
\def\vxref|{\catcode`\\=\active \futurelet\next\vxrefswitch} 
\def\vxrefswitch#1|{\catcode`\\=0 
  \ifx\next\empty\def\xreftype{2}% 
    \def\next{{\tt\bslash\text}}% type 2, |\arg| 
  \else\def\xreftype{1}\def\next{{\tt\text}}\fi % type 1, |arg| 
  \edef\text{#1}\makexref} 
{\catcode`\|=0 \catcode`\\=\active |gdef\{}} 
\def\anglexref\<#1>{\def\xreftype{3}\def\text{#1}% 
  \def\next{\<\text>}\makexref} 
\def\normalxref#1{\def\xreftype{0}\def\text{#1}\let\next=\text\makexref} 
\def\makexref{\ifproofmode\insert\margin{\hbox{\marginstyle\text}}% 
   \xdef\writeit{\write\inx{\text\space!\xreftype\space 
     \noexpand\number\pageno.}}\writeit 
   \else\ifhmode\kern\z@\fi\fi 
  \ifsilent\ignorespaces\else\next\fi} 
% the \insert (which is done in proofmode only) suppresses hyphenation, 
% so the \kern\z@ is put in to give the same effect in non-proofmode. 
 
% Internal cross references that may change 
\def\sesame{61} % page number for Sesame Street quote 
\def\bmiexno{20} % exercise number for bold math italic 
\def\punishexno{1} % exercise number for `punishment' 
\def\fracexno{6} % exercise number for `\frac' 
\def\vshippage{31} % error message from `\vship' 
\def\storypage{24} % listing of story.tex 
\def\metaT{4} % exercise number for T of METAFONT 
\def\xwhat{2} % exercise number for x3:=whatever 
\def\Xwhat{2} % exercise number for whatever itself 
 
\def\checkequals#1#2{\ifnum#1=#2\else 
  \errmessage{Redefine \string#1 to be \the#2}\fi} 
 
% Things for The METAFONTbook only 
\ifx\MFmanual\!\else\endinput\fi 
 
\def\!{\kern-.03em\relax} 
 
\def\frac#1/#2{\leavevmode\kern.1em 
  \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em 
  /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} 
 
\outer\def\displayfig #1 (#2){$$\advance\abovedisplayskip by 3pt 
  \leftline{\indent\figbox{#1}{3in}{#2}\vbox}$$} 
\def\rightfig #1 (#2 x #3) ^#4 {% #2 wide and #3 deep, raised #4 
  \strut\vadjust{\setbox0=\vbox to 0pt{\vss 
      \hbox to\pagewidth{\hfil 
        \raise #4\figbox{#1}{#2}{#3}\vtop \quad}} 
    \dp0=0pt \box0}} 
\def\figbox#1#2#3#4{#4to#3{ % makes a box #2 wide and #3 deep 
    \ifproofmode\kern0pt\hrule\vfill 
    \hsize=#2 \baselineskip 6pt \fiverm\noindent\raggedright 
    (Figure #1 will be inserted here; too bad you can't see it now.) 
    \endgraf\vfill\hrule 
    \else\vfill\hbox to#2{}\fi}} 
 
\def\endsyntax{\begingroup\let\par=\endgraf\medbreak\endgroup\noindent} 
 
\let\BEGINCHAPTER=\beginchapter 
\def\beginchapter{\titlelsl=1pt \BEGINCHAPTER} 
\def\beginChapter{\titlelsl=2pt \BEGINCHAPTER} 
 
\def\decreasehsize #1 {\advance\hsize-#1} 
\def\restorehsize{\hsize=\pagewidth} 
 
\catcode`\@=\active 
\catcode`\"=\active 
\def\ttverbatim{\begingroup \catcode`\@=\other \catcode`\"=\other 
  \catcode`\\=\other 
  \catcode`\{=\other 
  \catcode`\}=\other 
  \catcode`\$=\other 
  \catcode`\&=\other 
  \catcode`\#=\other 
  \catcode`\%=\other 
  \catcode`\~=\other 
  \catcode`\_=\other 
  \catcode`\^=\other 
  \obeyspaces \obeylines \tt} 
\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials 
  \catcode`\|=\other \catcode`\@=\other \catcode`\"=\other \obeylines} 
\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}} 
\def@#1@{\begingroup\def\_{\kern.04em 
    \vbox{\hrule width.3em height .6pt}\kern.08em}% 
  \ifmmode\mathop{\bf#1}\else\hbox{\bf#1\/}\fi\endgroup} 
\def"#1"{\hbox{\it#1\/\kern.05em}} % italic type for identifiers 
\def\xrefswitch{\begingroup 
  \ifx\next|\aftergroup\vxref % case 1, |arg| or |\arg| 
  \else\ifx\next@\aftergroup\boldxref % case 2, "@arg@" means boldface 
  \else\ifx\next"\aftergroup\italxref % case 4, ""arg"" means boldface 
  \else\ifx\next\<\aftergroup\anglexref % case 3, "\<arg>" means angle brackets 
    \else\aftergroup\normalxref \fi\fi\fi\fi\endgroup} % case 0, "{arg}" 
\def\boldxref@#1@{\def\xreftype{2}\def\text{#1}% 
  \def\next{@\text@}\makexref} 
\def\italxref"#1"{\def\xreftype{4}\def\text{#1}% 
  \def\next{"\text"}\makexref} 
 
\def\pyth+{\mathbin{++}} 
\def\0{\raise.7ex\hbox{$\scriptstyle\#$}} 
\def\to{\mathrel{\ldotp\ldotp}} 
\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}} 
\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}} 
\def\round{\mathop{\rm round}} 
\def\angle{\mathop{\rm angle}} 
\def\rmsqrt{\mathop{\rm sqrt}} 
\def\reverse{\mathop{\rm reverse}} 
\def\curl{\mathop{\rm curl}} 
\def\tension{\mathop{\rm tension}} 
\def\atleast{\mathop{\rm atleast}} 
\def\controls{\mathop{\rm controls}} 
\def\and{\,{\rm and}\,} 
\def\cycle{{\rm cycle}} 
\def\pickup{@pickup@ \thinspace} 
\def\penpos#1{\hbox{\it penpos}_{#1}} 
\def\pentaper#1{\hbox{\it pentaper}_{#1}} 
 
\chardef\hexa=1  % first hex 
\chardef\hexb=2 % top and bot adjusted 
\chardef\hexc=3 % same, bold 
\chardef\hexd=4 % same, confined to box 
\chardef\hexe=5 % penstroked hex 
\chardef\Aa=6 % stick-figure A, golden ratio 
\def\sevenAs{\char7\char8\char9\char10\char11\char12\char13} % same, variants 
\chardef\Az=14 % same, with crooked bar 
\chardef\Ab=15 % \Aa with rectilinear elliptical pen 
\chardef\Ac=16 % same, with the ellipse tilted 
\chardef\beana=17 % kidney bean, default pen 
\chardef\beanb=18 % same, twice as bold 
\chardef\beanc=19 % same, rectilinear elliptical pen 
\chardef\beand=20 % same, with the ellipse tilted 
\chardef\niba=21 % 10x rectilinear ellipse 
\chardef\nibb=22 % same, with the ellipse tilted 
\chardef\nibc=23 % same, 90 degrees titled 
\chardef\IOT=24 % Ionian T 
\chardef\IOS=25 % Ionian S 
\chardef\IOO=26 % Ionian O 
\chardef\IOI=27 % Ionian I 
\chardef\cubea=28 % possible cube 
\chardef\cubeb=29 % impossible cube 
\chardef\bicentennial=30 % star with overlapping strokes 
\chardef\oneu=31 % 1/4 of uuuu ornament 
\chardef\circa=32 % quartercircle 
\chardef\circb=33 % filled quartercircle 
\chardef\circc=34 % rotated quartercircle 
\chardef\circd=35 % cone 
\chardef\circe=36 % concentric circles 
\chardef\circf=37 % concentric diamonds 
\chardef\fouru=38 % uuuu ornament 
\chardef\fourc=39 % same, rotated 
\chardef\seventh='140 % 1/7, to go with cmssqi8 
 
\newdimen\apspix 
\apspix=31448sp % 8 APS pixels = 52413.64sp, and I'm taking 60% of this 
% to crude approximation, there are about 2\apspix per pt 
\newdimen\blankpix \newdimen\Blankpix 
\setbox0=\hbox{\manual P} \blankpix=\wd0 % approximately 1pt blank pixel 
\setbox0=\hbox{\manual R} \Blankpix=\wd0 % approximately 3pt blank pixel 
 
\def\leftheadline{\hbox to \pagewidth{% 
    \vbox to 10pt{}% strut to position the baseline 
    \llap{\tenbf\folio\kern1pc}% folio to left of text 
    \def\MF{{\manual 89:;<=>:}}% slanted 10pt 
    \tenit\rhead\hfil% running head flush left 
    }} 
\def\rightheadline{\hbox to \pagewidth{% 
    \vbox to 10pt{}% strut to position the baseline 
    \def\MF{{\manual 89:;<=>:}}% slanted 10pt 
    \hfil\tenit\rhead\/% running head flush right 
    \rlap{\kern1pc\tenbf\folio}% folio to right of text 
    }} 
\def\ttok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt 
        \hbox{\vphantom{\tt(j}\thinspace{\tt#1}\thinspace}} 
      \kern1pt\hrule}\vrule}\thinspace} % token 
 
\newdimen\tinypix \setbox0=\hbox{\sixrm0} \tinypix=5pt 
\newdimen\pixcorr \pixcorr=\tinypix \advance\pixcorr by-\wd0 
\def\pixpat#1#2#3#4{\vcenter{\sixrm\baselineskip=\tinypix 
  \hbox{#1\kern\pixcorr#2}\hbox{#3\kern\pixcorr#4}}} 
 
\font\rand=random 
