% FWEAVE v1.30--beta (February 3, 1993) \input fwebmac.sty \Wbegin[eqalign]{article}{1em}{1em}{fwebmac.cts}{{\&}{\|}{\\}{\\}{\\}{\@}{\.}{% % --- Limbo text from style file --- \input fweb % --- Beginning of user's limbo section --- \Title{FWEBMAC} \WN1. INTRODUCTION. These are the standard macros for \FWEB\ (v.~1.30) listings (in addition to those of \.{PLAIN.TEX} and/or \LaTeX). WARNING: Some of these macros are not independent of stuff hard-coded into \FWEAVE. In other words, if you change something here, you may also need to recompile \FWEAVE. So caution! \fi % End of module 1 \WM2. Print a comment at the beginning of the \.{.sty} file that is created. \WY\WP \5 \WC{ --- THIS IS fwebmac.sty --- }\7 \WC{ This file must be included into all .tex files produced by FWEAVE. For the source for this file, please see fwebmac.web. }\7 --------------------------------------------------------------------------- }% \WY\par \fi % End of module 2 \WM3. First, we have a flag \WCD{ $\.{\\FWEBisloaded}{}$} that prevents % \.{fwebmac.sty} from being loaded twice. For the use of this flag, see the Dirty Tricks appendix of the \TeX book. \WY\WP \5 \WC{ If it's not defined yet, load in the macros. }\6 $\.{\\ifx\\FWEBisloaded\\relax\\endinput\\else\\let\\FWEBisloaded\\relax% \\fi}{}$\WY\par \fi % End of module 3 \WM4. Various things need to know the current version number and date. \WY $\WP \.{\\def\\FWEBversion\{1.30\}}$\6 ${}\.{\\def\\FWEBdate\{May\ 15\1\ 1993\}}{}$\WY\par \fi % End of module 4 \WM5. \FWEB\ now works with \LaTeX, after a fashion. Here's how to refer to it (borrowed from \LaTeX's \.{\\p@LaTeX} macro): \WY $\WP \.{\\def\\LaTeX\{\{\\rm\2L\\kern-0.36em\\raise0.3ex\\hbox\{\\Csc\2a\}% \\kern-0.15em\ T}{}$\5 \Wx{ }\6 ${}\.{\3\\kern-0.1667em\ \\lower0.7ex\\hbox\{E\}\\kern-0.125em\ X\}\}}{}$\WY\par \fi % End of module 5 \WM6. We need to distinguish whether or not \LaTeX\ is loaded. Assuming that only \TeX\ or \LaTeX\ will be used, one way of doing this is to discriminate on whether \WCD{ $\.{\\pageno}{}$} is defined. \WY $\WP \.{\\newif\\ifLaTeXisloaded}{}$\7 ${}\.{\\ifx\\pageno\\undefined}$\6 ${}\.{\3\\LaTeXisloadedtrue}$\6 ${}\.{\\fi}{}$\WY\par \fi % End of module 6 \WM7. \FWEB\ now supports \LaTeX's NFSS (new font selection scheme). Macros courtesy of Charles Karney, Princeton U. \WY $\WP \.{\\ifx\\selectfont\\undefined\\else}$\6 ${}\.{\3\\fontsize\{10\}\{12pt\}\\rm\2}{}$\5 \WC{ The standard font for bulk of document. }\6 ${}\.{\\fi}{}$\WY\par \fi % End of module 7 \WM8. If \LaTeX\ is loaded, we equate \WCD{ $\.{\\pageno}{}$} to \LaTeX's counter so that the \WCD{ $\.{\\label}{}$} macro works correctly. Also, \LaTeX\ does its own thing with the \WCD{ $\.{\\end}{}$} command. \WY $\WP \.{\\catcode\`\\@=11}{}$\7 ${}\.{\\ifLaTeXisloaded}$\6 ${}\.{\3\\let\\pageno\\c@page}{}$\5 \WC{ \WEB\ has its own name for the page number. }\6 ${}\.{\3\\def\\FWEBend\{\\let\\clearpage\\newpage}{}$\5 \WC{ Otherwise, one gets a blank page. }\6 ${}\.{\3\3\\end\{document\}\}}{}$\5 \WC{ \LaTeX\ redefines \WCD{ $\.{\\end}{}$}. }\6 ${}\.{\\else}$\6 ${}\.{\3\\let\\FWEBend\\end}$\6 ${}\.{\\fi}{}$\7 ${}\.{\\catcode\`\\@=12}{}$\WY\par \fi % End of module 8 \WM9. We can comment stuff out by bracketing it with \WCD{ $\.{\\comment...% \\endcomment}{}$}. \WY $\WP \.{\\long\\def\\comment\#1\\endcomment\{\}}{}$\WY\par \fi % End of module 9 \WM10. Here's how to refer to the individual processors. The user may wish to redefine these. \WY $\WP \.{\\def\\WEB\{\\Wtypewriter\{WEB\}\}}$\6 ${}\.{\\def\\FWEB\{\\Wtypewriter\{FWEB\}\}}$\6 ${}\.{\\def\\CWEB\{\\Wtypewriter\{CWEB\}\}}$\6 ${}\.{\\def\\TANGLE\{\\Wtypewriter\{TANGLE\}\}\ \\let\\Tangle\\TANGLE}$\6 ${}\.{\\def\\WEAVE\{\\Wtypewriter\{WEAVE\}\}\ \ \ \\let\\Weave\\WEAVE}$\6 ${}\.{\\def\\FTANGLE\{\\Wtypewriter\{FTANGLE\}\}}$\6 ${}\.{\\def\\FWEAVE\{\\Wtypewriter\{FWEAVE\}\}}{}$\WY\par \fi % End of module 10 \WM11. Here's how one can refer to the individual languages. The user may also to redefine these. \WY $\WP \.{\\def\\C\{C\}}$\6 ${}\.{\\def\\Cpp\{\\C\{\\tt\2++\}\}}$\6 ${}\.{\\def\\FORTRAN\{\{\\Csc\2Fortran\}\}\ \\let\\Fortran\\FORTRAN}$\6 ${}\.{\\def\\MAKE\{\{\\tt\2MAKE\}\}\ \ \ \ \ \ \ \\let\\Make\\MAKE}$\6 ${}\.{\\def\\RATFOR\{\{\\Csc\2Ratfor\}\}\ \ \ \\let\\Ratfor\\RATFOR}$\6 ${}\.{\\let\\TEX\\TeX}$\6 ${}\.{\\def\\UNIX\{\{\\SC\2UNIX\}\}\3\\let\\Unix\\UNIX}{}$\WY\par \fi % End of module 11 \WM12. Here's something for trickery with catcodes. \WY $\WP \.{\\chardef\\other=12}{}$\WY\par \fi % End of module 12 \WM13. Now remember Plain \TeX\ stuff used for other purposes by \FWEB. \WY $\WP \.{\\let\\amp\\\&}$\6 ${}\.{\\let\\at\\@}$\6 ${}\.{\\let\\bslash\\\\}$\6 ${}\.{\\let\\caret\\\^}$\6 ${}\.{\\let\\dollar\\\$}$\6 ${}\.{\\let\\dstar\\\ast }$\6 ${}\.{\\let\\equals\\=}$\6 ${}\.{\\let\\leftbrace\\\{}$\6 ${}\.{\\let\\period\\.}$\6 ${}\.{\\let\\rightbrace\\\}}$\6 ${}\.{\\let\\vertbar|}$\6 ${}\.{\\let\\PM\\\#}$\6 ${}\.{\\let\\PC\\\%}{}$\WY\par \fi % End of module 13 \WM14. Additionally, the TeXbook manual macro package \.{manmac} redefines the following stuff: \WCD{ $\.{\\iftitle\2\\titlefont\2\\rhead\2\\pagewidth\2\\pageheight\2% \\output}{}$} \noindent If you want to include \.{manmac.tex} to get various macro definitions, the best scheme is to use the `\.{-w}'~command-line option to prevent \FWEAVE\ from outputting \WCD{ $\.{\\input\2fwebmac.sty}{}$} as the first output line. Then include both files explicitly, in this order: \WCD{ $\.{\\input\2manmac}{}$} \WCD{ $\.{\\input\2fwebmac.sty}{}$} \noindent You can do this by defining the first limbo text command as follows: \WCD{@ $\.{l\ "\\\\input\ manmac\ \\\\input\ fwebmac.sty"}{}$} \fi % End of module 14 \WM15. Paragraph skip and indentation for \TeX\ text: \WY $\WP \.{\\newdimen\\pardimen}$\6 ${}\.{\\dimen0=\\normalbaselineskip}$\6 ${}\.{\\parskip=\\dimen0\ plus\ 1pt}{}$\7 \WC{ If you don't like spaces between paragraphs, change \WCD{ $\.{% \\pardimen}{}$} to \WCD{ $\.{0pt}{}$}. }\6 ${}\.{\\pardimen=\\parskip}{}$\7 ${}\.{\\parskip\20pt}{}$\5 \WC{ No stretch between paragraphs }\7 \WC{ Indentation for the \TeX\ part is handled in a separate variable \WCD{ $% \.{\\TeXindent}{}$} from the variable \WCD{ $\.{\\notch}{}$} used for definition and code parts. }\6 ${}\.{\\newdimen\\TeXindent}$ $\.{\\TeXindent\21em}{}$\5 \WC{ For paragraphs in the \TeX\ part. }\WY\par \fi % End of module 15 \WN16. FONTS. Several fonts have been declared in addition to the standard of \.{PLAIN} format: $$\vbox{\halign{\.{\\#}\quad\hfil&---\quad#\hfil\cr titlefont&\titlefont Title.\cr ttitlefont&\ttitlefont Title.\cr SC&\SC SMALL CAPS.\cr Csc&\Csc CAPS/Small caps.\cr tentex&\tentex \TeX\ extended character set, including~'\.{\ }'.\cr bfit&\bfit Bold-faced italic.\cr The font used for comments is called \WCD{ $\.{\\cmntfont}{}$}. By default, this is \WCD{ $\.{\\let}{}$} to \WCD{ $\.{\\tenrm}{}$}. \WY $\WP \.{\\ifx\\selectfont\\undefined}$\6 ${}\.{\3\\let\\mainfont\\tenrm\2\\let\\cmntfont\\tenrm}$\6 ${}\.{\3\\font\\eightrm=cmr8\ \\let\\SC\\eightrm}{}$\7 ${}\.{\3\\font\\titlefont=cmssbx10\ scaled\ \\magstep2}{}$\5 \WC{ Sans serif }\6 ${}\.{\3\\font\\ttitlefont=cmtt10\ scaled\\magstep2}{}$\5 \WC{ Typewriter type }\7 ${}\.{\3\\font\\tentex=cmtex10\ }{}$\5 \WC{ \TeX\ \.{extended char.\ set} (used in strings) }\6 ${}\.{\3\\font\\Csc=cmcsc10\ }{}$\5 \WC{ Caps/small caps. }\6 ${}\.{\3\\font\\tenbfit=cmbxti10\ }{}$\5 \WC{ \&{Intrinsic functions} }\7 \WC{ Used for module-number subscript: }\6 ${}\.{\3\\font\\seventi=cmti7}$\6 ${}\.{\3\\font\\sevenrm=cmr7}$\6 ${}\.{\3\\font\\sevenbf=cmbx7}{}$\7 \WC{ For special handling of array indices: }\6 ${}\.{\3\\font\\sevenit=cmti7}$\6 ${}\.{\3\\scriptfont\\itfam=\\sevenit}{}$\7 ${}\.{\3\\scriptscriptfont\\itfam=\\sevenit}{}$\7 ${}\.{\\else\2}{}$\5 \WC{ NFSS }\6 ${}\.{\3\\def\\mainfont\{\\fontfamily\{\\rmdefault\}\\fontseries\{m\}% \\fontshape\{n\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\normalsize\}}$\6 ${}\.{\3\\let\\cmntfont\\mainfont}{}$\7 ${}\.{\3\\def\\eightrm\{\\fontfamily\{\\rmdefault\}\\fontseries\{m\}\\fontshape% \{n\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\footnotesize\}}$\6 ${}\.{\3\\let\\SC\\eightrm}{}$\7 ${}\.{\3\\def\\titlefont\{\\fontfamily\{\\sfdefault\}\\fontseries\{\\bfdefault% \}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\fontshape\{n\}\\Large\}}$\6 ${}\.{\3\\def\\ttitlefont\{\\fontfamily\{\\ttdefault\}\\fontseries\{m\}% \\fontshape\{n\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\Large\}}{}$\7 ${}\.{\3\\def\\tentex\{\\fontfamily\{\\ttdefault\}\\fontseries\{m\}\\fontshape% \{n\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\normalsize\}}{}$\7 ${}\.{\3\\def\\Csc\{\\fontfamily\{\\rmdefault\}\\fontseries\{m\}\\fontshape\{% \\scdefault\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\normalsize\}}$\6 ${}\.{\3\\def\\tenbfit\{\\fontfamily\{\\rmdefault\}\\fontseries\{\\bfdefault% \}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\fontshape\{\\itdefault\}\\normalsize\}}{}$\7 ${}\.{\3\\def\\seventi\{\\fontfamily\{\\rmdefault\}\\fontseries\{m\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\fontshape\{\\itdefault\}\\scriptsize\}}$\6 ${}\.{\3\\def\\sevenrm\{\\fontfamily\{\\rmdefault\}\\fontseries\{m\}\\fontshape% \{n\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\scriptsize\}}$\6 ${}\.{\3\\def\\sevenbf\{\\fontfamily\{\\rmdefault\}\\fontseries\{\\bfdefault% \}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\fontshape\{n\}\\scriptsize\}}{}$\7 ${}\.{\3\\def\\fiveti\{\\fontfamily\{\\rmdefault\}\\fontseries\{m\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\fontshape\{\\itdefault\}\\tiny\}}$\6 ${}\.{\3\\def\\fiverm\{\\fontfamily\{\\rmdefault\}\\fontseries\{m\}\\fontshape% \{n\}\\tiny\}}$\6 ${}\.{\3\\def\\fivebf\{\\fontfamily\{\\rmdefault\}\\fontseries\{\\bfdefault% \}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\fontshape\{n\}\\tiny\}}{}$\7 ${}\.{\3\\def\\tensy\{\\fontfamily\{cmsy\}\\fontseries\{m\}\\fontshape\{n\}% \\normalsize\}}{}$\7 ${}\.{\3\\def\\pbf\{\\fontfamily\{\\rmdefault\}\\fontseries\{\\bfdefault\}% \\fontshape\{n\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\selectfont\}}$\6 ${}\.{\3\\def\\ptt\{\\fontfamily\{\\ttdefault\}\\fontseries\{m\}\\fontshape\{n% \}\\selectfont\}}$\6 ${}\.{\\fi}{}$\7 \WC{ The next isn't really sufficient; this ought to be put into the definitions of \WCD{ $\.{\\tenpoint}{}$}, \WCD{ $\.{\\twelvepoint}{}$}, etc. }\6 ${}\.{\3\\let\\bfit\\tenbfit}{}$\WY\par \fi % End of module 16 \WN17. HIGHLIGHTING MACROS. These are used for displaying identifiers, reserved words, intrinsic functions, etc. \WY $\WP \.{\\def\\Wshort\#1\{\\leavevmode\\hbox\{\$\#1\$\}\}}{}$\5 \WC{ One-letter identifiers such as~\Wshort{x} look better this way. }\7 ${}\.{\\def\\Wid\#1\{\\leavevmode\\hbox\{\\it\#1\\/\\kern.05em\}\}}{}$\5 \WC{ Italic type for ordinary identifiers such as \Wid{test}. }\7 \WC{ 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 \WCD{ $\.{fwebmac.sty}{}$} (use a change file with \WCD{ $\.{fwebmac.web}{}$}), or redefine \WCD{ $\.{\\WidD}{}$} and/or % \WCD{ $\.{\\WidM}{}$} with an \.{@l} command. }\6 ${}\.{\\let\\WidD\\Wid\2}{}$\5 \WC{ Outer macro }\6 ${}\.{\\let\\WidM\\Wid\2}{}$\5 \WC{ WEB macro }\7 ${}\.{\\def\\Wreserved\#1\{\\leavevmode\\hbox\{\\def\\\\\{\\tt\\BS\}\\bf\#1\\/% \}\}}{}$\5 \WC{ Boldface type for reserved words such as \&{integer}. }\7 ${}\.{\\def\\Wintrinsic\#1\{\\leavevmode\\hbox\{\\def\\\\\{\\tt\\BS\}\\bfit\#1% \\/\\kern.05em\}\}}{}$\5 \WC{ Library/intrinsic function name such as \@{sin}. }\7 \WC{ In the following, we use \WCD{ $\.{\\gdef}{}$} instead of \WCD{ $\.{% \\global\\let}{}$} because we might want to change the definition of, e.g., % \WCD{ $\.{\\WidM}{}$} with an \.{@l} command, which comes \It{after} the \WCD{ $\.{\\Wbegin}{}$} statement. }\6 ${}\.{\\def\\Wequate\#1\#2\#3\#4\#5\#6\#7\#8\{}{}$\5 \Wx{ }\6 ${}\.{\3\\gdef\#1\{\\Wreserved\}}{}$\5 \WC{ \WCD{ $\.{\\\&}{}$} by default. }\6 ${}\.{\3\\gdef\#2\{\\Wshort\}}{}$\5 \WC{ \WCD{ $\.{\\|}{}$} by default. Don't reorder the following three statements! In case arguments 3--5 are identical, we want the ordinary identifier to win. }\6 ${}\.{\3\\gdef\#5\{\\WidM\}}{}$\5 \WC{ \WCD{ $\.{\\\\}{}$} by default. }\6 ${}\.{\3\\gdef\#4\{\\WidD\}}{}$\5 \WC{ \WCD{ $\.{\\\\}{}$} by default. }\6 ${}\.{\3\\gdef\#3\{\\Wid\}}{}$\5 \WC{ \WCD{ $\.{\\\\}{}$} by default. }\6 ${}\.{\3\\gdef\#6\{\\Wintrinsic\}}{}$\5 \WC{ \WCD{ $\.{\\@}{}$} by default. }\6 ${}\.{\3\\gdef\#7\{\\Wkeyword\}}{}$\5 \WC{ \WCD{ $\.{\\.}{}$} by default. }\6 ${}\.{\3\\gdef\#8\{\\Wtypewriter\}\}}{}$\5 \WC{ \WCD{ $\.{\\.}{}$} by default. }\WY\par \fi % End of module 17 \WM18. Identifiers that are recognized as function or macro names are followed by the construction\hfil\break \.{\\WIN\{{\it name}\_{\it type}\}\{{\it module}\_{\it number}\}}. The cases for the first argument correspond to $$\vbox{\halign{#\hfil&\ ---\ #\hfil\cr 0&Generic name, defined by \.{@[}.\cr 1&Function name.\cr 2&\WEB\ macro (\.{@m}).\cr 3&Outer macro (\.{@d}).\cr 4&Reserved name defined with~\.{@`}.\cr 5&\WCD{ \&{typedef}} name.\cr If the name was defined in the current module, the second argument will be zero; otherwise it will be the section number in which the name was defined. The macro shows how to display the 0~state differently (here with a bullet). Also, note how combinations of underlining and fonts are used to distinguish the various kinds of identifiers. \WY $\WP \.{\\def\\Wzero\{0\}}{}$\7 ${}\.{\\def\\WIN\#1\#2\{\\ifmmode\\def\\ZZ\{\}\\else\\def\\ZZ\{\\null\$\\null\}% \\fi}$\6 ${}\.{\3\\ZZ\_\{\\def\\next\{\#2\}\\ifx\\next\\Wzero\{\\bullet\}\\else\\WINo\{% \#1\}\{\#2\}\\fi\}\\ZZ\}}{}$\7 \WC{ Format the module-number subscript. }\6 ${}\.{\\def\\WINo\#1\#2\{}{}$\5 \Wx{ }\6 ${}\.{\3\\ifcase\#1\\underline\{\\hbox\{\\sevenrm\#2\}\}}{}$\5 \WC{ Generic name (\.{@[}). [0] }\6 ${}\.{\3\3\\or\\hbox\{\\sevenrm\#2\}}{}$\5 \WC{ Function name. [1] }\6 ${}\.{\3\3\\or\\underline\{\\hbox\{\\seventi\#2\}\}}{}$\5 \WC{ WEB macro. [2] }\6 ${}\.{\3\3\\or\\hbox\{\\seventi\#2\}}{}$\5 \WC{ Outer macro. [3] }\6 ${}\.{\3\3\\or\\underline\{\\hbox\{\\sevenbf\#2\}\}}{}$\5 \WC{ \.{@`}. [4] }\6 ${}\.{\3\3\\or\\hbox\{\\sevenbf\#2\}}{}$\5 \WC{ \&{typedef}. [5] }\6 ${}\.{\3\3\\else\{\#2\}}{}$\5 \WC{ Error trap. }\6 ${}\.{\3\\fi\}}{}$\WY\par \fi % End of module 18 \WN19. STRINGS. Strings are indicated by ``\.{\\.\{\dots\}}''. You can also use this for typewriter type; remember to escape the appropriate symbols: ``\.{\ \\\#\%\$\^\{\}\~\&\_}''. The string macro itself does not surround its contents with an \WCD{ $\.{\\hbox}{}$}, in order that long strings can be broken by discretionaries. \WY $\WP \.{\\def\\Wtypewriter\#1\{\\relax\\ifmmode\\gdef\\YY\{\\null\$\\null\}% \\else\\gdef\\YY\{\}\\fi}$\6 ${}\.{\3\\YY\{\\leavevmode\\INITSTR\#1\}\\YY\}}{}$\7 ${}\.{\\let\\Wkeyword\\Wtypewriter}{}$\WY\par \fi % End of module 19 \WM20. Here is the nucleus for the string macro~\WCD{ $\.{\\.}{}$} (more precisely, for \WCD{ $\.{\\Wtypewriter}{}$}). \WY $\WP \.{\\def\\INITSTR\{}{}$\5 \Wx{ }\6 ${}\.{\3\\tentex\2}{}$\5 \WC{ Typewriter type for strings }\6 ${}\.{\3\\let\\\\=\\BS\2}{}$\5 \WC{ Backslash in a string: '\.\\'. }\6 ${}\.{\3\\let\\'=\\RQ\2}{}$\5 \WC{ Right quote in a string: '\.\''. }\6 ${}\.{\3\\let\\\`=\\LQ\2}{}$\5 \WC{ Left quote in a string: '\.\`'. }\6 ${}\.{\3\\let\\\{=\\LB\2}{}$\5 \WC{ Left brace in a string: '\.\LB'. }\6 ${}\.{\3\\let\\\}=\\RB\2}{}$\5 \WC{ Right brace in a string: '\.\RB'. }\6 ${}\.{\3\\let\\\~=\\TL\2}{}$\5 \WC{ Tilde in a string: '\.\~'. }\6 ${}\.{\3\\let\\\ =\\SP\2}{}$\5 \WC{ Space in a string: '\.\ '. }\6 ${}\.{\3\\let\\\_=\\UL\2}{}$\5 \WC{ Underline in a string: '\.\_'. }\6 ${}\.{\3\\let\\\&=\\AM\2}{}$\5 \WC{ Ampersand in a string: '\.\&'. }\6 ${}\.{\3\\def\\0\{\\discretionary\{\\BS\}\{\}\{\}\}}{}$\5 \WC{ FWEB inserts this automatically every so often so very long strings will break. Broken strings will be marked by a backslash. }\6 ${}\.{\3\\def\\1\{\1\\0\}}{}$\5 \WC{ FWEB replaces commas in strings by this, so strings tend to break after commas. }\6 ${}\.{\3\\let\\2\\space\2}{}$\5 \WC{ Ordinary space after control sequences in \TeX. }\6 ${}\.{\3\\def\\3\{\\space\\space\}}{}$\5 \WC{ Translation of a tab in \TeX. }\6 ${}\.{\3\}}{}$\WY\par \fi % End of module 20 \WM21. Characters for strings: \WY $\WP \.{\\def\\\#\{\\hbox\{\\tt\\char35\}\}}{}$\5 \WC{ Parameter sign: '\#'. }\6 ${}\.{\\def\\\$\{\\hbox\{\\tt\\char36\}\}}{}$\5 \WC{ Dollar sign: '\$'. }\6 ${}\.{\\def\\\%\{\\hbox\{\\tt\\char37\}\}}{}$\5 \WC{ Percent sign: '\%'. }\6 ${}\.{\\def\\\^\{\\ifmmode\\raise0.45ex\\hbox\{\$\\\1\\scriptstyle% \\mathchar"25E\\\1\$\}}{}$\5 \Wx{ }\6 ${}\.{\3\\else\\char\`\^\ \\fi\}}{}$\5 \WC{ Pointer or hat: '\^'. Circumflex accents can be obtained from \WCD{ $\.{% \\\^\^D}{}$} instead of \WCD{ $\.{\\\^}{}$}. }\6 ${}\.{\\def\\AT!\{@\}}{}$\5 \WC{ At sign for control text: '\AT!' }\WY\par \fi % End of module 21 \WM22. The following funny business about asterisks is in case you want to be clever and make~`\.*' an active character (for example, for complex conjugation). \WY $\WP \.{\\chardef\\asterisk=\`\\\ast }$\6 ${}\.{\\def\\ast\{\\ifmmode\{\\displaystyle\\mathchar"2203\}\\else\\asterisk% \\fi\}}{}$\WY\par \fi % End of module 22 \WM23. More stuff for strings. \WY $\WP \.{\\chardef\\AM=\`\\\&}{}$\5 \WC{ Ampersand character in a string: '\.\&'. }\6 ${}\.{\\chardef\\BS=\`\\\\}{}$\5 \WC{ Backslash in a string: '\.\\'. }\6 ${}\.{\\def\\ttBS\{\{\\tt\\BS\}\}}{}$\5 \WC{ Literal backslash: '\ttBS'. }\6 ${}\.{\\chardef\\LB=\`\\\{}{}$\5 \WC{ Left brace in a string: '\.\LB'. }\6 ${}\.{\\def\\LQ\{\{\\tt\\char'22\}\}}{}$\5 \WC{ Left quote in a string: '\.\`'. }\6 ${}\.{\\chardef\\RB=\`\\\}}{}$\5 \WC{ Right brace in a string: '\.\RB'. }\6 ${}\.{\\def\\RQ\{\{\\tt\\char'23\}\}}{}$\5 \WC{ Right quote in a string: '\.\''. }\6 ${}\.{\\def\\SP\{\{\\tt\\char\`\\\ \}\}}{}$\5 \WC{ (Visible) space in a string: '\.\ '. }\6 ${}\.{\\chardef\\TL=\`\\\~}{}$\5 \WC{ Tilde in a string: '\.\~'. }\6 ${}\.{\\chardef\\UL=\`\\\_}{}$\5 \WC{ Underline character in a string: '\.\_'. }\WY\par \fi % End of module 23 \WM24. \WY $\WP \.{\\def\\LA\{\\hbox\{\\LQ\}\}}{}$\5 \WC{ Left quote outside a string }\WY\par \fi % End of module 24 \WN25. INDENTATION, LINEBREAKS, etc. These commands are mostly handled by the macros~\WCD{ $\.{\\1}{}$} to~\WCD{ $\.{\\8}{}$}. First, here are some macros to draw vertical lines to show off the indentation scheme. \WY $\WP \.{\\newbox\\rulebox}$\6 ${}\.{\\newcount\\ruleno}{}$\7 ${}\.{\\def\\rules\#1\{\\leavevmode}$\6 ${}\.{\3\\ruleno=0}$\6 ${}\.{\3\\rlap\{\\vtop\2to\ 0pt\{\\null}$\6 ${}\.{\3\3\\def\\R\{\\setbox0=\\hbox\{\\the\\ruleno\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\3\\rlap\{\\vrule\2height0pt\ depth\#1\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\3\\kern-0.5\\wd0\\copy0\\kern-0.5\\wd0}$\6 ${}\.{\3\3\3\\advance\\ruleno\2by1}$\6 ${}\.{\3\3\3\\hskip1em\}}$\6 ${}\.{\3\3\\rlap\{\\R\\R\\R\\R\\R\\R\\R\}}$\6 ${}\.{\3\3\\vss\}\}\}}{}$\WY\par \fi % End of module 25 \WM26. The indentation scheme is as follows. The unit of indentation is \WCD{ $\.{\\notch}{}$}. \WY $\WP \.{\\newdimen\\notch}$\6 ${}\.{\\notch\21em}{}$\WY\par \fi % End of module 26 \WM27. Here is typical output. \setbox\rulebox\vtop{\null \WY $\WP\WE:if:\WO{1}{}$\par \WP\WMd$\|A\WIN2{0}$\5 $\WO{2}{}$\par \WP\WE:endif:\par \WP\WMD$\\{ALPHA}$\5 $\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+% \\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+% \\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+% \\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+% \\{xxx}+\\{yyy}+\\{xxx}{}$\par \WY\WP$\\{main}(\,)$\1\1\6 \&{int} \1\\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, % \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, % \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde}, \\{abcde};\2% \2\2\1\6 $\{{}$\6 \WE:if:$\WO{1111}+\WO{2222}+\WO{1111}+\WO{2222}+\WO{1111}+\WO{2222}+\WO{1111}+% \WO{2222}+\WO{1111}+\WO{2222}+\\{aaaa}+\\{bbbb}+\WO{1111}+\WO{2222}+\WO{1111}+% \WO{2222}+\WO{1111}+\WO{2222}+\WO{1111}+\WO{2222}+\WO{1111}+\WO{2222}$\WPs\7 $\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+% \\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+% \\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+\\{yyy}+\\{xxx}+% \\z;{}$% \WE:endif:\WPs\6 $\}$\2\WY\par \vbox{\noindent\rules{\dp\rulebox}\box\rulebox} Preprocessor commands in the definition part are far left, definition-part commands such as~\.{@m} are indented one notch, function names are at two notches, and the body of functions is at three notches. This distance is given the special name \WCD{ $\.{\\globalindent}{}$}: \WY $\WP \.{\\newcount\\globalindent}$ $\.{\\globalindent=3\ }{}$\5 \WC{ Global indentation in notches. }\WY\par \fi % End of module 27 \WM28. The current indentation is called \WCD{ $\.{\\ind}{}$}. We also sometimes need to save and restore that. \WY $\WP \.{\\newcount\\ind\2}{}$\5 \WC{ Current indentation in notches. }\6 ${}\.{\\newcount\\lastind\2}{}$\5 \WC{ Used for preprocessor commands. }\6 ${}\.{\\def\\saveind\{\\global\\lastind=\\ind\}}{}$\WY\par \fi % End of module 28 \WM29. Each output line of code is a separate paragraph. The scheme proceeds first setting \WCD{ $\.{\\ind}{}$}~to the appropriate hanging indentation, then backspacing appropriately. Here are the backspace quantities. \WY $\WP \.{\\newbox\\bak\2\2\\setbox\\bak=\\hbox\2to\ -\\notch\{\}}{}$\5 \WC{ Backspace one notch. }\6 ${}\.{\\newbox\\bakk\2\\setbox\\bakk=\\hbox\2to\ -2\\notch\{\}}{}$\5 \WC{ Backspace two notches. }\WY\par \fi % End of module 29 \WM30. When there's the possibility that a line of code may be continued, we advance the indentation and set \WCD{ $\.{\\hangindent}{}$}. \WY $\WP \.{\\def\\1\{\\global\\advance\\ind\2by1\\hangindent\\ind\\notch\}}{}$% \WC{ Indent one more notch }\WY\par \fi % End of module 30 \WM31. Here we cancel the above. We don't need to reset \WCD{ $\.{% \\hangindent}{}$} because this will always be followed by a~\WCD{ $\.{\\6}{}$} or~\WCD{ $\.{\\7}{}$}, which already does that. \WY $\WP \.{\\def\\2\{\\global\\advance\\ind\2by-1\{\}\}}{}$\5 \WC{ Indent one less notch }\WY\par \fi % End of module 31 \WM32. Now we provide for an optional break within a statement. (Note that the argument is multiplied by~10.) \WY $\WP \.{\\def\\3\#1\{\\hfil\\penalty\#10\\hfilneg\}}{}$\5 \WC{ Optional break within a statement. }\WY\par \fi % End of module 32 \WM33. A simple command to backspace one notch. \WY $\WP \.{\\def\\4\{\\copy\\bak\}}{}$\5 \WC{ Backspace one notch }\WY\par \fi % End of module 33 \WM34. Optional break (the \WCD{ $\.{\\yskipfalse}{}$} may be obsolete). \WY $\WP \.{\\def\\5\{\\hfil\\penalty-1\\hfilneg\2\\kern2.5\\notch\\copy% \\bakk}$\6 ${}\.{\3\\yskipfalse\\ignorespaces\}}{}$\WY\par \fi % End of module 34 \WM35. The next command forces a line break. \WY $\WP \.{\\def\\6\{\\ifmmode\\else\\par}$\6 ${}\.{\3\\hangindent\\ind\\notch\2\\noindent\2\\kern\\ind\\notch\2\\copy\\bakk% \2\\ignorespaces\\fi\}}{}$\WY\par \fi % End of module 35 \WM36. This also forces a line break, but also adds some extra vertical space. \WY $\WP \.{\\def\\7\{\\WY\\6\}}{}$\5 \WC{ Forced break and a little extra space. }\WY\par \fi % End of module 36 \WM37. No indentation. \WY $\WP \.{\\def\\8\{\\hskip-\\ind\\notch\2\\hskip\22\\notch\}}{}$\WY\par \fi % End of module 37 \WM38. \WY $\WP \.{\\newif\\ifyskip}$\6 ${}\.{\\def\\yskip\{\\medskip\}}{}$\WY\par \fi % End of module 38 \WN39. PREPROCESSOR COMMANDS. The preprocessor commands are built out of the previous ones. First, we define a guaranteed space. \WY $\WP \.{\\def\\Hspace\{\\hbox\{\ \}\}}{}$\WY\par \fi % End of module 39 \WM40. Start a preprocessor command such as \.{@\#if}. When these are issued in the code section (rather than in the definition section), we must remember the present level of indentation. That's restored with~\WCD{ $\.{\\WPs}{}$}. \WY $\WP \.{\\def\\WPR\#1\{\\copy\\bakk\2\\saveind}{}$\5 \WC{\quad\WCD{ $\.{\\global\\advance\\ind\2by\ 2}{}$} }\6 ${}\.{\3\\1\\Wreserved\{@\#1\}\\Hspace\}}{}$\7 ${}\.{\\def\\WPs\{\\global\\ind=\\lastind\}}{}$\WY\par \fi % End of module 40 \WM41. The definition commands such as~\.{@m} are similar, except that they also take a language argument. \WY $\WP \.{\\def\\defin\#1\#2\{\\4\\saveind}$ $\.{\3\\1\\Wreserved\{\#1\}% \\hbox\{\$\^\{\\rm\#2\}\$\}\\Hspace\}}{}$\5 \WC{ Begin @d, @m, or @f. }\WY\par \fi % End of module 41 \WN42. Various NUCLEII. \WY $\WP \.{\\def\\note\#1\#2.\{\\WY\\noindent\{\\hangindent2em% \\baselineskip10pt\\eightrm\#1\ \#2.\\par\}\}}{}$\7 ${}\.{\\def\\lapstar\{\\rlap\{\ast \}\}}{}$\7 \WC{ If there's a current include file, it's printed at the start of each section. }\6 ${}\.{\\def\\includefile\{\}}$\6 ${}\.{\\def\\WIF\#1\{\\def\\includefile\{\#1\}\}}$\6 ${}\.{\\def\\startsection\{\\WQ\\noindent\{\\let\\\ast =\\lapstar\\bf% \\modstar.}{}$\5 \Wx{ }\6 ${}\.{\\ifx\\includefile\\empty\\else\\\ [\{\\tt\\includefile\}]\\fi\\quad\}% \}}{}$\WY\par \fi % End of module 42 \WN43. ALPHABET macros. These are hard-coded into \FWEAVE. \fi % End of module 43 \WN44. 1 Comments. Comments are C-style. The long comment construction `\WCD{ $\.{/\ast \ ...}$ $\.{\ast /}{}$}' is output as `\WCD{ $\.{\\WC\{\ ...\ % \}}{}$}'; the short comment is output as `\WCD{ $\.{\\Wc\{\ ...}$ $\.{\}}{}$}'. The \WCD{ $\.{\\WC}{}$} and~\WCD{ $\.{\\Wc}{}$} macros aren't simply defined with an argument whose text would be the comment because one wants the comment to be a group and the user might be wanting to change catcodes inside that group; the argument form would absorb catcodes before they were changed. \WY $\WP \.{\\def\\skipbrace\#1\{\\catcode\`\\\{=1\ \}}{}$\7 ${}\.{\\def\\WC\{\\Wcmnt\{\\ast\}\{\\finishcomment\}\}}$\6 ${}\.{\\def\\Wc\{\\Wcmnt\{/\}\{\\XX\}\}}$\6 ${}\.{\\def\\Wcmnt\#1\#2\{\\ifmmode\\gdef\\XX\{\\null\$\\null\}\\else\\gdef\\XX% \{\}\\fi}{}$\5 \WC{ C-style cmnt }\6 ${}\.{\3\\XX\\hfil\\penalty-1\\hfilneg}$\6 ${}\.{\3\\ifyskip\\else\\quad\\fi\$/\#1\\\1\$}{}$\5 \Wx{ }\6 ${}\.{\3\\bgroup\\cmntfont\2}{}$\5 \WC{ The user can redefine the comment font \WCD{ $\.{\\cmntfont}{}$}. }\6 ${}\.{\3\3\\aftergroup\#2}{}$\5 \Wx{ }\6 ${}\.{\3\3\\catcode\`\\\{=\\other\\skipbrace\}}{}$\7 ${}\.{\\def\\finishcomment\{\$\\\1\\ast/\$\\XX\}}{}$\7 ${}\.{\\def\\Wx\#1\{\\kern-0.5\\notch\\hbox\{\\tt\\\%\}\}}{}$\WY\par \fi % End of module 44 \WM45. Compiler directives are essentially comments, but are formatted more preprocessor commands. \WY $\WP \.{\\def\\WCDIR\#1\{\\WPR!\\Wtypewriter\{\#1\}\\WPs\}}{}$\WY\par \fi % End of module 45 \WN46. 1 Code mode. Code mode is entered by vertical bars, giving an effect such as \WCD{ $\|x=\|y{}$}. \WY $\WP \.{\\def\\WCD\#1\{\\ifmmode\\hbox\\fi\{\\ignorespaces\#1\}\}}{}$\WY\par \fi % End of module 46 \WN47. 1 Definitions. Various definition section stuff. \WY $\WP \.{\\def\\WD:\#1:\{\\defin\{@D\}\{\#1\}\}}{}$\5 \WC{ Outer macro definition: `\.{@D}' }\6 ${}\.{\\def\\Wd:\#1:\{\\defin\{@d\}\{\#1\}\}}{}$\5 \WC{ Outer macro definition: `\.{@d}' }\6 ${}\.{\\def\\WUd:\#1:\{\\defin\{@u\}\{\#1\}\}}{}$\5 \WC{ Undef outer macro: `\.{@u}'. }\6 ${}\.{\\def\\WMD\{\\defin\{@M\}\{\}\}}{}$\5 \WC{ WEB macro definition: `\.{@M}'. }\6 ${}\.{\\def\\WMd\{\\defin\{@m\}\{\}\}}{}$\5 \WC{ WEB macro definition: `\.{@m}'. }\6 ${}\.{\\def\\WE:\#1:\{\\WPR\{\\\#\#1\}\}}{}$\5 \WC{ WEB preprocessor command: `\.{@\#if\dots}'. }\7 ${}\.{\\def\\WF:\#1:\{\\defin\{@f\}\{\#1\}\}}{}$\5 \WC{ Format definition: `\.{@f}'. }\7 ${}\.{\\def\\Wl:\#1:\{\\defin\{@l\}\{\#1\}\}}{}$\5 \WC{ Limbo text definition: `\.{@l}'. }\6 ${}\.{\\def\\Wv:\#1:\{\\defin\{@v\}\{\#1\}\}}{}$\5 \WC{ Operator overloading: `\.{@v}'. }\6 ${}\.{\\def\\WWW:\#1:\{\\defin\{@W\}\{\#1\}\}}{}$\5 \WC{ Identifier overloading: `\.{@W}'. }\6 ${}\.{\\def\\Ww:\#1:\{\\defin\{@w\}\{\#1\}\}}{}$\5 \WC{ Identifier overloading: `\.{@w}'. }\WY\par \fi % End of module 47 \WN48. 1 Sections. Beginning of ordinary section (begun with~`\.{@\ }'). \WY $\WP \.{\\outer\\def\\WM\#1.\{\\MN\#1.\\Wmark\\ifon\\Wskip\\startsection% \\ignorespaces\}}{}$\WY\par \fi % End of module 48 \WM49. Beginning of starred section (begun with~`\.{@*}'). Starred sections have associated level numbers, where 0~denotes the most significant level, 1~denotes a subsection, 2~denotes a subsubsection, and so on. You can indicate the level number in several ways. By default, you can say ``\.{@*3\ Section name.}'' or equivalently ``\.{@*...\ Section name.}'' to set the level number to~3. Alternatively, if you replace the line below ``\.{\\dotsafterfalse}'' with ``\.{\\dotsaftertrue}'', you can instead say ``\.{@*\ Section name....}'' By default, major sections get a page break; subsections don't. Sections and subsections can be formatted in different ways in the table of contents by enhancing the definition of~\WCD{ $\.{% \\WZ}{}$} (inside~\WCD{ $\.{\\Wcon}{}$}) to include an \WCD{ $\.{\\ifcase}{}$} construction. (See how this is done in \WCD{ $\.{fwebman.tex}{}$}.) \WY $\WP \.{\\newcount\\Wss\2}{}$\5 \WC{ Counter for the dots. }\7 ${}\.{\\newif\\ifdotsafter\2}{}$\5 \WC{ Do subsection dots come after or before the section name? }\6 ${}\.{\\dotsafterfalse}{}$\7 ${}\.{\\ifdotsafter\2}{}$\5 \WC{ ``@* NAME...'' }\6 ${}\.{\3\\def\\Wbefore:\#1.\{\\Wdefname\#1.\\Wdot\}}{}$\5 \Wx{ }\6 ${}\.{\3\\def\\Wafter\{\\WNss\}}{}$\5 \Wx{ }\6 ${}\.{\\else\2}{}$\5 \WC{ ``@*.. NAME.'' or ``@*2 NAME.'' }\6 ${}\.{\3\\def\\Wbefore:\ \#1\{\\def\\next\{\\Wafter\#1\}}{}$\5 \WC{ Case for neither dot nor number. }\6 ${}\.{\3\3\\ifx\#1.\\def\\next\{\\Wdot.\}}{}$\5 \WC{ Count arbitrary dots. }\6 ${}\.{\3\3\\else\\ifx\#11\\Wsectionnum1}{}$\5 \Wx{ }\6 ${}\.{\3\3\\else\\ifx\#12\\Wsectionnum2}{}$\5 \Wx{ }\6 ${}\.{\3\3\\else\\ifx\#13\\Wsectionnum3}{}$\5 \Wx{ }\6 ${}\.{\3\3\\else\\ifx\#14\\Wsectionnum4}{}$\5 \WC{ Highest numerical level allowed. }\6 ${}\.{\3\3\\fi\\fi\\fi\\fi\\fi}$\6 ${}\.{\3\3\\next\}}{}$\5 \Wx{ }\6 ${}\.{\3\\def\\Wafter\#1.\{\\Wdefname\#1.\\WNss\}}{}$\5 \WC{ Executed after figuring out level. }\6 ${}\.{\\fi}{}$\7 $\.{\\def\\Wsectionnum\#1\{\\Wss\#1\\let\\next\\Wafter\}}{}$\5 \WC{ Assign numerical section number. }\6 ${}\.{\\def\\Wdefname\#1.\{\\def\\Wname\{\#1\}\}}{}$\5 \WC{ Remember name of section. }\7 ${}\.{\\outer\\def\\WN\#1.\{\\MN\#1.\\Wss=0\\Wbefore:\}}{}$\5 \WC{ Begin a starred section. }\WY\par \fi % End of module 49 \WM50. Here we count the periods before or after the section name. \WY $\WP \.{\\def\\Wdot\{\\futurelet\\next\\WNs\}}$\6 ${}\.{\\def\\WNs\{\\ifx\\next.\\advance\\Wss\2by\ 1\\let\\next\\Wnext\\else% \\let\\next\\Wafter\\fi}$\6 ${}\.{\3\\next\}}$\6 ${}\.{\\def\\Wnext\#1\{\\Wdot\}}{}$\WY\par \fi % End of module 50 \WM51. Now actually begin the section. Note the use of~\WCD{ $\.{\\ifcase}{}$} conditionally format the sections and subsections. Also, the construction \WCD{ $\.{\\ifon...\\fi}{}$} brackets the section to conditionally suppress printing. Finally, we make an entry in the table of contents for all starred names. The first argument of the \.{\\WZ}~macro is the level number for this section. This can be used to format the table of contents in various ways. The order of expansion is an issue in the~\WCD{ $\.{\\write}{}$} to the table of contents file~\WCD{ $\.{\\cont}{}$}. We want the macro~\WCD{ $\.{\\WZ}{}$} to be sent unexpanded, so we \WCD{ $\.{\\let}{}$}~it equal to a primitive. Also, it's possible that a~\WCD{ $\.{\\WIN}{}$} will appear inside of~\WCD{ $\.{\\Wname}{}$} (if the user included certain kind of code inside the section name). This shouldn't be expanded until later, so we turn that into the temporarily unexpandable macro~\WCD{ $\.{\\WIM}{}$}. \WY\WP \5 \WC{ Page break for major sections. }\6 $\.{\\def\\Wsectionbreak\{\\ifcase\\Wss\\vfil\\eject\\fi\}}{}$\7 \WC{ Running headline. }\6 ${}\.{\\def\\rhead\{\\ifcase\\Wss}$\6 ${}\.{\3\3\\uppercase\{\\ignorespaces\\Wname\}}{}$\5 \Wx{ }\6 ${}\.{\3\\else}$\6 ${}\.{\3\3\\ignorespaces\\Wname}{}$\5 \Wx{ }\6 ${}\.{\3\\fi\}}{}$\5 \WC{ Define running headline. }\7 ${}\.{\\let\\WZ\\let\2}{}$\5 \WC{ Now you can \WCD{ $\.{\\send}{}$} the control sequence \WCD{ $\.{\\WZ}{}$} ${}\.{\\let\\WIM\\let\2}{}$\5 \WC{ This macro is made temporarily unexpandable; see \WCD{ $\.{\\WZ}{}$}. }\7 ${}\.{\\def\\WNss\{}{}$\5 \Wx{ }\6 ${}\.{\3\\Wmark\2}{}$\5 \WC{ Can't put this in \WCD{ $\.{\\MN}{}$} since \WCD{ $\.{\\rhead}{}$} must be defined first. }\6 ${}\.{\3\\Wsectionbreak\2}{}$\5 \WC{ Typeset the break between sections. }\6 ${}\.{\3\\message\{\ast \\modno\}}{}$\5 \WC{ Progress report to the terminal. }\6 ${}\.{\3\\ifon}$\6 ${}\.{\3\3\\ifcase\\Wss\\else\\Wskip\\fi}$\6 ${}\.{\3\3\\startsection\{\\bf\\ignorespaces\\Wname.\\quad\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\{\\def\\WIN\{\\WIM\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\edef\\next\{\\write\\cont\{\\WZ\{\\the\\Wss\}\{\\Wname\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\{\\modno\}\{\\noexpand\\the\\pageno\}\}\}\\next\}}{}$\5 \WC{ To contents file \WCD{ $\.{CONTENTS.tex}{}$}. }\6 ${}\.{\3\3\\ignorespaces\}}{}$\WY\par \fi % End of module 51 \WM52. The marks that we emit just before \WCD{ $\.{\\Wsectionbreak}{}$} are of the form ``{\it modno}\WCD{ $\.{\\else}{}$}{\it section name}''. We use both of the parts in the page headers. In handling the section name, we must take care to avoid expanding the macro~\WCD{ $\.{\\WIN}{}$} prematurely. This is done just as in~% \WCD{ $\.{\\WNss}{}$} above. \WY $\WP \.{\\def\\WmarkN\{\\def\\Wmark\{\{\\def\\WIN\{\\WIM\}}$\6 ${}\.{\3\3\\mark\{\\modno\\noexpand\\else\\rhead\}\}\}\}}{}$\7 ${}\.{\\ifx\\selectfont\\undefined}$\6 ${}\.{\3\\WmarkN}$\6 ${}\.{\\else}$\6 ${}\.{\3\\def\\Wmark\{\{\\def\\WIN\{\\WIM\}\\let\\protect\\noexpand}$\6 ${}\.{\3\3\\mark\{\\modno\\noexpand\\else\\rhead\}\}\}}$\6 ${}\.{\\fi}{}$\7 ${}\.{\\def\\Wmodno\{\\iftrue\\topmark\\fi\}}{}$\5 \WC{ Extracts the left-hand part of the mark. }\7 ${}\.{\\def\\Whead\{\{\\let\\WIM\\WIN}$ $\.{\3\\expandafter\\iffalse\\topmark% \\fi\}\}}{}$\5 \WC{ Extracts the right-hand part. }\WY\par \fi % End of module 52 \WM53. Common code for \WCD{ $\.{\\WM}{}$}, \WCD{ $\.{\\WN}{}$}. \WY $\WP \.{\\catcode\`\\@=11}{}$\7 ${}\.{\\def\\MN\#1.\{\\par}$\6 ${}\.{\3\\parskip=\\pardimen\2}{}$\5 \WC{ Reset to \TeX\ spacing }\6 ${}\.{\3\\parindent=\\TeXindent}$\6 ${}\.{\3\{\\xdef\\modstar\{\#1\}\\let\\\ast =\\empty\\xdef\\modno\{\#1\}\}}$\6 ${}\.{\3\\ifLaTeXisloaded}$\6 ${}\.{\3\3\\xdef\\@currentlabel\{\\modno\}}{}$\5 \Wx{ }\6 ${}\.{\3\\fi}$\6 ${}\.{\3\\ifx\\modno\\modstar\2\\onmaybe\2\\else\\ontrue\2\\fi\}}{}$\7 ${}\.{\\catcode\`\\@=12}{}$\WY\par \fi % End of module 53 \WN54. 1 Constants. Various kinds of constants are handled: decimal~(\WCD{ $% \WO{10}{}$}), hexadecimal~(\WCD{ $\WO{\`A}{}$}), octal~(\WCD{ $\WO{\~12}{}$}), boolean~(\WCD{ $\WO{\&1010}{}$}), floating-point (\WCD{ $\WO{1.5\^E-35}{}$}), double-precision (\WCD{ $\WO{3.2% \^D100}{}$}), long (\WCD{ $\WO{99999\#1}{}$}), unsigned (\WCD{ $\WO{99999\#2}{}$}), unsigned long (\WCD{ $\WO{999999\#3}{}$}), and Hollerith (\WCD{ $\WO{3% \%abc}{}$}). \WY $\WP \.{\\def\\WDP\#1\{\\ifx\2E\#1\\else\{\\tt\#1\}\\fi\}}{}$\5 \WC{ Used in the exponent macro below. }\7 ${}\.{\\def\\WO\#1\{}{}$\5 \Wx{ }\6 ${}\.{\3\{}{}$\5 \WC{ Make the next definitions local. }\6 ${}\.{\3\\let\\-\\\_}{}$\5 \Wx{ }\6 ${}\.{\3\\let\\d\\\$}{}$\5 \Wx{ }\6 ${}\.{\3\\def\\\\\{\\let\\\_\\-\\let\\\$\\d\}}{}$\5 \Wx{ }\6 ${}\.{\3\\def\\?\{\\kern.2em\}}{}$\5 \Wx{ }\6 ${}\.{\3\\def\\\#\#\#1\{\\kern0.1em\{\\tt\2\\ifcase\#\#1F\\or\2L\\or\2U\\or\2UL% \\else?\\fi\}\}}{}$\5 \WC{C~constant. }\6 ${}\.{\3\\def\\\^\#\#1\{\\cdot\210\^\{\\aftergroup\}\\aftergroup\\WDP% \\aftergroup\#\#1\}}{}$\5 \WC{ Power of ten }\6 ${}\.{\3\\def\\\_\{\_\{\\\\\\rm\\aftergroup\}\}}{}$\5 \WC{ Fortran-90 kind parameter. }\6 ${}\.{\3\\def\\\%\{\{\\rm\2H\}\\hbox\{\\aftergroup\}\\Wtypewriter\{\\aftergroup% \}\}}{}$\5 \WC{ Hollerith constant }\6 ${}\.{\3\\def\\\&\{0\{\\tt\2b\}\}}{}$\5 \WC{ Binary constant. }\6 ${}\.{\3\\def\\\~\{\\hbox\{\\rm\\char'23\\kern-.2em\\it\\aftergroup\\?% \\aftergroup\}\}}{}$\5 \WC{ Octal }\6 ${}\.{\3\\def\\\`\{\\hbox\{\\rm\\char"7D\\tt\\aftergroup\}\}\#1\}\}}{}$\5 \WC{ Double quotes for hex constant }\WY\par \fi % End of module 54 \WN55. 1 Code mode. Either begin the code section, or a preprocessor or definition command. The following command sets up~\WCD{ $\.{\\ind}{}$}. This somewhat peculiar construction is for historical reasons. \WY $\WP \.{\\def\\WPr\{\\global\\ind=\\globalindent\2\\1\}}{}$\WY\par \fi % End of module 55 \WM56. Now enter code mode. Note that \WCD{ $\.{\\leavevmode}{}$} starts a new indented paragraph; we then move in one more notch. \WY $\WP \.{\\def\\WP\{\\parskip=0pt\ \\parindent=\\notch}$\6 ${}\.{\3\\rightskip=0pt\ plus\ 100pt\ minus\ 10pt}$\6 ${}\.{\3\\sfcode\`;=3000}$\6 ${}\.{\3\\pretolerance\210000}{}$\6 \WE:if:$\WO{0}$\WPs\6 ${}\.{\3\\hyphenpenalty\210000\ \\exhyphenpenalty\210000\ }{}$\5 \WC{ If you turn these on, the discretionary breaks in strings won't work! }\6 ${}\.{\3\\global\\ind=\\globalindent\2\\1\\\ \\unskip\}}{}$\6 \WE:endif:\WPs\6 ${}\.{\3\\WPr}$\6 ${}\.{\3\\leavevmode\\kern\\notch\}}{}$\WY\par \fi % End of module 56 \WM57. Here we leave code mode: \WY $\WP \.{\\def\\WQ\{\\rightskip=0pt}$\6 ${}\.{\3\\sfcode\`;=1500\ \\pretolerance\2200\ \\hyphenpenalty\250\ % \\exhyphenpenalty\250\ \}}{}$\WY\par \fi % End of module 57 \WN58. 1 Miscellaneous operators. \WY $\WP \.{\\def\\WA\{\\note\{See\ also\}\}}{}$\5 \WC{ Cross-reference for multiply defined section names. }\7 ${}\.{\\def\\Wauto[\#1]\{\\Wtypewriter\{[\#1]\}\\\ \}}{}$\7 ${}\.{\\def\\WB\{\\mathopen\{\\Wtypewriter\{@/\\ast\}\}\}}{}$\5 \WC{ Begin controlled comment. }\7 ${}\.{\\let\\WG\\ge\2}{}$\5 \WC{ Greater than or equal sign: '$\WG$'. }\7 ${}\.{\\let\\WI\\neq\2}{}$\5 \WC{ Unequal sign: '$\WI$'. (Better reserve \WCD{ $\.{\\ne}{}$} for the electron density~$n_e$.) }\7 ${}\.{\\def\\WJ\{\\Wtypewriter\{@\\\&\}\}}{}$\5 \WC{ TANGLE's join operation: '\WJ'. }\7 ${}\.{\\let\\WK\\gets\2}{}$\5 \WC{ Left arrow: '$\WK$'. }\7 ${}\.{\\let\\WL\\le\2}{}$\5 \WC{ Less than or equal sign: '$\WL$'. }\7 ${}\.{\\def\\Wskip\{\\vfil\\penalty-100\\vfilneg\2\\vskip12ptminus3pt\}}{}$\5 \WC{ See \WCD{ $\.{\\WM}{}$}, etc. }\7 ${}\.{\\def\\Wskipped\#1\{\\8\\mathhexbox278.\\quad\\Wtypewriter\{@I\ "\#1"\}% \\\ \\\ \{\\it\2Section(s)}$\6 ${}\.{skipped\}\\dots\\WP\}}{}$\7 $\.{\\let\\WPtr\\Rightarrow\2}{}$\5 \WC{ Fortran's stupid pointer assignment statement: '$\WPtr$'. }\7 ${}\.{\\let\\WR=\\lnot\2}{}$\5 \WC{ Logical not: '$\WR$'. }\7 ${}\.{\\let\\WS=\\equiv\2}{}$\5 \WC{ Equivalence sign: '$\WS$'. }\7 ${}\.{\\def\\WT\{\\mathclose\{\\Wtypewriter\{@\\ast/\}\}\}}{}$\5 \WC{ Terminate controlled comment. }\7 ${}\.{\\def\\WU\{\\note\{This\ code\ is\ used\ in\}\}}{}$\5 \WC{ Cross-reference for uses of sections. }\7 ${}\.{\\let\\WV\\lor\2}{}$\5 \WC{ Logical or: '$\WV$'. }\7 ${}\.{\\let\\WW=\\land\2}{}$\5 \WC{ Logical and: '$\WW$'. }\WY\par \fi % End of module 58 \WM59. Here's how to format a section name. Argument~1 is the name, argument~2 is the section number, and argument~3 is the language symbol. \WY $\WP \.{\\def\\WX\#1:\#2\\X\#3\\X\{\\ifmmode\\gdef\\XX\{\\null\$\\null\}% \\else\\gdef\\XX\{\}\\fi}$\6 ${}\.{\3\\XX\$\\langle\\\1\$\#2\{\\eightrm\\kern.5em\#1\}\$\\\1\\rangle\^\{\\rm% \2\#3\}\$\\XX\}}{}$\WY\par \fi % End of module 59 \WM60. \WY $\WP \.{\\def\\WY\{\\par\\parskip=0pt\\yskip\}}{}$\WY\par \fi % End of module 60 \WN61. VARIOUS OPERATORS. The following were for Pascal. \WY \WP\4\4\WX61:Unused\X \X${}\WS{}$\7 $\.{\\def\\)\{\\hbox\{\\Wtypewriter\{@\\\$\}\}\}}{}$\5 \WC{ sign for string pool check sum }\6 ${}\.{\\def\\]\{\\hbox\{\\Wtypewriter\{@\\\\\}\}\}}{}$\5 \WC{ sign for forced line break }\WY\par \fi % End of module 61 \WM62. For C's construciton `\WCD{ $\|x\?\WO{1}:\WO{0}{}$}'. \WY $\WP \.{\\def\\?\{\\mathrel?\}}{}$\WY\par \fi % End of module 62 \WM63. Colons have several uses. \WY $\WP \.{\\def\\Colon\{\\ifmmode\\colon\\else:\\fi\}}{}$\7 $\.{\\def\\CC\{\\mathord\{::\}\}}{}$\5 \WC{ '$x\CC y$'. }\6 ${}\.{\\def\\CF\{\{\}\\mathbin\{::\}\{\}\}}{}$\5 \WC{ '$x\CF y$'. }\WY\par \fi % End of module 63 \WM64. Verbatim strings are boxed for emphasis, like this: \Wequals{This is a verbatim string.} \WY $\WP \.{\\def\\=\#1\{\\kern2pt\\hbox\{\\vrule\\vtop\{\\vbox\{\\hrule}$\6 ${}\.{\3\\hbox\{\\strut\\kern2pt\\Wtypewriter\{\#1\}\\kern2pt\}\}}$\6 ${}\.{\3\\hrule\}\\vrule\}\\kern2pt\}}{}$\7 ${}\.{\\let\\Wequals\\=}{}$\WY\par \fi % End of module 64 \WM65. \WY $\WP \.{\\let\\\~=\\ignorespaces}$\6 ${}\.{\\let\\\ast =\ast }{}$\WY\par \fi % End of module 65 \WM66. The following symbol is used to denote accretions to already-existing modules. \WY $\WP \.{\\def\\PQ\{\\mathrel\{+\\mathord\\equiv\}\}}{}$\5 \WC{ '$\PQ$'. }\WY\par \fi % End of module 66 \WM67. \WY $\WP \.{\\mathchardef\\TLD="0218}{}$\5 \WC{ '$\TLD$'. }\7 ${}\.{\\def\\PP\{\\mathord\{++\}\}}{}$\5 \WC{ '$\PP$'. }\6 ${}\.{\\def\\MM\{\\mathord\{--\}\}}{}$\5 \WC{ '$\MM$'. }\7 ${}\.{\\def\\MG\{\\mathord\{\\to\}\}}{}$\5 \WC{ '$\MG$'. }\WY\par \fi % End of module 67 \WM68. The exponentiation macros strip away outer parentheses from the argument, turning ``\WCD{ $\.{x\^(a+b)}{}$}'' into ``\WCD{ $\|x\EE{(\|a+\|b)}{}$}''. \WY $\WP \.{\\def\\LP\{(\}}{}$\5 \WC{ Must be \WCD{ $\.{\\def}{}$}, not \WCD{ $\.{\\let}{}$}. }\6 ${}\.{\\def\\ISL\#1\#2]\{\\def\\next\{\#1\}\}}$\6 ${}\.{\\def\\EE\#1\{\\ISL\#1]\\ifx\\next\\LP\\EXP[\#1]\\else\\EXP[(\#1)]\\fi% \}}$\6 ${}\.{\\def\\EXP[(\#1)]\{\^\{\#1\}\}}{}$\7 \WE:if:$\WO{0}$\WPs\6 $\.{\\def\\EE\{\\mathord\{\\hbox\{\\tt\\\^\}\}\}}{}$\5 \WC{ Poor-man's exponentiation; above is better. }\6 \WE:endif:\WPs\WY\par \fi % End of module 68 \WM69. \WY $\WP \.{\\let\\SlSl\\parallel}{}$\5 \WC{ Concatenation: '$\SlSl$'. }\WY\par \fi % End of module 69 \WM70. For \Fortran--90's `\WCD{ $\LS\|a,\|b,\|c\SR{}$}'. \WY $\WP \.{\\def\\LS\{\\mathopen\{(\{/\}\}\}}$\6 ${}\.{\\def\\SR\{\\mathclose\{\{/\})\}\}}{}$\WY\par \fi % End of module 70 \WM71. Macro stuff: \WY $\WP \.{\\def\\NN\{\\hbox\{\\\#\\\#\}\}}{}$\5 \WC{ '\NN'. }\6 ${}\.{\\def\\NP\{\\hbox\{\\\#!\}\}}{}$\5 \WC{ '\NP'. }\6 ${}\.{\\def\\NC\{\\hbox\{\\\#:\}\}}{}$\5 \WC{ '\NC'. }\6 ${}\.{\\def\\ND\{\\hbox\{\\\#.\}\}}{}$\5 \WC{ '\ND'. }\6 ${}\.{\\def\\Nq\{\\hbox\{\\\#\\tt'\}\}}{}$\5 \WC{ '\Nq'. }\6 ${}\.{\\def\\NQ\{\\hbox\{\\\#\\tt"\}\}}{}$\5 \WC{ '\NQ'. }\WY\par \fi % End of module 71 \WM72. The standard \Fortran\ \.{.FALSE.} and \.{.TRUE.} operators. \WY $\WP \.{\\def\\FALSE\{\{\\cal\2F\}\}}{}$\5 \WC{ '$\FALSE$'. }\6 ${}\.{\\def\\TRUE\{\{\\cal\2T\}\}}{}$\5 \WC{ '$\TRUE$'. }\WY\par \fi % End of module 72 \WM73. Compound operators. The following are for~C. \WY $\WP \.{\\def\\Wcp\{\\mathrel\{+\{=\}\}\}\ \\let\\PE\\Wcp\2}{}$\5 \WC{ `$x\PE y$'. }\6 ${}\.{\\def\\Wcm\{\\mathrel\{-\{=\}\}\}\ \\let\\ME\\Wcm\2}{}$\5 \WC{ `$x\ME y$'. }\6 ${}\.{\\def\\Wcs\{\\mathrel\{\\ast\{=\}\}\}\ \\let\\TE\\Wcs\2}{}$\5 \WC{ `$x\Wcs y$'. }\6 ${}\.{\\def\\Wcv\{\\mathrel\{/\{=\}\}\}\ \\let\\FE\\Wcv\2}{}$\5 \WC{ `$x\FE y$'. }\6 ${}\.{\\def\\Wcd\{\\mathrel\{\\\%\{=\}\}\}\ \\let\\CE\\Wcd\2}{}$\5 \WC{ `$x\Wcd y$'. }\6 ${}\.{\\def\\Wcx\{\\mathrel\{\\\^\\!\{=\}\}\}}{}$\5 \WC{ `$x\Wcx y$'. }\6 ${}\.{\\def\\Wca\{\\mathrel\{\\amp\{=\}\}\}}{}$\5 \WC{ `$x\Wca y$'. }\6 ${}\.{\\def\\Wco\{\\mathrel\{\\OR\{=\}\}\}}{}$\5 \WC{ `$x\Wco y$'. }\6 ${}\.{\\def\\Wcg\{\\mathrel\{\\GG\\!\{=\}\}\}}{}$\5 \WC{ `$x\Wcg y$'. }\6 ${}\.{\\def\\Wcl\{\\mathrel\{\\LL\\!\{=\}\}\}}{}$\5 \WC{ `$x\Wcl y$'. }\7 ${}\.{\\def\\EQV\{\\mathrel\{?\{=\}\}\}}{}$\5 \WC{ `$x\EQV y$'. }\6 ${}\.{\\def\\NEQV\{\\not\\equiv\}}{}$\5 \WC{ `$x\NEQV y$'. }\WY\par \fi % End of module 73 \WM74. More C operators. \WY $\WP \.{\\def\\MOD\{\\mathrel\{\\\%\}\}}{}$\5 \WC{ `$x\MOD y$'. }\6 ${}\.{\\def\\OR\{\{\\\1|\\\1\}\}}{}$\5 \WC{ `$x\OR y$'. }\6 ${}\.{\\def\\AND\{\{\\\1\\amp\\\1\}\}}{}$\5 \WC{ `$x\AND y$. }\7 ${}\.{\\def\\GG\{\\mathrel\{>\\!>\}\}}{}$\5 \WC{ `$x\GG y$'. }\6 ${}\.{\\def\\LL\{\\mathrel\{<\\!<\}\}}{}$\5 \WC{ `$x\LL y$'. }\7 ${}\.{\\def\\HE\{\\mathrel\{\\uparrow=\}\}}{}$\5 \WC{ `$x\HE y$'. }\WY\par \fi % End of module 74 \WM75. We allow braces to be easily displayed outside of math mode. \WY $\WP \.{\\let\\openbraces=\\\{}$\6 ${}\.{\\let\\closebraces=\\\}}$\6 ${}\.{\\def\\\{\{\\ifmmode\\openbraces\\else\$\\openbraces\$\\fi\}}$\6 ${}\.{\\def\\\}\{\\ifmmode\\closebraces\\else\$\\closebraces\$\\fi\}}{}$\WY\par \fi % End of module 75 \WM76. Metacomments: \WY $\WP \.{\\def\\WBM\{\\6\\8\\Wreserved\{@(\}\}}$\6 ${}\.{\\def\\WEM\{\\6\\8\\Wreserved\{@)\}\}}{}$\WY\par \fi % End of module 76 \WM77. Block/loop numbers in \Fortran. \It{Note: You can't replace the \WCD{ $\.{\\bgroup}{}$} and \WCD{ $\.{\\egroup}{}$} by braces because of peculiarities of~\WCD{ $\.{\\Wc}{}$}. Also, if you put an explicit comment on a line that will be labelled by \WCD{ $\.{\\Wblock}{}$}, with the following definition you'll get two comments side by side. However, this could be modified by setting a counter to the block number and making a fancier definition of~\WCD{ $\.{\\WC}{}$} and~\WCD{ $\.{% \\Wc}{}$}.} \WY $\WP \.{\\def\\Wblock\#1\{\\Wc\\bgroup\\\ Block\ \#1\\egroup\}}{}$\5 \WC{ `\Wblock{99}' }\WY\par \fi % End of module 77 \WN78. OVERLOADING OPERATORS. Operator overloading is annoying because several languages may be in use simultaneously. Therefore, when we define an overloaded macro name, we append to it the language symbol, creating macros such as \WCD{ $\.{\\op\_C}{}$}. These macros are typically defined automatically at the beginning of the output file from information contained in \.{@v}~commands. \WY $\WP \.{\\newif\\ifop}$\6 ${}\.{\\newbox\\dotbox}{}$\7 ${}\.{\\def\\Wunknown\#1\{\\=\{??\#1??\}\}}{}$\5 \WC{ For unknown dot constant. }\7 ${}\.{\{\\catcode\`\\\_=11}{}$\7 ${}\.{\\gdef\\newop\#1\#2\#3\{}{}$\5 \Wx{ }\6 ${}\.{\3\\edef\\next\{\\def\\expandafter\\noexpand\\csname\2\_\#1\_\#2% \\endcsname\}}{}$\5 \Wx{ }\6 ${}\.{\3\\next\{\#3\}\}}{}$\7 ${}\.{\\gdef\\newbinop\#1\#2\#3\{}{}$\5 \Wx{ }\6 ${}\.{\3\\edef\\next\{\\def\\expandafter\\noexpand\\csname\2\_\#1\_\#2% \\endcsname\}}{}$\5 \Wx{ }\6 ${}\.{\3\\next\{\\mathrel\{\#3\}\}\}}{}$\7 ${}\.{\\gdef\\newunop\#1\#2\#3\{}{}$\5 \Wx{ }\6 ${}\.{\3\\edef\\next\{\\def\\expandafter\\noexpand\\csname\2\_\#1\_\#2% \\endcsname\}}{}$\5 \Wx{ }\6 ${}\.{\3\\next\{\\mathbin\{\#3\}\}\}}{}$\7 ${}\.{\\gdef\\Wop\#1\#2\{\\setbox\\dotbox\\hbox\{\\tt\2.\#1.\}}{}$\5 \Wx{ }\6 ${}\.{\3\\edef\\nxt\{\\expandafter\\noexpand\\csname\2\_\#1\_\#2\\endcsname% \}}{}$\5 \Wx{ }\6 ${}\.{\3\\edef\\ifnxt\{\\noexpand\\ifx\\expandafter\\noexpand\\csname\2\_\#1\_% \#2\\endcsname\}}{}$\5 \Wx{ }\6 ${}\.{\3\\ifnxt\\empty}$\6 ${}\.{\3\3\\def\\next\{\\box\\dotbox\}}{}$\5 \WC{ Macro not defined; just use \.{.NAME.}. }\6 ${}\.{\3\\else}$\6 ${}\.{\3\3\\def\\next\{\\futurelet\\nextchar\\Woq\}}{}$\5 \WC{ Be careful about \WCD{ $\.{\\EE}{}$}. }\6 ${}\.{\3\\fi}$\6 ${}\.{\3\\next\}}{}$\5 \Wx{ }\6 ${}\.{\}}{}$\7 ${}\.{\\global\\let\\Wb\\Wop}$\6 ${}\.{\\global\\let\\Wu\\Wop}{}$\7 ${}\.{\\let\\Lbrace\{}{}$\7 ${}\.{\\def\\Woq\{\\ifx\\nextchar\\Lbrace}$\6 ${}\.{\3\3\\let\\next\\nxt\2}{}$\5 \WC{ There's an argument coming up. }\6 ${}\.{\3\\else}$\6 ${}\.{\3\3\\ifop}$\6 ${}\.{\3\3\3\\def\\next\{\\nxt\{\}\\equiv\\box\\dotbox\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\else}$\6 ${}\.{\3\3\3\\let\\next\\nxt}$\6 ${}\.{\3\3\\fi}$\6 ${}\.{\3\\fi}$\6 ${}\.{\3\\opfalse}$\6 ${}\.{\3\\next\}}{}$\WY\par \fi % End of module 78 \WM79. The following is for special handling of array indices. \WY $\WP \.{\\newtoks\\WARRAYarga}$\6 ${}\.{\\newtoks\\WARRAYargb}{}$\7 ${}\.{\\def\\WXA\#1\{\\begingroup}{}$\5 \WC{ We don't want the identifiers to be in hboxes, because we want to get % \WCD{ $\.{\\scriptstyle}{}$} for subscripts. (We should always be in math mode here.) }\6 ${}\.{\3\\def\\Wshort\#\#1\{\#\#1\}}{}$\5 \Wx{ }\6 ${}\.{\3\\def\\Wid\#\#1\{\{\\it\2\#\#1\\/\\kern.05em\}\}}{}$\5 \Wx{ }\6 ${}\.{\3\\global\\WARRAYarga\{\#1\}}{}$\5 \Wx{ }\6 ${}\.{\3\\futurelet\\Wnext\\WARRAYm\}}{}$\7 ${}\.{\\def\\WARRAYm\{\\ifx\\Wnext\\WXA}$\6 ${}\.{\3\3\\global\\let\\Wnext\\WARRAYn}{}$\5 \WC{ Multiple indices in C: a[i][j][k] }\6 ${}\.{\3\\else}$\6 ${}\.{\3\3\\global\\let\\Wnext\\relax}$\6 ${}\.{\3\3\\WARRAY\{\\the\\WARRAYarga\}}{}$\5 \WC{ Typeset the accumulated indices. }\6 ${}\.{\3\\fi}$\6 ${}\.{\3\\endgroup}$\6 ${}\.{\3\\Wnext\}}{}$\7 ${}\.{\\def\\WARRAYn\#1\#2\{\\WARRAYargb\{\#2\}}{}$\5 \Wx{ }\6 ${}\.{\3\\edef\\Wnext\{\\noexpand\\WXA\{\\the\\WARRAYarga\1\\the\\WARRAYargb\}% \}}{}$\5 \WC{Concatenate }\6 ${}\.{\3\\Wnext\}}{}$\7 \WC{ Change the following definition to get indices printed in interesting ways. }\6 $\.{\\def\\WARRAY\#1\{[\#1]\}}{}$\5 \WC{ Default definition. }\6 ${}\.{\\def\\WSUB\#1\{\_\{\\scriptstyle\#1\}\}}{}$\5 \WC{ E.g., subscript indices. }\WY\par \fi % End of module 79 \WM80. Handle the \.{@o}~command. \WY $\WP \.{\\def\\Wouto\#1\#2\{\\Wreserved\{@\#1\}\\Hspace\\Wtypewriter\{\#2\}% \}}$\6 ${}\.{\\def\\Wout\#1\{\\Wouto\{o\}\{\#1\}\}}$\6 ${}\.{\\def\\WOut\#1\{\\Wouto\{O\}\{\#1\}\}}{}$\WY\par \fi % End of module 80 \WN81. TITLES. Now we deal with the overall page format. If you want to list only the modules that have changed, together with the index, put the command `\WCD{ $\.{\\let\\maybe=% \\iffalse}{}$}' in the limbo section before the first module of your \.{WEB} file. It's customary to make this the first change in your change file. \WY $\WP \.{\\newif\\ifon}$\6 ${}\.{\\def\\onmaybe\{\\let\\ifon=\\maybe\}\ \\let\\maybe=\\iftrue}{}$\WY\par \fi % End of module 81 \WM82. Some flags, and the number of the table of contents. \WY $\WP \.{\\newif\\iftitle\2\\newif\\ifpagesaved}{}$\7 ${}\.{\\newcount\\contentspageno}{}$\WY\par \fi % End of module 82 \WM83. Top line on left-hand pages: \WY $\WP \.{\\def\\lheader\{\\mainfont\\the\\pageno\\eightrm\\qquad\\Whead% \\hfill\\Wtitle\\qquad}$\6 ${}\.{\3\\ifnum\\pageno=\\contentspageno\\else}$\6 ${}\.{\3\3\\tensy\2x\\mainfont\\Wmodno}$\6 ${}\.{\3\\fi\}}{}$\WY\par \fi % End of module 83 \WM84. Top line on right-hand pages: \WY $\WP \.{\\def\\rheader\{\\ifnum\\pageno=\\contentspageno\\else}$\6 ${}\.{\3\3\\tensy\2x\\mainfont\\Wmodno}$\6 ${}\.{\3\\fi}$\6 ${}\.{\3\\eightrm\\qquad\\Wtitle\\hfill\\Whead}$\6 ${}\.{\3\\qquad\\mainfont\\the\\pageno\}}{}$\WY\par \fi % End of module 84 \WM85. Here are the page dimensions (in inches). \WY $\WP \.{\\def\\pagewidtho\{6.5\}}{}$\5 \WC{ The width of each page }\6 ${}\.{\\def\\pageheighto\{8.7\}}{}$\5 \WC{ The height of each page }\6 ${}\.{\\def\\fullpageheighto\{9\}}{}$\5 \WC{ Page height including headlines }\7 ${}\.{\\newdimen\\pagewidth\2\\pagewidth\\pagewidtho\2in}$\6 ${}\.{\\newdimen\\pageheight\2\\pageheight\\pageheighto\2in}$\6 ${}\.{\\newdimen\\fullpageheight\2\\fullpageheight\\fullpageheighto\2in}{}$\7 ${}\.{\\newdimen\\pageshift\2\\pageshift=0in}{}$\5 \WC{ Shift righthand pages wrt lefthand ones }\7 ${}\.{\\def\\magnify\#1\{\\mag=\#1}$\6 ${}\.{\3\\pagewidth\\pagewidtho\2truein}$\6 ${}\.{\3\\pageheight\\pageheighto\2truein}$\6 ${}\.{\3\\fullpageheight\\fullpageheighto\2truein}$\6 ${}\.{\3\\setpage\}}{}$\7 $\.{\\def\\setpage\{\\hsize\\pagewidth\2\\vsize\\pageheight\}}{}$\5 \WC{ Use after changing page size. }\WY\par \fi % End of module 85 \WM86. The output routine is for plain \TeX. \WY $\WP \.{\\def\\page\{\\box255\ \}}{}$\7 ${}\.{\\newif\\ifidenticalpageheads}{}$\7 ${}\.{\\def\\normaloutput\#1\#2\#3\{}$\6 ${}\.{\3\\ifodd\\pageno\\hoffset=\\pageshift\\fi}$\6 ${}\.{\3\\shipout\\vbox}$\6 ${}\.{\3\3\{}$\6 ${}\.{\3\3\\vbox\2to\\fullpageheight}$\6 ${}\.{\3\3\3\{}$\6 ${}\.{\3\3\3\\iftitle\\global\\titlefalse}$\6 ${}\.{\3\3\3\\else\2\\hbox\2to\\pagewidth}$\6 ${}\.{\3\3\3\3\{\\vbox\2to10pt\{\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\3\3\\ifidenticalpageheads\#2\\else}$\6 ${}\.{\3\3\3\3\\ifodd\\pageno}$\6 ${}\.{\3\3\3\3\3\#3}{}$\5 \WC{ Pg nos alternate left \& right. }\6 ${}\.{\3\3\3\3\\else\#2\\fi}$\6 ${}\.{\3\3\3\3\\fi}$\6 ${}\.{\3\3\3\3\}}{}$\5 \WC{\quad }\6 ${}\.{\3\3\3\\fi}$\6 ${}\.{\3\3\3\\vfill\#1}{}$\5 \WC{ Parameter \WCD{ $\.{\#1}{}$} is the page itself. }\6 ${}\.{\3\3\3\}}$\6 ${}\.{\3\3\}}$\6 ${}\.{\3\\global\\advance\\pageno\2by1\}}{}$\7 ${}\.{\\def\\Wname\{\{\\tt\2FWEB\}\ OUTPUT\}}{}$\5 \WC{ This section name is reset by starred sections. }\7 \WC{ An OPTIONAL TITLE can be defined by the user in his limbo section. }\6 ${}\.{\\def\\Wtitle\{\}}{}$\WY\par \fi % End of module 86 \WM87. Here we provide a storage place for \WCD{ $\.{\\output}{}$}. If you include a macro package, such as \.{manmac}, that overrides the definition of \WCD{ $\.{% \\output}{}$} \It{after} \.{fwebmac.sty}, you can get back the \.{fwebmac.sty} definition by saying \WCD{ $\.{\\input\2manmac}{}$} \WCD{ $\.{\\output\\Woutput}{}$} \WY $\WP \.{\\newtoks\\Woutput}$ $\.{\\Woutput\\output}{}$\5 \WC{ Remember FWEB's definition. }\WY\par \fi % End of module 87 \WM88. It's very useful to know exactly when you made the run. \WY $\WP \.{\\newcount\\minutes}$\6 ${}\.{\\newcount\\hours}{}$\7 ${}\.{\\hours=\\time}$\6 ${}\.{\\divide\\hours\2by\ 60}$\6 ${}\.{\\multiply\\hours\2by\ 60}$\6 ${}\.{\\minutes=\\time}$\6 ${}\.{\\advance\\minutes\2by\ -\\hours}$\6 ${}\.{\\divide\\hours\2by\ 60}{}$\7 ${}\.{\\def\\Time\{\\the\\hours:\\ifnum\\minutes<10\ 0\\fi\\the\\minutes\}}{}$\7 ${}\.{\\def\\Date\{\\ifcase\\month\\or}$\6 ${}\.{\3January\\or\2February\\or\2March\\or\2April\\or\2May\\or\2June\\or}$\6 ${}\.{\3July\\or\2August\\or\2September\\or\2October\\or\2November\\or% \2December\\fi}$\6 ${}\.{\3\\space\\number\\day\1\ \\number\\year\}}{}$\WY\par \fi % End of module 88 \WN89. TABLE OF CONTENTS. An entry is made in the table of contents for each starred section. One can customize things with \WCD{ $\.{\\topofcontents}{}$} \WCD{ $\.{botofcontents}{}$}. \WY $\WP \.{\\def\\topofcontents\{\\centerline\{\\titlefont\\Wtitle\}}$ $\.{\ \ \\vfill\}\ }{}$\5 \WC{ This is the default. }\WY\par \fi % End of module 89 \WM90. End the table of contents page: \WY\WP \6 \WE:if:$\WO{0}$\WPs\6 $\.{\\def\\botofcontents\{\\vfill\}}{}$\5 \WC{ This makes the bottom of the contents page empty. }\6 \WE:endif:\WPs\7 ${}\.{\\def\\botofcontents\{\\vfill}{}$\6 \WE:if:$\WO{0}$\WPs\6 ${}\.{\3\\rightline\{My\ Name\}}{}$\5 \WC{ You can personalize your output here, for example. }\6 \WE:endif:\WPs\6 ${}\.{\3\\rightline\{\\Date\}}$\6 ${}\.{\3\\rightline\{\\Time\}\}}{}$\7 $\.{\\contentspageno=0}{}$\5 \WC{ Default page number for table of contents }\WY\par \fi % End of module 90 \WM91. Here we actually open up the contents file, which is the argument to \WCD{ $\.{\\Wbegin}{}$}. The \WCD{ $\.{\\Wbegin}{}$} macro is issued automatically just before the stuff for the first module. \WY $\WP \.{\\newwrite\\cont\2}{}$\5 \WC{ For the table of contents. }\7 ${}\.{\\def\\Wbegin[\#1]\#2\#3\#4\#5\#6\{\\edef\\contentsfile\{\#5\}}{}$\5 \Wx{ }\6 ${}\.{\3\\def\\readcontents\{\\input\\contentsfile\}}{}$\5 \Wx{ }\6 ${}\.{\3\\Wequate\#6}$\6 ${}\.{\3\\ifLaTeXisloaded}$\6 ${}\.{\3\3\\documentstyle[\#1]\{\#2\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\textwidth\\pagewidth}$\6 ${}\.{\3\3\\textheight\\pageheight}$\6 ${}\.{\3\3\\TeXindent\#3}$\6 ${}\.{\3\3\\begin\{document\}}$\6 ${}\.{\3\3\\pageno=2}$\6 ${}\.{\3\\else}$\6 ${}\.{\3\3\\TeXindent\#3}$\6 ${}\.{\3\\fi}$\6 ${}\.{\3\\notch\#4}$\6 ${}\.{\3\\output}$\6 ${}\.{\3\3\{\\setbox0=\\page}{}$\5 \WC{ The first page is garbage }\6 ${}\.{\3\3\\immediate\\openout\\cont=\\contentsfile}$\6 ${}\.{\3\3\\global\\output\{\\normaloutput\\page\\lheader\\rheader\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\}}{}$\5 \WC{ Here we print out a garbage page, so that the first \WCD{ $\.{% \\topmark}{}$} won't be null. }\6 ${}\.{\3\\setpage}$\6 ${}\.{\3\\vbox\2to\ \\vsize\{\}}$\6 ${}\.{\3\}}{}$\WY\par \fi % End of module 91 \WM92. \WY $\WP \.{\\def\\Wch\{\\note\{The\ following\ sections\ were\ changed\ by\ the\ change\ file:\}}$\6 ${}\.{\3\\let\\\ast =\\relax\}}{}$\WY\par \fi % End of module 92 \WN93. INDEX. The index is written by default into \.{INDEX.tex}, but that name can be overridden with the style-file entry \.{index.tex}. Here we begin the index: \WY $\WP \.{\\newbox\\Sbox\2}{}$\5 \WC{ Saved box preceding the index }\6 ${}\.{\\newbox\\Lbox\2}{}$\5 \WC{ Lefthand column in the index }\7 \WC{ The following macro is the style file entry \.{index.preamble}. }\6 ${}\.{\\def\\Winx\{\\par\\vskip6pt\ plus\ 1fil}$\6 ${}\.{\3\\write\\cont\{\}}{}$\5 \WC{ Ensure that the contents file isn't empty }\6 ${}\.{\3\\closeout\\cont\2}{}$\5 \WC{ The contents information has been fully gathered }\6 ${}\.{\3\\output\{\\ifpagesaved\\normaloutput\{\\box\\Sbox\}\\lheader\\rheader% \\fi}$\6 ${}\.{\3\3\\global\\setbox\\Sbox=\\page\2\\global\\pagesavedtrue\}}$\6 ${}\.{\3\\pagesavedfalse\2\\eject\2}{}$\5 \WC{ Eject the page-so-far and predecessors }\6 ${}\.{\3\\setbox\\Sbox\\vbox\{\\unvbox\\Sbox\}}{}$\5 \WC{ Take it out of its box }\6 ${}\.{\3\\vsize=\\pageheight\2\\advance\\vsize\2by\ -\\ht\\Sbox\2}{}$\5 \WC{ The remaining height }\6 ${}\.{\3\\hsize=.5\\pagewidth\2\\advance\\hsize\2by\ -10pt}$\6 ${}\.{\3\3}{}$\5 \WC{ Column width for the index (20pt between cols) }\6 ${}\.{\3\\parfillskip\20pt\ plus\ .6\\hsize\2}{}$\5 \WC{ Try to avoid almost empty lines }\6 ${}\.{\3\\def\\lr\{L\}}{}$\5 \WC{ This tells whether the left or right column is next }\6 ${}\.{\3\\output\{\\if\2L\\lr\\global\\setbox\\Lbox=\\page\2\\gdef\\lr\{R\}}$\6 ${}\.{\3\3\\else\\normaloutput\{\\vbox\2to\\pageheight\{\\box\\Sbox\\vss}$\6 ${}\.{\3\3\\hbox\2to\\pagewidth\{\\box\\Lbox\\hfil\\page\}\}\}\\lheader% \\rheader}$\6 ${}\.{\3\3\\global\\vsize\\pageheight\\gdef\\lr\{L\}\\global\\pagesavedfalse% \\fi\}}{}$\5 \WC{ \message{Index:} }\6 ${}\.{\3\\parskip\20pt\ plus\ .5pt}$\6 ${}\.{\3\\outer\\def\\:\#\#1\1\ \{\\par\\hangindent2em\\noindent\#\#1:\\kern1em% \}}{}$\5 \WC{ Index entry }\6 ${}\.{\3\\def\\[\#\#1]\{\$\\underline\{\#\#1\}\$\}}{}$\5 \WC{ Underlined index item }\6 ${}\.{\3\\def\\(\#\#1)\{\$\^\{\\rm\2\#\#1\}\$\}}{}$\5 \WC{ Language marker }\6 ${}\.{\3\\let\\Windexspace\\medskip\2}{}$\5 \WC{ Spacing between letter groups in index. }\6 ${}\.{\3\\rm\2\\rightskip0pt\ plus\ 2.5em\ \\tolerance\210000\ \\let\\\ast =% \\lapstar}$\6 ${}\.{\3\\hyphenpenalty\210000\ \\parindent0pt\}}{}$\WY\par \fi % End of module 93 \WM94. End the index. This macro is the style-file entry \.{index.postamble}. \WY $\WP \.{\\def\\Wfin\{\\par\\vfill\\eject}$\6 ${}\.{\3\\ifpagesaved\\null\\vfill\\eject\\fi\2}{}$\5 \WC{ Output a null index column }\6 ${}\.{\3\\if\2L\\lr\\else\\null\\vfill\\eject\\fi\2}{}$\5 \WC{ Finish the current page }\6 ${}\.{\3\\parfillskip\20pt\ plus\ 1fil}$\6 ${}\.{\3\\def\\rhead\{NAMES\ OF\ THE\ SECTIONS\}}$\6 ${}\.{\3\\output\{\\normaloutput\\page\\lheader\\rheader\}}$\6 ${}\.{\3\\setpage}$\6 ${}\.{\3\\def\\note\#\#1\#\#2.\{\\quad\{\\eightrm\#\#1\ \#\#2.\}\}}$\6 ${}\.{\3\\def\\WU\{\\note\{Used\ in\}\}}{}$\5 \WC{ Cross-reference for uses of sections }\6 ${}\.{\3\\def\\:\{\\par\\hangindent\22em\}\\let\\\ast =\ast \}}{}$\WY\par \fi % End of module 94 \WM95. Begin the module list. Presently, this is just an unused hook for special purposes; it is the style file entry \.{modules.preamble}. \WY $\WP \.{\\let\\Wmods\\relax}{}$\WY\par \fi % End of module 95 \WN96. MISCELLANEOUS. Miscellaneous run info: \WY $\WP \.{\\def\\Winfo\#1\#2\#3\#4\{\\bigskip}$\6 ${}\.{\3\\:\{\{\\bf\2COMMAND\ LINE:\}\\\ \\\ \\Wtypewriter\{\#1\}.\}% \\smallskip}$\6 ${}\.{\3\\:\{\{\\bf\2WEB\ FILE:\}\\\ \\\ \\Wtypewriter\{\#2\}.\}\\smallskip}$\6 ${}\.{\3\\:\{\{\\bf\2CHANGE\ FILE:\}\\\ \\\ \\Wtypewriter\{\#3\}.\}\\medskip}$\6 ${}\.{\3\\:\{\{\\bf\2GLOBAL\ LANGUAGE:\}\\\ \\\ \\Wtypewriter\{\\rm\2\#4\}.\}% \\medskip\}}{}$\WY\par \fi % End of module 96 \WM97. Finish the section names, do the table of contents and terminate: \WY $\WP \.{\\def\\Wcon\{\\par\\vfill\\eject}$\6 ${}\.{\3\\rightskip\20pt\ \\hyphenpenalty\250\ \\tolerance\2200}$\6 ${}\.{\3\\setpage}$\6 ${}\.{\3\\output\{\\normaloutput\\page\\lheader\\rheader\}}$\6 ${}\.{\3\\titletrue\2}{}$\5 \WC{ Prepare to output the table of contents }\6 ${}\.{\3\\pageno=\\contentspageno\2\\def\\rhead\{TABLE\ OF\ CONTENTS\}}$\6 ${}\.{\3\\topofcontents}$\6 ${}\.{\3\\catcode\`\\@=11}$\6 ${}\.{\3\\hbox\2to\\hsize\{\\hfil\2Section\\hbox\2to3em\{\\hss\2Page\}\}}$\6 ${}\.{\3\\def\\WZ\#\#1\#\#2\#\#3\#\#4\{\\hbox\2to\\hsize\{\\kern\#\#1em% \\ignorespaces\#\#2}$\6 ${}\.{\3\3\\leaders\\hbox\2to\ .5em\{.\\hfil\}\\hfil\\\ \#\#3\\hbox\2to3em\{% \\hss\#\#4\}\}\}}$\6 ${}\.{\3\\let\\WIM\\WIN\2}{}$\5 \WC{ Restore the proper definition. }\6 ${}\.{\3\\readcontents\\relax\2}{}$\5 \WC{ Read the contents info. }\6 ${}\.{\3\\botofcontents}$\6 ${}\.{\3\\FWEBend\}}{}$\WY\par \fi % End of module 97 \WM98. Assign a symbolic name to a module. This scheme has no forward referencing at present for plain \TeX, although this could easily be extended. For \LaTeX, forward referencing works because the \.{aux}~file is used. \WY\WP \5 \WC{ Label a section with an identifying name. }\6 $\.{\\def\\modlabel\#1\{}{}$\5 \Wx{ }\6 ${}\.{\3\\ifLaTeXisloaded}$\6 ${}\.{\3\3\\label\{MOD\#1\}}{}$\5 \Wx{ }\6 ${}\.{\3\\else}$\6 ${}\.{\3\3\\edef\\next\{\\gdef\\expandafter\\noexpand\\csname\2MOD\#1% \\endcsname\{\\modno\}\}}{}$\5 \Wx{ }\6 ${}\.{\3\3\\next}$\6 ${}\.{\3\\fi\}}{}$\7 \WC{ Print the number of a labelled section. }\6 ${}\.{\\def\\Wmodule\#1\{\\ifLaTeXisloaded}$\6 ${}\.{\3\3\\ref\{MOD\#1\}}{}$\5 \Wx{ }\6 ${}\.{\3\\else}$\6 ${}\.{\3\3\\csname\2MOD\#1\\endcsname}$\6 ${}\.{\3\\fi\}}{}$\7 \WC{ Examples of references to sections. }\6 ${}\.{\\def\\WEBsection\#1\{section\~\\Wmodule\{\#1\}\}}{}$\5 \WC{ \WCD{ $\.{\\section}{}$} is used by \LaTeX. }\6 ${}\.{\\def\\WEBmodule\#1\{module\~\\Wmodule\{\#1\}\}}$ $\.{\\let\\module% \\WEBmodule}{}$\5 \WC{ For backward compatibility. }\WY\par \fi % End of module 98 \WM99. Language commands are printed in the left margin, following Knuth's solution in Appendix~A of the \TeX book. They are actually printed one line down, because the language command is gobbled up before the line break is emitted. \WY $\WP \.{\\def\\strutdepth\{\\dp\\strutbox\}}{}$\7 ${}\.{\\def\\marginal\#1\{\\strut\\vadjust\{\\kern-\\strutdepth\\specialmargin% \{\#1\}\}\}}{}$\7 ${}\.{\\def\\specialmargin\#1\{\\vtop\2to\\strutdepth\{}$\6 ${}\.{\3\\baselineskip\\strutdepth}$\6 ${}\.{\3\\vss\\llap\{\#1\ \}\\null\}\}}{}$\7 ${}\.{\\def\\LANGUAGE\#1\{\\marginal\{\\smash\{\\vtop\{\\hbox\{}{}$\5 \Wx{ }\6 ${}\.{\3\\hbox\{\\tt@L\\lowercase\{\#1\}:\\enspace\}\}\\null\}\}\}% \\ignorespaces\}}{}$\7 \WC{ Use the next one if you don't want language changes to be printed. }\6 \WE:if:$\WO{0}$\WPs\6 ${}\.{\3\\def\\LANGUAGE\#1\{\\relax\\ignorespaces\}}{}$\6 \WE:endif:\WPs\WY\par \fi % End of module 99 \WM100. The \WCD{ $\.{\\begintt}{}$} and \WCD{ $\.{\\endtt}{}$} verbatim constructions, borrowed from \TeX. \WY $\WP \.{\\newskip\\ttglue}{}$\7 ${}\.{\\ttglue=0.5em\ plus\ 0.25em\ minus\ 0.15em}{}$\7 ${}\.{\\def\\ttother\{\\catcode\`\\\\=\\other\2\\catcode\`\\\{=\\other\2% \\catcode\`\\\}=\\other}$\6 ${}\.{\3\\catcode\`\\\$=\\other\2\\catcode\`\\\&=\\other\2\\catcode\`\\\#=% \\other}$\6 ${}\.{\3\\catcode\`\\\%=\\other\2\\catcode\`\\\~=\\other\2\\catcode\`\\\_=% \\other}$\6 ${}\.{\3\\catcode\`\\\^=\\other\}}{}$\7 ${}\.{\\def\\ttverbatim\{\\begingroup\2\\ttother\2\\obeyspaces\2\\obeylines\2% \\tt\}}{}$\7 ${}\.{\{\\obeyspaces\\gdef\2\{\\\ \}\}}{}$\7 ${}\.{\\def\\begintt\{\$\$\\let\\par=\\endgraf}$\6 ${}\.{\3\\ttverbatim}$\6 ${}\.{\3\\parskip=0pt}{}$\5 \WC{\quad\catcode`\@=0 }\6 ${}\.{\3\\rightskip=-\\parindent}$\6 ${}\.{\3\\ttfinish\}}{}$\7 ${}\.{\\def\\Begintt\{\\bgroup}$\6 ${}\.{\3\\let\\par=\\endgraf}$\6 ${}\.{\3\\ttverbatim}$\6 ${}\.{\3\\parskip=0pt}$\6 ${}\.{\3\\rightskip=-\\parindent}$\6 ${}\.{\3\\ttFinish\}}{}$\7 ${}\.{\{\\catcode\`\\|=0}$\6 ${}\.{\3|catcode\`|\\=\\other}$\6 ${}\.{\3|obeylines}{}$\5 \Wx{ }\6 ${}\.{\3|gdef|ttfinish\#1\^\^M\#2\\endtt\{\#1|vbox\{\#2\}|endgroup\$\$\}}{}$\5 \Wx{ }\6 ${}\.{\3|gdef|ttFinish\#1\\Endtt\{\#1|endgroup|egroup\}\}}{}$\7 ${}\.{\\let\\verticalbar|}{}$\7 ${}\.{\\def\\activebar\{\\catcode\`\\|=\\active\}}{}$\7 ${}\.{\{\\activebar}$\6 ${}\.{\\gdef\\normalbar\{\\activebar}$\6 ${}\.{\3\\let|\\verticalbar\}\}}{}$\7 \WC{\activebar }\7 ${}\.{\{\\obeylines}{}$\5 \Wx{ }\6 ${}\.{\\gdef\\ttbar\{\\activebar}{}$\5 \Wx{ }\6 ${}\.{\3\{\\obeylines\\gdef|\{\\ttverbatim}{}$\5 \Wx{ }\6 ${}\.{\3\3\\spaceskip=\\ttglue}{}$\5 \Wx{ }\6 ${}\.{\3\3\\let\^\^M=\\\ \\let|=\\endgroup\}\}\}\}}{}$\7 ${}\.{\\let\\WCX\\Begintt}{}$\WY\par \fi % End of module 100 \WN101. INDEX. \fi % End of module 101 \input fwebmac.ndx \input fwebmac.mds \Winfo{"fweave fwebmac"} {"fwebmac.web"} {(none)} {TEX} \Wcon