% noweb.sty -- LaTeX support for noweb
% DON'T read or edit this file!  Use ...noweb-source/tex/support.nw instead.
\def\nwopt@nomargintag{\let\nwmargintag=\@gobble}
\def\nwopt@margintag{%
  \def\nwmargintag##1{\leavevmode\llap{##1\kern\nwmarginglue\kern\codemargin}}}
\def\nwopt@margintag{%
  \def\nwmargintag##1{\leavevmode\kern-\codemargin\nwthemargintag{##1}\kern\codemargin}}
\def\nwthemargintag#1{\llap{#1\kern\nwmarginglue}}
\nwopt@margintag
\newdimen\nwmarginglue
\nwmarginglue=0.3in
\def\nwtagstyle{\footnotesize\Rm}
% make \hsize in code sufficient for 88 columns
\setbox0=\hbox{\tt m}
\newdimen\codehsize
\codehsize=91\wd0 % 88 columns wasn't enough; I don't know why
\newdimen\codemargin
\codemargin=0pt
\newdimen\nwdefspace
\nwdefspace=\codehsize
\advance\nwdefspace by -\textwidth\relax
\chardef\other=12
\def\setupcode{%
  \chardef\\=`\\
  \chardef\{=`\{
  \chardef\}=`\}
  \catcode`\$=\other
  \catcode`\&=\other
  \catcode`\#=\other
  \catcode`\%=\other
  \catcode`\~=\other
  \catcode`\_=\other
  \catcode`\^=\other
  \obeyspaces\Tt
}
{\catcode`\^^M=\active % make CR an active character
  \gdef\newlines{\catcode`\^^M=\active % make CR an active character
         \def^^M{\par\startline}}%
  \gdef\eatline#1^^M{\relax}%
}
%%% DON'T   \gdef^^M{\par\startline}}% in case ^^M appears in a \write
\def\startline{\noindent\hskip\parindent\ignorespaces}
\def\nwnewline{\ifvmode\else\hfil\break\fi}
{\obeyspaces\global\let =\ } % from texbook, p 381
\def\setupmodname{%
  \catcode`\$=3
  \catcode`\&=4
  \catcode`\#=6
  \catcode`\%=14
  \catcode`\~=13
  \catcode`\_=8
  \catcode`\^=7
  \catcode`\ =10
  \catcode`\^^M=5
  \Rm}
\def\LA{\begingroup\maybehbox\bgroup\setupmodname\It$\langle$}
\def\RA{\/$\rangle$\egroup\endgroup}
\def\code{\leavevmode\begingroup\setupcode\newlines}
\def\edoc{\endgroup}
\let\maybehbox\relax
\newbox\equivbox
\setbox\equivbox=\hbox{$\equiv$}
\newbox\plusequivbox
\setbox\plusequivbox=\hbox{$\mathord{+}\mathord{\equiv}$}
% \moddef can't have an argument because there might be \code...\edoc
\def\moddef{\leavevmode\kern-\codemargin\LA}
\def\endmoddef{\RA\ifmmode\equiv\else\unhcopy\equivbox\fi
               \nobreak\hfill\nobreak}
\def\plusendmoddef{\RA\ifmmode\mathord{+}\mathord{\equiv}\else\unhcopy\plusequivbox\fi
               \nobreak\hfill\nobreak}
\def\chunklist{%
\errhelp{I changed \chunklist to \nowebchunks.  
I'll try to avoid such incompatible changes in the future.}%
\errmessage{Use \string\nowebchunks\space instead of \string\chunklist}}
\def\nowebchunks{\message{<Warning: You need noweave -x to use \string\nowebchunks>}}
\def\nowebindex{\message{<Warning: You need noweave -index to use \string\nowebindex>}}
% here is support for the new-style (capitalized) font-changing commands
% thanks to Dave Love
\ifx\documentstyle\undefined
  \let\Rm=\rm \let\It=\it \let\Tt=\tt       % plain
\else\ifx\selectfont\undefined
  \let\Rm=\rm \let\It=\it \let\Tt=\tt       % LaTeX OFSS
\else                                       % LaTeX NFSS
  \def\Rm{\reset@font\rm}
  \def\It{\reset@font\it}
  \def\Tt{\reset@font\tt}
  \def\Bf{\reset@font\bf}
\fi\fi
\ifx\reset@font\undefined \let\reset@font=\relax \fi
\def\noweboptions#1{%
  \def\@nwoptionlist{#1}%
  \@for\@nwoption:=\@nwoptionlist\do{%
    \@ifundefined{nwopt@\@nwoption}{%
        \@latexerr{There is no such noweb option as '\@nwoption'}\@eha}{%
        \csname nwopt@\@nwoption\endcsname}}}
\codemargin=10pt
%\setlength{\codemargin}{\parindent}
\advance\codehsize by \codemargin       % make room for indentation of code
\advance\nwdefspace by \codemargin      % and fix adjustment for def/use
\def\nwopt@shift{%
  \dimen@=-0.8in
  \if@twoside                 % Values for two-sided printing:
     \advance\evensidemargin by \dimen@
  \else                       % Values for one-sided printing:
     \advance\evensidemargin by \dimen@
     \advance\oddsidemargin by \dimen@
  \fi
%  \advance \marginparwidth -\dimen@
}
\let\nwopt@noshift\@empty
\def\nwbegincode#1{%
  \begingroup
    \topsep \nwcodetopsep
    \@beginparpenalty \@highpenalty
    \@endparpenalty -\@highpenalty
  \@begincode }
\def\nwendcode{\endtrivlist \endgroup } %\filbreak} changed by Kurt: 5.5.95 
% keeps code on 1 page

\newenvironment{webcode}{%\topsep \buchcodetopsep
  \@begincode
}{%
  \endtrivlist}
\def\@begincode{%
    \trivlist \item[]%
    \leftskip\@totalleftmargin \advance\leftskip\codemargin
    \rightskip\hsize \advance\rightskip -\codehsize
    \parskip\z@ \parindent\z@ \parfillskip\@flushglue
  \linewidth\codehsize
    \@@par
    \def\par{\leavevmode\null \@@par \penalty\nwcodepenalty}%
    \obeylines
    \@noligs   \ifx\verbatim@nolig@list\undefined\else
                 \let\do=\nw@makeother \verbatim@nolig@list \do@noligs\`
               \fi
    \setupcode \frenchspacing \@vobeyspaces
  \nowebsize \setupcode
  \let\maybehbox\mbox }
  \newskip\nwcodetopsep \nwcodetopsep = 3pt plus 1.2pt minus 1pt
  %\newskip\buchcodetopsep \buchcodetopsep = 10ex plus 1.2pt minus 1pt
  \let\nowebsize=\normalsize
  \def\nwopt@smallcode{\let\nowebsize=\small}
\newcount\nwcodepenalty  \nwcodepenalty=0 %\@highpenalty
\def\nw@makeother#1{\catcode`#1=12 }
\def\nwbegindocs#1{\ifvmode\noindent\fi}
\let\nwenddocs=\relax
\let\nwdocspar=\par%\filbreak  changed by Kurt, 5.5.95
\raggedbottom
\def\code{\leavevmode\begingroup\setupcode\@vobeyspaces\obeylines}
\let\edoc=\endgroup
\newdimen\@original@textwidth
\def\ps@noweb{%
  \@original@textwidth=\textwidth
  \let\@mkboth\@gobbletwo
  \def\@oddfoot{}\def\@evenfoot{}%       No feet.
  \if@twoside         % If two-sided printing.
    \def\@evenhead{\hbox to \@original@textwidth{%
           \Rm \thepage\qquad{\Tt\leftmark}\hfil\today}}%        Left heading.
    \def\@oddhead{\hbox to \@original@textwidth{%
           \Rm \today\hfil{\Tt\leftmark}\qquad\thepage}}% Right heading.
  \else               % If one-sided printing.
    \def\@oddhead{\hbox to \@original@textwidth{%
           \Rm \today\hfil{\Tt\leftmark}\qquad\thepage}}% Right heading.
    \let\@evenhead\@oddhead
  \fi
  \let\chaptermark\@gobble
  \let\sectionmark\@gobble
  \let\subsectionmark\@gobble
  \let\subsubsectionmark\@gobble
  \let\paragraphmark\@gobble
  \let\subparagraphmark\@gobble
  \def\nwfilename{\begingroup\let\do\@makeother\dospecials
                \catcode`\{=1 \catcode`\}=2 \nw@filename}
  \def\nw@filename##1{\endgroup\markboth{##1}{##1}\let\nw@filename=\nw@laterfilename}%
}
\def\nw@laterfilename#1{\endgroup\clearpage \markboth{#1}{#1}}
\let\nwfilename=\@gobble
\def\nwcodecomment#1{\@@par\penalty\nwcodepenalty
    \if@firstnwcodecomment
      \vskip\nwcodecommentsep\penalty\nwcodepenalty\@firstnwcodecommentfalse
    \fi%
    \hspace{-\codemargin}{%
        \rightskip=0pt plus1in
        \interlinepenalty\nwcodepenalty
        \let\\\relax\footnotesize\Rm #1\@@par\penalty\nwcodepenalty}}
\def\@nwalsodefined#1{\nwcodecomment{This definition is continued \nwpageprep\ \@pagesl{#1}.}}
\def\@nwused#1{\nwcodecomment{This code is used \nwpageprep\ \@pagesl{#1}.}}
\def\@nwnotused#1{\nwcodecomment{Root chunk (not used in this document).}}
\def\nwoutput#1{\nwcodecomment{This code is written to file {\Tt \@stripstar#1*\stripped}.}}
\def\@stripstar#1*#2\stripped{#1}
\newcommand{\nwprevdefptr}[1]{%
  \mbox{$\mathord{\triangleleft}\,\mathord{\mbox{\subpageref{#1}}}$}}
\newcommand{\nwnextdefptr}[1]{%
  \mbox{$\mathord{\mbox{\subpageref{#1}}}\,\mathord{\triangleright}$}}

\newcommand{\@nwprevnextdefs}[2]{%
  {\nwtagstyle
  \ifx\relax#1\else ~~\nwprevdefptr{#1}\fi
  \ifx\relax#2\else ~~\nwnextdefptr{#2}\fi}}
\newcommand{\@nwusesondefline}[1]{{\nwtagstyle~~(\@pagenumsl{#1})}}
\newcommand{\@nwstartdeflinemarkup}{\nobreak\hskip 1.5em plus 1fill\nobreak}
\newcommand{\@nwenddeflinemarkup}{\nobreak\hskip \nwdefspace minus\nwdefspace\nobreak}
\def\nwopt@longxref{%
  \let\nwalsodefined\@nwalsodefined
  \let\nwused\@nwused
  \let\nwnotused\@nwnotused
  \let\nwprevnextdefs\@gobbletwo
  \let\nwusesondefline\@gobble
  \let\nwstartdeflinemarkup\relax
  \let\nwenddeflinemarkup\relax
}
\def\nwopt@shortxref{%
  \let\nwalsodefined\@gobble
  \let\nwused\@gobble
  \let\nwnotused\@gobble
  \let\nwprevnextdefs\@nwprevnextdefs
  \let\nwusesondefline\@nwusesondefline
  \let\nwstartdeflinemarkup\@nwstartdeflinemarkup
  \let\nwenddeflinemarkup\@nwenddeflinemarkup
}
\nwopt@shortxref % to hell with backward compatibility!
\newskip\nwcodecommentsep \nwcodecommentsep=3pt plus 1pt minus 1pt
\newif\if@firstnwcodecomment\@firstnwcodecommenttrue
\newcount\@nwlopage\newcount\@nwhipage  % range lo..hi-1
\newcount\@nwlosub              % subpage of lo
\newcount\@nwhisub              % subpage of hi
\def\@nwfirstpage#1#2{% subpage page
  \@nwlopage=#2 \@nwlosub=#1
  \advance\@nwpagecount by \@ne
  \@nwhipage=\@nwlopage\advance\@nwhipage by \@ne }
\def\@nwnextpage#1#2{% subpage page
  \ifnum\@nwhipage=#2 
    \advance\@nwhipage by \@ne \advance\@nwpagecount by \@ne \@nwhisub=#1 \else
  \ifnum#2<\@nwlopage \advance\@nwhipage by \m@ne
                      \ifnum\@nwhipage=\@nwlopage
                           \edef\@tempa{\noexpand\noexpand\noexpand\\%
                                             {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}}%
                      \else
                        \count@=\@nwhipage \advance\count@ by \m@ne
                        \ifnum\count@=\@nwlopage % consecutive pages
                            \edef\@tempa{\noexpand\noexpand\noexpand\\%
                                             {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}%
                                          \noexpand\noexpand\noexpand\\%
                                             {\nwthepagenum{\number\@nwhisub}{\number\@nwhipage}}}%
                        \else \ifnum\@nwlopage<110 \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
                                \count@=\@nwlopage \divide\count@ by 100 \multiply\count@ by 100
                                \ifnum\count@=\@nwlopage \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
                                  \count@=\@nwlopage \divide\count@ by 100
                                  \@nwpagetemp=\@nwhipage \divide\@nwpagetemp by 100
                                  \ifnum\count@=\@nwpagetemp %  lo--least 2 digits of hi
                                    \multiply\@nwpagetemp by 100
                                    \advance \@nwhipage by -\@nwpagetemp
                                    \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
                                  \else \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
                                  \fi
                                \fi
                              \fi%
                        \fi
                      \fi%
                      \edef\@tempa{\noexpand\nwix@cons\noexpand\nw@pages{\@tempa}}\@tempa\@nwfirstpage{#1}{#2}\else
  \ifnum#2>\@nwhipage \advance\@nwhipage by \m@ne
                      \ifnum\@nwhipage=\@nwlopage
                           \edef\@tempa{\noexpand\noexpand\noexpand\\%
                                             {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}}%
                      \else
                        \count@=\@nwhipage \advance\count@ by \m@ne
                        \ifnum\count@=\@nwlopage % consecutive pages
                            \edef\@tempa{\noexpand\noexpand\noexpand\\%
                                             {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}%
                                          \noexpand\noexpand\noexpand\\%
                                             {\nwthepagenum{\number\@nwhisub}{\number\@nwhipage}}}%
                        \else \ifnum\@nwlopage<110 \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
                                \count@=\@nwlopage \divide\count@ by 100 \multiply\count@ by 100
                                \ifnum\count@=\@nwlopage \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
                                  \count@=\@nwlopage \divide\count@ by 100
                                  \@nwpagetemp=\@nwhipage \divide\@nwpagetemp by 100
                                  \ifnum\count@=\@nwpagetemp %  lo--least 2 digits of hi
                                    \multiply\@nwpagetemp by 100
                                    \advance \@nwhipage by -\@nwpagetemp
                                    \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
                                  \else \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
                                  \fi
                                \fi
                              \fi%
                        \fi
                      \fi%
                      \edef\@tempa{\noexpand\nwix@cons\noexpand\nw@pages{\@tempa}}\@tempa\@nwfirstpage{#1}{#2}\else
    \@nwlosub=0 \@nwhisub=0
  \fi\fi\fi
  }
\newcount\@nwpagetemp
\newcount\@nwpagecount
\def\@nwfirstpagel#1{% label
  \@ifundefined{r@#1}{\@warning{Reference `#1' on page \thepage \space undefined}%
                      \nwix@cons\nw@pages{\\{\bf ??}}}{%
    \edef\@tempa{\noexpand\@nwfirstpage\subpagepair{#1}}\@tempa}}
\def\@nwnextpagel#1{% label
  \@ifundefined{r@#1}{\@warning{Reference `#1' on page \thepage \space undefined}%
                      \nwix@cons\nw@pages{\\{\bf ??}}}{%
    \edef\@tempa{\noexpand\@nwnextpage\subpagepair{#1}}\@tempa}}
\def\@pagesl#1{%  list of labels
  \gdef\nw@pages{}\@nwpagecount=0
  \def\\##1{\@nwfirstpagel{##1}\let\\=\@nwnextpagel}#1%
  \advance\@nwhipage by \m@ne
  \ifnum\@nwhipage=\@nwlopage
       \edef\@tempa{\noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}}%
  \else
    \count@=\@nwhipage \advance\count@ by \m@ne
    \ifnum\count@=\@nwlopage % consecutive pages
        \edef\@tempa{\noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}%
                      \noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwhisub}{\number\@nwhipage}}}%
    \else \ifnum\@nwlopage<110 \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
            \count@=\@nwlopage \divide\count@ by 100 \multiply\count@ by 100
            \ifnum\count@=\@nwlopage \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
              \count@=\@nwlopage \divide\count@ by 100
              \@nwpagetemp=\@nwhipage \divide\@nwpagetemp by 100
              \ifnum\count@=\@nwpagetemp %  lo--least 2 digits of hi
                \multiply\@nwpagetemp by 100
                \advance \@nwhipage by -\@nwpagetemp
                \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
              \else \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
              \fi
            \fi
          \fi%
    \fi
  \fi%
  \edef\@tempa{\noexpand\nwix@cons\noexpand\nw@pages{\@tempa}}\@tempa\let\\=\relax
  \nwpageword\ifnum\@nwpagecount=1 \else s\fi~\commafy{\nw@pages}}
\def\@pagenumsl#1{%  list of labels -- doesn't include word `pages', commas, or `and'
  \gdef\nw@pages{}\@nwpagecount=0
  \def\\##1{\@nwfirstpagel{##1}\let\\=\@nwnextpagel}#1%
  \advance\@nwhipage by \m@ne
  \ifnum\@nwhipage=\@nwlopage
       \edef\@tempa{\noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}}%
  \else
    \count@=\@nwhipage \advance\count@ by \m@ne
    \ifnum\count@=\@nwlopage % consecutive pages
        \edef\@tempa{\noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}%
                      \noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwhisub}{\number\@nwhipage}}}%
    \else \ifnum\@nwlopage<110 \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
            \count@=\@nwlopage \divide\count@ by 100 \multiply\count@ by 100
            \ifnum\count@=\@nwlopage \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
              \count@=\@nwlopage \divide\count@ by 100
              \@nwpagetemp=\@nwhipage \divide\@nwpagetemp by 100
              \ifnum\count@=\@nwpagetemp %  lo--least 2 digits of hi
                \multiply\@nwpagetemp by 100
                \advance \@nwhipage by -\@nwpagetemp
                \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
              \else \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
              \fi
            \fi
          \fi%
    \fi
  \fi%
  \edef\@tempa{\noexpand\nwix@cons\noexpand\nw@pages{\@tempa}}\@tempa\def\\{\let\\=~}\nw@pages}
\def\subpages#1{% list of {{subpage}{page}}
  \gdef\nw@pages{}\@nwpagecount=0
  \def\\##1{\edef\@tempa{\noexpand\@nwfirstpage##1}\@tempa
            \def\\####1{\edef\@tempa{\noexpand\@nwnextpage####1}\@tempa}}#1%
  \advance\@nwhipage by \m@ne
  \ifnum\@nwhipage=\@nwlopage
       \edef\@tempa{\noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}}%
  \else
    \count@=\@nwhipage \advance\count@ by \m@ne
    \ifnum\count@=\@nwlopage % consecutive pages
        \edef\@tempa{\noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}%
                      \noexpand\noexpand\noexpand\\%
                         {\nwthepagenum{\number\@nwhisub}{\number\@nwhipage}}}%
    \else \ifnum\@nwlopage<110 \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
            \count@=\@nwlopage \divide\count@ by 100 \multiply\count@ by 100
            \ifnum\count@=\@nwlopage \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
              \count@=\@nwlopage \divide\count@ by 100
              \@nwpagetemp=\@nwhipage \divide\@nwpagetemp by 100
              \ifnum\count@=\@nwpagetemp %  lo--least 2 digits of hi
                \multiply\@nwpagetemp by 100
                \advance \@nwhipage by -\@nwpagetemp
                \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
              \else \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
              \fi
            \fi
          \fi%
    \fi
  \fi%
  \edef\@tempa{\noexpand\nwix@cons\noexpand\nw@pages{\@tempa}}\@tempa\let\\=\relax
  \nwpageword\ifnum\@nwpagecount=1 \else s\fi~\commafy{\nw@pages}}
\def\@nwaddrange{\advance\@nwhipage by \m@ne
                 \ifnum\@nwhipage=\@nwlopage
                      \edef\@tempa{\noexpand\noexpand\noexpand\\%
                                        {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}}%
                 \else
                   \count@=\@nwhipage \advance\count@ by \m@ne
                   \ifnum\count@=\@nwlopage % consecutive pages
                       \edef\@tempa{\noexpand\noexpand\noexpand\\%
                                        {\nwthepagenum{\number\@nwlosub}{\number\@nwlopage}}%
                                     \noexpand\noexpand\noexpand\\%
                                        {\nwthepagenum{\number\@nwhisub}{\number\@nwhipage}}}%
                   \else \ifnum\@nwlopage<110 \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
                           \count@=\@nwlopage \divide\count@ by 100 \multiply\count@ by 100
                           \ifnum\count@=\@nwlopage \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}\else
                             \count@=\@nwlopage \divide\count@ by 100
                             \@nwpagetemp=\@nwhipage \divide\@nwpagetemp by 100
                             \ifnum\count@=\@nwpagetemp %  lo--least 2 digits of hi
                               \multiply\@nwpagetemp by 100
                               \advance \@nwhipage by -\@nwpagetemp
                               \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
                             \else \edef\@tempa{\noexpand\noexpand\noexpand\\{\number\@nwlopage--\number\@nwhipage}}%
                             \fi
                           \fi
                         \fi%
                   \fi
                 \fi%
                 \edef\@tempa{\noexpand\nwix@cons\noexpand\nw@pages{\@tempa}}\@tempa}
\def\nwpageword{chunk}  % was page
\def\nwpageprep{in}     % was on
\newcommand{\subpageref}[1]{%
  \@ifundefined{r@#1}%
    {\pageref{#1}}%
    {\@ifundefined{2on\@pageref{#1}}%
      {\pageref{#1}}%
      {\expandafter\expandafter\expandafter\nwthepagenum\csname r@#1\endcsname}}}
\newcommand{\subpagepair}[1]{%  % produces {subpage}{page}
  \@ifundefined{r@#1}%
    {{0}{0}}%
    {\@ifundefined{2on\@pageref{#1}}%
      {{0}{\expandafter\expandafter\expandafter\@cdr\csname r@#1\endcsname\@nil}}%
      {\@nameuse{r@#1}}}}
\def\@pageref#1{\expandafter\expandafter\expandafter
                \@cdr\csname r@#1\endcsname\@nil}
\newcommand{\sublabel}[1]{%
  \@bsphack\if@filesw {\let\thepage\relax
   \def\protect{\noexpand\noexpand\noexpand}%
   \edef\@tempa{\write\@auxout{\string
      \newsublabel{#1}{{}{\thepage}}}}%
   \expandafter}\@tempa
   \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
\newcommand{\nosublabel}[1]{%
  \@bsphack\if@filesw {\let\thepage\relax
   \def\protect{\noexpand\noexpand\noexpand}%
   \edef\@tempa{\write\@auxout{\string
      \newlabel{#1}{{0}{\thepage}}}}%
   \expandafter}\@tempa
   \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
\newcommand{\newsublabel}[2]{%
  \edef\this@page{\@cdr#2\@nil}%
  \ifx\this@page\last@page\else
    \sub@page=\z@
  \fi
  \edef\last@page{\this@page}
  \advance\sub@page by \@ne
  \ifnum\sub@page=\tw@
    \global\@namedef{2on\this@page}{}%
  \fi
  \edef\@tempa{\noexpand\newlabel{#1}%
    {{\number\sub@page}{\this@page}}}%
  \@tempa}
\def\last@page{\relax}
\newcount\sub@page
% RmS 92/08/14: made \ref and \pageref robust
\def\ref#1{\@ifundefined{r@#1}{{\bf ??}\@warning{Reference `#1' on page \thepage \space undefined}}%
    {\expandafter\expandafter\expandafter
     \@car\csname r@#1\endcsname\@nil\null}}
\def\pageref#1{\@ifundefined{r@#1}{{\bf ??}\@warning{Reference `#1' on page \thepage \space undefined}}%
     {\expandafter\expandafter\expandafter
      \@cdr\csname r@#1\endcsname\@nil\null}}
\def\@refpair#1{\@ifundefined{r@#1}{{0}{0}\@warning{Reference `#1' on page \thepage \space undefined}}%
    {\@nameuse{r@#1}}}
\def\@alphasubpagenum#1#2{#2\ifnum#1=0 \else\@alph{#1}\fi}
\def\@nosubpagenum#1#2{#2}
\def\@numsubpagenum#1#2{#2\ifnum#1=0 \else.\@arabic{#1}\fi}
\def\nwopt@nosubpage{\let\nwthepagenum=\@nosubpagenum\nwopt@nomargintag}
\def\nwopt@numsubpage{\let\nwthepagenum=\@numsubpagenum}
\def\nwopt@alphasubpage{\let\nwthepagenum=\@alphasubpagenum}
\nwopt@alphasubpage
\newcount\nw@chunkcount
\nw@chunkcount=\@ne
\newcommand{\weblabel}[1]{%
  \@bsphack\if@filesw {\let\thepage\relax
   \def\protect{\noexpand\noexpand\noexpand}%
   \edef\@tempa{\write\@auxout{\string
      \newsublabel{#1}{{}{\number\nw@chunkcount}}}}%
   \expandafter}\@tempa
   \global\advance\nw@chunkcount by \@ne
   \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
\def\nwopt@webnumbering{\let\sublabel=\weblabel\def\nwpageword{chunk}\def\nwpageprep{in}}
% \nwindexdefn{printable name}{identifying label}{label of chunk}
% \nwindexuse{printable name}{identifying label}{label of chunk}

\def\nwindexdefn#1#2#3{\@auxix{\protect\nwixd}{#2}{#3}}
\def\nwindexuse#1#2#3{\@auxix{\protect\nwixu}{#2}{#3}}

\def\@auxix#1#2#3{% {marker}{id label}{subpage label}
   \@bsphack\if@filesw {\let\nwixd\relax\let\nwixu\relax
   \def\protect{\noexpand\noexpand\noexpand}%
   \edef\@tempa{\write\@auxout{\string\nwixadd{#1}{#2}{#3}}}%
   \expandafter}\@tempa
   \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
% \nwixadd{marker}{idlabel}{subpage label}
\def\nwixadd#1#2#3{%
  \@ifundefined{nwixl@#2}%
    {\global\@namedef{nwixl@#2}{#1{#3}}}%
    {\expandafter\nwix@cons\csname nwixl@#2\endcsname{#1{#3}}}}
\newcount\@commacount
\def\commafy#1{%
  {\nwix@listcount{#1}\@commacount=\nwix@counter
   \let\@comma@each=\\%
   \ifcase\@commacount\let\\=\@comma@each\or\let\\=\@comma@each\or
     \def\\{\def\\{ and \@comma@each}\@comma@each}\else
     \def\\{\def\\{, %
                   \advance\@commacount by \m@ne
                   \ifnum\@commacount=1 and~\fi\@comma@each}\@comma@each}\fi
   #1}}
\def\nwix@cons#1#2{% {list}{\marker{element}}
  {\toks0=\expandafter{#1}\def\@tempa{#2}\toks2=\expandafter{\@tempa}%
   \xdef#1{\the\toks0 \the\toks2 }}}
\def\nwix@uses#1{% {label}
  \def\nwixu{\\}\let\nwixd\@gobble\@nameuse{nwixl@#1}}
\def\nwix@defs#1{% {label}
  \def\nwixd{\\}\let\nwixu\@gobble\@nameuse{nwixl@#1}}
\newcount\nwix@counter
\def\nwix@listcount#1{% {list with \\}
  {\count@=0
   \def\\##1{\advance\count@ by \@ne }%
   #1\global\nwix@counter=\count@ }}
\def\nwix@usecount#1{\nwix@listcount{\nwix@uses{#1}}}
\def\nwix@defcount#1{\nwix@listcount{\nwix@defs{#1}}}
\def\nwix@id@defs#1{% index pair
  {{\Tt \@car#1\@nil}%
  \def\\##1{~\subpageref{##1}}\nwix@defs{\@cdr#1\@nil}}}
\def\nwidentuses#1{% list of index pairs
  \nwcodecomment{Uses \let\\=\nwix@id@defs\commafy{#1}.}}
\def\nwix@totaluses#1{% list of index pairs
  {\count@=0
   \def\\##1{\nwix@usecount{\@cdr##1\@nil}\advance\count@ by\nwix@counter}%
   #1\global\nwix@counter\count@ }}
\def\nwix@id@uses#1#2{% {ident}{label}
  \nwix@usecount{#2}\ifnum\nwix@counter>0
    {\advance\leftskip by \codemargin
     \nwcodecomment{{\Tt #1}, used \nwpageprep\ \@pagesl{\nwix@uses{#2}}.}}%
  \else
    \ifnw@hideunuseddefs\else
      {\advance\leftskip by \codemargin \nwcodecomment{{\Tt #1}, never used.}}%
    \fi
  \fi}
\def\nwidentdefs#1{% list of index pairs
  \ifnw@hideunuseddefs\nwix@totaluses{#1}\else\nwix@listcount{#1}\fi
  \ifnum\nwix@counter>0
    \nwcodecomment{Defines:}%
    {\def\\##1{\nwix@id@uses ##1}#1}%
  \fi}
\newif\ifnw@hideunuseddefs\nw@hideunuseddefsfalse
\def\nwopt@hideunuseddefs{\nw@hideunuseddefstrue}
\def\nwopt@noidentxref{%
  \let\nwidentdefs\@gobble
  \let\nwidentuses\@gobble}
\def\nw@underlinedefs{% {list with \nwixd, \nwixu}
  \let\\=\relax\def\nw@comma{, }
  \def\nwixd##1{\\\underline{\subpageref{##1}}\let\\\nw@comma}%
  \def\nwixu##1{\\\subpageref{##1}\let\\\nw@comma}}

\def\nw@indexline#1#2{%
   {\indent {\Tt #1}: \nw@underlinedefs\@nameuse{nwixl@#2}\par}}

\newenvironment{thenowebindex}{\parindent=-10pt \parskip=\z@ 
        \advance\leftskip by 10pt 
        \advance\rightskip by 0pt plus1in\par\@afterindenttrue
    \def\\##1{\nw@indexline##1}}{}
\def\nowebindex{%
  \@ifundefined{nwixs@i}%
     {\@warning{The \string\nowebindex\space is empty}}%
     {\begin{thenowebindex}\@nameuse{nwixs@i}\end{thenowebindex}}}
\def\nowebindex@external{%
  {\let\nwixadds@c=\@gobble
   \def\nwixadds@i##1{\nw@indexline##1}%
   \def\nwixaddsx##1##2{\@nameuse{nwixadds@##1}{##2}}%
   \begin{thenowebindex}\@input{\jobname.nwi}\end{thenowebindex}}}
\def\nwixlogsorted#1#2{% list data
   \@bsphack\if@filesw 
     \toks0={#2}\immediate\write\@auxout{\string\nwixadds{#1}{\the\toks0}}
   \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
\def\nwixadds#1#2{%
  \@ifundefined{nwixs@#1}%
    {\global\@namedef{nwixs@#1}{\\{#2}}}%
    {\expandafter\nwix@cons\csname nwixs@#1\endcsname{\\{#2}}}}
\let\nwixaddsx=\@gobbletwo
\def\nwopt@externalindex{%
  \ifx\nwixadds\@gobbletwo % already called
  \else
    \let\nwixaddsx=\nwixadds \let\nwixadds=\@gobbletwo
    \let\nowebindex=\nowebindex@external
    \let\nowebchunks=\nowebchunks@external
  \fi}
\def\nowebchunks{%
  \@ifundefined{nwixs@c}%
     {\@warning{The are no \string\nowebchunks}}%
     {\begin{thenowebchunks}\@nameuse{nwixs@c}\end{thenowebchunks}}}
\def\nowebchunks@external{%
  {\let\nwixadds@i=\@gobble
   \def\nwixadds@c##1{\nw@onechunk##1}%
   \def\nwixaddsx##1##2{\@nameuse{nwixadds@##1}{##2}}%
   \begin{thenowebchunks}\@input{\jobname.nwi}\end{thenowebchunks}}}
    \@namedef{r@nw@notdef}{{0}{(never defined)}}
\def\nw@chunkunderlinedefs{% {list of labels with \nwixd, \nwixu}
  \let\\=\relax\def\nw@comma{, }
  \def\nwixd##1{\\\underline{\subpageref{##1}}\let\\\nw@comma}%
  \def\nwixu##1{\\\subpageref{##1}\let\\\nw@comma}}
\def\nw@onechunk#1#2#3{% {name}{label of first definition}{list with \nwixd, \nwixu}
  \@ifundefined{r@#2}{}{%
    \indent\LA #1~{\nwtagstyle\subpageref{#2}}\RA 
    \if@nwlongchunks{~\nw@chunkunderlinedefs#3}\fi\par}}
\newenvironment{thenowebchunks}{\vskip3pt
  \parskip=\z@\parindent=-10pt \advance\leftskip by 10pt
  \advance\rightskip by 0pt plus10pt \@afterindenttrue
  \def\\##1{\nw@onechunk##1}}{}
\newif\if@nwlongchunks
\@nwlongchunksfalse
\let\nwopt@longchunks\@nwlongchunkstrue
