\newlinechar `^^J

\def \savecat #1%
    {\expandafter\xdef\csname\string#1savedcat\endcsname{\the\catcode`#1}}
\def \restorecat #1%
    {\catcode`#1=\csname\string#1savedcat\endcsname}
\savecat\@

\catcode`\@ = 11

\def \bold#{\bgroup\bf\let\next = }

\def \ttt#{\bgroup\tt\let\next = }% typewriter

\def \stress #1%
    {\begingroup
     \def \next
         {\def \next
              {\setbox 0 = \hbox {\nexttoken}%
               \ifdim \ht 0< \fontdimen 5 \font
                      \it #1%
               \else
                      \it #1\/%
               \fi}%
          \ifcat A\noexpand \nexttoken
                \next
          \else
                \ifcat 0\noexpand \nexttoken
                        \next
                \else
                        \ifcat \space \noexpand \nexttoken
                        \else
                               %%% \message {?: \meaning \nexttoken}%
                        \fi
                        \it #1\/%
                \fi
          \fi
          \endgroup}%
     \futurelet \nexttoken \next }
\def \oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
\def \hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant

\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}

\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$$}
\def \<#1>{\leavevmode\hbox{$\langle$#1\/$\rangle$}}

\def \pt {\,{\rm pt}} % units of points, in math formulas
\def \in {\,{\rm in}} % units of inches, in math formulas
\def \em {\,{\rm em}} % units of em, in math formulas
\font \chapterfont = cmbx10 at 20pt
\font \titlefont   = cmssbx10 at 17pt
\font \authorfont  = cmssbx10 at 12pt
\font \sectionfont = cmbx10 at 12pt
\font \tocfont     = cmssbx10 at 12pt

\font \tenbxit     = cmbxti10 \def \bfit {\tenbxit}
\font \tenss       = cmss10
\font \tenssbf     = cmssbx10
\font \ninerm      = cmr9
\font \sevenrm     = cmr7
\font \ninebf      = cmbx9
\font \nineit      = cmti9
\font \ninebxit    = cmbxti10 at 8.5pt
\font \ninett      = cmtt9
\font \ninei       = cmmi9
\font \seveni      = cmmi7
\font \ninesy      = cmsy9
\font \nineex      = cmex9
\hoffset = 0.5in % extra space used to print code line numbers
\hsize   = 6.0in % less 0.5 than plain.tex value
\vsize   = 8.9in % default value
\advance \vsize by 0.5\baselineskip
\divide \vsize by \baselineskip
\multiply \vsize by \baselineskip
\def \RCS {\relax}  \def \RCSversion {Experimental}

\newdimen\textsize \textsize=\hsize

\def \pagenumber
    {\folio}

\headline =
    {\hbox to \textsize{\strut%
          \ifnum\pageno>1
              \tenss\filename\hfil Version \RCSversion%
              \hbox to 4em{\hfil\pagenumber}%
          \else
              \hfil\tenss\RCS%
          \fi}\hss}

\footline = {\hfil}
\def \tocline #1#2%
    {\line{{\ignorespaces#1}\leaders\hbox to 3pt{.\hfil}\hfil
     \hbox to 15pt{\hss#2}}}

\def \settocparms #1%
       {\count@=#1
        \ifnum\count@<1
            \def\tocskip
               {\vskip 3pt plus 1in
                \penalty-100
                \vskip 0pt plus -1in^^J}
            \def\tocstyle{\tenssbf}
            \def\tocindent{\z@}
        \else
            \def\tocskip{}
            \def\tocstyle{\tenss}
            \dimen@=20pt \advance\count@ by \m@ne \dimen@=\count@\dimen@
            \edef\tocindent{\the\dimen@}
        \fi}

\def \topofcontents
    {\vskip2\baselineskip
     \leftline{\tocfont Contents}
     \vskip2ex
     \begingroup\rm}

\def \botofcontents
    {\endgroup
     \semifilbreak{0.9}
     \vskip3\baselineskip}

\def \printcontents
    {\topofcontents
     \Input{\jobname.toc}
     \botofcontents}
\def \title #1#2%
    {\vglue4\baselineskip
     \noindent{\rightskip = 0in plus 4em
               \hyphenpenalty = 10000 \exhyphenpenalty = 10000
               \baselineskip = 20pt
               \titlefont#1\par}
     \vskip 0.5\baselineskip
     \hrule height 2pt width \hsize
     \vskip 0.5\baselineskip
     \noindent
     \line{\authorfont #2}
     \vskip2\baselineskip}

\def \startsection#1#2#3#4#5#6%
    {\ifnum#1<2
        \semifilbreak{0.8}
     \fi
     \vskip #3
     \def\titl@{#6}
     \edef\themodtitle{\sanitize\titl@}
     \message{[\themodtitle]}
     \settocparms{#1}
     {\edef\next
          {\noexpand\write\cont{\tocskip\string\tocline%
             {\hskip\tocindent\tocstyle\space\sanitize\themodtitle}%
             {\noexpand\the\pageno}}}%
           \next}% write to toc
     \vbox{\leftskip=#2
           \rightskip=0.5true in plus 4em minus 0.5 true in
           \hyphenpenalty=9999 \exhyphenpenalty=9999
           \noindent#5#6}%
     \nobreak
     \vskip#4}

\def \gobblemeaning#1:->{}
\def \sanitize {\expandafter\gobblemeaning\meaning}

\def \chapter#1%
    {\vfil\eject\startsection{0}{\z@}{\z@}{6ex}{\chapterfont}{#1}}
\def \section#1%
    {\startsection{1}{\z@}{4ex}{2ex}{\sectionfont}{#1}}
\def \subsection#1%
    {\startsection{2}{\z@}{2ex}{1ex}{\tenbf}{#1}}
\def \subsubsection#1%
    {\startsection{3}{\z@}{1ex}{0ex}{\tenit}{#1}}
\def \paragraph#1%
    {\startsection{4}{\z@}{1.5ex}{0ex}{\tenit}{#1}}
{\obeyspaces\global\let = \ } % from texbook, p.381

{\catcode`\`=\active \gdef`{\relax\lq}}
{\catcode`\^^I=\active \gdef^^I{\ \ \ }}

{\obeyspaces\global\def\gobblespace#1{\ifx#1 \else#1\fi}}

\def \setupmodname
    {\catcode`\$=3 \catcode`\&=4%
     \catcode`\#=6 \catcode`\%=14%
     \catcode`\~=13 \catcode`\_=8%
     \catcode`\^=7 \catcode`\ =10%
     \catcode`\^^M=5\relax}

\def \LA {\begingroup\setupmodname$\langle\,$\bfit}
\def \RA {\/$\,\rangle$\endgroup}

\gdef \ttverbatim
     {\begingroup%
      \makeother\\\makeother\{\makeother\}\makeother\$%
      \makeother\&\makeother\#\makeother\%\makeother\~%
      \makeother\_\makeother\^\makeother\"%
      \obeyspaces\obeylines\tt}

\newskip\ttglue
\ttglue=.5em plus.25em minus.15em

{\catcode`\|=\active
 \obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\  \let|=\endgroup}}

\def \CODE%
    {\ttverbatim%
     \let\par=\endgraf%
     \parskip=\z@%
     \leavevmode%
     \ttfinish}% written by web2tex script itself

%%% {\catcode`\| = 0 |catcode`|\ = 12 %
%%% |obeylines |gdef|ttfinish#1<EDOC>{|gobblespace#1|endgroup}}

\def \NO #1% line numbers which appear in the margin
    {\noindent\llap{\ninei #1\qquad}\kern\parindent}

\def \N #1#2% page number -- line number (indexes)
    {$#2_{\oldstyle#1}$}

\def \BEGINCODE
    {\semifilbreak{0.9}
     \bigskip
     \begingroup
     \obeylines}
\def \ENDCODE
    {\endgroup
     \semifilbreak{0.9}}

\def \BEGINDOC
    {\bigskip
     \begingroup
     \catcode`\|=\active}
\def \ENDDOC
    {\endgroup}

\newif \iffullpages

\newdimen \upperbound

\def \semifilbreak #1%
    {\par
     \upperbound = #1\vsize       %% 0.1\vsize \approx 5\baselineskip
     \ifdim\pagetotal > \pagegoal %% page already overfull;
                                  %% left to page builder
     \else
       \ifdim\pagetotal > \upperbound
          \vfill\eject
       \fi
     \fi}
\def \gobble#1{}
\let \wlog = \gobble

\newskip\abovecolumnskip \abovecolumnskip = \bigskipamount
\newskip\belowcolumnskip \belowcolumnskip = \bigskipamount
\newdimen \gutter \gutter = 2pc
\newdimen \c@lumnhsize
\newdimen \pagegoal@limit
\newdimen \htp@rtialpage
\newtoks \previousoutput
\newcount \number@fcolumns
\newbox \@partialpage
\newdimen \singlec@lumnhsize
\newdimen \singlec@lumnvsize
\newtoks \previousoutput
\let \@ndcolumns = \relax
\def \doublecolumns {\@columns2}
\def \triplecolumns {\@columns3}
\def \quadcolumns   {\@columns4}

\def \singlecolumn
    {\@ndcolumns\vskip\belowcolumnskip\nointerlineskip}

\let \endcolumns = \singlecolumn

\def \@columns #1%
    {\@ndcolumns%
     \begingroup
     \global\let\@ndcolumns=\@@endcolumns
     \par % Shouldn't start in horizontal mode.
     \global\previousoutput = \expandafter{\the\output}
     \pagegoal@limit = \pagegoal
     \advance \pagegoal@limit by -5\baselineskip
     \ifdim\pagetotal > \pagegoal@limit
        \vfill\eject
     \else
        \global\output =
              {\global\setbox\@partialpage =
                      \vbox{\unvbox255\vskip\abovecolumnskip}}
     \pagegoal = \pagetotal
     \eject % now expand the \output just above.
     \fi
     \global\number@fcolumns=#1
     \global\c@lumnhsize = \hsize % if \hsize changed, get the new value.
     \global\advance\c@lumnhsize by -#1\gutter
     \global\divide\c@lumnhsize by #1
     \global\output = {\c@lumnoutput}
     \global\singlec@lumnhsize = \hsize
     \global\singlec@lumnvsize = \vsize
     \hsize = \c@lumnhsize
     \htp@rtialpage = \ht\@partialpage
     \advance \htp@rtialpage by 0.5\baselineskip
     \divide \htp@rtialpage by \baselineskip
     \multiply \htp@rtialpage by \baselineskip
     \ht\@partialpage = \htp@rtialpage
     \global\advance\vsize by -\htp@rtialpage
     \global\vsize = #1\vsize }
\def \@columnsplit
    {\dimen0 = \ht255
     \advance \dimen0 by \topskip
     \advance \dimen0 by -\baselineskip
     \divide\dimen0 by \number@fcolumns
     \splittopskip = \topskip
     \begingroup
        \vbadness = 10000
        \loop
          \setbox8=\copy255
          \global\setbox1 = \vsplit8 to \dimen0
          \global\setbox3 = \vsplit8 to \dimen0
          \ifnum\number@fcolumns>2%
            \global\setbox5 = \vsplit8 to \dimen0
          \fi
          \ifnum\number@fcolumns>3%
            \global\setbox7 = \vsplit8 to \dimen0
          \fi
          \ifdim\ht8>\z@ \global\advance\dimen0 by 1pt
        \repeat
     \endgroup
     \global\setbox255 = \vbox{% see the last line on p.417 (wb)
        \unvbox\@partialpage
        \ifnum\number@fcolumns>0%
          \setbox1 = \vbox to \dimen0{\dimen2=\dp1 \unvbox1\kern-\dimen2\vfil}
          \ifnum\number@fcolumns=1%
             \hbox to \singlec@lumnhsize{\box1}
          \fi
        \fi
        \ifnum\number@fcolumns>1%
          \setbox3 = \vbox to \dimen0{\dimen2=\dp3 \unvbox3\kern-\dimen2\vfil}
          \ifnum\number@fcolumns=1%
            \hbox to \singlec@lumnhsize{\box1\hfil\box3}
          \fi
        \fi
        \ifnum\number@fcolumns>2%
          \setbox5 = \vbox to \dimen0{\dimen2=\dp5 \unvbox5\kern-\dimen2\vfil}
          \ifnum\number@fcolumns=3%
            \hbox to\singlec@lumnhsize{\box1\hfil\box3\hfil\box5}
          \fi
        \fi
        \ifnum\number@fcolumns>3%
          \setbox7 = \vbox to \dimen0{\dimen2=\dp7 \unvbox7\kern-\dimen2\vfil}
          \ifnum\number@fcolumns=4%
            \hbox to\singlec@lumnhsize{\box1\hfil\box3\hfil\box5\hfil\box7}
          \fi
        \fi}}

\def \c@lumnoutput
    {\@columnsplit
     \hsize = \singlec@lumnhsize % local to the \output group
     \vsize = \singlec@lumnvsize
     \the\previousoutput
     \global\vsize=\number@fcolumns\singlec@lumnvsize}

\def \@@endcolumns
    {\global\let\@ndcolumns=\relax%
     \par % Shouldn't start in horizontal mode.
     \global\output = {\global\setbox1 = \box255}%
     \pagegoal = \pagetotal
     \eject
     \global\setbox255 = \box1
     \@columnsplit
     \global\vsize = \singlec@lumnvsize
     \global\output = \expandafter{\the\previousoutput}%
     \endgroup
     \unvbox255}
\def \newwrite
    {\alloc@7\write\chardef\sixt@@n} % remove \outer

\def \@nameuse#1%
    {\csname #1\endcsname}

\def \arabic#1{\@arabic{\@nameuse{c@#1}}}
\def \roman#1{\@roman{\@nameuse{c@#1}}}
\def \Roman#1{\@Roman{\@nameuse{c@#1}}}
\def \alph#1{\@alph{\@nameuse{c@#1}}}
\def \Alph#1{\@Alph{\@nameuse{c@#1}}}

\def \@arabic#1{\ifnum #1>0 \number #1\fi}
\def \@roman#1{\romannumeral #1}
\def \@Roman#1{\expandafter\uppercase\expandafter{\romannumeral #1}}
\def \@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
\def \@ialph#1%
    {\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or k\or l\or
         m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or
         z\else\@ctrerr\fi}
\def \@Alph#1{\ifcase#1\or A\or B\or C\or D\else\@Ialph{#1}\fi}
\def \@Ialph#1%
    {\ifcase#1\or \or \or \or \or E\or F\or G\or H\or I\or J\or K\or L\or
         M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or
         Z\else\@ctrerr\fi}

\def \pagenumbering#1%
    {\global\pageno \@ne \gdef\thepage{\csname @#1\endcsname\pageno}}

\pagenumbering {arabic}
\newdimen \@savsk
\newcount \@savsf

\def \@bsphack
    {\@savsk\lastskip\ifhmode\@savsf\spacefactor\fi}

\def \@esphack
    {\relax%
     \ifhmode\spacefactor\@savsf
        {}\ifdim \@savsk >\z@ \ignorespaces\fi
     \fi}

\def \makeother #1{\catcode`#1=12\relax}

\def \@sanitize
    {\makeother\ \makeother\\\makeother\$%
     \makeother\&\makeother\#\makeother\^%
     \makeother\_\makeother\%\makeother\~\relax}
\def \makeindex
    {\newwrite\@indexfile
     \immediate\openout \@indexfile = \jobname.idx
     \def\index {\@bsphack\begingroup\@sanitize\@wrindex\@indexfile}
     \message{^^J--> Writing index file \jobname.idx }}
\def \@wrindex#1#2%
    {\let \thepage = \relax%
     \xdef\gtempa
         {\write#1{\string\E{#2}{\thepage}}}%
          \endgroup\gtempa\@esphack}
\def \index
    {\@bsphack\begingroup\@sanitize\@index}
\def \@index#1%
    {\endgroup\@esphack}

\def \makeglossary
    {\newwrite\@glossaryfile
     \immediate\openout\@glossaryfile=\jobname.glo
     \def\glossary{\@bsphack\begingroup\@sanitize\@wrindex\@glossaryfile}
     \message{Writing glossary file \jobname.glo }\fi}
\def \glossary {\@bsphack\begingroup\@sanitize\index}

\def \@idxitem {\par\hangindent 20pt }
\def \subitem {\par\hangindent 20pt \hskip 20pt }
\def \subsubitem {\par\hangindent 20pt \hskip 30pt }

\def \seeterm{see}
\def \see#1#2%
    {{\it \seeterm\/} #1}

\def \Input#1%
    {\openin1 #1
     \ifeof1
       \message{^^J--- I cannot find file #1 }
     \else
       \closein1
       \input #1
       \message{^^J<-- Reading file #1 }
     \fi}

\def \indexspace
    {\relax}

\def \printuserleveldefs
    {\singlecolumn
     \vfill\eject
     \Input{\jobname.und}}
\def \printdefs
    {\singlecolumn
     \vfill\eject
     \Input{\jobname.dnd}}
\def \printchunks
    {\singlecolumn
     \vfill\eject
     \let \pagenumber = \relax
     \Input{\jobname.chn}}

\def \beginuserleveldefs
    {\begingroup
     \textfont0 = \ninerm \scriptfont0 = \sevenrm%
     \textfont1 = \ninei \scriptfont1 = \seveni%
     \textfont2 = \sevensy%
     \textfont3 = \nineex%
     \def \rm {\fam0\ninerm} \rm%
     \def \it {\nineit}%
     \def \bfit {\ninebxit}%
     \def \bf {\ninebf}%
     \def \tt {\ninett}%
     \def \oldstyle {\fam\@ne\ninei}%
     \chardef\\  = "5C%
     \parindent = \z@ \parskip = \z@%
     \hfuzz = \hsize % index pages are wider
     \baselineskip = 11pt \topskip = \baselineskip%
\advance \vsize by 0.5\baselineskip
\divide \vsize by \baselineskip
\multiply \vsize by \baselineskip
     \section{User-level definitions}
     \let\item\@idxitem
     \triplecolumns \tt}
\def \begindefs
    {\begingroup
     \textfont0 = \ninerm \scriptfont0 = \sevenrm%
     \textfont1 = \ninei \scriptfont1 = \seveni%
     \textfont2 = \sevensy%
     \textfont3 = \nineex%
     \def \rm {\fam0\ninerm} \rm%
     \def \it {\nineit}%
     \def \bfit {\ninebxit}%
     \def \bf {\ninebf}%
     \def \tt {\ninett}%
     \def \oldstyle {\fam\@ne\ninei}%
     \chardef\\  = "5C%
     \parindent = \z@ \parskip = \z@%
     \hfuzz = \hsize % index pages are wider
     \baselineskip = 11pt \topskip = \baselineskip%
\advance \vsize by 0.5\baselineskip
\divide \vsize by \baselineskip
\multiply \vsize by \baselineskip
     \section{Definitions}
     \let\item\@idxitem
     \triplecolumns \tt}
\def \beginchunks
    {\begingroup
     \textfont0 = \ninerm \scriptfont0 = \sevenrm%
     \textfont1 = \ninei \scriptfont1 = \seveni%
     \textfont2 = \sevensy%
     \textfont3 = \nineex%
     \def \rm {\fam0\ninerm} \rm%
     \def \it {\nineit}%
     \def \bfit {\ninebxit}%
     \def \bf {\ninebf}%
     \def \tt {\ninett}%
     \def \oldstyle {\fam\@ne\ninei}%
     \chardef\\  = "5C%
     \parindent = \z@ \parskip = \z@%
     \hfuzz = \hsize % index pages are wider
     \baselineskip = 11pt \topskip = \baselineskip%
\advance \vsize by 0.5\baselineskip
\divide \vsize by \baselineskip
\multiply \vsize by \baselineskip
     \parskip = 2\p@ plus 2\p@
     \let\item\@idxitem
     \section{Chunks}
     \bf}

\def \endindex
    {\endgroup}

\def \makeindexes
    {\par
     \newwrite\@userleveldefsfile
     \immediate\openout\@userleveldefsfile=\jobname.udx
     \def\udx{\@bsphack\begingroup\@sanitize\@wrindex\@userleveldefsfile}
     \message{^^J--> Writing index file \jobname.udx }
     \newwrite\@defsfile
     \immediate\openout\@defsfile=\jobname.ddx
     \def\ddx{\@bsphack\begingroup\@sanitize\@wrindex\@defsfile}
     \message{^^J--> Writing index file \jobname.ddx }
     \newwrite\@chunkfile
     \immediate\openout\@chunkfile=\jobname.chk
     \def\chk{\@bsphack\begingroup\@sanitize\@wrindex\@chunkfile}
     \message{^^J--> Writing index file \jobname.chk }}
\newcount\miscount      % number of unknown references
\newif\ifshowmisses

\def \ref #1#2%
    {\xdef\temp{#1}
     \expandafter\dordef\csname#2\endcsname}
\def \dordef #1%
    {\global\let#1\temp}

\Input{\jobname.ref}
\newwrite\refo \immediate\openout\refo=\jobname.ref

\def \pageref #1%
    {\write\refo{\string\ref{\number\pageno}{#1}}}
\def \refpage #1%
    {\expandafter\usedef\csname#1\endcsname}

\def \usedef #1%
    {\ifx#1\relax%
       \ifshowmisses\showmiss #1 \fi%
       \global\advance\miscount by 1 ???%
     \else%
       #1%
     \fi}

\def \showmiss #1%
    {{\escapechar=-1%
     \message{^^J*** WARNING: Undefined reference > #1<}}}

\outer \def \bye
      {\write \cont {\string\restorecat\string\@}
       \closeout\cont
       \ifnum\miscount>0
           \message{^^J!!! \the\miscount\space %
                    undefined reference(s) were present }%
       \fi
       \par\vfill\supereject
       \end}
\raggedbottom
\frenchspacing
\fullpagesfalse
\newwrite \cont
\openout \cont = \jobname.toc
\write \cont {\string\savecat\string\@}
\write \cont {\string\catcode`\string\@=11}

\restorecat\@