% FTANGLE v1.30--beta, created with SunOS/UNIX on "Tuesday, January 26, 1993 % at 16:30." % COMMAND LINE: "ftangle fwebmac -# -=fwebmac.sty" % RUN TIME: "Wednesday, February 3, 1993 at 18:59." % WEB FILE: "fwebmac.web" % CHANGE FILE: (none) %% --- THIS IS fwebmac.sty --- %% This file must be included into all .tex files produced by FWEAVE. For %% the source for this file, please see fwebmac.web. %% --------------------------------------------------------------------------- %% If it's not defined yet, load in the macros. \ifx\FWEBisloaded\relax\endinput\else\let\FWEBisloaded\relax\fi \def\FWEBversion{1.30--beta} \def\FWEBdate{January 1, 1993} \def\LaTeX{{\rm L\kern-0.36em\raise0.3ex\hbox{\Csc a}\kern-0.15em T% \kern-0.1667em \lower0.7ex\hbox{E}\kern-0.125em X}} \newif\ifLaTeXisloaded \ifx\pageno\undefined \LaTeXisloadedtrue \fi \ifx\selectfont\undefined\else \fontsize{10}{12pt}\rm % The standard font for bulk of document. \fi \catcode`\@=11 \ifLaTeXisloaded \let\pageno\c@page% \WEB\ has its own name for the page number. \def\FWEBend{\let\clearpage\newpage% Otherwise, one gets a blank page. \end{document}}% \LaTeX\ redefines |\end|. \else \let\FWEBend\end \fi \catcode`\@=12 \long\def\comment#1\endcomment{} \def\WEB{\Wtypewriter{WEB}} \def\FWEB{\Wtypewriter{FWEB}} \def\CWEB{\Wtypewriter{CWEB}} \def\TANGLE{\Wtypewriter{TANGLE}} \let\Tangle\TANGLE \def\WEAVE{\Wtypewriter{WEAVE}} \let\Weave\WEAVE \def\FTANGLE{\Wtypewriter{FTANGLE}} \def\FWEAVE{\Wtypewriter{FWEAVE}} \def\C{C} \def\Cpp{\C{\tt ++}} \def\FORTRAN{{\Csc Fortran}} \let\Fortran\FORTRAN \def\MAKE{{\tt MAKE}} \let\Make\MAKE \def\RATFOR{{\Csc Ratfor}} \let\Ratfor\RATFOR \let\TEX\TeX \def\UNIX{{\SC UNIX}} \let\Unix\UNIX \chardef\other=12 \let\amp\& \let\at\@ \let\bslash\\ \let\caret\^ \let\dollar\$ \let\dstar\* \let\equals\= \let\leftbrace\{ \let\period\. \let\rightbrace\} \let\vertbar| \let\PM\# \let\PC\% \newdimen\pardimen \dimen0=\normalbaselineskip \parskip=\dimen0 plus 1pt %% If you don't like spaces between paragraphs, change |\pardimen| to |0pt|. \pardimen=\parskip \parskip 0pt% No stretch between paragraphs %% Indentation for the \TeX\ part is handled in a separate variable %% |\TeXindent| from the variable |\notch| used for definition and code parts. \newdimen\TeXindent \TeXindent 1em% For paragraphs in the \TeX\ part. \ifx\selectfont\undefined \let\mainfont\tenrm \let\cmntfont\tenrm \font\eightrm=cmr8 \let\SC\eightrm % \font\titlefont=cmssbx10 scaled \magstep2% Sans serif \font\titlefont=cmss10 scaled \magstep2% Sans serif \font\ttitlefont=cmtt10 scaled\magstep2% Typewriter type \font\tentex=cmtex10 % \TeX\ \.{extended char. set} (used in strings) \font\Csc=cmcsc10 % Caps/small caps; sometimes used for comments. \font\tenbfit=cmbxti10 % \&{Intrinsic functions} %% Used for module-number subscript: \font\seventi=cmti7 \font\sevenrm=cmr7 \font\sevenbf=cmbx7 %% For special handling of array indices: \font\sevenit=cmti7 \scriptfont\itfam=\sevenit evenit dices \scriptscriptfont\itfam=\sevenit \else % NFSS \def\mainfont{\fontfamily{\rmdefault}\fontseries{m}\fontshape{n}% \normalsize} \let\cmntfont\mainfont \def\eightrm{\fontfamily{\rmdefault}\fontseries{m}\fontshape{n}% \footnotesize} \let\SC\eightrm \def\titlefont{\fontfamily{\sfdefault}\fontseries{\bfdefault}\fontshape{n}% \Large} \def\ttitlefont{\fontfamily{\ttdefault}\fontseries{m}\fontshape{n}\Large} \def\tentex{\fontfamily{\ttdefault}\fontseries{m}\fontshape{n}\normalsize} \def\Csc{\fontfamily{\rmdefault}\fontseries{m}\fontshape{\scdefault}% \normalsize} \def\tenbfit{\fontfamily{\rmdefault}\fontseries{\bfdefault}% \fontshape{\itdefault}\normalsize} \def\seventi{\fontfamily{\rmdefault}\fontseries{m}\fontshape{\itdefault}% \scriptsize} \def\sevenrm{\fontfamily{\rmdefault}\fontseries{m}\fontshape{n}\scriptsize} \def\sevenbf{\fontfamily{\rmdefault}\fontseries{\bfdefault}\fontshape{n}% \scriptsize} \def\fiveti{\fontfamily{\rmdefault}\fontseries{m}\fontshape{\itdefault}% \tiny} \def\fiverm{\fontfamily{\rmdefault}\fontseries{m}\fontshape{n}\tiny} \def\fivebf{\fontfamily{\rmdefault}\fontseries{\bfdefault}\fontshape{n}% \tiny} \def\tensy{\fontfamily{cmsy}\fontseries{m}\fontshape{n}\normalsize} \def\pbf{\fontfamily{\rmdefault}\fontseries{\bfdefault}\fontshape{n}% \selectfont} \def\ptt{\fontfamily{\ttdefault}\fontseries{m}\fontshape{n}\selectfont} \fi %% The next isn't really sufficient; this ought to be put into %% the definitions of |\tenpoint|, |\twelvepoint|, etc. \let\bfit\tenbfit \def\Wshort#1{\leavevmode\hbox{$#1$}}% One-letter identifiers such % as~\Wshort{x} look better this way. \def\Wid#1{\leavevmode\hbox{\it#1\/\kern.05em}}% Italic type for ordinary % identifiers such as \Wid{test}. %% By default, macros are formatted the same way as ordinary identifiers. %% However, you can change the following definitions to get special effects. %% Either make your own version of |fwebmac.sty| (use a change file with %% |fwebmac.web|), or redefine |\WidD| and/or |\WidM| with an \.{@l} command. \let\WidD\Wid % Outer macro \let\WidM\Wid % WEB macro \def\Wreserved#1{\leavevmode\hbox{\def\\{\tt\BS}\bf#1\/}}% Boldface type % for reserved words such as \&{integer}. \def\Wintrinsic#1{\leavevmode\hbox{\def\\{\tt\BS}\bfit#1\/\kern.05em}}% % Library/intrinsic function name such as \@{sin}. %% In the following, we use |\gdef| instead of |\global\let| because we %% might want to change the definition of, e.g., |\WidM| with an \.{@l} %% command, which comes \It{after} the |\Wbegin| statement. \def\Wequate#1#2#3#4#5#6#7#8{% \gdef#1{\Wreserved}% |\&| by default. \gdef#2{\Wshort}% |\|| by default. %% Don't reorder the following three statements! In case arguments 3--5 are %% identical, we want the ordinary identifier to win. \gdef#5{\WidM} % |\\| by default. \gdef#4{\WidD} % |\\| by default. \gdef#3{\Wid} % |\\| by default. \gdef#6{\Wintrinsic} % |\@| by default. \gdef#7{\Wkeyword} % |\.| by default. \gdef#8{\Wtypewriter}} % |\.| by default. \def\Wzero{0} \def\WIN#1#2{\ifmmode\def\ZZ{}\else\def\ZZ{\null$\null}\fi \ZZ_{\def\next{#2}\ifx\next\Wzero{\bullet}\else\WINo{#1}{#2}\fi}\ZZ} %% Format the module number subscript. \def\WINo#1#2{% \ifcase#1\underline{\hbox{\sevenrm#2}}% Generic name (\.{@[}). [0] \or\hbox{\sevenrm#2}% Function name. [1] \or\underline{\hbox{\seventi#2}}% WEB macro. [2] \or\hbox{\seventi#2}% Outer macro. [3] \or\underline{\hbox{\sevenbf#2}}% \.{@`}. [4] \or\hbox{\sevenbf#2}% \&{typedef}. [5] \else{#2}% Error trap. \fi} \def\Wtypewriter#1{\relax\ifmmode\gdef\YY{\null$\null}\else\gdef\YY{}\fi \YY{\leavevmode\INITSTR#1}\YY} \let\Wkeyword\Wtypewriter \def\INITSTR{% \tentex % Typewriter type for strings \let\\=\BS % Backslash in a string: '\.\\'. \let\'=\RQ % Right quote in a string: '\.\''. \let\`=\LQ % Left quote in a string: '\.\`'. \let\{=\LB % Left brace in a string: '\.\LB'. \let\}=\RB % Right brace in a string: '\.\RB'. \let\~=\TL % Tilde in a string: '\.\~'. \let\ =\SP % Space in a string: '\.\ '. \let\_=\UL % Underline in a string: '\.\_'. \let\&=\AM % Ampersand in a string: '\.\&'. \def\0{\discretionary{\BS}{}{}}% FWEB inserts this automatically every % so often so very long strings will break. Broken strings will % be marked by a backslash. \def\1{,\0}% FWEB replaces commas in strings by this, so strings tend to % break after commas. \let\2\space % Ordinary space after control sequences in \TeX. } \def\#{\hbox{\tt\char35}}% Parameter sign: '\#'. \def\${\hbox{\tt\char36}}% Dollar sign: '\$'. \def\%{\hbox{\tt\char37}}% Percent sign: '\%'. \def\^{\ifmmode\raise0.45ex\hbox{$\,\scriptstyle\mathchar"25E\,$}% \else\char`^ \fi}% Pointer or % hat: '\^'. % Circumflex accents can be obtained from |\^^D| instead of |\^| \def\AT!{@}% At sign for control text: '\AT!' \chardef\asterisk=`\* \def\ast{\ifmmode{\displaystyle\mathchar"2203}\else\asterisk\fi} \chardef\AM=`\&% Ampersand character in a string: '\.\&'. \chardef\BS=`\\% Backslash in a string: '\.\\'. \def\ttBS{{\tt\BS}}% Literal backslash: '\ttBS'. \chardef\LB=`\{% Left brace in a string: '\.\LB'. \def\LQ{{\tt\char'22}}% Left quote in a string: '\.\`'. \chardef\RB=`\}% Right brace in a string: '\.\RB'. \def\RQ{{\tt\char'23}}% Right quote in a string: '\.\''. \def\SP{{\tt\char`\ }}% (Visible) space in a string: '\.\ '. \chardef\TL=`\~% Tilde in a string: '\.\~'. \chardef\UL=`\_% Underline character in a string: '\.\_'. \def\LA{\hbox{\LQ}}% Left quote outside a string \newbox\rulebox \newcount\ruleno \def\rules#1{\leavevmode \ruleno=0 \rlap{\vtop to 0pt{\null \def\R{\setbox0=\hbox{\the\ruleno}% \rlap{\vrule height0pt depth#1}% \kern-0.5\wd0\copy0\kern-0.5\wd0 \advance\ruleno by1 \hskip1em} \rlap{\R\R\R\R\R\R\R} \vss}}} \newdimen\notch \notch 1em \newcount\globalindent \globalindent=3 % Global indentation in notches. \newcount\ind % Current indentation in notches. \newcount\lastind % Used for preprocessor commands. \def\saveind{\global\lastind=\ind} \newbox\bak \setbox\bak=\hbox to -\notch{}% Backspace one notch. \newbox\bakk \setbox\bakk=\hbox to -2\notch{}% Backspace two notches. \def\1{\global\advance\ind by1\hangindent\ind\notch}% Indent one more notch \def\2{\global\advance\ind by-1{}}% Indent one less notch \def\3#1{\hfil\penalty#10\hfilneg}% Optional break within a statement \def\4{\copy\bak}% Backspace one notch \def\5{\hfil\penalty-1\hfilneg \kern2.5\notch\copy\bakk \yskipfalse\ignorespaces} \def\6{\ifmmode\else\par \hangindent\ind\notch \noindent \kern\ind\notch \copy\bakk \ignorespaces\fi} \def\7{\WY\6}% Forced break and a little extra space \def\8{\hskip-\ind\notch \hskip 2\notch} \newif\ifyskip \def\yskip{\medskip} \def\Hspace{\hbox{ }} \def\WPR#1{\copy\bakk \saveind% |\global\advance\ind by 2| \1\Wreserved{@#1}\Hspace} \def\WPs{\global\ind=\lastind} \def\defin#1#2{\4\saveind \1\Wreserved{#1}\hbox{$^{\rm#2}$}\Hspace}% Begin @d, @m, or @f. \def\note#1#2.{\WY\noindent{\hangindent2em\baselineskip10pt\eightrm#1 #2.\par}} \def\lapstar{\rlap{*}} %% If there's a current include file, it's printed at the start of each % section. \def\includefile{} \def\WIF#1{\def\includefile{#1}} \def\startsection{\WQ\noindent{\let\*=\lapstar\bf\modstar.% \ifx\includefile\empty\else\ [{\tt\includefile}]\fi\quad}} \def\skipbrace#1{\catcode`\{=1 } \def\WC{\Wcmnt{\ast}{\finishcomment}} \def\Wc{\Wcmnt{/}{\XX}} \def\Wcmnt#1#2{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi% C-style cmnt \XX\hfil\penalty-1\hfilneg \ifyskip\else\quad\fi$/#1\,$% \bgroup\cmntfont % The user can redefine the comment font |\cmntfont|. \aftergroup#2% \catcode`\{=\other\skipbrace} \def\finishcomment{$\,\ast/$\XX} \def\Wx#1{\kern-0.5\notch\hbox{\tt\%}} \def\WCDIR#1{\WPR!\Wtypewriter{#1}\WPs} \def\WCD#1{\ifmmode\hbox\fi{\ignorespaces#1}} \def\WD:#1:{\defin{@D}{#1}}% Outer macro definition: `\.{@D}' \def\Wd:#1:{\defin{@d}{#1}}% Outer macro definition: `\.{@d}' \def\WUd:#1:{\defin{@u}{#1}}% Undef outer macro: `\.{@u}'. \def\WMD{\defin{@M}{}}% WEB macro definition: `\.{@M}'. \def\WMd{\defin{@m}{}}% WEB macro definition: `\.{@m}'. \def\WE:#1:{\WPR{\##1}}% WEB preprocessor command: `\.{@\#if\dots}'. \def\WF:#1:{\defin{@f}{#1}}% Format definition: `\.{@f}'. \def\Wl:#1:{\defin{@l}{#1}}% Limbo text definition: `\.{@l}'. \def\Wv:#1:{\defin{@v}{#1}}% Operator overloading: `\.{@v}'. \def\WWW:#1:{\defin{@W}{#1}}% Identifier overloading: `\.{@W}'. \def\Ww:#1:{\defin{@w}{#1}}% Identifier overloading: `\.{@w}'. \outer\def\WM#1.{\MN#1.\Wmark\ifon\Wskip\startsection\ignorespaces} \newcount\Wss % Counter for the dots. \newif\ifdotsafter % Do subsection dots come after or before the section name? \dotsafterfalse \ifdotsafter % ``@* NAME...'' \def\Wbefore:#1.{\Wdefname#1.\Wdot}% \def\Wafter{\WNss}% \else % ``@*.. NAME.'' or ``@*2 NAME.'' \def\Wbefore: #1{\def\next{\Wafter#1}% Case for neither dot nor number. \ifx#1.\def\next{\Wdot.}% Count arbitrary dots. \else\ifx#11\Wsectionnum1% \else\ifx#12\Wsectionnum2% \else\ifx#13\Wsectionnum3% \else\ifx#14\Wsectionnum4% Highest numerical level allowed. \fi\fi\fi\fi\fi \next}% \def\Wafter#1.{\Wdefname#1.\WNss}% Executed after figuring out level. \fi \def\Wsectionnum#1{\Wss#1\let\next\Wafter} % Assign numerical section number. \def\Wdefname#1.{\def\Wname{#1}} % Remember name of section. \outer\def\WN#1.{\MN#1.\Wss=0\Wbefore:} % Begin a starred section. \def\Wdot{\futurelet\next\WNs} \def\WNs{\ifx\next.\advance\Wss by 1\let\next\Wnext\else\let\next\Wafter\fi \next} \def\Wnext#1{\Wdot} %% Page break for major sections. \def\Wsectionbreak{\ifcase\Wss\vfil\eject\fi} %% Running headline. \def\rhead{\ifcase\Wss \uppercase{\ignorespaces\Wname}% \else \ignorespaces\Wname% \fi}% Define running headline. \let\WZ\let % Now you can |\send| the control sequence |\WZ| \let\WIM\let % This macro is made temporarily unexpandable; see |\WZ|. \def\WNss{% \Wmark % Can't put this in |\MN| since |\rhead| must be defined first. \Wsectionbreak % Typeset the break between sections. \message{*\modno}% Progress report to the terminal. \ifon \ifcase\Wss\else\Wskip\fi \startsection{\bf\ignorespaces\Wname.\quad}% {\def\WIN{\WIM}% \edef\next{\write\cont{\WZ{\the\Wss}{\Wname}% {\modno}{\noexpand\the\pageno}}}\next}% % To contents file |CONTENTS.tex|. \ignorespaces} \def\WmarkN{\def\Wmark{{\def\WIN{\WIM} \mark{\modno\noexpand\else\rhead}}}} \ifx\selectfont\undefined \WmarkN \else \def\Wmark{{\def\WIN{\WIM}\let\protect\noexpand \mark{\modno\noexpand\else\rhead}}} \fi \def\Wmodno{\iftrue\topmark\fi}% Extracts the left-hand part of the mark. \def\Whead{{\let\WIM\WIN \expandafter\iffalse\topmark\fi}}% Extracts the right-hand part. \catcode`\@=11 \def\MN#1.{\par \parskip=\pardimen % Reset to \TeX\ spacing \parindent=\TeXindent {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}} \ifLaTeXisloaded \xdef\@currentlabel{\modno}% \fi \ifx\modno\modstar \onmaybe \else\ontrue \fi} \catcode`\@=12 \def\WDP#1{\ifx E#1\else{\tt#1}\fi}% Used in the exponent macro below. \def\WO#1{% {% Make the next definitions local. \let\-\_% \let\d\$% \def\\{\let\_\-\let\$\d}% \def\?{\kern.2em}% \def\###1{\kern0.1em{\tt \ifcase##1F\or L\or U\or UL\else?\fi}}% C~constant. \def\^##1{\cdot 10^{\aftergroup}\aftergroup\WDP\aftergroup##1}% Power of ten \def\_{_{\\\rm\aftergroup}}% Fortran-90 kind parameter. \def\%{{\rm H}\hbox{\aftergroup}\Wtypewriter{\aftergroup}}% Hollerith % constant \def\&{0{\tt b}}% Binary constant. \def\~{\hbox{\rm\char'23\kern-.2em\it\aftergroup\?\aftergroup}}% Octal \def\`{\hbox{\rm\char"7D\tt\aftergroup}}#1}}% Double quotes for hex constant \def\WPr{\global\ind=\globalindent \1} \def\WP{\parskip=0pt \parindent=\notch \rightskip=0pt plus 100pt minus 10pt \sfcode`;=3000 \pretolerance 10000 \WPr \leavevmode\kern\notch} \def\WQ{\rightskip=0pt \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 } \def\WA{\note{See also}}% Cross-reference for multiply defined section names \def\WB{\mathopen{\Wtypewriter{@/\ast}}}% Begin controlled comment \let\WG\ge % Greater than or equal sign: '$\WG$'. \let\WI\neq % Unequal sign: '$\WI$'. (Better reserve |\ne| for the % electron density~$n_e$.) \def\WJ{\Wtypewriter{@\&}}% TANGLE's join operation: '\WJ'. \let\WK\gets % Left arrow: '$\WK$'. \let\WL\le % Less than or equal sign: '$\WL$'. \def\Wskip{\vfil\penalty-100\vfilneg \vskip12ptminus3pt} \def\Wskipped#1{\8\mathhexbox278.\quad\Wtypewriter{@I "#1"}\ \ {\it Section(s) skipped}\dots\WP} \let\WPtr\Rightarrow % Fortran's stupid pointer assignment statement: % '$\WPtr$'. \let\WR=\lnot % Logical not: '$\WR$'. \let\WS=\equiv % Equivalence sign: '$\WS$'. \def\WT{\mathclose{\Wtypewriter{@\ast/}}}% Terminate controlled comment \def\WU{\note{This code is used in}}% Cross-reference for uses of sections \let\WV\lor % Logical or: '$\WV$'. \let\WW=\land % Logical and: '$\WW$'. \def\WX#1:#2\X#3\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi \XX$\langle\,$#2{\eightrm\kern.5em#1}$\,\rangle^{\rm #3}$\XX} \def\WY{\par\parskip=0pt\yskip} \def\?{\mathrel?} \def\Colon{\ifmmode\colon\else:\fi} \def\CC{\mathord{::}}% '$x\CC y$'. \def\CF{{}\mathbin{::}{}}% '$x\CF y$'. \def\=#1{\kern2pt\hbox{\vrule\vtop{\vbox{\hrule \hbox{\strut\kern2pt\Wtypewriter{#1}\kern2pt}} \hrule}\vrule}\kern2pt} \let\~=\ignorespaces \let\*=* \def\PQ{\mathrel{+\mathord\equiv}}% '$\PQ$'. \mathchardef\TLD="0218% '$\TLD$'. \def\PP{\mathord{++}}% '$\PP$'. \def\MM{\mathord{--}}% '$\MM$'. \def\MG{\mathord{\to}}% '$\MG$'. \def\LP{(}% Must be |\def|, not |\let|. \def\ISL#1#2]{\def\next{#1}} \def\EE#1{\ISL#1]\ifx\next\LP\EXP[#1]\else\EXP[(#1)]\fi} \def\EXP[(#1)]{^{#1}} \let\SlSl\parallel% Concatenation: '$\SlSl$'. \def\LS{\mathopen{({/}}} \def\SR{\mathclose{{/})}} \def\NN{\hbox{\#\#}}% '\NN'. \def\NP{\hbox{\#!}}% '\NP'. \def\NC{\hbox{\#:}}% '\NC'. \def\ND{\hbox{\#.}}% '\ND'. \def\Nq{\hbox{\#'}}% '\Nq'. \def\NQ{\hbox{\#"}}% '\NQ'. \def\FALSE{{\cal F}}% '$\FALSE$'. \def\TRUE{{\cal T}}% '$\TRUE$'. \def\Wcp{\mathrel{+{=}}} \let\PE\Wcp % `$x\PE y$'. \def\Wcm{\mathrel{-{=}}} \let\ME\Wcm % `$x\ME y$'. \def\Wcs{\mathrel{\ast{=}}} \let\TE\Wcs % `$x\Wcs y$'. \def\Wcv{\mathrel{/{=}}} \let\FE\Wcv % `$x\FE y$'. \def\Wcd{\mathrel{\%{=}}} \let\CE\Wcd % `$x\Wcd y$'. \def\Wcx{\mathrel{\^\!{=}}}% `$x\Wcx y$'. \def\Wca{\mathrel{\amp{=}}}% `$x\Wca y$'. \def\Wco{\mathrel{\OR{=}}}% `$x\Wco y$'. \def\Wcg{\mathrel{\GG\!{=}}}% `$x\Wcg y$'. \def\Wcl{\mathrel{\LL\!{=}}}% `$x\Wcl y$'. \def\EQV{\mathrel{?{=}}}% `$x\EQV y$'. \def\NEQV{\not\equiv}% `$x\NEQV y$'. \def\MOD{\mathrel{\%}}% `$x\MOD y$'. \def\OR{{\,|\,}}% `$x\OR y$'. \def\AND{{\,\amp\,}}% `$x\AND y$. \def\GG{\mathrel{>\!>}}% `$x\GG y$'. \def\LL{\mathrel{<\!<}}% `$x\LL y$'. \def\HE{\mathrel{\uparrow=}}% `$x\HE y$'. \let\openbraces=\{ \let\closebraces=\} \def\{{\ifmmode\openbraces\else$\openbraces$\fi} \def\}{\ifmmode\closebraces\else$\closebraces$\fi} \def\WBM{\6\8\Wreserved{@(}} \def\WEM{\6\8\Wreserved{@)}} \def\Wblock#1{\Wc\bgroup\ Block #1\egroup}% `\Wblock{99}' \newif\ifop \newbox\dotbox \def\Wunknown#1{\={??#1??}}% For unknown dot constant. {\catcode`\_=11 \gdef\newop#1#2#3{% \edef\next{\def\expandafter\noexpand\csname _#1_#2\endcsname}% \next{#3}} \gdef\newbinop#1#2#3{% \edef\next{\def\expandafter\noexpand\csname _#1_#2\endcsname}% \next{\mathrel{#3}}} \gdef\newunop#1#2#3{% \edef\next{\def\expandafter\noexpand\csname _#1_#2\endcsname}% \next{\mathbin{#3}}} \gdef\Wop#1#2{\setbox\dotbox\hbox{\tt .#1.}% \edef\nxt{\expandafter\noexpand\csname _#1_#2\endcsname}% \edef\ifnxt{\noexpand\ifx\expandafter\noexpand\csname _#1_#2\endcsname}% \ifnxt\empty \def\next{\box\dotbox}% Macro not defined; just use \.{.NAME.}. \else \def\next{\futurelet\nextchar\Woq}% Be careful about |\EE|. \fi \next}% } \global\let\Wb\Wop \global\let\Wu\Wop \let\Lbrace{ \def\Woq{\ifx\nextchar\Lbrace \let\next\nxt % There's an argument coming up. \else \ifop \def\next{\nxt{}\equiv\box\dotbox}% \else \let\next\nxt \fi \fi \opfalse \next} \newtoks\WARRAYarga \newtoks\WARRAYargb \def\WXA#1{\begingroup %% We don't want the identifiers to be in hboxes, because we want to get %% |\scriptstyle| for subscripts. (We should always be in math mode here.) \def\Wshort##1{##1}% \def\Wid##1{{\it ##1\/\kern.05em}}% \global\WARRAYarga{#1}% \futurelet\Wnext\WARRAYm} \def\WARRAYm{\ifx\Wnext\WXA \global\let\Wnext\WARRAYn% Multiple indices in C: a[i][j][k] \else \global\let\Wnext\relax \WARRAY{\the\WARRAYarga}% Typeset the accumulated indices. \fi \endgroup \Wnext} \def\WARRAYn#1#2{\WARRAYargb{#2}% \edef\Wnext{\noexpand\WXA{\the\WARRAYarga,\the\WARRAYargb}}%Concatenate \Wnext} %% Change the following definition to get indices printed in interesting ways. \def\WARRAY#1{[#1]}% Default definition. \def\WSUB#1{_{\scriptstyle#1}}% E.g., subscript indices. \def\Wouto#1#2{\Wreserved{@#1}\Hspace\Wtypewriter{#2}} \def\Wout#1{\Wouto{o}{#1}} \def\WOut#1{\Wouto{O}{#1}} \newif\ifon \def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue \newif\iftitle \newif\ifpagesaved \newcount\contentspageno \def\lheader{\mainfont\the\pageno\eightrm\qquad\Whead\hfill\Wtitle\qquad \ifnum\pageno=\contentspageno\else \tensy x\mainfont\Wmodno \fi} \def\rheader{\ifnum\pageno=\contentspageno\else \tensy x\mainfont\Wmodno \fi \eightrm\qquad\Wtitle\hfill\Whead \qquad\mainfont\the\pageno} \def\pagewidtho{6.5}% The width of each page \def\pageheighto{8.7}% The height of each page \def\fullpageheighto{9}% Page height including headlines \newdimen\pagewidth \pagewidth\pagewidtho in \newdimen\pageheight \pageheight\pageheighto in \newdimen\fullpageheight \fullpageheight\fullpageheighto in \newdimen\pageshift \pageshift=0in% Shift righthand pages wrt lefthand ones \def\magnify#1{\mag=#1 \pagewidth\pagewidtho truein \pageheight\pageheighto truein \fullpageheight\fullpageheighto truein \setpage} \def\setpage{\hsize\pagewidth \vsize\pageheight}% Use after changing page size \def\page{\box255 } \newif\ifidenticalpageheads \def\normaloutput#1#2#3{ \ifodd\pageno\hoffset=\pageshift\fi \shipout\vbox { \vbox to\fullpageheight { \iftitle\global\titlefalse \else \hbox to\pagewidth {\vbox to10pt{}% \ifidenticalpageheads#2\else \ifodd\pageno #3% Pg nos alternate left \& right. \else#2\fi \fi }% \fi \vfill#1% Parameter |#1| is the page itself. } } \global\advance\pageno by1} \def\Wname{{\tt FWEB} OUTPUT}% This section name is reset by starred sections. %% An OPTIONAL TITLE can be defined by the user in his limbo section. \def\Wtitle{} \newtoks\Woutput \Woutput\output% Remember FWEB's definition. \newcount\minutes \newcount\hours \hours=\time \divide\hours by 60 \multiply\hours by 60 \minutes=\time \advance\minutes by -\hours \divide\hours by 60 \def\Time{\the\hours:\ifnum\minutes<10 0\fi\the\minutes} \def\Date{\ifcase\month\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\day, \number\year} \def\topofcontents{\centerline{\titlefont\Wtitle} \vfill} % This is the default. \def\botofcontents{\vfill \rightline{\Date} \rightline{\Time}} \contentspageno=0% Default page number for table of contents \newwrite\cont % For the table of contents. \def\Wbegin[#1]#2#3#4#5#6{\edef\contentsfile{#5}% \def\readcontents{\input\contentsfile}% \Wequate#6 \ifLaTeXisloaded \documentstyle[#1]{#2}% \textwidth\pagewidth \textheight\pageheight \TeXindent#3 \begin{document} \pageno=2 \else \TeXindent#3 \fi \notch#4 \output {\setbox0=\page% The first page is garbage \immediate\openout\cont=\contentsfile \global\output{\normaloutput\page\lheader\rheader}% }% %% Here we print out a garbage page, so that the first |\topmark| won't be % null. \setpage \vbox to \vsize{} } \def\Wch{\note{The following sections were changed by the change file:} \let\*=\relax} \newbox\Sbox % Saved box preceding the index \newbox\Lbox % Lefthand column in the index %% The following macro is the style file entry \.{index.preamble}. \def\Winx{\par\vskip6pt plus 1fil \write\cont{}% Ensure that the contents file isn't empty \closeout\cont % The contents information has been fully gathered \output{\ifpagesaved\normaloutput{\box\Sbox}\lheader\rheader\fi \global\setbox\Sbox=\page \global\pagesavedtrue} \pagesavedfalse \eject % Eject the page-so-far and predecessors \setbox\Sbox\vbox{\unvbox\Sbox}% Take it out of its box \vsize=\pageheight \advance\vsize by -\ht\Sbox % The remaining height \hsize=.5\pagewidth \advance\hsize by -10pt % Column width for the index (20pt between cols) \parfillskip 0pt plus .6\hsize % Try to avoid almost empty lines \def\lr{L}% This tells whether the left or right column is next \output{\if L\lr\global\setbox\Lbox=\page \gdef\lr{R} \else\normaloutput{\vbox to\pageheight{\box\Sbox\vss \hbox to\pagewidth{\box\Lbox\hfil\page}}}\lheader\rheader \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi} %% \message{Index:} \parskip 0pt plus .5pt \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em}% Index entry \def\[##1]{$\underline{##1}$}% Underlined index item \def\(##1){$^{\rm ##1}$}% Language marker \let\Windexspace\medskip % Spacing between letter groups in index. \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar \hyphenpenalty 10000 \parindent0pt} \def\Wfin{\par\vfill\eject \ifpagesaved\null\vfill\eject\fi % Output a null index column \if L\lr\else\null\vfill\eject\fi % Finish the current page \parfillskip 0pt plus 1fil \def\rhead{NAMES OF THE SECTIONS} \output{\normaloutput\page\lheader\rheader} \setpage \def\note##1##2.{\quad{\eightrm##1 ##2.}} \def\WU{\note{Used in}}% Cross-reference for uses of sections \def\:{\par\hangindent 2em}\let\*=*} \let\Wmods\relax \def\Winfo#1#2#3#4{\bigskip \:{{\bf COMMAND LINE:}\ \ \Wtypewriter{#1}.}\smallskip \:{{\bf WEB FILE:}\ \ \Wtypewriter{#2}.}\smallskip \:{{\bf CHANGE FILE:}\ \ \Wtypewriter{#3}.}\medskip \:{{\bf GLOBAL LANGUAGE:}\ \ \Wtypewriter{\rm #4}.}\medskip} \def\Wcon{\par\vfill\eject \rightskip 0pt \hyphenpenalty 50 \tolerance 200 \setpage \output{\normaloutput\page\lheader\rheader} \titletrue % Prepare to output the table of contents \pageno=\contentspageno \def\rhead{TABLE OF CONTENTS} \topofcontents \catcode`\@=11 \hbox to\hsize{\hfil Section\hbox to3em{\hss Page}} \def\WZ##1##2##3##4{\hbox to\hsize{\kern##1em\ignorespaces##2 \leaders\hbox to .5em{.\hfil}\hfil\ ##3\hbox to3em{\hss##4}}} \let\WIM\WIN % Restore the proper definition. \readcontents\relax % Read the contents info. \botofcontents \FWEBend} %% Label a section with an identifying name. \def\modlabel#1{% \ifLaTeXisloaded \label{MOD#1}% \else \edef\next{\gdef\expandafter\noexpand\csname MOD#1\endcsname{\modno}}% \next \fi} %% Print the number of a labelled section. \def\Wmodule#1{\ifLaTeXisloaded \ref{MOD#1}% \else \csname MOD#1\endcsname \fi} %% Examples of references to sections. \def\WEBsection#1{section~\Wmodule{#1}}% |\section| is used by \LaTeX. \def\WEBmodule#1{module~\Wmodule{#1}} \let\module\WEBmodule% For backward compatibility. \def\strutdepth{\dp\strutbox} \def\marginal#1{\strut\vadjust{\kern-\strutdepth\specialmargin{#1}}} \def\specialmargin#1{\vtop to\strutdepth{ \baselineskip\strutdepth \vss\llap{#1 }\null}} \def\LANGUAGE#1{\marginal{\smash{\vtop{\hbox{% \hbox{\tt@L\lowercase{#1}:\enspace}}\null}}}\ignorespaces} %% Use the next one if you don't want language changes to be printed. \newskip\ttglue \ttglue=0.5em plus 0.25em minus 0.15em \def\ttother{\catcode`\\=\other \catcode`\{=\other \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other \catcode`\#=\other \catcode`\%=\other \catcode`\~=\other \catcode`\_=\other \catcode`\^=\other} \def\ttverbatim{\begingroup \ttother \obeyspaces \obeylines \tt} {\obeyspaces\gdef {\ }} \def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=0pt %% \catcode`\@=0 \rightskip=-\parindent \ttfinish} \def\Begintt{\bgroup \let\par=\endgraf \ttverbatim \parskip=0pt \rightskip=-\parindent \ttFinish} {\catcode`\|=0 |catcode`|\=\other |obeylines% |gdef|ttfinish#1^^M#2\endtt{#1|vbox{#2}|endgroup$$}% |gdef|ttFinish#1\Endtt{#1|endgroup|egroup}} \let\verticalbar| \def\activebar{\catcode`\|=\active} {\activebar \gdef\normalbar{\activebar \let|\verticalbar}} %%\activebar {\obeylines% \gdef\ttbar{\activebar% {\obeylines\gdef|{\ttverbatim% \spaceskip=\ttglue% \let^^M=\ \let|=\endgroup}}}} \let\WCX\Begintt