tmac.orig_me revision 31906
11638Srgrimes.nr _0 \n(.c 21638Srgrimes.\" Copyright (c) 1988, 1993 31638Srgrimes.\" The Regents of the University of California. All rights reserved. 41638Srgrimes.\" 51638Srgrimes.\" Redistribution and use in source and binary forms, with or without 61638Srgrimes.\" modification, are permitted provided that the following conditions 71638Srgrimes.\" are met: 81638Srgrimes.\" 1. Redistributions of source code must retain the above copyright 91638Srgrimes.\" notice, this list of conditions and the following disclaimer. 101638Srgrimes.\" 2. Redistributions in binary form must reproduce the above copyright 111638Srgrimes.\" notice, this list of conditions and the following disclaimer in the 121638Srgrimes.\" documentation and/or other materials provided with the distribution. 131638Srgrimes.\" 3. All advertising materials mentioning features or use of this software 141638Srgrimes.\" must display the following acknowledgement: 151638Srgrimes.\" This product includes software developed by the University of 161638Srgrimes.\" California, Berkeley and its contributors. 171638Srgrimes.\" 4. Neither the name of the University nor the names of its contributors 181638Srgrimes.\" may be used to endorse or promote products derived from this software 191638Srgrimes.\" without specific prior written permission. 201638Srgrimes.\" 211638Srgrimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 221638Srgrimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 231638Srgrimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 241638Srgrimes.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 251638Srgrimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 261638Srgrimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 271638Srgrimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 281638Srgrimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 291638Srgrimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 301638Srgrimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 311638Srgrimes.\" SUCH DAMAGE. 321638Srgrimes.\" 331638Srgrimes.\" @(#)tmac.e 8.1 (Berkeley) 6/5/93 341638Srgrimes.\" 351638Srgrimes.\" %beginstrip% 361638Srgrimes.\" 371638Srgrimes.\"********************************************************************** 381638Srgrimes.\"* * 391638Srgrimes.\"* ****** - M E N R O F F / T R O F F M A C R O S ****** * 401638Srgrimes.\"* * 411638Srgrimes.\"* Produced for your edification and enjoyment by: * 421638Srgrimes.\"* Eric Allman * 431638Srgrimes.\"* Electronics Research Laboratory * 441638Srgrimes.\"* U.C. Berkeley. * 451638Srgrimes.\"* current address: * 461638Srgrimes.\"* Britton-Lee, Inc. * 471638Srgrimes.\"* 1919 Addison Street Suite 105 * 481638Srgrimes.\"* Berkeley, California 94704 * 491638Srgrimes.\"* * 501638Srgrimes.\"* VERSION 8.1 First Release: 11 Sept 1978 * 511638Srgrimes.\"* See file \*(||/revisions for revision history * 521638Srgrimes.\"* * 531638Srgrimes.\"* Documentation is available. * 541638Srgrimes.\"* * 551638Srgrimes.\"********************************************************************** 561638Srgrimes.\" 571638Srgrimes.\" Code on .de commands: 581638Srgrimes.\" *** a user interface macro. 591638Srgrimes.\" &&& a user interface macro which is redefined 601638Srgrimes.\" when used to be the real thing. 611638Srgrimes.\" $$$ a macro which may be redefined by the user 621638Srgrimes.\" to provide variant functions. 631638Srgrimes.\" --- an internal macro. 641638Srgrimes.\" 651638Srgrimes.\" library directory for sourced files: 661638Srgrimes.ds || /usr/old/lib/me 671638Srgrimes.if \n@>0 .ds || . 681638Srgrimes.\" 691638Srgrimes.if !\n(.V .tm You are using the wrong version of NROFF/TROFF!! 701638Srgrimes.if !\n(.V .tm This macro package works only on the version seven 711638Srgrimes.if !\n(.V .tm release of NROFF and TROFF. 721638Srgrimes.if !\n(.V .ex 731638Srgrimes.if \n(pf \ 741638Srgrimes. nx \*(||/null.me 751638Srgrimes.\" *** INTERNAL GP MACROS *** 761638Srgrimes.de @C \" --- change ev's, taking info with us 771638Srgrimes.nr _S \\n(.s 781638Srgrimes.nr _V \\n(.v 791638Srgrimes.nr _F \\n(.f 801638Srgrimes.nr _I \\n(.i 811638Srgrimes.ev \\$1 821638Srgrimes.ps \\n(_S 831638Srgrimes.vs \\n(_Vu 841638Srgrimes.ft \\n(_F 851638Srgrimes'in \\n(_Iu 861638Srgrimes.xl \\n($lu 871638Srgrimes.lt \\n($lu 881638Srgrimes.rr _S 891638Srgrimes.rr _V 901638Srgrimes.rr _F 911638Srgrimes.rr _I 921638Srgrimes.ls 1 931638Srgrimes'ce 0 941638Srgrimes.. 951638Srgrimes.de @D \" --- determine display type (Indent, Left, Center) 961638Srgrimes.ds |p "\\$3 971638Srgrimes.nr _d \\$1 981638Srgrimes.ie "\\$2"C" \ 991638Srgrimes. nr _d 1 1001638Srgrimes.el .ie "\\$2"L" \ 1011638Srgrimes. nr _d 2 1021638Srgrimes.el .ie "\\$2"I" \ 1031638Srgrimes. nr _d 3 1041638Srgrimes.el .ie "\\$2"M" \ 1051638Srgrimes. nr _d 4 1061638Srgrimes.el \ 1071638Srgrimes. ds |p "\\$2 1081638Srgrimes.. 1091638Srgrimes.de @z \" --- end macro 1101638Srgrimes.if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a 1111638Srgrimes.if !"\\n(.z"" \ 1121638Srgrimes\{\ 1131638Srgrimes. tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z) 1141638Srgrimes. di 1151638Srgrimes. ex 1161638Srgrimes.\} 1171638Srgrimes.if \\n(?a \ 1181638Srgrimes. bp \" force out final table 1191638Srgrimes.rm bp 1201638Srgrimes.rm @b\" \" don't start another page 1211638Srgrimes.if t \ 1221638Srgrimes. wh -1p @m 1231638Srgrimes.br 1241638Srgrimes.if \n@>1 .tm << @z 1251638Srgrimes.. 1261638Srgrimes.de @I \" --- initialize processor 1271638Srgrimes.rm th 1281638Srgrimes.rm ac 1291638Srgrimes.rm lo 1301638Srgrimes.rm sc 1311638Srgrimes.rm @I 1321638Srgrimes.. 1331638Srgrimes.\" *** STANDARD HEADERS AND FOOTERS *** 1341638Srgrimes.de he \" *** define header 1351638Srgrimes.ie !\\n(.$ \ 1361638Srgrimes\{\ 1371638Srgrimes. rm |4 1381638Srgrimes. rm |5 1391638Srgrimes.\} 1401638Srgrimes.el \ 1411638Srgrimes\{\ 1421638Srgrimes. ds |4 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 1431638Srgrimes. ds |5 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 1441638Srgrimes.\} 1451638Srgrimes.. 1461638Srgrimes.de eh \" *** define even header 1471638Srgrimes.ie !\\n(.$ \ 1481638Srgrimes. rm |4 1491638Srgrimes.el \ 1501638Srgrimes. ds |4 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 1511638Srgrimes.. 1521638Srgrimes.de oh \" *** define odd header 1531638Srgrimes.ie !\\n(.$ \ 1541638Srgrimes. rm |5 1551638Srgrimes.el \ 1561638Srgrimes. ds |5 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 1571638Srgrimes.. 1581638Srgrimes.de fo \" *** define footer 1591638Srgrimes.ie !\\n(.$ \ 1601638Srgrimes\{\ 1611638Srgrimes. rm |6 1621638Srgrimes. rm |7 1631638Srgrimes.\} 1641638Srgrimes.el \ 1651638Srgrimes\{\ 1661638Srgrimes. ds |6 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 1671638Srgrimes. ds |7 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 1681638Srgrimes.\} 1691638Srgrimes.. 1701638Srgrimes.de ef \" *** define even foot 1711638Srgrimes.ie !\\n(.$ \ 1721638Srgrimes. rm |6 1731638Srgrimes.el \ 1741638Srgrimes. ds |6 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 1751638Srgrimes.. 1761638Srgrimes.de of \" *** define odd footer 1771638Srgrimes.ie !\\n(.$ \ 1781638Srgrimes. rm |7 1791638Srgrimes.el \ 1801638Srgrimes. ds |7 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 1811638Srgrimes.. 1821638Srgrimes.de ep \" *** end page (must always be followed by a .bp) 1831638Srgrimes.if \\n(nl>0 \ 1841638Srgrimes\{\ 1851638Srgrimes. wh 0 1861638Srgrimes. rs 1871638Srgrimes. @b 1881638Srgrimes.\} 1891638Srgrimes.. 1901638Srgrimes.\" *** INTERNAL HEADER AND FOOTER MACROS *** 1911638Srgrimes.de @h \" --- header 1921638Srgrimes.if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w 1931638Srgrimes.if (\\n(.i+\\n(.o)>=\\n(.l \ 1941638Srgrimes. tm Line \\n(c. -- Offset + indent exceeds line length 1951638Srgrimes.if t .if (\\n(.l+\\n(.o)>7.75i \ 1961638Srgrimes. tm Line \\n(c. -- Offset + line length exceeds paper width 1971638Srgrimes.\" initialize a pile of junk 1981638Srgrimes.nr ?h \\n(?H \" transfer "next page" to "this page" 1991638Srgrimes.rr ?H 2001638Srgrimes.nr ?c \\n(?C 2011638Srgrimes.rr ?C 2021638Srgrimes.if !"\\*(|4"" .rn |4 |0 2031638Srgrimes.if !"\\*(|5"" .rn |5 |1 2041638Srgrimes.if !"\\*(|6"" .rn |6 |2 2051638Srgrimes.if !"\\*(|7"" .rn |7 |3 2061638Srgrimes.nr _w 0 \" reset max footnote width 2071638Srgrimes.nr ?W 0 \" no wide floats this page (yet) 2081638Srgrimes.nr ?I 1 2091638Srgrimes.\" begin actual header stuff 2101638Srgrimes.ev 2 2111638Srgrimes.rs 2121638Srgrimes.if t .@m \" output cut mark 2131638Srgrimes.if \\n(hm>0 \ 2141638Srgrimes. sp |\\n(hmu \" move to header position 2151638Srgrimes.@t $h \" output header title 2161638Srgrimes.if \\n(tm<=0 \ 2171638Srgrimes. nr tm \n(.Vu 2181638Srgrimes.sp |\\n(tmu \" move to top of text 2191638Srgrimes.ev 2201638Srgrimes.mk _k \" for columned output 2211638Srgrimes.if \\n(?n .nm 1 \" restore line numbering if n1 mode 2221638Srgrimes.nr $c 1 \" set first column 2231638Srgrimes.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm 2241638Srgrimes.ie \\n(?s \ 2251638Srgrimes\{\ 2261638Srgrimes. rr ?s 2271638Srgrimes. rs 2281638Srgrimes' @b 2291638Srgrimes.\} 2301638Srgrimes.el \ 2311638Srgrimes. @n \" begin the column 2321638Srgrimes.if \n@>2 .tm << @h 2331638Srgrimes.. 2341638Srgrimes.if \nv=2 \ 2351638Srgrimes\{\ 2361638Srgrimes. de @m \" --- output cut mark (only on C/A/T-style) 2371638Srgrimes. @O 0 2381638Srgrimes. lt 7.5i 2391638Srgrimes. tl '\(rn''\(rn' 2401638Srgrimes. @O 2411638Srgrimes. lt 2421638Srgrimes.. 2431638Srgrimes.\} 2441638Srgrimes.de @n \" --- new column or page 2451638Srgrimes.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o 2461638Srgrimes.if \\n(bm<=0 \ 2471638Srgrimes. nr bm \\n(.Vu 2481638Srgrimes.if (\\n(_w<=\\n($l)&(\\n(?W=0) \ 2491638Srgrimes\{\ 2501638Srgrimes. nr _b (\\n(ppu*\\n($ru)/2u \" compute fudge factor (must be < 1P) 2511638Srgrimes. if \\n(_bu>((\\n(bmu-\\n(fmu-(\\n(tpu*\\n($ru))/2u) \ 2521638Srgrimes. nr _b (\\n(ppu*\\n($ru)-\n(.Vu 2531638Srgrimes. nr _b +\\n(bmu 2541638Srgrimes.\} 2551638Srgrimes.nr _B \\n(_bu 2561638Srgrimes.ch @f 2571638Srgrimes.wh -\\n(_bu @f 2581638Srgrimes.nr _b +(\\n(ppu*\\n($ru) \" add 1 paragraph v in case of sweep past 2591638Srgrimes.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B 2601638Srgrimes.nr ?f 0 \" reset footnote flag 2611638Srgrimes.if \\n(?o \ 2621638Srgrimes\{\ 2631638Srgrimes. (f _ \" reprocess footnotes which run off page 2641638Srgrimes. nf 2651638Srgrimes. |o 2661638Srgrimes. fi 2671638Srgrimes. )f 2681638Srgrimes. rm |o 2691638Srgrimes.\} 2701638Srgrimes.nr ?o 0 2711638Srgrimes.if \\n(?T \ 2721638Srgrimes\{\ 2731638Srgrimes. nr _i \\n(.i 2741638Srgrimes. in \\n($iu 2751638Srgrimes. |h \" output the table header 2761638Srgrimes. in \\n(_iu 2771638Srgrimes. rr _i 2781638Srgrimes. mk #T \" for tbl commands 2791638Srgrimes. ns 2801638Srgrimes.\} 2811638Srgrimes.if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \ 2821638Srgrimes\{\ 2831638Srgrimes. nr ?a 0 \" output floating keep 2841638Srgrimes. @k |t 2851638Srgrimes. if \\n(?w \ 2861638Srgrimes. mk _k \" don't overstrike wide keeps 2871638Srgrimes. nr ?w 0 2881638Srgrimes.\} 2891638Srgrimes.os 2901638Srgrimes.$H \" special column header macro 2911638Srgrimes.ns 2921638Srgrimes.. 2931638Srgrimes.de @f \" --- footer 2941638Srgrimes.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f 2951638Srgrimes.if \n@>2 .nr VL \\n(.pu-\\n(nlu 2961638Srgrimes.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL 2971638Srgrimes.ec 2981638Srgrimes.if \\n(?T \ 2991638Srgrimes\{\ 3001638Srgrimes. nr T. 1 \" for tbl commands (to output bottom line) 3011638Srgrimes. T# 1 \" output the sides and bottom lines 3021638Srgrimes. br 3031638Srgrimes.\} 3041638Srgrimes.ev 2 3051638Srgrimes.ce 0 3061638Srgrimes.if \\n(?b \ 3071638Srgrimes\{\ 3081638Srgrimes. nr ?b 0 3091638Srgrimes. @k |b\" \" output bottom of page tables 3101638Srgrimes.\} 3111638Srgrimes.if \\n(?f \ 3121638Srgrimes. @o \" output footnote if present 3131638Srgrimes.ie \\n($c<\\n($m \ 3141638Srgrimes. @c \" handle new column 3151638Srgrimes.el \ 3161638Srgrimes. @e \" new page 3171638Srgrimes.ev 3181638Srgrimes.if \n@>2 .tm << @f 3191638Srgrimes.. 3201638Srgrimes.de @o \" --- output footnote 3211638Srgrimes.nf 3221638Srgrimes.ls 1 3231638Srgrimes.in 0 3241638Srgrimes.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B 3251638Srgrimes.wh -\\n(_Bu @r 3261638Srgrimes.|f 3271638Srgrimes.fi 3281638Srgrimes.if \n@>2 .tm @o triggered @r (?o) = \\n(?o 3291638Srgrimes.if \\n(?o \ 3301638Srgrimes\{\ 3311638Srgrimes. di \" just in case triggered @r 3321638Srgrimes. if \\n(dn=0 \ 3331638Srgrimes\{\ 3341638Srgrimes. rm |o 3351638Srgrimes. nr ?o 0 3361638Srgrimes. \} 3371638Srgrimes. nr dn \\n(_D 3381638Srgrimes. rr _D 3391638Srgrimes.\} 3401638Srgrimes.rm |f 3411638Srgrimes.ch @r 3421638Srgrimes.. 3431638Srgrimes.de @c \" --- new column 3441638Srgrimes.if \n@>2 .tm >> @c %=\\n% 3451638Srgrimes.rs 3461638Srgrimes.sp |\\n(_ku 3471638Srgrimes.@O +\\n($lu+\\n($su 3481638Srgrimes.nr $c +1 3491638Srgrimes.@n 3501638Srgrimes.. 3511638Srgrimes.de @e \" --- end page 3521638Srgrimes.if \n@>2 .tm >> @e 3531638Srgrimes.@O \\n(_ou 3541638Srgrimes.rs 3551638Srgrimes.sp |\\n(.pu-\\n(fmu-(\\n(tpu*\\n($ru) \" move to footer position 3561638Srgrimes.@t $f \" output footer title 3571638Srgrimes.nr ?h 0 3581638Srgrimes.bp 3591638Srgrimes.. 3601638Srgrimes.de @t \" --- output header or footer title 3611638Srgrimes.if !\\n(?h \ 3621638Srgrimes\{\ 3631638Srgrimes. sz \\n(tp \" set header/footer type fonts, etc. 3641638Srgrimes. @F \\n(tf 3651638Srgrimes. lt \\n(_Lu \" make title span entire page 3661638Srgrimes. nf 3671638Srgrimes. \\$1 3681638Srgrimes. br 3691638Srgrimes.\} 3701638Srgrimes.. 3711638Srgrimes.de $h \" $$$ print header 3721638Srgrimes.rm |z 3731638Srgrimes.if !\\n(?c \ 3741638Srgrimes\{\ 3751638Srgrimes. if e .ds |z "\\*(|0 3761638Srgrimes. if o .ds |z "\\*(|1 3771638Srgrimes.\} 3781638Srgrimes.if !\(ts\\*(|z\(ts\(ts \ 3791638Srgrimes' tl \\*(|z 3801638Srgrimes.rm |z 3811638Srgrimes.. 3821638Srgrimes.de $f \" $$$ print footer 3831638Srgrimes.rm |z 3841638Srgrimes.if \\n(?c \ 3851638Srgrimes\{\ 3861638Srgrimes. if e .ds |z "\\*(|0 3871638Srgrimes. if o .ds |z "\\*(|1 3881638Srgrimes.\} 3891638Srgrimes.if \(ts\\*(|z\(ts\(ts \ 3901638Srgrimes\{\ 3911638Srgrimes. if e .ds |z "\\*(|2 3921638Srgrimes. if o .ds |z "\\*(|3 3931638Srgrimes.\} 3941638Srgrimes.if !\(ts\\*(|z\(ts\(ts \ 3951638Srgrimes' tl \\*(|z 3961638Srgrimes.rm |z 3971638Srgrimes.. 3981638Srgrimes.de @r \" --- reprocess overflow footnotes 3991638Srgrimes.if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b 4001638Srgrimes.di |o \" save overflow footnote 4011638Srgrimes.nr ?o 1 4021638Srgrimes.nr _D \\n(dn 4031638Srgrimes.ns 4041638Srgrimes.. 4051638Srgrimes.\" *** COMMANDS WITH VARIANT DEFINITIONS *** 4061638Srgrimes.rn bp @b \" --- begin page 4071638Srgrimes.de bp \" *** begin new page (overrides columns) 4081638Srgrimes.nr $c \\n($m \" force new page, not new column 4091638Srgrimes.ie \\n(nl>0 \ 4101638Srgrimes. @b \\$1 4111638Srgrimes.el \ 4121638Srgrimes\{\ 4131638Srgrimes. if \\n(.$>0 \ 4141638Srgrimes. pn \\$1 4151638Srgrimes. if \\n(?I \ 4161638Srgrimes. @h \" 'spring' the header trap 4171638Srgrimes.\} 4181638Srgrimes.br 4191638Srgrimes.wh 0 @h \" reset header 4201638Srgrimes.. 4211638Srgrimes.rn ll xl \" *** special line length (local) 4221638Srgrimes.de ll \" *** line length (global to environments) 4231638Srgrimes.xl \\$1 4241638Srgrimes.lt \\$1 4251638Srgrimes.nr $l \\n(.l 4261638Srgrimes.if (\\n($m<=1):(\\n($l>\\n(_L) \ 4271638Srgrimes. nr _L \\n(.l 4281638Srgrimes.. 4291638Srgrimes.rn po @O \" --- local page offset 4301638Srgrimes.de po \" *** page offset 4311638Srgrimes.@O \\$1 4321638Srgrimes.nr _o \\n(.o 4331638Srgrimes.. 4341638Srgrimes.\" *** MISCELLANEOUS ROFF COMMANDS *** 4351638Srgrimes.de hx \" *** suppress headers and footers next page 4361638Srgrimes.nr ?H 1 4371638Srgrimes.. 4381638Srgrimes.de ix \" *** indent, no break 4391638Srgrimes'in \\$1 4401638Srgrimes.. 4411638Srgrimes.de bl \" *** contiguous blank lines 4421638Srgrimes.br 4431638Srgrimes.ne \\$1 4441638Srgrimes.rs 4451638Srgrimes.sp \\$1 4461638Srgrimes.. 4471638Srgrimes.de n1 \" *** line numbering 1 4481638Srgrimes.nm 1 4491638Srgrimes.xl -\w'0000'u 4501638Srgrimes.nr ?n 1 4511638Srgrimes.. 4521638Srgrimes.de n2 \" *** line numbering 2 4531638Srgrimes.nm \\$1 4541638Srgrimes.ie \\n(.$ \ 4551638Srgrimes. xl -\w'0000'u 4561638Srgrimes.el \ 4571638Srgrimes. xl \\n($lu 4581638Srgrimes.. 4591638Srgrimes.de pa \" *** new page 4601638Srgrimes.bp \\$1 4611638Srgrimes.. 4621638Srgrimes.de ro \" *** roman page numbers 4631638Srgrimes.af % i 4641638Srgrimes.. 4651638Srgrimes.de ar \" *** arabic page numbers 4661638Srgrimes.af % 1 4671638Srgrimes.. 4681638Srgrimes.de m1 \" *** position one space 4691638Srgrimes.nr _0 \\n(hmu 4701638Srgrimes.nr hm \\$1v 4711638Srgrimes.nr tm +\\n(hmu-\\n(_0u 4721638Srgrimes.rr _0 4731638Srgrimes.. 4741638Srgrimes.de m2 \" *** position two space 4751638Srgrimes.nr tm \\n(hmu+\\n(tpp+\\$1v 4761638Srgrimes.. 4771638Srgrimes.de m3 \" *** position three space 4781638Srgrimes.nr bm \\n(fmu+\\n(tpp+\\$1v 4791638Srgrimes.. 4801638Srgrimes.de m4 \" *** position four space 4811638Srgrimes.nr _0 \\n(fmu 4821638Srgrimes.nr fm \\$1v 4831638Srgrimes.nr bm +\\n(fmu-\\n(_0u 4841638Srgrimes.. 4851638Srgrimes.de sk \" *** leave a blank page (next page) 4861638Srgrimes.if \\n(.$>0 \ 4871638Srgrimes. tm Line \\n(c. -- I cannot skip multiple pages 4881638Srgrimes.nr ?s 1 4891638Srgrimes.. 4901638Srgrimes.\" *** MISCELLANEOUS USER SUPPORT COMMANDS *** 4911638Srgrimes.de re \" *** reset tabs (TROFF defines 15 stops default) 4921638Srgrimes.ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i 4931638Srgrimes.. 4941638Srgrimes.if t .ig 4951638Srgrimes.de re \" *** reset tabs (NROFF version) 4961638Srgrimes.ta 0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i 4971638Srgrimes.. 4981638Srgrimes.de ba \" *** set base indent 4991638Srgrimes.ie \\n(.$ \ 5001638Srgrimes. nr $i \\$1n 5011638Srgrimes.el \ 5021638Srgrimes. nr $i \\n(siu*\\n($0u 5031638Srgrimes.. 5041638Srgrimes.de hl \" *** draw horizontal line 5051638Srgrimes.br 5061638Srgrimes\l'\\n(.lu-\\n(.iu' 5071638Srgrimes.sp 5081638Srgrimes.. 5091638Srgrimes.\" *** PARAGRAPHING *** 5101638Srgrimes.de pp \" *** paragraph 5111638Srgrimes.lp \\n(piu 5121638Srgrimes.. 5131638Srgrimes.de lp \" *** left aligned paragraph 5141638Srgrimes.@p 5151638Srgrimes.if \\n(.$ \ 5161638Srgrimes. ti +\\$1 5171638Srgrimes.nr $p 0 1 5181638Srgrimes.. 5191638Srgrimes.de ip \" *** indented paragraph w/ optional tag 5201638Srgrimes.if (\\n(ii>0)&(\\n(ii<1n) \ 5211638Srgrimes. nr ii \\n(iin 5221638Srgrimes.nr _0 \\n(ii 5231638Srgrimes.if \\n(.$>1 \ 5241638Srgrimes. nr _0 \\$2n 5251638Srgrimes.@p \\n(_0u 5261638Srgrimes.if \\w"\\$1" \ 5271638Srgrimes\{\ 5281638Srgrimes. ti -\\n(_0u 5291638Srgrimes. ie \\w"\\$1">=\\n(_0 \ 5301638Srgrimes\{\ 5311638Srgrimes\&\\$1 5321638Srgrimes. br 5331638Srgrimes. \} 5341638Srgrimes. el \&\\$1\h'|\\n(_0u'\c 5351638Srgrimes.\} 5361638Srgrimes.rr _0 5371638Srgrimes.. 5381638Srgrimes.de np \" *** numbered paragraph 5391638Srgrimes.if \\n($p<0 \ 5401638Srgrimes. nr $p 0 \" reset number after .bu 5411638Srgrimes.nr $p +1 \" increment paragraph number 5421638Srgrimes.@p \w'\0(000)\0'u 5431638Srgrimes.ti -\w'\0(000)\0'u 5441638Srgrimes\0(\\n($p)\h'|\w'\0(000)\0'u'\c 5451638Srgrimes.. 5461638Srgrimes.de bu \" *** bulleted paragraph 5471638Srgrimes.br 5481638Srgrimes.if \\n($p<0 \ 5491638Srgrimes. ns \" don't space between .bu paragraphs 5501638Srgrimes.nr $p 0-1 \" mark "bulleted paragraph" mode 5511638Srgrimes.@p \w'\0\(bu\0'u 5521638Srgrimes.ti -\w'\0\(bu\0'u 5531638Srgrimes\0\(bu\0\c 5541638Srgrimes.. 5551638Srgrimes.de @p \" --- initialize for paragraph 5561638Srgrimes.@I \" initialize macro processor 5571638Srgrimes.if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation 5581638Srgrimes.in \\n($iu+\\n(pou 5591638Srgrimes.if \\n(.$ \ 5601638Srgrimes. in +\\$1n 5611638Srgrimes.ce 0 5621638Srgrimes.fi 5631638Srgrimes.@F \\n(pf 5641638Srgrimes.sz \\n(pp 5651638Srgrimes.sp \\n(psu 5661638Srgrimes.ne \\n(.Lv+\\n(.Vu 5671638Srgrimes.ns 5681638Srgrimes.. 5691638Srgrimes.\" *** SECTION HEADINGS *** 5701638Srgrimes.de sh \" &&& section heading 5711638Srgrimes.rn sh @T 5721638Srgrimes.so \\*(||/sh.me 5731638Srgrimes.sh "\\$1" "\\$2" \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 5741638Srgrimes.rm @T 5751638Srgrimes.. 5761638Srgrimes.de $p \" $$$ print section heading 5771638Srgrimes.if (\\n(si>0)&(\\n(.$>2) \ 5781638Srgrimes. nr $i \\$3*\\n(si 5791638Srgrimes.in \\n($iu 5801638Srgrimes.ie !"\\$1\\$2"" \ 5811638Srgrimes\{\ 5821638Srgrimes. sp \\n(ssu \" one of them is non-null 5831638Srgrimes. ne \\n(.Lv+\\n(.Vu+\\n(psu+(\\n(spu*\\n($ru*\\n(.Lu) 5841638Srgrimes. ie \\n(.$>2 \ 5851638Srgrimes. ti -(\\n(siu-\\n(sou) 5861638Srgrimes. el \ 5871638Srgrimes. ti +\\n(sou 5881638Srgrimes. @F \\n(sf 5891638Srgrimes. sz \\n(sp 5901638Srgrimes. if \\$3>0 \ 5911638Srgrimes. $\\$3 5921638Srgrimes. if \w"\\$2">0 \\$2. 5931638Srgrimes. if \w"\\$1">0 \\$1\f1\ \ \& 5941638Srgrimes.\} 5951638Srgrimes.el \ 5961638Srgrimes. sp \\n(psu 5971638Srgrimes.@F \\n(pf 5981638Srgrimes.sz \\n(pp 5991638Srgrimes.. 6001638Srgrimes.de uh \" *** unnumbered section heading 6011638Srgrimes.rn uh @T 6021638Srgrimes.so \\*(||/sh.me 6031638Srgrimes.uh "\\$1" 6041638Srgrimes.rm @T 6051638Srgrimes.. 6061638Srgrimes.\" *** COLUMNNED OUTPUT *** 6071638Srgrimes.de 2c \" *** double columned output 6081638Srgrimes.br 6091638Srgrimes.if \\n($m>1 \ 6101638Srgrimes. 1c \" revert to 1c if already 2c 6111638Srgrimes.nr $c 1 6121638Srgrimes.nr $m 2 6131638Srgrimes.if \\n(.$>1 \ 6141638Srgrimes. nr $m \\$2 6151638Srgrimes.if \\n(.$>0 \ 6161638Srgrimes. nr $s \\$1n \" param 1: column seperation 6171638Srgrimes.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m 6181638Srgrimes.xl \\n($lu 6191638Srgrimes.mk _k 6201638Srgrimes.ns 6211638Srgrimes.. 6221638Srgrimes.de 1c \" *** single columned output 6231638Srgrimes.br 6241638Srgrimes.nr $c 1 6251638Srgrimes.nr $m 1 6261638Srgrimes.ll \\n(_Lu \" return to normal output 6271638Srgrimes.sp |\\n(.hu 6281638Srgrimes.@O \\n(_ou 6291638Srgrimes.. 6301638Srgrimes.de bc \" *** begin column 6311638Srgrimes.sp 24i 6321638Srgrimes.. 6331638Srgrimes.\" *** FLOATING TABLES AND NONFLOATING BLOCKS *** 6341638Srgrimes.de (z \" &&& begin floating keep 6351638Srgrimes.rn (z @V 6361638Srgrimes.so \\*(||/float.me 6371638Srgrimes.(z \\$1 \\$2 6381638Srgrimes.rm @V 6391638Srgrimes.. 6401638Srgrimes.de )z \" &&& end floating keep 6411638Srgrimes.tm Line \\n(c. -- unmatched .)z 6421638Srgrimes.. 6431638Srgrimes.de (t \" XXX temp ref to (z 6441638Srgrimes.(z \\$1 \\$2 6451638Srgrimes.. 6461638Srgrimes.de )t \" XXX temp ref to )t 6471638Srgrimes.)z \\$1 \\$2 6481638Srgrimes.. 6491638Srgrimes.de (b \" *** begin block 6501638Srgrimes.br 6511638Srgrimes.@D 3 \\$1 \\$2 6521638Srgrimes.sp \\n(bsu 6531638Srgrimes.@( 6541638Srgrimes.. 6551638Srgrimes.de )b \" *** end block 6561638Srgrimes.br 6571638Srgrimes.@) 6581638Srgrimes.if (\\n(bt=0):(\\n(.t<\\n(bt) \ 6591638Srgrimes. ne \\n(dnu \" make it all on one page 6601638Srgrimes.ls 1 6611638Srgrimes.nf 6621638Srgrimes.|k 6631638Srgrimes.ec 6641638Srgrimes.fi 6651638Srgrimes.in 0 6661638Srgrimes.xl \\n($lu 6671638Srgrimes.ev 6681638Srgrimes.rm |k 6691638Srgrimes.sp \\n(bsu+\\n(.Lv-1v 6701638Srgrimes.. 6711638Srgrimes.de @( \" --- begin keep 6721638Srgrimes.if !"\\n(.z"" .tm Line \\n(c. -- Illegal nested keep \\n(.z 6731638Srgrimes.@M 6741638Srgrimes.di |k 6751638Srgrimes\!'rs 6761638Srgrimes.. 6771638Srgrimes.de @M \" --- set modes for display 6781638Srgrimes.nr ?k 1 6791638Srgrimes.@C 1 6801638Srgrimes.@F \\n(df 6811638Srgrimes.vs \\n(.su*\\n($Ru 6821638Srgrimes.nf 6831638Srgrimes.if "\\*(|p"F" \ 6841638Srgrimes. fi \" set fill mode if "F" parameter 6851638Srgrimes.if \\n(_d=4 \ 6861638Srgrimes. in 0 6871638Srgrimes.if \\n(_d=3 \ 6881638Srgrimes\{\ 6891638Srgrimes. in +\\n(biu 6901638Srgrimes. xl -\\n(biu 6911638Srgrimes.\} 6921638Srgrimes.if \\n(_d=1 \ 6931638Srgrimes. ce 10000 6941638Srgrimes.. 6951638Srgrimes.de @) \" --- end keep 6961638Srgrimes.br 6971638Srgrimes.if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened 6981638Srgrimes.nr ?k 0 6991638Srgrimes.di 7001638Srgrimes.in 0 7011638Srgrimes.ce 0 7021638Srgrimes.. 7031638Srgrimes.de (c \" *** begin block centered text 7041638Srgrimes.if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests 7051638Srgrimes.di |c 7061638Srgrimes.. 7071638Srgrimes.de )c \" *** end block centered text 7081638Srgrimes.if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c 7091638Srgrimes.br \" force out final line 7101638Srgrimes.di 7111638Srgrimes.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl 7121638Srgrimes.ev 1 7131638Srgrimes.ls 1 7141638Srgrimes.in (\\n(.lu-\\n(.iu-\\n(dlu)/2u 7151638Srgrimes.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl 7161638Srgrimes.nf 7171638Srgrimes.|c 7181638Srgrimes.ec 7191638Srgrimes.in 7201638Srgrimes.ls 7211638Srgrimes.ev 7221638Srgrimes.rm |c 7231638Srgrimes.. 7241638Srgrimes.\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS *** 7251638Srgrimes.de (q \" *** begin block quote 7261638Srgrimes.br 7271638Srgrimes.@C 1 7281638Srgrimes.fi 7291638Srgrimes.sp \\n(qsu 7301638Srgrimes.in +\\n(qiu 7311638Srgrimes.xl -\\n(qiu 7321638Srgrimes.sz \\n(qp 7331638Srgrimes.. 7341638Srgrimes.de )q \" *** end block quote 7351638Srgrimes.br 7361638Srgrimes.ev 7371638Srgrimes.sp \\n(qsu+\\n(.Lv-1v 7381638Srgrimes.nr ?k 0 7391638Srgrimes.. 7401638Srgrimes.de (l \" *** begin list 7411638Srgrimes.br 7421638Srgrimes.sp \\n(bsu 7431638Srgrimes.@D 3 \\$1 \\$2 7441638Srgrimes.@M 7451638Srgrimes.. 7461638Srgrimes.de )l \" *** end list 7471638Srgrimes.br 7481638Srgrimes.ev 7491638Srgrimes.sp \\n(bsu+\\n(.Lv-1v 7501638Srgrimes.nr ?k 0 7511638Srgrimes.. 7521638Srgrimes.\" *** PREPROCESSOR SUPPORT *** 7531638Srgrimes.\" 7541638Srgrimes.\" EQN 7551638Srgrimes.\" 7561638Srgrimes.de EQ \" &&& begin equation 7571638Srgrimes.rn EQ @T 7581638Srgrimes.so \\*(||/eqn.me 7591638Srgrimes.EQ \\$1 \\$2 7601638Srgrimes.rm @T 7611638Srgrimes.. 7621638Srgrimes.\" 7631638Srgrimes.\" TBL 7641638Srgrimes.\" 7651638Srgrimes.de TS \" &&& begin table 7661638Srgrimes.rn TS @W 7671638Srgrimes.so \\*(||/tbl.me 7681638Srgrimes.TS \\$1 \\$2 7691638Srgrimes.rm @W 7701638Srgrimes.. 7711638Srgrimes.\" 7721638Srgrimes.\" REFER 7731638Srgrimes.\" 7741638Srgrimes.de ]- \" &&& initialize reference 7751638Srgrimes.rn ]- @] 7761638Srgrimes.so \\*(||/refer.me 7771638Srgrimes.]- 7781638Srgrimes.rm @] 7791638Srgrimes.. 7801638Srgrimes.de ]< \" &&& initialize reference 7811638Srgrimes.rn ]< @] 7821638Srgrimes.so \\*(||/refer.me 7831638Srgrimes.]< 7841638Srgrimes.rm @] 7851638Srgrimes.. 7861638Srgrimes.if n .ds [. " [ 7871638Srgrimes.if t .ds [. \s-2\v'-.4m'\f1 7881638Srgrimes.if n .ds .] ] 7891638Srgrimes.if t .ds .] \v'.4m'\s+2\fP 7901638Srgrimes.if n .ds <. " 7911638Srgrimes.if t .ds <. . 7921638Srgrimes.if n .ds >. . 7931638Srgrimes.if t .ds >. " 7941638Srgrimes.\" 7951638Srgrimes.\" IDEAL 7961638Srgrimes.\" 7971638Srgrimes.de IS \" *** start ideal picture 7981638Srgrimes.nr g7 \\n(.u 7991638Srgrimes.ls 1 8001638Srgrimes.. 8011638Srgrimes.de IF 8021638Srgrimes.if \\n(g7 .fi 8031638Srgrimes.ls 8041638Srgrimes.. 8051638Srgrimes.de IE \" *** end ideal picture 8061638Srgrimes.if \\n(g7 .fi 8071638Srgrimes.ls 8081638Srgrimes.. 8091638Srgrimes.\" 8101638Srgrimes.\" PIC 8111638Srgrimes.\" 8121638Srgrimes.de PS \" *** start picture: $1=height, $2=width in units or inches 8131638Srgrimes.if t \ 8141638Srgrimes. sp 0.3 8151638Srgrimes.nr g7 \\$2 8161638Srgrimes.in (\\n(.lu-\\n(g7u)/2u 8171638Srgrimes.ne \\$1u 8181638Srgrimes.nr g7 \\n(.u 8191638Srgrimes.ls 1 8201638Srgrimes.. 8211638Srgrimes.de PE \" *** end picture 8221638Srgrimes.ls 8231638Srgrimes.in 8241638Srgrimes.if \\n(g7 .fi 8251638Srgrimes.if t .sp .6 8261638Srgrimes.. 8271638Srgrimes.\" 8281638Srgrimes.\" GREMLIN 8291638Srgrimes.\" 8301638Srgrimes.de GS \" *** start gremlin picture 8311638Srgrimes.nr g7 (\\n(.lu-\\n(g1u)/2u 8321638Srgrimes.if "\\$1"L" .nr g7 \\n(.iu 8331638Srgrimes.if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u 8341638Srgrimes.in \\n(g7u 8351638Srgrimes.nr g7 \\n(.u 8361638Srgrimes.ls 1 8371638Srgrimes.nf 8381638Srgrimes.ne \\n(g2u 8391638Srgrimes.. 8401638Srgrimes.de GE \" *** end gremlin picture 8411638Srgrimes.GF 8421638Srgrimes.if t .sp .6 8431638Srgrimes.. 8441638Srgrimes.de GF \" *** finish gremlin picture; stay at top 8451638Srgrimes.ls 8461638Srgrimes.in 8471638Srgrimes.if \\n(g7 .fi 8481638Srgrimes.. 8491638Srgrimes.\" *** FONT AIDS *** 8501638Srgrimes.de sz \" *** set point size and vertical spacing 8511638Srgrimes.ps \\$1 8521638Srgrimes.vs \\n(.su*\\n($ru \" default vs at pointsize + 20% 8531638Srgrimes.bd S B \\n(.su/3u 8541638Srgrimes.. 8551638Srgrimes.de r \" *** enter roman font 8561638Srgrimes.nr _F \\n(.f 8571638Srgrimes.ul 0 8581638Srgrimes.ft 1 8591638Srgrimes.if \\n(.$ \&\\$1\f\\n(_F\\$2 8601638Srgrimes.rr _F 8611638Srgrimes.. 8621638Srgrimes.de i \" *** enter italic 8631638Srgrimes.nr _F \\n(.f 8641638Srgrimes.ul 0 8651638Srgrimes.ft 2 8661638Srgrimes.if \\n(.$ \&\\$1\f\\n(_F\\$2 8671638Srgrimes.rr _F 8681638Srgrimes.. 8691638Srgrimes.de b \" *** enter boldface (underline in NROFF) 8701638Srgrimes.nr _F \\n(.f 8711638Srgrimes.ul 0 8721638Srgrimes.ft \\n($b 8731638Srgrimes.if \\n(.$ \&\\$1\f\\n(_F\\$2 8741638Srgrimes.rr _F 8751638Srgrimes.. 8761638Srgrimes.de rb \" *** enter real boldface (not underlined in NROFF) 8771638Srgrimes.nr _F \\n(.f 8781638Srgrimes.ul 0 8791638Srgrimes.ft 3 8801638Srgrimes.if \\n(.$ \&\\$1\f\\n(_F\\$2 8811638Srgrimes.rr _F 8821638Srgrimes.. 8831638Srgrimes.de u \" *** enter underlined word 8841638Srgrimes\&\\$1\l'|0\(ul'\\$2 8851638Srgrimes.. 8861638Srgrimes.de q \" *** enter quoted word 8871638Srgrimes\&\\*(lq\\$1\\*(rq\\$2 8881638Srgrimes.. 8891638Srgrimes.de bi \" *** enter word in bold italics 8901638Srgrimes.ft 2 8911638Srgrimes.ie t \&\k~\\$1\h'|\\n~u+(\\w' 'u/4u)'\\$1\fP\\$2 8921638Srgrimes.el \&\\$1\fP\\$2 8931638Srgrimes.. 8941638Srgrimes.de bx \" *** enter boxed word 8951638Srgrimes.ie \\n($T \&\f2\\$1\fP\\$2 8961638Srgrimes.el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2 8971638Srgrimes.. 8981638Srgrimes.de sm \" *** print in smaller font 8991638Srgrimes\s-1\\$1\\s0\\$2 9001638Srgrimes.. 9011638Srgrimes.de @F \" --- change font (8 -> underlined, 0 -> no change) 9021638Srgrimes.nr ~ \\$1 9031638Srgrimes.if \\n~>0 \ 9041638Srgrimes\{\ 9051638Srgrimes. ul 0 9061638Srgrimes. if \\n~=8 \ 9071638Srgrimes. nr ~ \\n($b 9081638Srgrimes. ft \\n~ 9091638Srgrimes.\} 9101638Srgrimes.rr ~ 9111638Srgrimes.. 9121638Srgrimes.\" *** FOOTNOTING *** 9131638Srgrimes.de (f \" &&& begin footnote 9141638Srgrimes.rn (f @U 9151638Srgrimes.so \\*(||/footnote.me 9161638Srgrimes.(f \\$1 \\$2 9171638Srgrimes.rm @U 9181638Srgrimes.. 9191638Srgrimes.de )f \" &&& end footnote 9201638Srgrimes.tm Line \\n(c. -- unmatched .)f 9211638Srgrimes.. 9221638Srgrimes.de $s \" $$$ footnote separator 9231638Srgrimes\l'2i' 9241638Srgrimes.if n \ 9251638Srgrimes. sp 0.3 9261638Srgrimes.. 9271638Srgrimes.\" *** DELAYED TEXT *** 9281638Srgrimes.de (d \" &&& begin delayed text 9291638Srgrimes.rn (d @U 9301638Srgrimes.so \\*(||/deltext.me 9311638Srgrimes.(d \\$1 \\$2 9321638Srgrimes.rm @U 9331638Srgrimes.. 9341638Srgrimes.de )d \" &&& end delayed text 9351638Srgrimes.tm Line \\n(c. -- unmatched .)d 9361638Srgrimes.. 9371638Srgrimes.\" *** INDEXES (TABLE OF CONTENTS) *** 9381638Srgrimes.de (x \" &&& begin index 9391638Srgrimes.rn (x @U 9401638Srgrimes.so \\*(||/index.me 9411638Srgrimes.(x \\$1 \\$2 9421638Srgrimes.rm @U 9431638Srgrimes.. 9441638Srgrimes.de )x \" &&& end index entry 9451638Srgrimes.tm Line \\n(c. -- unmatched .)x 9461638Srgrimes.. 9471638Srgrimes.\" *** STUFF FOR "STANDARD" PAPERS *** 9481638Srgrimes.de th \" *** set "thesis" mode 9491638Srgrimes.so \\*(||/thesis.me 9501638Srgrimes.rm th 9511638Srgrimes.. 9521638Srgrimes.de +c \" *** begin chapter 9531638Srgrimes.ep \" force out footnotes 9541638Srgrimes.if \\n(?o:\\n(?a \ 9551638Srgrimes\{\ 9561638Srgrimes. bp \" force out a table or more footnote 9571638Srgrimes. rs 9581638Srgrimes. ep 9591638Srgrimes.\} 9601638Srgrimes.nr ?C 1 9611638Srgrimes.nr $f 1 1 9621638Srgrimes.ds * \\*[1\\*]\k* 9631638Srgrimes.if \\n(?R \ 9641638Srgrimes. pn 1 9651638Srgrimes.bp 9661638Srgrimes.in \\n($iu \" reset the indent 9671638Srgrimes.rs 9681638Srgrimes.ie \\n(.$ \ 9691638Srgrimes. $c "\\$1" 9701638Srgrimes.el \ 9711638Srgrimes. sp 3 9721638Srgrimes.. 9731638Srgrimes.de ++ \" *** declare chapter type 9741638Srgrimes.nr _0 0 9751638Srgrimes.if "\\$1"C" \ 9761638Srgrimes. nr _0 1 \" chapter 9771638Srgrimes.if "\\$1"RC" \ 9781638Srgrimes. nr _0 11 \" renumbered chapter 9791638Srgrimes.if "\\$1"A" \ 9801638Srgrimes. nr _0 2 \" appendix 9811638Srgrimes.if "\\$1"RA" \ 9821638Srgrimes. nr _0 12 \" renumbered appendix 9831638Srgrimes.if "\\$1"P" \ 9841638Srgrimes. nr _0 3 \" preliminary material 9851638Srgrimes.if "\\$1"B" \ 9861638Srgrimes. nr _0 4 \" bibliographic material 9871638Srgrimes.if "\\$1"AB" \ 9881638Srgrimes. nr _0 5 \" abstract 9891638Srgrimes.if \\n(_0=0 \ 9901638Srgrimes. tm Line \\n(c. -- Bad mode to .++ 9911638Srgrimes.nr ?R 0 9921638Srgrimes.if \\n(_0>10 \ 9931638Srgrimes.\{ 9941638Srgrimes. nr ?R 1 9951638Srgrimes. nr _0 -10 9961638Srgrimes.\} 9971638Srgrimes.nr ch 0 1 9981638Srgrimes.if (\\n(_0=3):(\\n(_0=5) \ 9991638Srgrimes. pn 1 \" must do before .ep 10001638Srgrimes.ep \" end page for correct page number types 10011638Srgrimes.if \\n(_0=1 \ 10021638Srgrimes\{\ 10031638Srgrimes. af ch 1 10041638Srgrimes. af % 1 10051638Srgrimes.\} 10061638Srgrimes.if \\n(_0=2 \ 10071638Srgrimes\{\ 10081638Srgrimes. af ch A 10091638Srgrimes. af % 1 10101638Srgrimes.\} 10111638Srgrimes.if \\n(_0=3 \ 10121638Srgrimes. af % i 10131638Srgrimes.if \\n(_0=4 \ 10141638Srgrimes. af % 1 10151638Srgrimes.if \\n(_0=5 \ 10161638Srgrimes. af % 1 10171638Srgrimes.if \\n(.$>1 \ 10181638Srgrimes. he \\$2 10191638Srgrimes.if !\\n(_0=\\n(_M .if \\n(_M=3 \ 10201638Srgrimes. pn 1 10211638Srgrimes.nr _M \\n(_0 10221638Srgrimes.rr _0 10231638Srgrimes.. 10241638Srgrimes.de $c \" $$$ print chapter title 10251638Srgrimes.sz 12 10261638Srgrimes.ft B 10271638Srgrimes.ce 1000 10281638Srgrimes.if \\n(_M<3 \ 10291638Srgrimes. nr ch +1 10301638Srgrimes.ie \\n(_M=1 CHAPTER\ \ \\n(ch 10311638Srgrimes.el .if \\n(_M=2 APPENDIX\ \ \\n(ch 10321638Srgrimes.if \w"\\$1" .sp 3-\\n(.L 10331638Srgrimes.if \w"\\$1" \\$1 10341638Srgrimes.if (\\n(_M<3):(\w"\\$1") \ 10351638Srgrimes. sp 4-\\n(.L 10361638Srgrimes.ce 0 10371638Srgrimes.ft 10381638Srgrimes.sz 10391638Srgrimes.ie \\n(_M=1 \ 10401638Srgrimes. $C Chapter \\n(ch "\\$1" 10411638Srgrimes.el .if \\n(_M=2 \ 10421638Srgrimes. $C Appendix \\n(ch "\\$1" 10431638Srgrimes.. 10441638Srgrimes.de tp \" *** title page 10451638Srgrimes.hx 10461638Srgrimes.bp 10471638Srgrimes.br 10481638Srgrimes.rs 10491638Srgrimes.pn \\n% 10501638Srgrimes.. 10511638Srgrimes.de ac \" *** setup for ACM photo-ready paper 10521638Srgrimes.rn ac @T 10531638Srgrimes.so \\*(||/acm.me 10541638Srgrimes.ac "\\$1" "\\$2" 10551638Srgrimes.rm @T 10561638Srgrimes.. 10571638Srgrimes.de lo \" *** pull in the set of local macros 10581638Srgrimes.\" all these macros should be named "*X", where X is any letter 10591638Srgrimes.so \\*(||/local.me 10601638Srgrimes.rm lo 10611638Srgrimes.. 10621638Srgrimes.de lh \" *** letterhead 10631638Srgrimes.so \\*(||/letterhead.me 10641638Srgrimes.. 10651638Srgrimes.\" *** DATES *** 10661638Srgrimes.if \n(mo=1 .ds mo January 10671638Srgrimes.if \n(mo=2 .ds mo February 10681638Srgrimes.if \n(mo=3 .ds mo March 10691638Srgrimes.if \n(mo=4 .ds mo April 10701638Srgrimes.if \n(mo=5 .ds mo May 10711638Srgrimes.if \n(mo=6 .ds mo June 10721638Srgrimes.if \n(mo=7 .ds mo July 10731638Srgrimes.if \n(mo=8 .ds mo August 10741638Srgrimes.if \n(mo=9 .ds mo September 10751638Srgrimes.if \n(mo=10 .ds mo October 10761638Srgrimes.if \n(mo=11 .ds mo November 10771638Srgrimes.if \n(mo=12 .ds mo December 10781638Srgrimes.if \n(dw=1 .ds dw Sunday 10791638Srgrimes.if \n(dw=2 .ds dw Monday 10801638Srgrimes.if \n(dw=3 .ds dw Tuesday 10811638Srgrimes.if \n(dw=4 .ds dw Wednesday 10821638Srgrimes.if \n(dw=5 .ds dw Thursday 10831638Srgrimes.if \n(dw=6 .ds dw Friday 10841638Srgrimes.if \n(dw=7 .ds dw Saturday 108531906Sjraynard.ds td \*(mo \n(dy, \n(yr+1900 10861638Srgrimes.\" *** PARAMETRIC INITIALIZATIONS *** 10871638Srgrimes.if (1m<0.1i)&(\nx!=0) \ 10881638Srgrimes. vs 9p \" for 12-pitch DTC terminals 10891638Srgrimes.rr x 10901638Srgrimes.nr $r \n(.v/\n(.s \" ratio of vs to ps for .sz request 10911638Srgrimes.nr $R \n($r \" ratio for displays & footnotes 10921638Srgrimes.nr hm 4v \" header margin 10931638Srgrimes.nr tm 7v \" top margin 10941638Srgrimes.nr bm 6v \" bottom margin 10951638Srgrimes.nr fm 3v \" footer margin 10961638Srgrimes.nr tf 3 \" title font: (real) Times Bold 10971638Srgrimes.nr tp 10 \" title point size 10981638Srgrimes.hy 14 10991638Srgrimes.nr bi 4m \" indent for blocks 11001638Srgrimes.nr pi 5n \" indent for paragraphs 11011638Srgrimes.nr pf 1 \" normal text font 11021638Srgrimes.nr pp 10 \" normal text point size 11031638Srgrimes.nr qi 4n \" indent for quotes 11041638Srgrimes.nr qp -1 \" down one point 11051638Srgrimes.nr ii 5n \" indent for .ip's and .np's 11061638Srgrimes.nr $m 1 \" max number of columns 11071638Srgrimes.nr $s 4n \" column separation 11081638Srgrimes.bd S B 3 11091638Srgrimes.\" *** OTHER INITIALIZATION *** 11101638Srgrimes.ds [ \u\x'-0.25v' 11111638Srgrimes.ds ] \d 11121638Srgrimes.ds < \d\x'0.25v' 11131638Srgrimes.ds > \u 11141638Srgrimes.ds - -- 11151638Srgrimes.if t \ 11161638Srgrimes\{\ 11171638Srgrimes. ds [ \v'-0.4m'\x'-0.2m'\s-3 11181638Srgrimes. ds ] \s0\v'0.4m' 11191638Srgrimes. ds < \v'0.4m'\x'0.2m'\s-3 11201638Srgrimes. ds > \s0\v'-0.4m' 11211638Srgrimes. ds - \(em 11221638Srgrimes. nr fi 0.3i 11231638Srgrimes.\} 11241638Srgrimes.if n \ 11251638Srgrimes\{\ 11261638Srgrimes. nr fi 3n 11271638Srgrimes.\} 11281638Srgrimes.nr _o \n(.o 11291638Srgrimes.if n .po 1i 11301638Srgrimes.if \n(.V=1v \ 11311638Srgrimes. nr $T 2 11321638Srgrimes.if n .if \n(.T=0 \ 11331638Srgrimes. nr $T 1 11341638Srgrimes.if \nv=2 \ 11351638Srgrimes\{\ 11361638Srgrimes. nr $T 0 11371638Srgrimes. po -0.5i \" make ugly line on LHS on C/A/T typesetters 11381638Srgrimes.\} 11391638Srgrimes.if \n($T \ 11401638Srgrimes\{\ 11411638Srgrimes. if \n($T=1 \ 11421638Srgrimes. po 0 11431638Srgrimes. ds [ [ 11441638Srgrimes. ds ] ] 11451638Srgrimes. ds < < 11461638Srgrimes. ds > > 11471638Srgrimes.\} 11481638Srgrimes.nr $b \nb \" figure the real font 8 font 11491638Srgrimes.rr b 11501638Srgrimes.if \n($b=0 \ 11511638Srgrimes\{\ 11521638Srgrimes. if n .nr $b 2 \" italic 11531638Srgrimes. if t .nr $b 3 \" bold 11541638Srgrimes.\} 11551638Srgrimes.nr ps 0.5v \" paragraph pre/post spacing 11561638Srgrimes.if \n($T \ 11571638Srgrimes. nr ps 1v 11581638Srgrimes.if t .nr ps 0.35v 11591638Srgrimes.nr bs \n(ps \" block pre/post spacing 11601638Srgrimes.nr qs \n(ps \" quote pre/post spacing 11611638Srgrimes.nr zs 1v \" float-block pre/postspacing 11621638Srgrimes.nr xs 0.2v \" index prespacing 11631638Srgrimes.nr fs 0.2v \" footnote prespacing 11641638Srgrimes.if \n($T \ 11651638Srgrimes. nr fs 0 11661638Srgrimes.if n .nr es 1v \" equation pre/postspacing 11671638Srgrimes.if t .nr es 0.5v 11681638Srgrimes.wh 0 @h \" set header 11691638Srgrimes.nr $l \n(.lu \" line length 11701638Srgrimes.nr _L \n(.lu \" line length of page 11711638Srgrimes.nr $c 1 \" current column number 11721638Srgrimes.nr $f 1 1 \" footnote number 11731638Srgrimes.ds * \*[1\*]\k*\" \" footnote "name" 11741638Srgrimes.nr $d 1 1 \" delayed text number 11751638Srgrimes.ds # [1]\k#\" \" delayed text "name" 11761638Srgrimes.nr _M 1 \" chapter mode is chapter 11771638Srgrimes.ds lq \&"\" \" left quote 11781638Srgrimes.ds rq \&"\" \" right quote 11791638Srgrimes.if t \ 11801638Srgrimes. ds lq `` 11811638Srgrimes.if t \ 11821638Srgrimes. ds rq '' 11831638Srgrimes.em @z 11841638Srgrimes.\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS *** 11851638Srgrimes.de sc \" *** define special characters 11861638Srgrimes.so \\*(||/chars.me 11871638Srgrimes.rm sc 11881638Srgrimes.. 11891638Srgrimes.ll 6.0i 11901638Srgrimes.lt 6.0i 1191