From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 web/webfiles/webfiles.sty | 1002 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 1002 insertions(+)
 create mode 100644 web/webfiles/webfiles.sty

(limited to 'web/webfiles/webfiles.sty')

diff --git a/web/webfiles/webfiles.sty b/web/webfiles/webfiles.sty
new file mode 100644
index 0000000000..b39a8a2d33
--- /dev/null
+++ b/web/webfiles/webfiles.sty
@@ -0,0 +1,1002 @@
+%%
+%% 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                   % <-- space!!
+    { \let\*=\empty%
+      \xdef\xweb_secno{#2}% get the section number
+    }%
+    \ifnum\xweb_secno>1
+       \ifnum \xwebGroupLevel<\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 > #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 > #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>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 <= 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>\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            \&%
+            \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, &&
+\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, ->
+\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  % `&', 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, <<
+\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, >>
+\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\ =`\  %            % <-- two spaces !
+    \chardef\&=`\&
+    \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{@\&}}
+\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 }%              % <-- 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 > -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'.
-- 
cgit v1.2.3

