summaryrefslogtreecommitdiff
path: root/web/webfiles/webfiles.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /web/webfiles/webfiles.sty
Initial commit
Diffstat (limited to 'web/webfiles/webfiles.sty')
-rw-r--r--web/webfiles/webfiles.sty1002
1 files changed, 1002 insertions, 0 deletions
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'.