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