diff options
Diffstat (limited to 'support/splint/tex/limbo.sty')
-rw-r--r-- | support/splint/tex/limbo.sty | 1372 |
1 files changed, 1372 insertions, 0 deletions
diff --git a/support/splint/tex/limbo.sty b/support/splint/tex/limbo.sty new file mode 100644 index 0000000000..1ab76629a4 --- /dev/null +++ b/support/splint/tex/limbo.sty @@ -0,0 +1,1372 @@ +% Copyright 2012-2015, Alexander Shibakov +% This file is part of SPLinT +% +% SPLinT is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% SPLinT is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with SPLinT. If not, see <http://www.gnu.org/licenses/>. + +% limbo.sty version 2.3 + +\input epsf.tex +\input amssym.def + +\catcode`\@=11 % a name space protection measure (weak) + +% fonts +\font\tenboldi=cmbxti10 +\font\nineboldi=cmbxti9 +\font\eightboldi=cmbxti8 +\font\sevenboldi=cmbxti7 +\font\sixboldi=cmbxti6 +\font\fiveboldi=cmbxti5 + +\font\twelvebi=cmmib10 at 12pt +\font\tenbi=cmmib10 +\font\tencyr=lhr10 +\font\ninebi=cmmib9 +\font\sevenbi=cmmib7 +\font\sixbi=cmmib6 +\font\twelvebsy=cmbsy10 at 12pt +\font\ninebsy=cmbsy9 +\font\sevenbsy=cmbsy7 + +\font\twelvei=cmmi10 at 12pt +\font\ninei=cmmi9 +\font\twelvesy=cmsy10 at 12pt +\font\ninesy=cmsy9 + +\font\twelvetitle=cmssbx12 +\font\tentitle=cmssbx10 +\font\tentitlei=cmssbxo10 +\font\ninetitle=cmssbx9 +\font\eighttitle=cmssbx8 +\font\seventitle=cmssbx7 +\font\titlefrak=eufb10 at 12pt + +\font\tenss=cmss10 +\font\niness=cmss9 +\font\eightss=cmss8 + +\font\twelvetitleit=cmssbxo10 at 12pt +\font\ninetitleit=cmssbxo10 at 9pt +\font\seventitleit=cmssbxo10 at 7pt + +\font\authorfont=cmssqi8 +\font\affiliationfont=cmssq8 +\font\timefont=cmss7 +\font\keywordsfn=cmssbx8 + +\font\tentex=cmtex10 +\font\ninetex=cmtex9 +\font\eighttex=cmtex8 + +\font\inchhigh=cminch +\font\titlefont=cmssdc10 at 40pt + +\font\ninerm=cmr9 +\font\eightrm=cmr8 +\font\sevenrm=cmr7 +\font\ninecyr=lhr9 +\font\eightcyr=lhr8 +\font\sevencyr=lhr7 +\font\sixrm=cmr6 + +\font\ninei=cmmi9 +\font\eighti=cmmi8 +\font\sixi=cmmi6 +\skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177 + +\font\ninesy=cmsy9 +\font\eightsy=cmsy8 +\font\sixsy=cmsy6 +\skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60 + +\font\eightss=cmssq8 + +\font\eightssi=cmssqi8 + +\font\twelvebf=cmbx12 +\font\ninebf=cmbx9 +\font\eightbf=cmbx8 +\font\sixbf=cmbx6 + +\font\ninett=cmtt9 +\font\eighttt=cmtt8 +\font\seventt=cmtt7 + +\hyphenchar\tentt=-1 % inhibit hyphenation in typewriter type +\hyphenchar\ninett=-1 +\hyphenchar\eighttt=-1 + +\font\ninesl=cmsl9 +\font\eightsl=cmsl8 +\font\sevensl=cmsl7 + +\font\nineit=cmti9 +\font\eightit=cmti8 +\font\sevenit=cmti7 +\font\sixit=cmti6 +\font\fiveit=cmti5 + +\font\twelvemsam=msam10 at 12pt +\font\tenmsam=msam10 +\font\ninemsam=msam9 +\font\eightmsam=msam8 +\font\sevenmsam=msam7 +\font\sixmsam=msam6 +\font\fivemsam=msam5 + +\font\twelvemsbm=msbm10 at 12pt +\font\tenmsbm=msbm10 +\font\ninemsbm=msbm9 +\font\eightmsbm=msbm8 +\font\sevenmsbm=msbm7 +\font\sixmsbm=msbm6 +\font\fivemsbm=msbm5 + +\font\tenfrak=eufm10 +\font\ninefrak=eufm9 +\font\eightfrak=eufm8 +\font\sevenfrak=eufm7 + +\font\hv=phvr + +\newfam\itbfam +\newfam\frakfam +\newfam\msbmfam +\newfam\msamfam + +% take `<=' and `>=' from Euler ... +% but this will be changed back in the title due to +% the absence of the bold version + +\mathchardef\leq="3\hexnumber@\msamfam36 \let\le=\leq +\mathchardef\geq="3\hexnumber@\msamfam3E \let\ge=\geq +\mathchardef\emptyset="0\hexnumber@\msbfam3F + +% left and right `french quotes' (guillemots); the characters reside in lhr fonts + +\chardef\lqq='375 +\chardef\rqq='376 + +\def\cdotfill{\cleaders\hbox {$\m@th \mkern .5mu\cdot\mkern .5mu$}\hfill} +\def\dinkus{$\ast\ast\ast$} +\def\asterism{\setbox0\hbox{$\ast$}\copy0 \kern-.3\wd0 \raise\ht0 \copy0 \kern-.3\wd0 \copy0 } + +\newskip\ttglue +\def\tenpoint{\def\rm{\fam0\tenrm}% + \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm + \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei + \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \def\it{\fam\itfam\tenit}% + \textfont\itfam=\tenit\scriptfont\itfam=\sevenit + \scriptscriptfont\itfam=\fiveit + \def\itbold{\fam\itbfam\tenboldi}% + \textfont\itbfam=\tenboldi\scriptfont\itfam=\sevenboldi + \scriptscriptfont\itbfam=\fiveboldi + \def\sl{\fam\slfam\tensl}% + \textfont\slfam=\tensl + \def\bf{\fam\bffam\tenbf}% + \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf + \scriptscriptfont\bffam=\fivebf + \def\tt{\fam\ttfam\tentt + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + }% + \def\ttex{\tentex + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + }% + \def\ttl{\let\it\tentitlei\let\sl\tentitlei\tentitle}% + \def\ssf{\tenss}% + \textfont\ttfam=\tentt + \tt \ttglue=.5em plus.25em minus.15em + \def\Bbb{\fam\msbmfam\tenmsbm}% + \textfont\msbmfam=\tenmsbm\scriptfont\msbmfam=\sevenmsbm \scriptscriptfont\msbmfam=\fivemsbm + \textfont\msamfam=\tenmsam\scriptfont\msamfam=\sevenmsam + \scriptscriptfont\msamfam=\fivemsam + \textfont\frakfam=\tenfrak + \def\frak##1{{\fam\frakfam\tenfrak ##1}}% + \normalbaselineskip=12pt + \let\sc=\eightrm + \let\mc=\ninerm + \let\cyr=\tencyr + \let\big=\tenbig + \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}% + \normalbaselines\rm} + +\def\ninepoint{\def\rm{\fam0\ninerm}% + \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm + \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei + \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \def\it{\fam\itfam\nineit}% + \textfont\itfam=\nineit\scriptfont\itfam=\sixit + \def\itbold{\fam\itbfam\nineboldi}% + \textfont\itbfam=\nineboldi\scriptfont\itfam=\sixboldi + \def\sl{\fam\slfam\ninesl}% + \textfont\slfam=\ninesl + \def\bf{\fam\bffam\ninebf}% + \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf + \scriptscriptfont\bffam=\fivebf + \def\tt{\fam\ttfam\ninett + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + }% + \def\ttex{\ninetex + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + }% + \def\ttl{\let\it\ninetitleit\let\sl\ninetitleit\ninetitle}% + \def\ssf{\niness}% + \textfont\ttfam=\ninett + \tt \ttglue=.5em plus.25em minus.15em + \def\Bbb{\fam\msbmfam\ninemsbm}% + \textfont\msbmfam=\ninemsbm\scriptfont\msbmfam=\sixmsbm \scriptscriptfont\msbmfam=\fivemsbm + \textfont\msamfam=\ninemsam\scriptfont\msamfam=\sixmsam + \scriptscriptfont\msamfam=\fivemsam + \textfont\frakfam=\ninefrak + \def\frak##1{{\fam\frakfam\ninefrak ##1}}% + \normalbaselineskip=11pt + \let\sc=\sevenrm + \let\mc=\eightrm + \let\cyr=\ninecyr + \let\big=\ninebig + \setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}% + \normalbaselines\rm} + +\def\eightpoint{\def\rm{\fam0\eightrm}% + \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm + \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei + \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \def\it{\fam\itfam\eightit}% + \def\itbold{\fam\itbfam\eightboldi}% + \textfont\itfam=\eightit + \def\sl{\fam\slfam\eightsl}% + \textfont\slfam=\eightsl + \def\bf{\fam\bffam\eightbf}% + \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf + \scriptscriptfont\bffam=\fivebf + \def\tt{\fam\ttfam\eighttt + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + }% + \def\ttex{\eighttex + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + }% + \textfont\ttfam=\eighttt + \tt \ttglue=.5em plus.25em minus.15em + \def\Bbb{\fam\msbmfam\eightmsbm}% + \textfont\msbmfam=\eightmsbm\scriptfont\msbmfam=\sixmsbm \scriptscriptfont\msbmfam=\fivemsbm + \textfont\msamfam=\eightmsam\scriptfont\msamfam=\sixmsam + \scriptscriptfont\msamfam=\fivemsam + \textfont\frakfam=\eightfrak + \def\frak##1{{\fam\frakfam\eightfrak ##1}}% + \normalbaselineskip=9pt + \let\sc=\sixrm + \let\mc=\sevenrm + \let\cyr=\eightcyr + \let\big=\eightbig + \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}% + \normalbaselines\rm} + +\def\sevenpoint{\def\rm{\fam0\sevenrm}% + \textfont0=\sevenrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm + \textfont1=\seveni \scriptfont1=\sixi \scriptscriptfont1=\fivei + \textfont2=\sevensy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \def\it{\fam\itfam\sevenit}% + \def\itbold{\fam\itbfam\sevenboldi}% + \textfont\itfam=\sevenit + \def\sl{\fam\slfam\sevensl}% + \textfont\slfam=\sevensl + \def\bf{\fam\bffam\sevenbf}% + \textfont\bffam=\sevenbf \scriptfont\bffam=\sixbf\scriptscriptfont\bffam=\fivebf + \def\tt{\fam\ttfam\seventt + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + }% + \textfont\ttfam=\seventt + \tt \ttglue=.5em plus.25em minus.15em + \def\Bbb{\fam\msbmfam\sevenmsbm}% + \textfont\msbmfam=\sevenmsbm\scriptfont\msbmfam=\sixmsbm \scriptscriptfont\msbmfam=\fivemsbm + \textfont\msamfam=\sevenmsam\scriptfont\msamfam=\sixmsam + \scriptscriptfont\msamfam=\fivemsam + \textfont\frakfam=\sevenfrak + \def\frak##1{{\fam\frakfam\sevenfrak ##1}}% + \normalbaselineskip=8pt + \let\sc=\sixrm + \let\mc=\sixrm + \let\big=\sevenbig + \setbox\strutbox=\hbox{\vrule height6pt depth2pt width0pt}% + \normalbaselines\rm} + +% temporary registers + +\input trt1.sty + +% we can prevent acrobat from defaulting to +% the "shrink to printable area" setting, which causes an 8.5"\times11" page to shrink +% by about 6\% to fit onto the printable region of the physical printer; +% this macro was contributed by Jeff Norden. + +\ifx\pdfcatalog\UNDEFINED\else + \pdfcatalog{/ViewerPreferences<</PrintScaling/None>>}% +\fi + +% a slightly involved way of determining whether we are making a pdf file is +% due to the fact that pdftex can output dvi files as well. + +\newif\ifmakepdf + +\ifx\pdfoutput\undefined + \makepdffalse +\else + \ifnum\pdfoutput>\z@ + \makepdftrue + \else + \makepdffalse + \fi +\fi + +% cleaning up whitespace + +\newif\ifspaceleft + +\def\removewhitespace{% a macro that removes glue, kerns, and + % penalties before the current point + \loop\spaceleftfalse\unwhitespaceonce\ifspaceleft\repeat +} + +\def\unwhitespaceonce{% +\ifhmode + \ifdim\lastskip=\z@\else\unskip\spacelefttrue\fi + \ifdim\lastkern=\z@\else\unkern\spacelefttrue\fi + \ifnum\lastpenalty=\z@\else\unpenalty\spacelefttrue\fi +\fi} + +% color management + +% remember the cmyk color in an impossible control sequence + +\def\colordef#1#2{\expandafter\def\csname cmykc@l@r #1\endcsname{#2}} + +% color switch: we maintain our own color stack for pdf output; +% newer versions of pdf\TeX\ have `proper' color stack primitives +% which provide a more reliable implementation (across page breaks +% and inside insertions, for example) + +\def\colorset#1{\begingroup + \ifmakepdf + \expandafter\let\expandafter\currentc@l@r\csname cmykc@l@r #1\endcsname + \edef\next{\noexpand\pdfliteral{\csname cmykc@l@r #1\endcsname\space k}}\next + \else + \special{ps:gsave}% + \edef\next{\special{ps:\csname cmykc@l@r #1\endcsname\space setcmykcolor}}\next + \fi +} + +\def\currentc@l@r{1 1 1 1} % start out black + +\def\quickcolordef#1#2{\colordef{#1}{#2}% + \expandafter\def\csname color#1\endcsname##1{\colorset{#1}##1\restorecolor}} + +\def\grayset#1{\begingroup + \ifmakepdf + \def\currentc@l@r##1k{#1 g}% so we can use \restoreco... + \pdfliteral{#1 g}% + \else + \special{ps:gsave}\special{ps:#1 setgray}% + \fi +} + +\def\restorecolor{\endgroup + \ifmakepdf + \expandafter\pdfliteral\expandafter{\currentc@l@r\space k}% + \else + \special{ps:grestore}% + \fi +} + +% macros to provide pdf references to outside documents as well as inside the code + +\def\locallink#1{% + \ifmakepdf\colorset{link}\pdfstartlink attr {/Border [0 0 0]} goto name {#1}\fi} + +\def\exlinkpage#1#2#3{\colorset{link}% + \ifmakepdf\pdfstartlink attr {/Border [0 0 0]} goto file {#1} page #2 {#3}\fi} + +\def\endlink{\ifmakepdf\pdfendlink\restorecolor\fi} + +\def\namedspot#1{\ifmakepdf + % raise the reference to make sure that the viewer window shows the + % whole line in which the reference occurs + \raise\ht\strutbox\vbox to 0pt{\vss\hbox to 0pt{\pdfdest name {#1} xyz}}% +\fi} + +% macros to typeset hex values in customized form (useful when typesetting embedded code) + +% the line translator: take a sequence of tokens and translate it into another sequence +% #1 is the sequence of tokens (will be expanded) to insert at the beginning +% #2 is the sequence of tokens (will be expanded) to insert before every token in the sequence +% #3 is the first sequence of tokens (will be expanded) to insert between tokens in the sequence +% #4 is the second sequence of tokens (will be expanded) to insert between tokens in the sequence +% #5 is the sequence of tokens (will be expanded) to insert at the end +% #6 is the command to execute after each token +% #7 is original sequence +% #8 is the resulting sequence + +\def\linetranslator#1#2#3#4#5#6:#7>#8{% + \def\ins@rt{#2}\def\insert@{#3}\def\@insert{#4}% + \def\@nd{#5}\def\c@mmand{#6}\let\t@kens#8% + \edef\next{\t@kens{\the\t@kens#1}}\next + \expandafter\linetr@nslator\the#7\end} + +\def\linetr@nslator#1#2{% + \ifx#1\end + \let\next\relax % no more tokens left + \else + \ifx#2\end % #1 is the last token + \edef\next{\t@kens{\the\t@kens\ins@rt#1\@nd}}\next + \else + \edef\next{\t@kens{\the\t@kens\ins@rt#1\insert@\@insert}}\next + \c@mmand + \fi + \let\next\linetr@nslator + \fi\next#2 +} + +% the mask translator: take a sequence of pairs {length:number}{contents} and translate it into another sequence +% #1 is the sequence of tokens (will be expanded) to insert at the beginning +% #2 is the sequence of tokens (will be expanded) to insert before every pair in the sequence +% #3 is the first sequence of tokens (will be expanded) to insert between pairs in the sequence +% #4 is the second sequence of tokens (will be expanded) to insert between pairs in the sequence +% #5 is the sequence of tokens (will be expanded) to insert at the end +% #6 is the command to execute after each pair +% #7 is original sequence +% #8 is the resulting sequence + +\def\masktranslator#1#2#3#4#5#6:#7>#8{% + \def\ins@rt{#2}\def\insert@{#3}\def\@insert{#4}% + \def\@nd{#5}\def\c@mmand{#6}\let\t@kens#8% + \edef\next{\t@kens{\the\t@kens#1}}\next + \m@sktranslator#7{"40000000}\relax\relax} + +\def\m@sktranslator#1#2#3{% + \ifnum#1<"40000000 % only happens when there are no pairs + \ifnum#3<"40000000 % not the last pair + \edef\next{\t@kens{\the\t@kens\ins@rt{#1}{#2}\insert@\@insert}}\next + \c@mmand + \let\next\m@sktranslator + \else + \edef\next{\t@kens{\the\t@kens\ins@rt{#1}{#2}\@nd}}\next + \let\next\m@sktr@nslator + \fi + \else + \let\next\m@sktr@nslator + \fi + \next{#3}% +} + +\def\m@sktr@nslator#1{} + +% binary converter + +\def\binary#1{% + \ifx#1\end + \let\next\relax + \else + \bin@ry#1\let\next\binary + \fi\next} + +\let\bits\toksa % storage for binary conversion bits +\newtoks\bytes % storage for the binary representation +\let\quotient\tempca +\let\oldquotient\tempcb + +\def\bin@ry#1{\tempcc=4 \quotient="#1 \oldquotient=\quotient +\loop \divide\quotient by2 \multiply\quotient by2 \advance\oldquotient by-\quotient + \advance\tempcc by\m@ne + \edef\next{\bits{\the\oldquotient\the\bits}}\next + \divide\quotient by2 \oldquotient=\quotient +\ifnum\tempcc > \z@ +\repeat +\edef\next{\bytes{\the\bytes\the\bits}}\next +\bits{}} + +% display macros: +% +% o registers + +\newtoks\digittable % the table representing the register +\newcount\columncount % counter for the current column + +% o fonts + +\font\fivessb=phvb at4pt + +% o generic control sequences + +\def\incrementcc{\advance\columncount by\@ne} +\def\decrementcc{\advance\columncount by\m@ne} + +% o mask highlighting + +% the strange looking definition of \m@skspan originates from \multispan in plain.tex: +% \newcount\mscount +% \def\multispan#1{\omit \mscount#1\relax +% \loop\ifnum\mscount>\@ne \sp@n\repeat} +% \def\sp@n{\span\omit\advance\mscount\m@ne} +% +% the number of `physical' columns to span is (2 * columns - 1) due to the fact that we +% have to span the gaps between columns as well. + +\def\m@skspan#1#2{% + \multispan{#1\advance\mscount by\mscount\advance\mscount by-1}{\vrule\highltcl{\leaders\hrule height 4pt\hfil}\vrule}% +} + +% o mask underlining + +\def\m@sksp@n#1#2{% + \multispan{#1\advance\mscount by\mscount\advance\mscount by-1}{\hrulefill}% +} + +% o mask legend typesetting + +\def\m@sklegend#1#2{% + \multispan{#1\advance\mscount by\mscount\advance\mscount by-1}{\hfil\lgndcl{\fivessb#2}\hfil}% +} + +% o displaying each digit + +\def\dgtdispl@y#1#2{% + \ifx#20% + \let\colorbg\lightcl\let\colord\darkcl + \else + \let\colorbg\darkcl\let\colord\lightcl + \fi + \vrule\colorbg{\vrule height4pt width 12.5pt}% + \llap{\raise.6pt\hbox{\colord{\fivessb#1}$\,$}}\vrule +} + +% o typesetting space between digits + +\def\c@lumnspacer#1{\tempca#1\tempcb\tempca\divide\tempca by8\multiply\tempca by8 + \ifnum\tempca=\tempcb + \middlediamond + \else + \tempca#1\tempcb\tempca\divide\tempca by4\multiply\tempca by4 + \ifnum\tempca=\tempcb + \middledot + \else + \hfil + \fi + \fi} + +% oo dimond to separate bytes + +\def\middlediamond{\setbox0=\hbox{$\scriptscriptstyle\diamond$}\tempda=4pt \advance\tempda by-\ht0 + \divide\tempda by2 \hss\raise\tempda\box0\hss}% + +% oo dot to separate nybbles + +\def\middledot{\setbox0=\hbox{.}\tempda=4pt \advance\tempda by-\ht0 + \divide\tempda by2 \hss\raise\tempda\box0\hss}% + +% o put it all together + +\let\stcr\cr % so that this can be used inside \tabalign which redef's \cr + +\def\regdisplay#1#2{{% + \binary#1\end + \linetranslator{}{\hrulefill\noexpand\eatone}{&$\,\,$}{&}{\stcr}{\incrementcc}:\bytes>\digittable + \linetranslator{}{\noexpand\dgtdispl@y{\the\columncount}}{&\noexpand\c@lumnspacer{\the\columncount}}{&}% + {\stcr}{\decrementcc}:\bytes>\digittable + \masktranslator{}{\noexpand\m@sksp@n}{&\hfil}{&}{\stcr}{\relax}:{#2}>\digittable + \masktranslator{}{\noexpand\m@skspan}{&\hfil}{&}{\stcr}{\relax}:{#2}>\digittable + \masktranslator{}{\noexpand\m@sksp@n}{&\hfil}{&}{\stcr}{\relax}:{#2}>\digittable + \expandafter\digittable\expandafter{\the\digittable\noalign{\vskip-3.8pt}}% + \masktranslator{}{\noexpand\m@sklegend}{&\hfil}{&}{\stcr}{\relax}:{#2}>\digittable + \vbox{\offinterlineskip + \halign{&##\stcr + \the\digittable + } + }% +}} + +% an alternate display + +\def\altmiddledot{\setbox0=\hbox{.}% + \tempda=\ht\thezero \advance\tempda by-\ht0 + \divide\tempda by2 \advance\tempda by -\dp\thezero + $\,$\raise\tempda\box0$\,$% +} + +\def\altmiddlediamond{\setbox0=\hbox{$\scriptscriptstyle\diamond$}% + \tempda=\ht\thezero \advance\tempda by-\ht0 + \divide\tempda by2 \advance\tempda by -\dp\thezero + \hss\raise\tempda\box0\hss +} + +\def\altdgtdispl@y#1#2{% + \ifx#20% + \let\colorbg\lightcl\let\colord\darkcl + \else + \let\colorbg\darkcl\let\colord\lightcl + \fi + \setbox0=\hbox{$\,$0$\,$}\tempda\ht0 + \advance\tempda by 2pt \ht0\tempda + \vrule\colorbg{\lower1pt\hbox{\vrule height\ht0 depth\dp0 width \wd0}}% + \llap{\colord{\raise.5pt\hbox{\fivessb#1$\,$}}}\vrule +} + +\def\altc@lumnspacer#1{\tempca#1\tempcb\tempca + \divide\tempca by4\multiply\tempca by4 + \ifnum\tempca=\tempcb + \ % + \else + \kern1pt% + \fi +} + +\def\bytedisplay#1{{% + \binary#1\end + \linetranslator{}{\hrulefill\noexpand\eatone}{&\hfil}{&}{\stcr}{\incrementcc}:\bytes>\digittable + \linetranslator{}{\noexpand\altdgtdispl@y{\the\columncount}}{&\noexpand\altc@lumnspacer{\the\columncount}}{&}% + {\stcr}{\decrementcc}:\bytes>\digittable + \linetranslator{}{\hrulefill\noexpand\eatone}{&\hfil}{&}{\stcr}{\incrementcc}:\bytes>\digittable + \lower\dp\thezero\vbox{\offinterlineskip + \halign{&##\stcr + \the\digittable + } + }% +}} + +\quickcolordef{peach}{0 0.06 0.14 0} +\quickcolordef{corn}{0 0.06 0.63 0.02} +\quickcolordef{sandybrown}{0 0.33 0.61 0.04} +\quickcolordef{darkwood}{0 0.29 0.5 0.48} +\quickcolordef{link}{0 0 1 0.30} + +\def\colorblack#1{\grayset{0}#1\restorecolor} +\def\colorwhite#1{\grayset{1}#1\restorecolor} +\def\colorgray#1{\grayset{.5}#1\restorecolor} + +\newif\iffullcolorpalette +\fullcolorpalettetrue + +\iffullcolorpalette + \let\lightcl=\colorpeach + \let\shadedcl=\colorcorn + \let\highltcl=\colorgray + \let\lgndcl=\colorwhite +\else + \let\lightcl=\colorwhite + \let\shadedcl=\colorgray + \let\highltcl=\colorwhite + \let\lgndcl=\colorblack +% \let\colorlinkstart=\begingroup +% \let\colorlinkend=\endgroup +\fi + \let\darkcl=\colorblack + +% macros to typeset the hex numbers in `graphic' format + +\newtoks\registerlegend + +\def\registerdisplay#1\end{\edef\next{\the\registerlegend}% + \ifx\next\empty + \edef\next{\noexpand\bytedisplay{#1}}\next + \else + \edef\next{\noexpand\regdisplay{#1}{\the\registerlegend}}\next + \fi +} + +\newbox\thezero + +\setbox\thezero=\hbox{\lower1pt\hbox{\vbox{\offinterlineskip +\halign{#&$\,$#$\,$&#\cr +\noalign{\hrule} +\omit\vrule height1pt&&\omit\vrule height1pt\cr +\vrule&\phantom0&\vrule\cr +\omit\vrule height1pt&&\omit\vrule height1pt\cr +\noalign{\hrule} +}}}} + +\def\texbinary{\global\let\oldT\T + \global\def\T##1{{\let\end\relax\let\^\registerdisplay##1\end{\tt :}\let\^\hexify##1\end}}} + +\def\endtexbinary{\global\let\T\oldT} + +\def\hexify#1\end{\hbox{{\tt #1}$_{\scriptscriptstyle1\kern-.7pt6}$}} + +% verbatim listing macros borrowed (with changes) from The TeXbook + +\newcount\democodelc + +\chardef\other=12 +\def\ttverbatim{\begingroup + \catcode`\\=\other + \catcode`\{=\other + \catcode`\}=\other + \catcode`\$=\other + \catcode`\&=\other + \catcode`\#=\other + \catcode`\%=\other + \catcode`\~=\other + \catcode`\_=\other + \catcode`\|=\other + \obeyspaces \obeylines \tt \ttglue=.5em plus.25em minus.15em } + +{\catcode`\^=\active \catcode`\*=7 \obeylines + \gdef^{\leavevmode\ttverbatim \spaceskip\ttglue \def**M{\endgroup\cr}\let^=\endgroup}} + +\def\beginlines{\begingroup\parindent0pt \obeylines \everypar{\strut}\catcode`\^=\active} +\def\endlines{\endgroup} + +\def\paddednumber#1{\ifnum #1 < 10 0\number#1\relax\else \number#1\fi} + +% demo code display +% **H will produce a `|', **K can be used as an escape character, **L and **N +% can be used i place of left and right braces to provide some control + +{\catcode`\ =\active\gdef {\phantom{\char"20\relax}}\catcode`\^^H=\active\gdef^^H{\yl}}% + +\newif\ifnumberlines + +\def\begindemo{% + \medskip + \bgroup + \def\linenoup{% + \global\advance\democodelc by1 + \ifnumberlines{\sevenrm\paddednumber\democodelc}\fi} + \def\nooutput{\omit\hfil{\sevenrm\strut[more code $\ldots$]}\hfil\cr\noalign{\kern3pt}} + \catcode`\^=\active\democodelc=0 \catcode`\*=7 + \chardef\*=`\*% + \catcode`\^^H=\active % ^^H + \catcode`\^^K=0 \catcode`\^^L=1 \catcode`\^^N=2 + \tabskip=0pt plus 1 fill + \halign \demoastyle\bgroup\linenoup\hskip\demomargin ##\hfil\hskip\demomargin% + \ifnumberlines{\sevenrm\paddednumber\democodelc}\fi\cr% +} + +\def\enddemo{\egroup\egroup\medskip\noindent} + +\newskip\demomargin +\demomargin=3em + +\def\demoastyle{to\hsize} + +% macros to provide some primitive alignment + +\def\texalignment{\setbox0\lastbox\setbox0\lastbox\unkern\begingroup\settabs 3 \columns +\let\C\tabC\let\8\tabalign\def\5{\relax\ifmmode\oopsamp\else\clearamp\fi}\def\6{\strut\cr}} + +\def\oopsamp{$&$} +\def\clearamp{&} + +\def\texalignmentshort{\setbox0\lastbox\setbox0\lastbox\unkern\begingroup\settabs 2 \columns + \let\C\tabC\let\8\tabalign\def\5{\ifmmode\oopsamp\else\clearamp\fi}\def\6{\strut\cr}} + +\def\endtexalignment{\vskip-\baselineskip\strut\endgroup} + +\def\eatcr#1\6{\ignorespaces} + +\newtoks\postlimbotoks + +\def\postlimbostuff{% +} + +\def\picture#1{\ifmakepdf\pdfximage{#1.pdf}\pdfrefximage\pdflastximage + \else + \epsfbox{#1.eps}\fi +} + +\let\yl| % to use in \TeX\ mode instead of `|' +\def\greaterthan{>} % CTANGLE always leaves a space after `>' in the output which interferes with some macros + +% redefinitions of various CWEB macros; + +% macros that provide a way to customize printing of reserved words + +\newtoks\tempseq +\tempseq={RVD} +\let\oldamp\& +\let\oldoneletterid\| +\def\replaceunderscore#1{\let\next\replaceunderscore + \ifx#1\_\tempseq=\expandafter{\the\tempseq x}\else + \ifx#1\#\tempseq=\expandafter{\the\tempseq H}\else + \ifx#1\end\let\next\relax\else\tempseq=\expandafter{\the\tempseq #1}\fi + \fi + \fi\next} +\def\reservedid#1{{\replaceunderscore#1\end + \expandafter\let\expandafter\newseq\csname\the\tempseq\endcsname + \ifx\relax\newseq\oldamp{#1}\else\newseq\fi}} + +\def\reservedoneletterid#1{{% + \expandafter\let\expandafter\newseq\csname\the\tempseq\string#1\endcsname + \ifx\relax\newseq\oldoneletterid{#1}\else\newseq\fi}} + +\def\defreserved#1{% + \expandafter\def\csname\the\tempseq #1\endcsname +} + +\let\&\reservedid +\let\|\reservedoneletterid + +% cweb macros adopted to making typesetting languages other than C possible: Makefile and linker scripts. + +\tempca=\catcode`\^^I% remember the old catcode +\catcode`\^^I=\active +\def\vb{\begingroup\catcode`\^^I=\active\vvb} % give the tab a chance to change its catcode before the rest is scanned +\def\vvb#1{{% + \hbox{\vbox{\ttex%\tt + \let\\=\BS % backslash in a string + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + \let\~=\TL % tilde in a string + %\let\ =\space % space in a string + \def\ {\phantom{0}}% + \let\_=\UL % underline in a string + \let\&=\AM % ampersand in a string + \let\^=\CF % circumflex in a string + \let\$=\oldmathS % dollar sign + \def^^I{$\llcorner$&$\lrcorner$}% a tab is a tab + \tabalign{}#1\cr}}}\endgroup} % verbatim string +\catcode`\^^I=\tempca + +\def\hex{\hbox{\tt\aftergroup}\aftergroup\hexsubscript} +\def\hexsubscript{\hbox{$_{\scriptscriptstyle1\kern-.7pt6}$}} +\let\K=\Leftarrow +\setbox\MGbox=\hbox{\hbox{\ninei\char'053}} +\def\R{\hbox{$^{\rm not}$}} +\let\CM\lnot +\def\MRL#1{\KK#1}\def\KK#1#2{\buildrel\;{\let\OR\lor\scriptscriptstyle#1}\over#2} +\def\C#1{\5\5\quad$\triangleright\,${\rm #1}$\,\triangleleft$} +\let\Z=\leq \let\G=\geq +\let\E== + +\def\tabC#1{\quad$\triangleright\,${\cmntfont#1}$\,\triangleleft$} + +% better `hash' + +\let\oldhash\# +\def\#{\lower.5pt\hbox{\.{\oldhash}}} + +\def\.#1{\leavevmode\hbox{\tt % typewriter type for strings + \let\\=\BS % backslash in a string + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + \let\~=\TL % tilde in a string + \let\ =\SP % space in a string + %\let\_=\UL % underline in a string + \let\&=\AM % ampersand in a string + \let\^=\CF % circumflex in a string + \let\uscore\_\chardef\_=`\_% + #1\kern.05em}} + +% macros to change the appearance of section headers + +\outer\def\N#1#2#3.{% beginning of starred section + \ifacro{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi + \gdepth=#1\gtitle={#3}\MN{#2}% + \ifon\ifnum#1<\secpagedepth \vfil\eject % force page break if depth is small + \else\vfil\penalty-100\vfilneg\vskip\intersecskip\fi\fi + \message{*\secno} % progress report + \def\stripprefix##1>{}\def\gtitletoks{#3}% + \edef\gtitletoks{\expandafter\stripprefix\meaning\gtitletoks}% + \edef\next{\write\cont{%\noexpand\noexpand\noexpand\eatone{\noexpand\meaning\noexpand\ZZ}% + \noexpand\noexpand\noexpand % AS this is a (sort of) bug in cwebmac.tex + % as long as the index is output (i.e. ...\eject) + % before all the sections this is unnecessary + % uncomment the line after the brace to see what \ZZ + % expands to in case of weird errors + \ZZ{\gtitletoks}{#1}{\secno}% write to contents file + {\noexpand\the\pageno}{\the\toksE}}}\next % \ZZ{title}{depth}{sec}{page}{ss} + \ifpdftex\expandafter\xdef\csname curr#1\endcsname{\secno}% + \ifnum#1>0\countB=#1 \advance\countB by-1 + \advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}\fi\fi + \ifpdf\special{pdf: outline #1 << /Title (\the\toksE) /Dest + [ @thispage /FitH @ypos ] >>}\fi + \ifon\startsection{\ttl#3.\ }\ignorespaces} % changed the font; AS + +\let\oldN\N + +\outer\def\textN#1#2#3.{% beginning of starred section in `text' mode + \ifacro{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi + \gdepth=#1\gtitle={#3}\MN{#2}% + \ifon + \ifnum#1<2 + \vfil\eject % force page break for chapters + \else + \vskip0pt plus 3.5\baselineskip\penalty-100\vskip0pt plus -3.5\baselineskip\vskip\intersecskip % no page break + \fi + \fi + \message{*\secno} % progress report + \def\stripprefix##1>{}\def\gtitletoks{#3}% + \edef\gtitletoks{\expandafter\stripprefix\meaning\gtitletoks}% + \edef\next{\write\cont{%\noexpand\noexpand\noexpand\eatone{\noexpand\meaning\noexpand\ZZ}% + \noexpand\noexpand\noexpand % AS this is a (sort of) bug in cwebmac.tex + % as long as the index is output (i.e. ...\eject) + % before all the sections this is unnecessary + % uncomment the line after the brace to see what \ZZ + % expands to in case of weird errors + \ZZ{\gtitletoks}{#1}{\secno}% write to contents file + {\noexpand\the\pageno}{\the\toksE}}}\next % \ZZ{title}{depth}{sec}{page}{ss} + \ifpdftex\expandafter\xdef\csname curr#1\endcsname{\secno}% + \ifnum#1>0\countB=#1 \advance\countB by-1 + \advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}\fi\fi + \ifpdf\special{pdf: outline #1 << /Title (\the\toksE) /Dest + [ @thispage /FitH @ypos ] >>}\fi + \ifon\startsection{\ttl#3}\smallskip\noindent\ignorespaces} + +\outer\def\textM#1{\MN{#1}\ifon\vskip0pt plus 3\baselineskip\penalty-100\vskip0pt plus -3\baselineskip % no page break + \vskip\intersecskip\startsection\ignorespaces} + +\def\MN#1{\par % common code for \M, \N + {\xdef\secstar{#1}\let\*=\empty\xdef\secno{#1}}% remove \* from section name + \ifx\secno\secstar \onmaybe \else\ontrue \fi + \mark{{\secno}{\the\gdepth}{\the\gtitle}}} % remove the annoying + % `paragraph' sign; AS + +% a new start section macro: fix the extra space bug and push the setion number to the margins + +\def\stseclap{\rightskip=0pt % get out of C mode (cf. \B) + \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 + \noindent{\let\*=\lapstar\llap{\tentitle\secstar\quad}}% push it to the margins + \ifpdftex\smash{\raise\baselineskip\hbox to0pt{% + \let\*=\empty\ifmakepdf\pdfdest num \secstar fith\fi}}% this space is a bug in the original cwebmac.tex; AS + \else\ifpdf\smash{\raise\baselineskip\hbox to0pt{% + \let\*=\empty\special{% + pdf: dest (\romannumeral\secstar) [ @thispage /FitH @ypos ]}}}\fi\fi} + +\let\startsection\stseclap + +% make page and sectoin number hang in the margins; \quad is chosen to +% be consistent with section appearance; the page numbers are printed +% in old-style numerals; + +\def\lheader{\headertrue\llap{\mainfont\oldstyle\the\pageno\tentitle\quad}\eightpoint\rm\grouptitle + \hfill\title\rlap{\tentitle\quad\tenpoint$^{\hbox{\sevenrm\topsecno}}_{\hbox{\sevenrm\botsecno}}$}} % top line on left-hand pages +\def\rheader{\headertrue +\llap{\tenpoint$^{\hbox{\sevenrm\topsecno}}_{\hbox{\sevenrm\botsecno}}$\tentitle\quad}% +\eightpoint\rm\title\hfill + \grouptitle\rlap{\tentitle\quad\mainfont\oldstyle\the\pageno}} % top line on right-hand pages + +\def\botsecno{\expandafter\takeone\botmark} % the first section on the + % next page + +% from time to time, entries must be omitted from the index; +% the macros below implement a mechanism to do that + +\newif\ifisindexable + +\def\setindexable#1{% + \isindexabletrue + \def\next{#1}% + \expandafter\s@t@ndexable\unindexable.\end +} + +\def\s@t@ndexable#1#2\end{% + {% + \def\ifisindexable{#1}% + \ifx\ifisindexable\next + \yybreak{\aftergroup\isindexablefalse\aftergroup\eattoend}% + \else + \def\ifisindexable{#2}% + \ifx\ifisindexable\dotcontainer + \yybreak@{\aftergroup\eattoend}% + \else + \yybreak@{\aftergroup\s@t@ndexable}% + \fi + \yycontinue + }% + #2\end +} + +\def\inxmod{% + \write\cont{} % ensure that the contents file isn't empty + \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother + \closeout\cont % the contents information has been fully gathered + \message{Index:} + \medskip + \eightpoint\raggedright + \fnotesstart=2 + \fnotesspan=1 + \noofcolumns=3 + \icgap=5pt% + \linecount=3 + \setmcparams + \dsskip=0pt% + \adjskip=0pt plus 9pt% + \ifx\unindexable\UNDEFINED + \def\unindexable{{$\TeXx$}{$\TeXa$}{$\TeXb$}{$\TeXf$}{$\TeXao$}{$\TeXfo$}}% + \else + \expandafter\def\expandafter\unindexable\expandafter{\unindexable + {$\TeXx$}{$\TeXa$}{$\TeXb$}{$\TeXf$}{$\TeXao$}{$\TeXfo$}% + }% + \fi + \def\I##1, ##2.{% + {% + \setindexable{##1}% + \ifisindexable + \else + \aftergroup\eatone + \fi + }% + {% + \hangindent1em\noindent##1:\kern.5em + \ifacro\pdfnote##2.\else##2\fi.% + \par + }% + }% + % indexing macros for grammar terms + \def\termidstring##1{% processed name in italics + \numberstocharsandspaces##1\end + \let\optstrextra\optstrextraesc + \expandafter\nameproc\expandafter{\the\toksa}% + \def\idxentry{{\it\the\toksa}}% + }% + \def\termvstring##1{% processed name in typewriter style + \numberstocharsandspaces##1\end + \let\optstrextra\optstrextraesc + \expandafter\nameproc\expandafter{\the\toksa}% + \def\idxentry{{\tt\def\_{\char`\_}\the\toksa}}% + }% + \def\termttstring##1{% straightforward typewriter text + \numberstocharsandspaces##1\end + \def\idxentry{{\tt\the\toksa}}% + }% + \def\termostring##1{% options (e.g. \flex\ and \bison\) + \numberstocharsandspaces##1\end + \def\idxentry{{$\langle$\bf\the\toksa$\rangle$}}% + }% + \let\termhdrstring\termidstring + \def\termstring##1{% + \numberstocharsandspaces##1\end + \let\optstrextra\optstrextraesc + \expandafter\nameproc\expandafter{\the\toksa}% + \def\idxentry{{\tt"\the\toksa"}}% + }% + \def\texcsstring##1{% + \numberstocharsandspaces##1\end + \def\idxentry{% + \def\texnspace{index}% + \def\getcescape{% an \ seen is really an \, and will not go through C string processing + \def\next{escape}% + \action\next\in\currentstate + }% + \termindexfalse\expandafter\inlineTeXx\expandafter{\expandafter/\the\toksa}% + }% + }% + \expandafter\def\csname acharswitch:index\endcsname{% correct reserved \TeX\ characters a la CWEB verbatim + %$\%\\ % unaffected + %\#\ % these never appear + _{% + \yybyte\expandafter{\csname \the\yybyte\endcsname}% + \expandafter\yycp@\expandafter`\the\yybyte\relax + \mkpurebyte + \yyreturn + } + }% + \expandafter\setspecialcharsfrom\csname acharswitch:index\endcsname + \expandafter\let\expandafter\acharswitch\csname acharswitch:index\endcsname + \def\texlexer{% now that all character codes are 12 + \let\default\yygetchar + \let\next\yycp@ + \ifnum\yycp@>"3F % + \ifnum\yycp@<"5B % an uppercase letter or @ + \def\next{letter}% + \fi + \fi + \ifnum\yycp@>"60 % + \ifnum\yycp@<"7B % + \def\next{letter}% + \fi + \fi + \action\next\in\currentstate + }% + \def\indexseparator##1##2{% + \vskip.5\baselineskip + \centerline{\dinkus}% + \vskip.5\baselineskip + } + \def\GI##1##2##3##4.{% + {% + \def\hostparsernamespace{##1}% + \toksa{}##2{##3}% + \I{\idxentry}##4.% + }% + }% + % end indexing macros for grammar terms + \let\*=\lapstar + \def\[##1]{{\it##1}} % definitions + \def\(##1){$\underline{##1}$} % underlined index item + \def\(##1){{\bf ##1}} % an alternative to the above + \def\e##1e{##1{\sevenpoint$^\circ$}} % terms in examples + \def\f##1f{{\it##1\/\kern.2ex}${}^\circ$} % lhs in examples (italic correction does not seem to be enough) + \def\g##1g{$\underline{##1}^\circ$} % definitions in examples + \def\g##1g{{\bf ##1}$^\circ$} % an alternative to the above + \begindoublecols + \readindex + \otherlangindexseparator + \readgindex +} + +\def\otherlangindexseparator{% + \par + \vskip.5\baselineskip + \centerline{B{\sc ISON AND} \TeX\ {\sc INDEX}}% + \vskip.5\baselineskip + \par +} + +\def\finmod{% + \enddoublecols + \closeout\exampletable + \unsetfootnotes + \parfillskip 0pt plus 1fil + \def\grouptitle{NAMES OF THE SECTIONS} + \let\topsecno=\nullsec + \message{Section names:} + \setpage + \def\note##1##2.{\quad{\eightrm##1~\ifacro{\pdfnote##2.}\else{##2}\fi.}} + \def\Q{\note{Cited in section}} % crossref for mention of a section + \def\Qs{\note{Cited in sections}} % crossref for mentions of a section + \def\U{\note{Used in section}} % crossref for use of a section + \def\Us{\note{Used in sections}} % crossref for uses of a section + \def\I{\par\hangindent 2em}\let\*=* + \ifacro + \def\outsecname{Names of the sections} + \let\Xpdf\X + % + \ifpdftex + \makebookmarks + \pdfdest name {NOS} fitb + \pdfoutline goto name {NOS} count -\secno {\outsecname} + \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% + {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% + \pdfoutline goto num \the\toksA \expandafter{\the\toksE}} + \else + \ifpdf + \special{pdf: outline -1 << /Title (\outsecname) + /Dest [ @thispage /FitH @ypos ] >>} + \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% + {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% + \special{pdf: outline 0 << /Title (\the\toksE) + /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}} + \fi + \fi + \fi + % + \bigskip + \vskip0pt plus 5pt + \penalty-10 + \tenpoint + \centerline{\sc A LIST OF ALL SECTIONS} + \penalty300 + \medskip + \readsections +} + +\newread\trygindex + +\def\readgindex{% + \openin\trygindex=\jobname.gdy + \ifeof\trygindex + \else + \closein\trygindex + \input \jobname.gdy + \fi +} + +% main section macro + +\let\oldB\B + +% stage one macros for `\B' sections: collecting tokens + +% \B is always paired with \par (see CWEAVE section 213) + +\long\def\Bvbpp#1\par{% + \Bvbp@#1\X\X${}\E{}$\par +} + +\long\def\Bvbp@#1\X#2\X$#3\E#4$#5\par{% + \yystringempty{#5}% + {% + \Bvb@@#1\X#2\X$#3\E#4$\par + }{% + \Bvb@@#1\X#2\X${#3}\E{#4}$\begingroup + \ninepoint + #5\par\endgroup + }% +} + +\long\def\Bvb@@#1\X\X$#2\E#3$\par{% + \oldB#1\par +} + +\def\begingsec#1#2\endgsec{% + \ifmmode + \yybreak{{}${}\vbpp{}$#2\vb\endgsec{#1}{$#2}}%$ + \else + \yybreak{\vbpp{}#2\vb\endgsec{#1}{#2}}% + \yycontinue +} + +\long\def\vbpp#1#2\vb#3#{% verbatim section preprocessor + \yystringempty{#3}{% + \vbp@{#1\stashed{#2}}% + }{% + #3{#1\stashed{#2}}% + }% +} + +\long\def\vbp@#1#2{% + \vbpp{#1#2}% +} + +\let\B\Bvbpp + +% URL typesetting + +\def\url#1{% + \hskip0pt plus .3\hsize\penalty100 + \hskip0pt plus -.3\hsize + {% + \def~{\string~}% + \ifmakepdf + \pdfURL{{\tt #1}}{#1}% + \else + {\tt #1}% + \fi + }% + \hskip0pt plus .2\hsize\penalty100 + \hskip0pt plus -.2\hsize +} + +% commonly used names + +\def\CWEB{\.{CWEB}}\def\CTANGLE{\.{CTANGLE}}\def\CWEAVE{\.{CWEAVE}} +\def\splint{\.{SPLinT}} +\def\POSIX{{\sc POSIX}} +\def\ISO{{\mc ISO}} +\def\bison{\.{bison}} +\def\flex{\.{flex}} +\def\lex{\.{lex}} +\def\gcc{\.{gcc}} +\def\GNU{{\sc GNU}} +% from tugboat.cmn +\newbox\TestBox +\def\La{\tempca=\the\fam \leavevmode L% + \setbox\TestBox=\hbox{$\fam\tempca\scriptstyle A$}% + \kern-.5\wd\TestBox\raise.42ex\box\TestBox} +\def\LaTeX{\La\kern-.15em\TeX} + +\def\sqbullet{\kern.3ex\vrule height .9ex width .8ex depth -.1ex }% square bullet (from manmac.tex) + +\def\sqebullet{% empty square bullet + \kern.3ex\vbox{\hsize=.8ex + \hrule height .4pt + \kern-.4pt + \hbox to\hsize{\vrule height .9ex \hfill\vrule height .9ex} + \kern-.4pt + \hrule height .4pt + \kern.1ex + }% +} + +% debugging + +\def\shownethe#1{% + \edef\next{\the#1}% + \ifx\next\empty + \else + \showthe#1% + \fi +} + +\def\showem#1#2#3{\toksa{#1}\toksb{#2}\toksc{#3}{\newlinechar=`^^J% + \errmessage{% + arg. 1: \the\toksa^^J% + arg. 2: \the\toksb^^J% + arg. 3: \the\toksc% +}}} + +% sugar + +\def\FOREVER{{\bf forever}} + +% delay functions prettyprinting and other miscellanea; + +\def\delayhalfsec{\hbox{wait \kern-.5pt\raise1pt\hbox{$\scriptstyle1$}% +\kern-1pt/\kern-1pt\lower1pt\hbox{$\scriptstyle2$} sec, }} +\def\delayquartersec{\hbox{wait \kern-.5pt\raise1pt\hbox{$\scriptstyle1$}% +\kern-1pt/\kern-1pt\lower1pt\hbox{$\scriptstyle4$} sec, }} + +\def\delay#1sec{% +\hbox{\def\secmult{}wait +\getsecmult#1\end +\if\secmult u\def\secmodifier{ $\mu$\kern.05pt }\else +\if\secmult m\def\secmodifier{ m}\else +\if\secmult n\def\secmodifier{ n}\else + \secmult\def\secmodifier{ }% +\fi\fi\fi +\secmodifier sec$\rm\scriptstyle s$, } +} + +\def\getsecmult#1{% +\ifx#1\end\let\next\relax\else + \secmult\def\secmult{#1}\let\next\getsecmult +\fi\next +} + +% attribute prettyprinting; + +\long\def\parseattrib#1#2\end{\csname attrib#1\endcsname} + +\def\xxattributexx#1{\ifx(#1\let\next\xxattributex\else\let\next\xxattribute\fi\next#1} +\def\xxattributex((\\#1{% + \expandafter\let\expandafter\currentattrib\csname attrib#1\endcsname + \ifx\currentattrib\attribpacked + \strut\colorblack{% + \lower2pt\hbox{\vrule width \wd\thezero height + \ht\thezero depth + \dp\thezero}}\llap{\colorwhite{\hbox{$\scriptscriptstyle\bf 01\kern.5pt$}}}% + \let\next\eatparentheses + \fi + \ifx\currentattrib\attribnoinline + {\ \bf noinline\rm_a}% + \let\next\eatparentheses + \fi + \ifx\currentattrib\attribformat + {\ \bf format\rm_a}% + \let\next\eatarguments + \fi + \next +} + +\def\eatparentheses#1)){} +\def\eatarguments(\\#1,#2,#3))){(\hbox{\rm as }\.{#1})} + +\def\xxattribute#1{\.{\_\_attribute\_\_} (\sc GNU) #1} + +\let\attribnoinline=1 +\let\attribpacked=2 +\let\attribformat=3 + +\tenpoint +%\registerlegend{{8}{\noexpand\phantom{B}}} |