<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%%
%% This is file `webfiles.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% webfiles.dtx  (with options: `main')
%%   Package for inclusion of CWEB and Spidery WEB programs in
%%   LaTeX Documents.

%%
%% $Id: webfiles.dtx,v 2.1 2002/03/05 10:38:14 potse Exp $
%%

\begingroup
   \catcode`\$=9  % ignore $
   \gdef\xwebMajorNr{1.0.}
   \def\setversion#1:#2.#3:{\xdef\xwebVersion{\xwebMajorNr #3}}
   \setversion $Revision: 2.1 $:
   \def\setdate#1: #2/#3/#4#5#6:#7:#8;{\gdef\xwebDate{#2/#3/#4#5}}
   \setdate $Date: 2002/03/05 10:38:14 $;
   \newwrite\vf \immediate\openout\vf=version.tex
   \immediate\write\vf{\xwebVersion}\immediate\closeout\vf
\endgroup
\catcode`\@=11
\chardef\xwebCatUsCode=\catcode`\_       % top level macro file!
\catcode`\_=11 % Catcode letter
\chardef\xwebCatEscape=0
\chardef\xwebCatOpen=1
\chardef\xwebCatClose=2
\chardef\xwebCatIgnore=9
\chardef\xwebCatLetter=11
\chardef\xwebCatOther=12
\chardef\xwebCatActive=13
\ProvidesPackage{webfiles}
\begingroup
    \typeout{LaTeX package `webfiles', version \xwebVersion, \xwebDate}
\endgroup
\ifx \section\undefined
    \PackageError{webfiles}{`webfiles' is a package, not a class}{%
        webfiles is not a document class, but only a package.
        Please adapt your documentclass tag appropriately.
        I.e., write \MessageBreak
        \protect\usepackage{webfiles} instead of
        \protect\documentclass{webfiles}.}
\fi
\newif\ifxweb_GlobalIndex \newif\ifxwebIndex
\newif\ifxweb_GlobalRef    \newif\ifxwebRef
\newif\ifxweb_GlobalRagged \newif\ifxwebRagged
\newif\ifxweb_GlobalOC
\newif\ifxweb_GlobalHideFormats \newif\ifxwebHideFormats
\newif\ifxweb_GlobalCon    \newif\ifxwebCon
\DeclareOption{index}{\xweb_GlobalIndextrue}
\DeclareOption{noindex}{\xweb_GlobalIndexfalse}
\DeclareOption{reflist}{\xweb_GlobalReftrue}
\DeclareOption{noreflist}{\xweb_GlobalReffalse}
\DeclareOption{raggedbottom}{\xweb_GlobalRaggedtrue}
\DeclareOption{flushbottom}{\xweb_GlobalRaggedfalse}
\DeclareOption{onlychanges}{\xweb_GlobalOCtrue}
\DeclareOption{allsections}{\xweb_GlobalOCfalse}
\DeclareOption{nocon}{\xweb_GlobalConfalse}
\DeclareOption{contents}{\xweb_GlobalContrue}
\DeclareOption{hideformats}{\xweb_GlobalHideFormatstrue}
\DeclareOption{showformats}{\xweb_GlobalHideFormatsfalse}

\newcount\xweb_hypertype
\newcount\xweb_GlobalHypertype
\DeclareOption{hyperref}{\xweb_GlobalHypertype=1}
\DeclareOption{pdftex}{\xweb_GlobalHypertype=2 \input pdfcolor}
\DeclareOption{nohype}{\xweb_GlobalHypertype=0}

\newcounter{xwebLopDepth}  \setcounter{xwebLopDepth}{9}
\newcounter{xwebOutlineDepth}  \setcounter{xwebOutlineDepth}{9}
\DeclareOption{nofiles}{\c@xwebLopDepth=-9}
\DeclareOption{writefiles}{\c@xwebLopDepth=9}
\ExecuteOptions{index,reflist,raggedbottom,allsections,%
                contents,showformats,nohype,writefiles}
\let\xweb_UserBindings=\relax
\let\xweb_DocLayout=\relax
\def\xweb_documentation{%
   \xweb_UserBindings
   \xweb_DocLayout}
\def\xweb_Rprogram{%
   \xweb_CweaveBindings}
\def\xweb_program{%
   \xweb_CweaveBindings
   \xweb_ProgramLayout}
\def\xweb_tex{%
   \xweb_UserBindings}
\def\xweb_CR{%
   \xweb_CweaveBindings
   \xweb_DocLayout}
\newtoks\xweb_undefined
\newtoks\xweb_ToRestore
\def\xweb_rebind{%
    \xweb_undefined{}%
    \xweb_ToRestore{}%
    \xweb_DoRebind
    }
\def\xweb_DoRebind#1#2{%
    \ifx #1\stop
       \let\next\relax
    \else
        \xweb_SaveBinding #2%
        \let #2=#1%
        \let\next\xweb_DoRebind
    \fi
    \next
    }
\def\xweb_SaveBinding#1{%
    \ifx #1\undefined
        \xweb_undefined \expandafter{\the\xweb_undefined #1}%
    \else
        \expandafter\let \csname xweb_s_\string#1\endcsname =#1%
        \xweb_ToRestore \expandafter{\the\xweb_ToRestore #1}%
    \fi
    }
\def\xweb_RestoreBindings{%
    \expandafter\xweb_undefine \the\xweb_undefined \stop
    \xweb_undefined{}%
    \expandafter\xweb_RestoreBinding \the\xweb_ToRestore \stop
    \xweb_ToRestore{}%
    }
\def\xweb_undefine#1{%
    \ifx #1\stop
        \let\next\relax
    \else
        \let#1\undefined
        \let\next\xweb_undefine
    \fi
    \next
    }
\def\xweb_RestoreBinding#1{%
    \ifx #1\stop
        \let\next\relax
    \else
        \expandafter\let \expandafter#1\csname xweb\string#1\endcsname
        \expandafter\let \csname xweb_s_\string#1\endcsname \undefined
        \let\next\xweb_RestoreBinding
    \fi
    \next
    }
\def\xweb_anchor{xwebmod:\xwebJobname:\arabic{xwebModule}}
\def\xweb_SetupHrefs{
   \ifnum\xweb_hypertype=0
      \def\xweb_hlink##1{##1}
      \def\xweb_htarget##1{##1}
   \else\ifnum\xweb_hypertype=1
      \def\xweb_hlink##1{\hyperlink{\xweb_anchor}{##1}}
      \def\xweb_htarget##1{\hypertarget{\xweb_anchor}{##1}}
   \else\ifnum\xweb_hypertype=2
      \def\xweb_hlink##1{\xweb_pdflink{\xweb_anchor}{##1}}
      \def\xweb_htarget##1{\xweb_pdftarget{\xweb_anchor}{##1}}
   \else\PackageError{webfiles}{This can't happen.}{%
      this may be a bug in the webfiles package}
   \fi\fi\fi}
\xweb_SetupHrefs
\def\xwebPDFOutline#1#2{{%
      \edef\tmpnr{#1}%
      \edef\name{#2}%
      \c@xwebModule=\tmpnr\relax
      \ifnum\xweb_hypertype=2
          \edef\anchor{\xweb_anchor}
          \pdfoutline goto name{\anchor}{#1 \name}
      \fi}}
   \def\xweb_pdflink#1#2{%
       \pdfannotlink
          attr{/Border [0 0 0]}
          goto name{#1}
          \Blue #2\Black
       \pdfendlink}
   \def\xweb_pdftarget#1#2{
       \smash{\raise\baselineskip\hbox to 0pt{\pdfdest name{#1} fith}}
       #2}
\def\xwebLapStar{\rlap{*}}
\newcount\xwebGroupLevel
\newcounter{xwebSecNoEject}
        \setcounter{xwebSecNoEject}{3}
\newcounter{xwebModule}
\newif\ifon % determines if the section is `on'
\def\onmaybe{\let\ifon=\maybe} % analogous to \ontrue
\let\maybe=\iftrue  % initial meaning; the user can say "\let\maybe=\iffalse"
\def\xweb_PrepareSection#1{%
   {\xdef\secstar{#1}%
    \let\*=\empty%  remove \* from the number
    \xdef\xweb_secno{#1}}
   \ifx\xweb_secno\secstar % if they are the same; i.e.:
      \onmaybe                  % if there was no star in #1
      \xdef\xweb_star{}%
   \else
      \ontrue
      \xdef\xweb_star{*}%
   \fi
    \setcounter{xwebModule}{#1}% global set!
    \xweb_documentation
}
\def\thexwebModule{\arabic{xwebModule}}
\newbox\xweb_ModBox
\newif\ifxweb_FirstModule \xweb_FirstModulefalse
\newenvironment{xwebModule}{%
   \ifxweb_FirstModule
      \ifxwebCon\xwebContents{\xwebJobname}\fi
      \global\xweb_FirstModulefalse
      \openout\xweb_cont=\xwebJobname.con
      \write\xweb_cont{\catcode `\noexpand\@=11\relax}%
   \fi
   \ifxwebRagged\vfil\penalty-200\vfilneg%  (TeXbook p.353)
                                   % (this is a \filbreak without a \par)
   \else\penalty-200\fi
   %\setbox\xweb_ModBox=\vbox\bgroup
   \edef\@currentlabel{\thexwebModule}
   \par\bigskip
   \everypar{%
      \if@noskipsec%
         \global\@noskipsecfalse%
         \everypar{\penalty-100}%
      \fi}
   \@noskipsectrue
   \mbox{}\hspace{-\parindent}%
   \xwebModuleHook
   \xweb_htarget{\textbf{\thexwebModule.}\xweb_star}% typeset module number
   \hskip 1em plus0.1em minus 0.1em%
   }{%\egroup\unvbox\xweb_ModBox
   }
\def\xwebModuleHook{}
\def\xwebMainSecSkip{\clearpage}
\def\N#1#2#3.{%
    \ifon\end{xwebModule}\fi
    \global\xwebGroupLevel #1                   % &lt;-- space!!
    { \let\*=\empty%
      \xdef\xweb_secno{#2}% get the section number
    }%
    \ifnum\xweb_secno&gt;1
       \ifnum \xwebGroupLevel&lt;\c@xwebSecNoEject
          \xwebMainSecSkip
       \fi
    \fi
    \message \expandafter{*\xweb_secno}%
    \xweb_PrepareSection{#2}
    \ifon
       \def\xweb_ModTitle{#3}%
       \begin{xwebModule}{\textbf{#3.}}% title
       \hskip 1em plus.1em minus.1em%
       \ifnum\c@xwebLopDepth &gt; #1%
          \addcontentsline{lop}{starred}{%
          \protect\global\xwebGroupLevel #1 %  space after #1 !
              {\thexwebModule.}~{#3}}%
          {   \let\protect\@unexpandable@protect
              \edef\next{\write\xweb_cont{%
                \ZZ{#3}{#1}{\xweb_secno}{\thepage}}}%
              \next
          }%  write "\ZZ{title}{depth}{sec}{page}" to .con file
       \fi
       \ifnum\c@xwebOutlineDepth &gt; #1%
          \xwebPDFOutline{\xweb_secno}{#3}% args: nr, title
       \fi
}
\def\M#1{%
    \ifon\end{xwebModule}\fi
    \xweb_PrepareSection{#1}%
    \ifon\begin{xwebModule}%
      \ifnum\c@xwebLopDepth&gt;9%
         \addcontentsline{lop}{xwebsection}{%
             \protect\global\xwebGroupLevel 4 \thexwebModule.}%
         {   \let\protect\@unexpandable@protect
             \edef\next{\write\xweb_cont{%
               \ZZ{}{4}{#1}{\thepage}}}%
             \next
         }% write "\ZZ{title}{depth}{sec}{page}" to .con file
      \fi
    }
\def\xwebTocName{Contents of \xwebJobname}
\def\xwebLopName{List of Programs}
\ifx\listofprograms\undefined
   \ifx \chapter\undefined
       \def\listofprograms{\section*{\xwebLopName\@mkboth
       {\uppercase{\xwebLopName}}{\uppercase{\xwebLopName}}}\@starttoc{lop}}
   \else
       \newcommand{\listofprograms}{\chapter*{\xwebLopName\@mkboth
       {\uppercase{\xwebLopName}}{\uppercase{\xwebLopName}}}\@starttoc{lop}}
    \fi
\fi
\def\l@program#1{%
     \xwebGroupLevel\z@         % default value of group level
     \begingroup
         \let\numberline\@gobble        % width not known yet
         \setbox\z@ \hbox{#1}%
     \endgroup
     \xweb_TTLopLine{#1}%
}
\def\l@xwebSection#1{
     \xwebGroupLevel\z@ % default value of group level
     \begingroup
         \let\numberline\@gobble        % width not known yet
         \setbox\z@ \hbox{#1}%
     \endgroup
     \xweb_NormalTocLine{#1}%
 }
\newdimen\xwebLopIndent
     \xwebLopIndent=2em
\newcount\xwebLopIndentMaxLevel
     \xwebLopIndentMaxLevel=4   % group level &lt;= max level
 \def\l@starred#1{%             % page will be processed later
     \xwebGroupLevel\z@         % default value of group level
     \begingroup
         \let\numberline\@gobble        % width not known yet
         \setbox\z@ \hbox{#1}%
     \endgroup
     \ifnum \xwebGroupLevel=\z@
         \let\next\xweb_BoldTocLine
     \else
         \let\next\xweb_NormalTocLine
     \fi
     \next{#1}}
\def\xweb_NormalTocLine#1{%     % page will be processed later
    \ifnum \xwebGroupLevel&gt;\xwebLopIndentMaxLevel
        \xwebGroupLevel\xwebLopIndentMaxLevel
    \fi
    \advance\xwebGroupLevel\m@ne        % group level -= 1
    \@dottedtocline
            % \xwebGroupLevel                   % level (old)
            1                                   % level
            {\xwebGroupLevel\xwebLopIndent}%    % basic indent
            \xwebLopIndent                      % numwidth
            {#1}%                               % entry
    }
\def\xweb_BoldTocLine#1{%
    \@dottedtocline
            1                                   % level
            {\xwebGroupLevel\xwebLopIndent}%    % basic indent
            \xwebLopIndent                      % numwidth
            {{\bf #1}}%                         % entry
    }
\def\xweb_TTLopLine#1#2{%
    \addpenalty{\@secpenalty}%
    \addvspace{2em plus\p@}%
    \begingroup
        \noindent
        \hangindent\xwebLopIndent
        \rightskip\@tocrmarg  \parfillskip -\rightskip
        \interlinepenalty\@M
        \@tempdima\xwebLopIndent        % for \numberline
        {\large\bf\tt #1}\nobreak\hfill \hbox to\@pnumwidth{\hss #2}%
        \par
    \endgroup
    \addvspace{.5em plus\p@}%
    }
\def\PB#1{%
    \begingroup
        \xweb_Rprogram
        \leavevmode
        #1%
    \endgroup}
\newcount\xwebProgPenalty
        \xwebProgPenalty=\@secpenalty
        \divide\xwebProgPenalty by 2
\def\Y{%
    \if@noskipsec
    \else
        \par
        \penalty\xwebProgPenalty
        \smallskip
    \fi}
\def\xweb_CweaveBindings{%
    \ifx \xweb_UserBindings\relax
        \xweb_rebind
            % indentation and paragraph layout
            \xweb_IncrIndent    \1%
            \xweb_DecrIndent    \2%
            \xweb_ExprBreak     \3%
            \xweb_backup        \4%
            \xweb_OptBreak      \5%
            \xweb_break         \6%
            \xweb_BigBreak      \7%
            \xweb_noindent      \8%
            % C/C++ tokens
            \xwebRel               \?%
            \xwebAddress           \AND
            \xwebComplement        \CM
            \xwebScope             \DC
            \xwebEquiv             \E
            \xwebGe                \G
            \xwebRightShift        \GG
            \xwebNe                \I
            \xwebAssign            \K
            \xwebLeftShift         \LL
            \xwebMod               \MOD
            \xwebNull              \NULL
            \xwebNot               \R
            \xwebBinOr             \OR
            \xwebMemberRef         \PA
            \xwebThis              \this
            \xwebOr                \V
            \xwebAnd               \W
            \xwebXor               \XOR
            \xwebLE                \Z
            \xwebPointer           \MG
            \xwebPointerMemberRef  \MGA
            \xwebDecr              \MM
            \xwebIncr              \PP
            % more tokens
            \xwebId             \\%
            \xwebIdLetter       \|%
            \xwebRes            \&amp;%
            \xwebString         \.%             %% ( ...Emacs...
            \xwebStringBreak    \)%
            \xwebNumber         \T
            \xwebCombinedOp     \MRL
            % goes to TeX state
            \xwebComment        \C
            \xwebCxxComment     \SHC
            \xwebRefName        \X
            % CWEB tokens
            \xwebMacrosHere     \ATH
            \xwebDefine         \D
            \xwebFormat         \F
            \xwebIdCat          \J
            \xwebVerbString     \vb
            % cross reference tags
            \xwebChangeFlag     \*%
            \xwebCRAlso         \A
            \xwebCRsAlso        \As
            \xwebCRCite         \Q
            \xwebCRsCite        \Qs
            \xwebCRUse          \U
            \xwebCRsUse         \Us
            \xwebCREt           \ET
            \xwebCRsEt          \ETs
            % finish the list
            \stop\stop
        \def\xweb_UserBindings{%
            \xweb_RestoreBindings
            \let\xweb_UserBindings\relax
            }%
    \fi
    }
\newskip\xweb_SaveParskip
\newskip\xweb_SaveRightskip
\newcount\xweb_SaveSemSFCode
\newcount\xweb_SavePretolerance
\newcount\xweb_SaveHyphenpenalty
\newcount\xweb_SaveExhyphenpenalty

\def\xweb_SaveDocLayout{%
    \xweb_SaveParskip\parskip
    \xweb_SaveRightskip\rightskip
    \xweb_SaveSemSFCode\sfcode`; % changed by \xweb_ProgramLayout
    \xweb_SavePretolerance\pretolerance
    \xweb_SaveHyphenpenalty\hyphenpenalty
    \xweb_SaveExhyphenpenalty\exhyphenpenalty
    }
\def\xweb_RestoreDocLayout{%
    \parskip\xweb_SaveParskip
    \rightskip\xweb_SaveRightskip
    \sfcode`;=\xweb_SaveSemSFCode
    \pretolerance\xweb_SavePretolerance
    \hyphenpenalty\xweb_SaveHyphenpenalty
    \exhyphenpenalty\xweb_SaveExhyphenpenalty
    }
\def\xweb_ProgramLayout{%
    \ifx \xweb_DocLayout\relax
        \xweb_LayoutInit
        \xweb_SaveDocLayout
        \def\xweb_DocLayout{%
            \xweb_RestoreDocLayout
            \let\xweb_DocLayout\relax
            }%
        % set new values
        \parskip\z@skip
        \rightskip\z@ plus 100\p@ minus 10\p@
        \sfcode`;=3000          % same stretch factor as period.
        \pretolerance\@M
        \hyphenpenalty 9999     % strings can be broken this way
        \exhyphenpenalty\@M
    \fi
    }
\newdimen\xwebIndentUnit   \xwebIndentUnit=1em
\newdimen\xweb_indent
\newbox\xweb_bak        % backspace one unit
\newbox\xweb_bakk       % backspace two units
\def\xweb_LayoutInit{%
    \global\setbox\xweb_bak \hbox to -1\xwebIndentUnit{}%
    \global\setbox\xweb_bakk \hbox to -2\xwebIndentUnit{}%
    \global\let\xweb_LayoutInit\relax
    }
\def\B{%
    \if@noskipsec \hskip 1em \fi
    \xweb_program
    \xweb_indent 3\xwebIndentUnit  \hangindent\xweb_indent
    \ifvmode
         \if@noskipsec
            \indent             % add an empty documentation part
        \else
            \noindent \kern\xwebIndentUnit
        \fi
   \fi
}
\def\xweb_break{%       % forced break, between statements
    \ifmmode\else
        \endgraf        % in LaTeX it isn't sure what \par is really...
        \noindent
        \hangindent\xweb_indent  \kern\xweb_indent
        \copy\xweb_bakk % go back to basic indentation
        \ignorespaces
    \fi
    }
\def\xweb_OptBreak{%    % optional break between statements
    \hfil \penalty\m@ne
    \hfilneg  \kern .5em  \kern 2\xwebIndentUnit   % discarded on line break
    \copy\xweb_bakk
    \ignorespaces
    }
\def\xweb_BigBreak{%    % forced break and a little extra space
    \Y
    \xweb_break
    }
\def\xweb_ExprBreak#1{% % break with penalty #1 * 10
    \hfil \penalty#10
    \hfilneg            % discarded on line break
    }
\def\xweb_IncrIndent{%
    \global\advance\xweb_indent\xwebIndentUnit
    \hangindent\xweb_indent
    }
\def\xweb_DecrIndent{\global\advance\xweb_indent -\xwebIndentUnit}
\def\xweb_backup{\copy\xweb_bak}
\def\xweb_noindent{%                            % no indentation
    \hskip -\xweb_indent \hskip 2\xwebIndentUnit
    }
\let\xwebAnd=\land              % logical and, &amp;&amp;
\let\xwebEquiv=\equiv           % equiv sign, for ==
\let\xwebGe=\ge                 % greater or equal
\let\xwebLE=\le                 % less or equal
\let\xwebNe=\ne                 % unequal, !=
\let\xwebNull=\Lambda           % NULL pointer
\let\xwebNot=\lnot              % logical not, !
\let\xwebOr=\lor                % logical or, ||
\let\xwebXor=\oplus             % bitwise exclusive or, ^
\font\teni=cmmi10
\font\sevensy=cmsy7

\newbox\xweb_pointer            % pointer to struct component, -&gt;
\setbox\xweb_pointer=\hbox{\kern-2pt\lower3pt\hbox{\teni\char'176}\kern1pt}

\newbox\xweb_decr               % decrement, --
\setbox\xweb_decr=\hbox{%
            \kern .5pt
            \raise 1pt \hbox{\sevensy\char0 \kern-1pt\char0}%
            \kern .5pt
            }
\newbox\xweb_incr               % increment, ++
\setbox\xweb_incr=\hbox{%
            \kern .05em
            \raise .1em \hbox{$\scriptstyle {+}\kern -.1em{+}$}%
            \kern .05em
            }
\mathchardef\xwebAddress="2026  % `&amp;', as binary op
\let\xwebAssign==               % assignment
\let\xwebBinOr=\mid             % binary or
\def\xwebComplement{{\sim}}     % `~', as ordinary symbol
\def\xwebDecr{\copy\xweb_decr}  % decrement
\def\xwebIncr{\copy\xweb_incr}  % increment
\let\xwebLeftShift=\ll          % left shift, &lt;&lt;
\def\xwebMod{\mathbin{\hbox{\footnotesize\rm\%}}}       % modulo/remainder, %
\def\xwebMemberRef{\mathbin{.*}}        % ptr to member (on object)
\def\xwebPointer{\copy\xweb_pointer}
\def\xwebPointerMemberRef{\mathbin{\xwebPointer*}} % ptr to member (on ptr)
\def\xwebRel{\mathrel?}         % relation operator
\let\xwebRightShift=\gg         % right shift, &gt;&gt;
\def\xwebScope{\kern.1em{::}\kern.1em}  % scope resolution

\def\xwebThis{\xwebRes{this}}   % reserved identifier `this'
\def\xwebCombinedOp#1{\mathrel{\let\K==#1}}  % eg, += operator
\def\xwebId#1{\hbox{\it#1\/\kern.05em}} % identifier, more than one char
\def\xwebIdLetter#1{\hbox{$#1$}}        % identifier, one letter
\def\xwebRes#1{%                        % reserverd words and type names
    \hbox{\bf
        \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}%
        #1\/\kern .05em
        }%
    }
\def\xwebString#1{%
    \hbox{\tt
        \xweb_StringSetup
        #1\kern .05em
        }%
    }
\def\xweb_StringSetup{%
    \chardef\ =`\  %            % &lt;-- two spaces !
    \chardef\&amp;=`\&amp;
    \chardef\\=`\\
    \chardef\^=`\^
    \chardef\_=`\_
    \chardef\{=`\{
    \chardef\}=`\}
    \chardef\~=`\~
    \def\`{`}%
    }
\def\xwebStringBreak{\discretionary{\hbox{\tt\char`\\}}{}{}}
\def\xweb_oct{\hbox{$^\circ$\kern-.1em\it\aftergroup\?\aftergroup}}
\def\xweb_hex{\hbox{$^{\scriptscriptstyle\#}$\tt\aftergroup}}

\def\xwebNumber#1{%             % octal, hex, or decimal constant
    \hbox{%
        $%
            \def\?{\kern.2em}%
            \def\$##1{\egroup\sb{\,\rm##1}\bgroup}% suffix to constant
            \def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick)
            \let\~\xweb_oct \let\^\xweb_hex
            {#1}%
        $}%
    }
\def\xwebComment#1{%
    \5%                         % 0.5em will be discarded on line break
    \hskip 1.5em
    $/\ast\,$%
    {\xweb_tex
        \xwebCommentHook
        #1%
    }%
    $\,\ast/$%
    }
\let\xwebCommentHook\relax
\let\xwebCxxComment\xwebComment
\def\xwebIdCat{\xwebString{@\&amp;}}
\def\xwebMacrosHere{%
    \begingroup
        \def\xwebRefNumber##1{}%
        \xwebRefName :\xwebRefMacrosHere\X
    \endgroup
    }
\def\xwebRefMacrosHere{Preprocessor Definitions}
\def\xwebVerbString#1{{\fboxsep\tw@\p@ \fbox{\xwebString{#1}}}}
\def\xwebRefName#1:#2\X{%
    \ifmmode  \gdef\xweb_ToggleText{\null$\null}%
    \else  \let\xweb_ToggleText\relax
    \fi
    \xweb_ToggleText
    $\langle\,${\xweb_tex \xweb_CheckDot{#2}\xwebRefNumber{#1}}$\,\rangle$%
    \xweb_ToggleText
    }
\def\xwebRefNumber#1{%
    {\reset@font \footnotesize \kern .5em%
      \xwebSetModNrList#1.}}
\def\xwebSetModuleNumber#1{{\edef\tmpnr{#1}%
   \c@xwebModule=\tmpnr\relax
   \xweb_hlink{\thexwebModule}}}
\newtoks\xweb_toksA
\newtoks\xweb_toksB
\newtoks\xweb_toksC
\newtoks\xweb_toksD
\newcount\xweb_countA
\xweb_countA=0
\def\xweb_AddTokens#1#2{%
    \edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
\def\xweb_adn#1{\xweb_AddTokens{\xweb_toksC}{#1}%
    \global\xweb_countA=1\let\next=\maketoks}
\def\xweb_poptoks#1#2|ENDTOKS|{%
     \let\first=#1\xweb_toksD={#1}\xweb_toksA={#2}}
\def\maketoks{%
    \expandafter\xweb_poptoks\the\xweb_toksA|ENDTOKS|
    \ifx\first0\xweb_adn0
    \else\ifx\first1\xweb_adn1 \else\ifx\first2\xweb_adn2
    \else\ifx\first3\xweb_adn3 \else\ifx\first4\xweb_adn4
    \else\ifx\first5\xweb_adn5 \else\ifx\first6\xweb_adn6
    \else\ifx\first7\xweb_adn7 \else\ifx\first8\xweb_adn8
    \else\ifx\first9\xweb_adn9
    \else
        \ifnum0=\xweb_countA\else\xweb_makenote\fi
        \ifx\first.\let\next=\xweb_tdone\else
            \let\next=\maketoks
            \xweb_AddTokens{\xweb_toksB}{\the\xweb_toksD}
            \ifx\first,\xweb_AddTokens{\xweb_toksB}{\space}\fi
        \fi
    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
    \next
}
\def\xweb_makenote{\xweb_AddTokens{\xweb_toksB}%
    {\noexpand\xweb_TagSec{\the\xweb_toksC}}%
     \xweb_toksC={}\global\xweb_countA=0}
\def\xweb_tdone{\edef\st{\global\noexpand\xweb_toksA={\the\xweb_toksB}}\st}
\def\xweb_TagSec#1{\xwebSetModuleNumber{#1}}
\def\xwebSetModNrList#1.{%
   \setbox0=\hbox{\xweb_toksA={#1.}\xweb_toksB={}\maketoks}%
   \the\xweb_toksA}
\def\xweb_CheckDot#1{%
    \begingroup
      \let\.\@gobble
      \let\PB\relax
      \expandafter\def \expandafter\next \expandafter{#1}%
      \ifx \next\empty
         \gdef\next##1{\xwebString}%
      \else
         \global\let\next\relax
      \fi
    \endgroup
    \next #1
    }
\def\xwebDefine{\xweb_macro{\#define}}
\def\xwebFormat\\#1\\#2\par{\ifxwebHideFormats\else
  \xweb_macro{format}\\{#1} \\{#2}\par\fi}
\def\xweb_macro#1{%
    \global\advance\xweb_indent \tw@\xwebIndentUnit
    \xweb_IncrIndent
    \xwebRes{#1 }%              % &lt;-- blank!
    }
\def\xwebNumberListHangindent{2em}
\def\xwebCrossRef#1#2.{%
    \par\smallskip% (= \Y)
    \xweb_CR%
    \begingroup%
        \reset@font \footnotesize%
        \noindent \hangindent\xwebNumberListHangindent%
        #1~\xwebSetModNrList #2..\par%
    \endgroup%
    }%
\def\xwebCRAlso{\xwebCrossRef{See also section}}
\def\xwebCRsAlso{\xwebCrossRef{See also sections}}

\def\xwebCRCite{\xwebCrossRef{This code is cited in section}}
\def\xwebCRsCite{\xwebCrossRef{This code is cited in sections}}

\def\xwebCRUse{\xwebCrossRef{This code is used in section}}
\def\xwebCRsUse{\xwebCrossRef{This code is used in sections}}
\let\xwebChangeFlag=*
\def\xwebCREt{ and~}
\def\xwebCRsEt{, and~}
\newif\ifxweb_idxEntries
\newif\ifxweb_scnEntries
\newread\xweb_TmpFile
\def\xweb_HasEntries#1{%
    \openin\xweb_TmpFile \xwebJobname.#1\relax
    \ifeof \xweb_TmpFile
        \let\next\@defpar
        \message{No #1 file present for \xwebJobname !}
    \else
        \read\xweb_TmpFile to \next
    \fi
    \csname xweb_#1Entries%
            \ifx \next\@defpar  false%
            \else  true%
            \fi
        \endcsname
    \closein\xweb_TmpFile
    }
\newwrite\xweb_cont
\let\ZZ=\let % now you can \write the control sequence \ZZ
\def\xweb_contentsline#1#2#3#4{%
    \ifnum#2=0 \smallbreak\fi
    \hbox to \textwidth{\xweb_consetup{#2}#1
      \rm\leaders\hbox to .5em{.\hfil}\hfil\ %
      \xwebSetModuleNumber{#3}
      \hbox to3em{\hss#4}}}
\def\xweb_consetup#1{\ifcase#1 \bf % depth -1 (@**)
  \or % depth 0 (@*)
  \or \hskip2em % depth 1 (@*1)
  \or \hskip4em % depth 2 (@*2)
  \or \hskip6em % depth 3 (@*3)
  \or \hskip8em % depth 4 (@*4)
  \or \hskip10em % depth 5 (@*5)
  \else \hskip12em \fi} % depth 6 or more
\def\xwebContents#1{
    \def\readcontents{\IfFileExists{#1.con}{\input #1.con}{}}
    \begingroup
         \xwebContentsTop
         \ifnum\xweb_hypertype=2
            \pdfdest name{#1:contents} fith
            \pdfoutline goto name{#1:contents}{#1}
         \fi
         \hbox to \textwidth{\hfil
             \xwebSectionName\hbox to3em{\hss \xwebPageName}}
         \let\ZZ=\xweb_contentsline
         \readcontents\relax % read the contents info
         \xwebContentsBot    % print the contents page(s) and terminate
    \endgroup
}
\def\xwebSectionName{Section}
\def\xwebPageName{Page}
\def\xwebContentsTop{\vskip.2in}
\def\xwebContentsBot{\par\bigskip}
\def\xweb_InputWebfile#1{
    \def\setname##1.##2.##3/{\gdef\xwebJobname{##1}}
    \setname #1../
    \ifnum\c@xwebLopDepth &gt; -10       % entry to the list of programs:
       \addcontentsline{lop}{program}{\xwebJobname}
    \fi
    \def\xwebContentsTop{\centerline{\textbf{\xwebJobname}}\vskip.2in}
    \def\xwebContentsBot{\par\bigskip}
    \global\xweb_FirstModuletrue
    \begingroup
       \let\inx\relax
       \let\fin\relax
       \let\con\relax
       \let\ch\xwebCRChanged
       \input{#1}
       \ifon \end{xwebModule} \fi % end the last module (if it is on).
    \endgroup
    % process the index and list of refinements ...
    \ifxwebIndex\xweb_HasEntries{idx}%
        \ifxweb_idxEntries  \xwebIdIndex{\xwebJobname.idx}\fi\fi
    \ifxwebRef\xweb_HasEntries{scn}%
        \ifxweb_scnEntries  \xwebRefList{\xwebJobname.scn}\fi\fi
    % clean up:
    \closeout\xweb_cont
    \onfalse % don't end the last section when starting the first section of
             % the next web.
    \xweb_UserBindings % back to the main document
}
\def\xwebInputIndex#1{{
  \def\setname##1.##2\\{%
      \edef\xwebJobname{##1}
      \ifx\\##2\\%
      \edef\ext{idx}
      \else
      \edef\ext{\chop##2\\}%
      \fi}
  \def\chop##1.\\{##1}
  \expandafter\setname#1.\\
  \xwebIdIndex{\xwebJobname.\ext}
}}
\def\xwebInputReflist#1{{
  \def\setname##1.##2\\{%
      \edef\xwebJobname{##1}
      \ifx\\##2\\%
      \edef\ext{scn}
      \else
      \edef\ext{\chop##2\\}%
      \fi}
  \def\chop##1.\\{##1}
  \expandafter\setname#1.\\
  \xwebRefList{\xwebJobname.\ext}
}}
\def\ifstr#1#2#3{%
   \edef\xweb_tempa{#1}%
   \edef\xweb_tempb{#2}%
   \ifx\xweb_tempa\xweb_tempb #3\fi
   }
\def\webfile{\@ifnextchar[%
   {\xweb_file}{\xweb_file[]}}
\newif\if@opt
\def\xweb_off{\let\maybe=\iffalse}
\def\xweb_on{\let\maybe=\iftrue}
\def\xweb_file[#1]#2{
   \ifxweb_GlobalIndex\xwebIndextrue\else\xwebIndexfalse\fi
   \ifxweb_GlobalRef\xwebReftrue\else\xwebReffalse\fi
   \ifxweb_GlobalRagged\xwebRaggedtrue\else\xwebRaggedfalse\fi
   \ifxweb_GlobalOC\xweb_off\else\xweb_on\fi
   \ifxweb_GlobalCon\xwebContrue\else\xwebConfalse\fi
   \ifxweb_GlobalHideFormats\xwebHideFormatstrue\else
                            \xwebHideFormatsfalse\fi
   \xweb_hypertype=\xweb_GlobalHypertype
   \@for\xweb_opt:=#1\do{
     \typeout{webfiles option: \xweb_opt}
     \@optfalse
     \ifstr{\xweb_opt}{index}{\xwebIndextrue\@opttrue}
     \ifstr{\xweb_opt}{noindex}{\xwebIndexfalse\@opttrue}
     \ifstr{\xweb_opt}{reflist}{\xwebReftrue\@opttrue}
     \ifstr{\xweb_opt}{noreflist}{\xwebReffalse\@opttrue}
     \ifstr{\xweb_opt}{raggedbottom}{\xwebRaggedtrue\@opttrue}
     \ifstr{\xweb_opt}{flushbottom}{\xwebRaggedfalse\@opttrue}
     \ifstr{\xweb_opt}{onlychanges}{\xweb_off\@opttrue}
     \ifstr{\xweb_opt}{allsections}{\xweb_on\@opttrue}
     \ifstr{\xweb_opt}{nocon}{\xwebConfalse\@opttrue}
     \ifstr{\xweb_opt}{contents}{\xwebContrue\@opttrue}
     \ifstr{\xweb_opt}{hideformats}{\xwebHideFormatstrue\@opttrue}
     \ifstr{\xweb_opt}{showformats}{\xwebHideFormatsfalse\@opttrue}
     \ifstr{\xweb_opt}{hyperref}{\xweb_hypertype=1\@opttrue}
     \ifstr{\xweb_opt}{pdftex}{\xweb_hypertype=2\@opttrue}
     \ifstr{\xweb_opt}{nohype}{\xweb_hypertype=0\@opttrue}
     \if@opt\else\PackageError{webfiles}{%
          Unknown option for the \protect\webfile\space command
        }{Possible options are: index, noindex,
          reflist, noreflist, \MessageBreak
          raggedbottom, flushbottom, onlychanges,
          allsections,\MessageBreak
          nocon, contents, hideformats, showformats,
          hyperref, pdftex, nohype}
     \fi
   }
   \xweb_SetupHrefs
   \xweb_InputWebfile{#2}}
\let\cwebfile\webfile
\def\xwebCRChanged{%
    \xwebCrossRef{The following sections were changed by the change file:}%
    \let\*\relax
    }
\newtoks\xwebIndexIntro
        \xwebIndexIntro={}
\def\xwebIndexName{Index of \texttt{\xwebJobname}}
\def\xweb_IndexTop{
    \xweb_tex
    \par\vskip 1cm plus 10mm minus 5mm\noindent
    {\bf \xwebIndexName}%\nopagebreak\par\medskip\nopagebreak
                        %% skip already inserted by xweb_twocolumn env.
    \edef\intro{\the\xwebIndexIntro}% % is a local def
    \ifx \intro\empty
    \else
       \noindent\the\xwebIndexIntro\unskip
       \par\medskip
    \fi
}
\newif\ifxweb_multicol \xweb_multicolfalse
\IfFileExists{multicol.sty}{
  \if@twocolumn\else\xweb_multicoltrue\fi
}{}
\ifxweb_multicol
  \newenvironment{xweb_twocolumn}{\begin{multicols}{2}}{\end{multicols}}
\else
  \newenvironment{xweb_twocolumn}{
      \if@twocolumn\else
        \columnseprule\z@
        \columnsep 35\p@          % value is from article.sty
      \fi
      \twocolumn%
  }{
      \onecolumn}
\fi
\def\xwebJobName{noname}
\def\xweb_SetupIndex{%
    \begin{xweb_twocolumn}[\xweb_IndexTop]
    \ifnum\xweb_hypertype=2
       \pdfdest name{\xwebJobname:index} fith
       \pdfoutline goto name{\xwebJobname:index}{Index}
    \fi
    % go to CR mode
    \xweb_CR
    \message{*index: }% % tell the user what we're doing
    % paragraph layout
    \begingroup
    \parskip \z@ plus .5\p@
    \parindent\z@
    \rightskip \z@ plus 2.5em
    \parfillskip \z@ plus .6\hsize
    \tolerance\@M \hyphenpenalty\@M
    % bindings
    \let\I\xwebIndexEntry
    \let\[\xwebIndexDeclared
    \let\*\xwebLapStar
}
\def\xweb_FinishIndex{
    \endgroup
    \end{xweb_twocolumn}
}
\def\xwebIdIndex#1{%
    \xweb_SetupIndex
    \@input{#1}
    \xweb_FinishIndex
}
\def\xwebIndexEntry#1,#2.{%
    \par
    \hangindent\xwebNumberListHangindent
    \leavevmode
    \xweb_CheckDot{#1}:\quad\xwebSetModNrList #2.
    }
\def\xwebIndexDeclared#1]{\underline{#1}}
\def\9#1{}
\def\xwebReflistName{List of Refinements in \texttt{\xwebJobname}}
\def\xwebRLCite{\xwebCrossRef{Cited in section}}
\def\xwebRLsCite{\xwebCrossRef{Cited in sections}}
\def\xwebRLUse{\xwebCrossRef{Used in section}}
\def\xwebRLsUse{\xwebCrossRef{Used in sections}}
\def\xweb_SetupReflist{%
    \vskip 3ex plus 7ex minus 1ex
    \xweb_tex
    \noindent
    {\bf \xwebReflistName}\nopagebreak\par\bigskip\nopagebreak
    \ifnum\xweb_hypertype=2
       \pdfdest name{\xwebJobname:reflist} fith
       \pdfoutline goto name{\xwebJobname:reflist} {Refs}
    \fi
    \xweb_CR
    \message{*list of refinements: }%
    % paragraph layout: like in index, but
    \parfillskip\@flushglue
    \begingroup    % different bindings...
       \def\I{\par \hangindent\xwebNumberListHangindent}%
       \def\xwebCrossRef##1##2.{\quad {\reset@font\footnotesize
          ##1~\xwebSetModNrList ##2..}}%
       \def\Q {\xwebRLCite}%
       \def\Qs{\xwebRLsCite}%
       \def\U {\xwebRLUse}%
       \def\Us{\xwebRLsUse}%
       \let\*\xwebChangeFlag
}
\def\xwebRefList#1{%
       \xweb_SetupReflist
       \@input{#1}
    \endgroup
    }
\def\ATL{\par\noindent\bgroup\catcode`\_=12 \postATL} % print @l in limbo
\def\postATL#1 #2 {\bf letter \\{\uppercase{\char"#1}}
   tangles as \tentex "#2"\egroup\par}
\def\noATL#1 #2 {}
\def\noatl{\let\ATL=\noATL} % suppress output from @l
\ProcessOptions
\ifxweb_multicol
    \RequirePackage{multicol}
\fi
\catcode`\_=\xwebCatUsCode
\endinput
%%
%% End of file `webfiles.sty'.
</pre></body></html>