|
|
1.1 ! root 1: .nr _0 \n(.c ! 2: .\" @(#)tmac.e 2.31 (Berkeley) 5/21/88 ! 3: .\" ! 4: .\" Copyright (c) 1988 Regents of the University of California. ! 5: .\" All rights reserved. ! 6: .\" ! 7: .\" Redistribution and use in source and binary forms are permitted ! 8: .\" provided that this notice is preserved and that due credit is given ! 9: .\" to the University of California at Berkeley. The name of the University ! 10: .\" may not be used to endorse or promote products derived from this ! 11: .\" software without specific prior written permission. This software ! 12: .\" is provided ``as is'' without express or implied warranty. ! 13: .\" %beginstrip% ! 14: .\" ! 15: .\"********************************************************************** ! 16: .\"* * ! 17: .\"* ****** - M E N R O F F / T R O F F M A C R O S ****** * ! 18: .\"* * ! 19: .\"* Produced for your edification and enjoyment by: * ! 20: .\"* Eric Allman * ! 21: .\"* Electronics Research Laboratory * ! 22: .\"* U.C. Berkeley. * ! 23: .\"* current address: * ! 24: .\"* Britton-Lee, Inc. * ! 25: .\"* 1919 Addison Street Suite 105 * ! 26: .\"* Berkeley, California 94704 * ! 27: .\"* * ! 28: .\"* VERSION 2.31 First Release: 11 Sept 1978 * ! 29: .\"* See file \*(||/revisions for revision history * ! 30: .\"* * ! 31: .\"* Documentation is available. * ! 32: .\"* * ! 33: .\"********************************************************************** ! 34: .\" ! 35: .\" Code on .de commands: ! 36: .\" *** a user interface macro. ! 37: .\" &&& a user interface macro which is redefined ! 38: .\" when used to be the real thing. ! 39: .\" $$$ a macro which may be redefined by the user ! 40: .\" to provide variant functions. ! 41: .\" --- an internal macro. ! 42: .\" ! 43: .if !\n(.V .tm You are using the wrong version of NROFF/TROFF!! ! 44: .if !\n(.V .tm This macro package works only on the version seven ! 45: .if !\n(.V .tm release of NROFF and TROFF. ! 46: .if !\n(.V .ex ! 47: .if \n(pf \ ! 48: . nx \*(||/null.me ! 49: .\" *** INTERNAL GP MACROS *** ! 50: .de @C \" --- change ev's, taking info with us ! 51: .nr _S \\n(.s ! 52: .nr _V \\n(.v ! 53: .nr _F \\n(.f ! 54: .nr _I \\n(.i ! 55: .ev \\$1 ! 56: .ps \\n(_S ! 57: .vs \\n(_Vu ! 58: .ft \\n(_F ! 59: 'in \\n(_Iu ! 60: .xl \\n($lu ! 61: .lt \\n($lu ! 62: .rr _S ! 63: .rr _V ! 64: .rr _F ! 65: .rr _I ! 66: .ls 1 ! 67: 'ce 0 ! 68: .. ! 69: .de @D \" --- determine display type (Indent, Left, Center) ! 70: .ds |p "\\$3 ! 71: .nr _d \\$1 ! 72: .ie "\\$2"C" \ ! 73: . nr _d 1 ! 74: .el .ie "\\$2"L" \ ! 75: . nr _d 2 ! 76: .el .ie "\\$2"I" \ ! 77: . nr _d 3 ! 78: .el .ie "\\$2"M" \ ! 79: . nr _d 4 ! 80: .el \ ! 81: . ds |p "\\$2 ! 82: .. ! 83: .de @z \" --- end macro ! 84: .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a ! 85: .if !"\\n(.z"" \ ! 86: \{\ ! 87: . tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z) ! 88: . di ! 89: . ex ! 90: .\} ! 91: .if \\n(?a \ ! 92: . bp \" force out final table ! 93: .rm bp ! 94: .rm @b\" \" don't start another page ! 95: .if t \ ! 96: . wh -1p @m ! 97: .br ! 98: .if \n@>1 .tm << @z ! 99: .. ! 100: .de @I \" --- initialize processor ! 101: .rm th ! 102: .rm ac ! 103: .rm lo ! 104: .rm sc ! 105: .rm @I ! 106: .. ! 107: .\" *** STANDARD HEADERS AND FOOTERS *** ! 108: .de he \" *** define header ! 109: .ie !\\n(.$ \ ! 110: \{\ ! 111: . rm |4 ! 112: . rm |5 ! 113: .\} ! 114: .el \ ! 115: \{\ ! 116: . ds |4 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 117: . ds |5 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 118: .\} ! 119: .. ! 120: .de eh \" *** define even header ! 121: .ie !\\n(.$ \ ! 122: . rm |4 ! 123: .el \ ! 124: . ds |4 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 125: .. ! 126: .de oh \" *** define odd header ! 127: .ie !\\n(.$ \ ! 128: . rm |5 ! 129: .el \ ! 130: . ds |5 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 131: .. ! 132: .de fo \" *** define footer ! 133: .ie !\\n(.$ \ ! 134: \{\ ! 135: . rm |6 ! 136: . rm |7 ! 137: .\} ! 138: .el \ ! 139: \{\ ! 140: . ds |6 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 141: . ds |7 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 142: .\} ! 143: .. ! 144: .de ef \" *** define even foot ! 145: .ie !\\n(.$ \ ! 146: . rm |6 ! 147: .el \ ! 148: . ds |6 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 149: .. ! 150: .de of \" *** define odd footer ! 151: .ie !\\n(.$ \ ! 152: . rm |7 ! 153: .el \ ! 154: . ds |7 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 155: .. ! 156: .de ep \" *** end page (must always be followed by a .bp) ! 157: .if \\n(nl>0 \ ! 158: \{\ ! 159: . wh 0 ! 160: . rs ! 161: . @b ! 162: .\} ! 163: .. ! 164: .\" *** INTERNAL HEADER AND FOOTER MACROS *** ! 165: .de @h \" --- header ! 166: .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w ! 167: .if (\\n(.i+\\n(.o)>=\\n(.l \ ! 168: . tm Line \\n(c. -- Offset + indent exceeds line length ! 169: .if t .if (\\n(.l+\\n(.o)>7.75i \ ! 170: . tm Line \\n(c. -- Offset + line length exceeds paper width ! 171: .\" initialize a pile of junk ! 172: .nr ?h \\n(?H \" transfer "next page" to "this page" ! 173: .rr ?H ! 174: .nr ?c \\n(?C ! 175: .rr ?C ! 176: .rn |4 |0 ! 177: .rn |5 |1 ! 178: .rn |6 |2 ! 179: .rn |7 |3 ! 180: .nr _w 0 \" reset max footnote width ! 181: .nr ?W 0 \" no wide floats this page (yet) ! 182: .nr ?I 1 ! 183: .\" begin actual header stuff ! 184: .ev 2 ! 185: .rs ! 186: .if t .@m \" output cut mark ! 187: .if \\n(hm>0 \ ! 188: . sp |\\n(hmu \" move to header position ! 189: .@t $h \" output header title ! 190: .if \\n(tm<=0 \ ! 191: . nr tm \n(.Vu ! 192: .sp |\\n(tmu \" move to top of text ! 193: .ev ! 194: .mk _k \" for columned output ! 195: .if \\n(?n .nm 1 \" restore line numbering if n1 mode ! 196: .nr $c 1 \" set first column ! 197: .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm ! 198: .ie \\n(?s \ ! 199: \{\ ! 200: . rr ?s ! 201: . rs ! 202: ' @b ! 203: .\} ! 204: .el \ ! 205: . @n \" begin the column ! 206: .if \n@>2 .tm << @h ! 207: .. ! 208: .if \nv=2 \ ! 209: \{\ ! 210: . de @m \" --- output cut mark (only on C/A/T-style) ! 211: . @O 0 ! 212: . lt 7.5i ! 213: . tl '\(rn''\(rn' ! 214: . @O ! 215: . lt ! 216: .. ! 217: .\} ! 218: .de @n \" --- new column or page ! 219: .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o ! 220: .if \\n(bm<=0 \ ! 221: . nr bm \\n(.Vu ! 222: .if (\\n(_w<=\\n($l)&(\\n(?W=0) \ ! 223: \{\ ! 224: . nr _b (\\n(ppu*\\n($ru)/2u \" compute fudge factor (must be < 1P) ! 225: . if \\n(_bu>((\\n(bmu-\\n(fmu-(\\n(tpu*\\n($ru))/2u) \ ! 226: . nr _b (\\n(ppu*\\n($ru)-\n(.Vu ! 227: . nr _b +\\n(bmu ! 228: .\} ! 229: .nr _B \\n(_bu ! 230: .ch @f ! 231: .wh -\\n(_bu @f ! 232: .nr _b +(\\n(ppu*\\n($ru) \" add 1 paragraph v in case of sweep past ! 233: .if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B ! 234: .nr ?f 0 \" reset footnote flag ! 235: .if \\n(?o \ ! 236: \{\ ! 237: . (f _ \" reprocess footnotes which run off page ! 238: . nf ! 239: . |o ! 240: . fi ! 241: . )f ! 242: . rm |o ! 243: .\} ! 244: .nr ?o 0 ! 245: .if \\n(?T \ ! 246: \{\ ! 247: . nr _i \\n(.i ! 248: . in \\n($iu ! 249: . |h \" output the table header ! 250: . in \\n(_iu ! 251: . rr _i ! 252: . mk #T \" for tbl commands ! 253: . ns ! 254: .\} ! 255: .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \ ! 256: \{\ ! 257: . nr ?a 0 \" output floating keep ! 258: . @k |t ! 259: . if \\n(?w \ ! 260: . mk _k \" don't overstrike wide keeps ! 261: . nr ?w 0 ! 262: .\} ! 263: .os ! 264: .$H \" special column header macro ! 265: .ns ! 266: .. ! 267: .de @f \" --- footer ! 268: .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f ! 269: .if \n@>2 .nr VL \\n(.pu-\\n(nlu ! 270: .if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL ! 271: .ec ! 272: .if \\n(?T \ ! 273: \{\ ! 274: . nr T. 1 \" for tbl commands (to output bottom line) ! 275: . T# 1 \" output the sides and bottom lines ! 276: . br ! 277: .\} ! 278: .ev 2 ! 279: .ce 0 ! 280: .if \\n(?b \ ! 281: \{\ ! 282: . nr ?b 0 ! 283: . @k |b\" \" output bottom of page tables ! 284: .\} ! 285: .if \\n(?f \ ! 286: . @o \" output footnote if present ! 287: .ie \\n($c<\\n($m \ ! 288: . @c \" handle new column ! 289: .el \ ! 290: . @e \" new page ! 291: .ev ! 292: .if \n@>2 .tm << @f ! 293: .. ! 294: .de @o \" --- output footnote ! 295: .nf ! 296: .ls 1 ! 297: .in 0 ! 298: .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B ! 299: .wh -\\n(_Bu @r ! 300: .|f ! 301: .fi ! 302: .if \n@>2 .tm @o triggered @r (?o) = \\n(?o ! 303: .if \\n(?o \ ! 304: \{\ ! 305: . di \" just in case triggered @r ! 306: . if \\n(dn=0 \ ! 307: \{\ ! 308: . rm |o ! 309: . nr ?o 0 ! 310: . \} ! 311: . nr dn \\n(_D ! 312: . rr _D ! 313: .\} ! 314: .rm |f ! 315: .ch @r ! 316: .. ! 317: .de @c \" --- new column ! 318: .if \n@>2 .tm >> @c %=\\n% ! 319: .rs ! 320: .sp |\\n(_ku ! 321: .@O +\\n($lu+\\n($su ! 322: .nr $c +1 ! 323: .@n ! 324: .. ! 325: .de @e \" --- end page ! 326: .if \n@>2 .tm >> @e ! 327: .@O \\n(_ou ! 328: .rs ! 329: .sp |\\n(.pu-\\n(fmu-(\\n(tpu*\\n($ru) \" move to footer position ! 330: .@t $f \" output footer title ! 331: .nr ?h 0 ! 332: .bp ! 333: .. ! 334: .de @t \" --- output header or footer title ! 335: .if !\\n(?h \ ! 336: \{\ ! 337: . sz \\n(tp \" set header/footer type fonts, etc. ! 338: . @F \\n(tf ! 339: . lt \\n(_Lu \" make title span entire page ! 340: . nf ! 341: . \\$1 ! 342: . br ! 343: .\} ! 344: .. ! 345: .de $h \" $$$ print header ! 346: .rm |z ! 347: .if !\\n(?c \ ! 348: \{\ ! 349: . if e .ds |z "\\*(|0 ! 350: . if o .ds |z "\\*(|1 ! 351: .\} ! 352: .if !\(ts\\*(|z\(ts\(ts \ ! 353: ' tl \\*(|z ! 354: .rm |z ! 355: .. ! 356: .de $f \" $$$ print footer ! 357: .rm |z ! 358: .if \\n(?c \ ! 359: \{\ ! 360: . if e .ds |z "\\*(|0 ! 361: . if o .ds |z "\\*(|1 ! 362: .\} ! 363: .if \(ts\\*(|z\(ts\(ts \ ! 364: \{\ ! 365: . if e .ds |z "\\*(|2 ! 366: . if o .ds |z "\\*(|3 ! 367: .\} ! 368: .if !\(ts\\*(|z\(ts\(ts \ ! 369: ' tl \\*(|z ! 370: .rm |z ! 371: .. ! 372: .de @r \" --- reprocess overflow footnotes ! 373: .if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b ! 374: .di |o \" save overflow footnote ! 375: .nr ?o 1 ! 376: .nr _D \\n(dn ! 377: .ns ! 378: .. ! 379: .\" *** COMMANDS WITH VARIANT DEFINITIONS *** ! 380: .rn bp @b \" --- begin page ! 381: .de bp \" *** begin new page (overrides columns) ! 382: .nr $c \\n($m \" force new page, not new column ! 383: .ie \\n(nl>0 \ ! 384: . @b \\$1 ! 385: .el \ ! 386: \{\ ! 387: . if \\n(.$>0 \ ! 388: . pn \\$1 ! 389: . if \\n(?I \ ! 390: . @h \" 'spring' the header trap ! 391: .\} ! 392: .br ! 393: .wh 0 @h \" reset header ! 394: .. ! 395: .rn ll xl \" *** special line length (local) ! 396: .de ll \" *** line length (global to environments) ! 397: .xl \\$1 ! 398: .lt \\$1 ! 399: .nr $l \\n(.l ! 400: .if (\\n($m<=1):(\\n($l>\\n(_L) \ ! 401: . nr _L \\n(.l ! 402: .. ! 403: .rn po @O \" --- local page offset ! 404: .de po \" *** page offset ! 405: .@O \\$1 ! 406: .nr _o \\n(.o ! 407: .. ! 408: .\" *** MISCELLANEOUS ROFF COMMANDS *** ! 409: .de hx \" *** suppress headers and footers next page ! 410: .nr ?H 1 ! 411: .. ! 412: .de ix \" *** indent, no break ! 413: 'in \\$1 ! 414: .. ! 415: .de bl \" *** contiguous blank lines ! 416: .br ! 417: .ne \\$1 ! 418: .rs ! 419: .sp \\$1 ! 420: .. ! 421: .de n1 \" *** line numbering 1 ! 422: .nm 1 ! 423: .xl -\w'0000'u ! 424: .nr ?n 1 ! 425: .. ! 426: .de n2 \" *** line numbering 2 ! 427: .nm \\$1 ! 428: .ie \\n(.$ \ ! 429: . xl -\w'0000'u ! 430: .el \ ! 431: . xl \\n($lu ! 432: .. ! 433: .de pa \" *** new page ! 434: .bp \\$1 ! 435: .. ! 436: .de ro \" *** roman page numbers ! 437: .af % i ! 438: .. ! 439: .de ar \" *** arabic page numbers ! 440: .af % 1 ! 441: .. ! 442: .de m1 \" *** position one space ! 443: .nr _0 \\n(hmu ! 444: .nr hm \\$1v ! 445: .nr tm +\\n(hmu-\\n(_0u ! 446: .rr _0 ! 447: .. ! 448: .de m2 \" *** position two space ! 449: .nr tm \\n(hmu+\\n(tpp+\\$1v ! 450: .. ! 451: .de m3 \" *** position three space ! 452: .nr bm \\n(fmu+\\n(tpp+\\$1v ! 453: .. ! 454: .de m4 \" *** position four space ! 455: .nr _0 \\n(fmu ! 456: .nr fm \\$1v ! 457: .nr bm +\\n(fmu-\\n(_0u ! 458: .. ! 459: .de sk \" *** leave a blank page (next page) ! 460: .if \\n(.$>0 \ ! 461: . tm Line \\n(c. -- I cannot skip multiple pages ! 462: .nr ?s 1 ! 463: .. ! 464: .\" *** MISCELLANEOUS USER SUPPORT COMMANDS *** ! 465: .de re \" *** reset tabs (TROFF defines 15 stops default) ! 466: .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 ! 467: .. ! 468: .if t .ig ! 469: .de re \" *** reset tabs (NROFF version) ! 470: .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 ! 471: .. ! 472: .de ba \" *** set base indent ! 473: .ie \\n(.$ \ ! 474: . nr $i \\$1n ! 475: .el \ ! 476: . nr $i \\n(siu*\\n($0u ! 477: .. ! 478: .de hl \" *** draw horizontal line ! 479: .br ! 480: \l'\\n(.lu-\\n(.iu' ! 481: .sp ! 482: .. ! 483: .\" *** PARAGRAPHING *** ! 484: .de pp \" *** paragraph ! 485: .lp \\n(piu ! 486: .. ! 487: .de lp \" *** left aligned paragraph ! 488: .@p ! 489: .if \\n(.$ \ ! 490: . ti +\\$1 ! 491: .nr $p 0 1 ! 492: .. ! 493: .de ip \" *** indented paragraph w/ optional tag ! 494: .if (\\n(ii>0)&(\\n(ii<1n) \ ! 495: . nr ii \\n(iin ! 496: .nr _0 \\n(ii ! 497: .if \\n(.$>1 \ ! 498: . nr _0 \\$2n ! 499: .@p \\n(_0u ! 500: .if \\w"\\$1" \ ! 501: \{\ ! 502: . ti -\\n(_0u ! 503: . ie \\w"\\$1">=\\n(_0 \ ! 504: \{\ ! 505: \&\\$1 ! 506: . br ! 507: . \} ! 508: . el \&\\$1\h'|\\n(_0u'\c ! 509: .\} ! 510: .rr _0 ! 511: .. ! 512: .de np \" *** numbered paragraph ! 513: .if \\n($p<0 \ ! 514: . nr $p 0 \" reset number after .bu ! 515: .nr $p +1 \" increment paragraph number ! 516: .@p \w'\0(000)\0'u ! 517: .ti -\w'\0(000)\0'u ! 518: \0(\\n($p)\h'|\w'\0(000)\0'u'\c ! 519: .. ! 520: .de bu \" *** bulleted paragraph ! 521: .br ! 522: .if \\n($p<0 \ ! 523: . ns \" don't space between .bu paragraphs ! 524: .nr $p 0-1 \" mark "bulleted paragraph" mode ! 525: .@p \w'\0\(bu\0'u ! 526: .ti -\w'\0\(bu\0'u ! 527: \0\(bu\0\c ! 528: .. ! 529: .de @p \" --- initialize for paragraph ! 530: .@I \" initialize macro processor ! 531: .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation ! 532: .in \\n($iu+\\n(pou ! 533: .if \\n(.$ \ ! 534: . in +\\$1n ! 535: .ce 0 ! 536: .fi ! 537: .@F \\n(pf ! 538: .sz \\n(pp ! 539: .sp \\n(psu ! 540: .ne \\n(.Lv+\\n(.Vu ! 541: .ns ! 542: .. ! 543: .\" *** SECTION HEADINGS *** ! 544: .de sh \" &&& section heading ! 545: .rn sh @T ! 546: .so \\*(||/sh.me ! 547: .sh "\\$1" "\\$2" \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 ! 548: .rm @T ! 549: .. ! 550: .de $p \" $$$ print section heading ! 551: .if (\\n(si>0)&(\\n(.$>2) \ ! 552: . nr $i \\$3*\\n(si ! 553: .in \\n($iu ! 554: .ie !"\\$1\\$2"" \ ! 555: \{\ ! 556: . sp \\n(ssu \" one of them is non-null ! 557: . ne \\n(.Lv+\\n(.Vu+\\n(psu+(\\n(spu*\\n($ru*\\n(.Lu) ! 558: . ie \\n(.$>2 \ ! 559: . ti -(\\n(siu-\\n(sou) ! 560: . el \ ! 561: . ti +\\n(sou ! 562: . @F \\n(sf ! 563: . sz \\n(sp ! 564: . if \\$3>0 \ ! 565: . $\\$3 ! 566: . if \w"\\$2">0 \\$2. ! 567: . if \w"\\$1">0 \\$1\f1\ \ \& ! 568: .\} ! 569: .el \ ! 570: . sp \\n(psu ! 571: .@F \\n(pf ! 572: .sz \\n(pp ! 573: .. ! 574: .de uh \" *** unnumbered section heading ! 575: .rn uh @T ! 576: .so \\*(||/sh.me ! 577: .uh "\\$1" ! 578: .rm @T ! 579: .. ! 580: .\" *** COLUMNNED OUTPUT *** ! 581: .de 2c \" *** double columned output ! 582: .br ! 583: .if \\n($m>1 \ ! 584: . 1c \" revert to 1c if already 2c ! 585: .nr $c 1 ! 586: .nr $m 2 ! 587: .if \\n(.$>1 \ ! 588: . nr $m \\$2 ! 589: .if \\n(.$>0 \ ! 590: . nr $s \\$1n \" param 1: column seperation ! 591: .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m ! 592: .xl \\n($lu ! 593: .mk _k ! 594: .ns ! 595: .. ! 596: .de 1c \" *** single columned output ! 597: .br ! 598: .nr $c 1 ! 599: .nr $m 1 ! 600: .ll \\n(_Lu \" return to normal output ! 601: .sp |\\n(.hu ! 602: .@O \\n(_ou ! 603: .. ! 604: .de bc \" *** begin column ! 605: .sp 24i ! 606: .. ! 607: .\" *** FLOATING TABLES AND NONFLOATING BLOCKS *** ! 608: .de (z \" &&& begin floating keep ! 609: .rn (z @V ! 610: .so \\*(||/float.me ! 611: .(z \\$1 \\$2 ! 612: .rm @V ! 613: .. ! 614: .de )z \" &&& end floating keep ! 615: .tm Line \\n(c. -- unmatched .)z ! 616: .. ! 617: .de (t \" XXX temp ref to (z ! 618: .(z \\$1 \\$2 ! 619: .. ! 620: .de )t \" XXX temp ref to )t ! 621: .)z \\$1 \\$2 ! 622: .. ! 623: .de (b \" *** begin block ! 624: .br ! 625: .@D 3 \\$1 \\$2 ! 626: .sp \\n(bsu ! 627: .@( ! 628: .. ! 629: .de )b \" *** end block ! 630: .br ! 631: .@) ! 632: .if (\\n(bt=0):(\\n(.t<\\n(bt) \ ! 633: . ne \\n(dnu \" make it all on one page ! 634: .ls 1 ! 635: .nf ! 636: .|k ! 637: .ec ! 638: .fi ! 639: .in 0 ! 640: .xl \\n($lu ! 641: .ev ! 642: .rm |k ! 643: .sp \\n(bsu+\\n(.Lv-1v ! 644: .. ! 645: .de @( \" --- begin keep ! 646: .if !"\\n(.z"" .tm Line \\n(c. -- Illegal nested keep \\n(.z ! 647: .@M ! 648: .di |k ! 649: \!'rs ! 650: .. ! 651: .de @M \" --- set modes for display ! 652: .nr ?k 1 ! 653: .@C 1 ! 654: .@F \\n(df ! 655: .vs \\n(.su*\\n($Ru ! 656: .nf ! 657: .if "\\*(|p"F" \ ! 658: . fi \" set fill mode if "F" parameter ! 659: .if \\n(_d=4 \ ! 660: . in 0 ! 661: .if \\n(_d=3 \ ! 662: \{\ ! 663: . in +\\n(biu ! 664: . xl -\\n(biu ! 665: .\} ! 666: .if \\n(_d=1 \ ! 667: . ce 10000 ! 668: .. ! 669: .de @) \" --- end keep ! 670: .br ! 671: .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened ! 672: .nr ?k 0 ! 673: .di ! 674: .in 0 ! 675: .ce 0 ! 676: .. ! 677: .de (c \" *** begin block centered text ! 678: .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests ! 679: .di |c ! 680: .. ! 681: .de )c \" *** end block centered text ! 682: .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c ! 683: .br \" force out final line ! 684: .di ! 685: .if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl ! 686: .ev 1 ! 687: .ls 1 ! 688: .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u ! 689: .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl ! 690: .nf ! 691: .|c ! 692: .ec ! 693: .in ! 694: .ls ! 695: .ev ! 696: .rm |c ! 697: .. ! 698: .\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS *** ! 699: .de (q \" *** begin block quote ! 700: .br ! 701: .@C 1 ! 702: .fi ! 703: .sp \\n(qsu ! 704: .in +\\n(qiu ! 705: .xl -\\n(qiu ! 706: .sz \\n(qp ! 707: .. ! 708: .de )q \" *** end block quote ! 709: .br ! 710: .ev ! 711: .sp \\n(qsu+\\n(.Lv-1v ! 712: .nr ?k 0 ! 713: .. ! 714: .de (l \" *** begin list ! 715: .br ! 716: .sp \\n(bsu ! 717: .@D 3 \\$1 \\$2 ! 718: .@M ! 719: .. ! 720: .de )l \" *** end list ! 721: .br ! 722: .ev ! 723: .sp \\n(bsu+\\n(.Lv-1v ! 724: .nr ?k 0 ! 725: .. ! 726: .\" *** PREPROCESSOR SUPPORT *** ! 727: .\" ! 728: .\" EQN ! 729: .\" ! 730: .de EQ \" &&& begin equation ! 731: .rn EQ @T ! 732: .so \\*(||/eqn.me ! 733: .EQ \\$1 \\$2 ! 734: .rm @T ! 735: .. ! 736: .\" ! 737: .\" TBL ! 738: .\" ! 739: .de TS \" &&& begin table ! 740: .rn TS @W ! 741: .so \\*(||/tbl.me ! 742: .TS \\$1 \\$2 ! 743: .rm @W ! 744: .. ! 745: .\" ! 746: .\" REFER ! 747: .\" ! 748: .de ]- \" &&& initialize reference ! 749: .rn ]- @] ! 750: .so \\*(||/refer.me ! 751: .]- ! 752: .rm @] ! 753: .. ! 754: .de ]< \" &&& initialize reference ! 755: .rn ]< @] ! 756: .so \\*(||/refer.me ! 757: .]< ! 758: .rm @] ! 759: .. ! 760: .if n .ds [. " [ ! 761: .if t .ds [. \s-2\v'-.4m'\f1 ! 762: .if n .ds .] ] ! 763: .if t .ds .] \v'.4m'\s+2\fP ! 764: .if n .ds <. " ! 765: .if t .ds <. . ! 766: .if n .ds >. . ! 767: .if t .ds >. " ! 768: .\" ! 769: .\" IDEAL ! 770: .\" ! 771: .de IS \" *** start ideal picture ! 772: .nr g7 \\n(.u ! 773: .ls 1 ! 774: .. ! 775: .de IF ! 776: .if \\n(g7 .fi ! 777: .ls ! 778: .. ! 779: .de IE \" *** end ideal picture ! 780: .if \\n(g7 .fi ! 781: .ls ! 782: .. ! 783: .\" ! 784: .\" PIC ! 785: .\" ! 786: .de PS \" *** start picture: $1=height, $2=width in units or inches ! 787: .if t \ ! 788: . sp 0.3 ! 789: .nr g7 \\$2 ! 790: .in (\\n(.lu-\\n(g7u)/2u ! 791: .ne \\$1u ! 792: .nr g7 \\n(.u ! 793: .ls 1 ! 794: .. ! 795: .de PE \" *** end picture ! 796: .ls ! 797: .in ! 798: .if \\n(g7 .fi ! 799: .if t .sp .6 ! 800: .. ! 801: .\" ! 802: .\" GREMLIN ! 803: .\" ! 804: .de GS \" *** start gremlin picture ! 805: .nr g7 (\\n(.lu-\\n(g1u)/2u ! 806: .if "\\$1"L" .nr g7 \\n(.iu ! 807: .if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u ! 808: .in \\n(g7u ! 809: .nr g7 \\n(.u ! 810: .ls 1 ! 811: .nf ! 812: .ne \\n(g2u ! 813: .. ! 814: .de GE \" *** end gremlin picture ! 815: .GF ! 816: .if t .sp .6 ! 817: .. ! 818: .de GF \" *** finish gremlin picture; stay at top ! 819: .ls ! 820: .in ! 821: .if \\n(g7 .fi ! 822: .. ! 823: .\" *** FONT AIDS *** ! 824: .de sz \" *** set point size and vertical spacing ! 825: .ps \\$1 ! 826: .vs \\n(.su*\\n($ru \" default vs at pointsize + 20% ! 827: .bd S B \\n(.su/3u ! 828: .. ! 829: .de r \" *** enter roman font ! 830: .nr _F \\n(.f ! 831: .ul 0 ! 832: .ft 1 ! 833: .if \\n(.$ \&\\$1\f\\n(_F\\$2 ! 834: .rr _F ! 835: .. ! 836: .de i \" *** enter italic ! 837: .nr _F \\n(.f ! 838: .ul 0 ! 839: .ft 2 ! 840: .if \\n(.$ \&\\$1\f\\n(_F\\$2 ! 841: .rr _F ! 842: .. ! 843: .de b \" *** enter boldface (underline in NROFF) ! 844: .nr _F \\n(.f ! 845: .ul 0 ! 846: .ft \\n($b ! 847: .if \\n(.$ \&\\$1\f\\n(_F\\$2 ! 848: .rr _F ! 849: .. ! 850: .de rb \" *** enter real boldface (not underlined in NROFF) ! 851: .nr _F \\n(.f ! 852: .ul 0 ! 853: .ft 3 ! 854: .if \\n(.$ \&\\$1\f\\n(_F\\$2 ! 855: .rr _F ! 856: .. ! 857: .de u \" *** enter underlined word ! 858: \&\\$1\l'|0\(ul'\\$2 ! 859: .. ! 860: .de q \" *** enter quoted word ! 861: \&\\*(lq\\$1\\*(rq\\$2 ! 862: .. ! 863: .de bi \" *** enter word in bold italics ! 864: .ft 2 ! 865: .ie t \&\k~\\$1\h'|\\n~u+(\\w' 'u/4u)'\\$1\fP\\$2 ! 866: .el \&\\$1\fP\\$2 ! 867: .. ! 868: .de bx \" *** enter boxed word ! 869: .ie \\n($T \&\f2\\$1\fP\\$2 ! 870: .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2 ! 871: .. ! 872: .de sm \" *** print in smaller font ! 873: \s-1\\$1\\s0\\$2 ! 874: .. ! 875: .de @F \" --- change font (8 -> underlined, 0 -> no change) ! 876: .nr ~ \\$1 ! 877: .if \\n~>0 \ ! 878: \{\ ! 879: . ul 0 ! 880: . if \\n~>4 \ ! 881: . nr ~ \\n($b ! 882: . ft \\n~ ! 883: .\} ! 884: .rr ~ ! 885: .. ! 886: .\" *** FOOTNOTING *** ! 887: .de (f \" &&& begin footnote ! 888: .rn (f @U ! 889: .so \\*(||/footnote.me ! 890: .(f \\$1 \\$2 ! 891: .rm @U ! 892: .. ! 893: .de )f \" &&& end footnote ! 894: .tm Line \\n(c. -- unmatched .)f ! 895: .. ! 896: .de $s \" $$$ footnote separator ! 897: \l'2i' ! 898: .if n \ ! 899: . sp 0.3 ! 900: .. ! 901: .\" *** DELAYED TEXT *** ! 902: .de (d \" &&& begin delayed text ! 903: .rn (d @U ! 904: .so \\*(||/deltext.me ! 905: .(d \\$1 \\$2 ! 906: .rm @U ! 907: .. ! 908: .de )d \" &&& end delayed text ! 909: .tm Line \\n(c. -- unmatched .)d ! 910: .. ! 911: .\" *** INDEXES (TABLE OF CONTENTS) *** ! 912: .de (x \" &&& begin index ! 913: .rn (x @U ! 914: .so \\*(||/index.me ! 915: .(x \\$1 \\$2 ! 916: .rm @U ! 917: .. ! 918: .de )x \" &&& end index entry ! 919: .tm Line \\n(c. -- unmatched .)x ! 920: .. ! 921: .\" *** STUFF FOR "STANDARD" PAPERS *** ! 922: .de th \" *** set "thesis" mode ! 923: .so \\*(||/thesis.me ! 924: .rm th ! 925: .. ! 926: .de +c \" *** begin chapter ! 927: .ep \" force out footnotes ! 928: .if \\n(?o:\\n(?a \ ! 929: \{\ ! 930: . bp \" force out a table or more footnote ! 931: . rs ! 932: . ep ! 933: .\} ! 934: .nr ?C 1 ! 935: .nr $f 1 1 ! 936: .ds * \\*[1\\*]\k* ! 937: .if \\n(?R \ ! 938: . pn 1 ! 939: .bp ! 940: .in \\n($iu \" reset the indent ! 941: .rs ! 942: .ie \\n(.$ \ ! 943: . $c "\\$1" ! 944: .el \ ! 945: . sp 3 ! 946: .. ! 947: .de ++ \" *** declare chapter type ! 948: .nr _0 0 ! 949: .if "\\$1"C" \ ! 950: . nr _0 1 \" chapter ! 951: .if "\\$1"RC" \ ! 952: . nr _0 11 \" renumbered chapter ! 953: .if "\\$1"A" \ ! 954: . nr _0 2 \" appendix ! 955: .if "\\$1"RA" \ ! 956: . nr _0 12 \" renumbered appendix ! 957: .if "\\$1"P" \ ! 958: . nr _0 3 \" preliminary material ! 959: .if "\\$1"B" \ ! 960: . nr _0 4 \" bibliographic material ! 961: .if "\\$1"AB" \ ! 962: . nr _0 5 \" abstract ! 963: .if \\n(_0=0 \ ! 964: . tm Line \\n(c. -- Bad mode to .++ ! 965: .nr ?R 0 ! 966: .if \\n(_0>10 \ ! 967: .\{ ! 968: . nr ?R 1 ! 969: . nr _0 -10 ! 970: .\} ! 971: .nr ch 0 1 ! 972: .if (\\n(_0=3):(\\n(_0=5) \ ! 973: . pn 1 \" must do before .ep ! 974: .ep \" end page for correct page number types ! 975: .if \\n(_0=1 \ ! 976: \{\ ! 977: . af ch 1 ! 978: . af % 1 ! 979: .\} ! 980: .if \\n(_0=2 \ ! 981: \{\ ! 982: . af ch A ! 983: . af % 1 ! 984: .\} ! 985: .if \\n(_0=3 \ ! 986: . af % i ! 987: .if \\n(_0=4 \ ! 988: . af % 1 ! 989: .if \\n(_0=5 \ ! 990: . af % 1 ! 991: .if \\n(.$>1 \ ! 992: . he \\$2 ! 993: .if !\\n(_0=\\n(_M .if \\n(_M=3 \ ! 994: . pn 1 ! 995: .nr _M \\n(_0 ! 996: .rr _0 ! 997: .. ! 998: .de $c \" $$$ print chapter title ! 999: .sz 12 ! 1000: .ft B ! 1001: .ce 1000 ! 1002: .if \\n(_M<3 \ ! 1003: . nr ch +1 ! 1004: .ie \\n(_M=1 CHAPTER\ \ \\n(ch ! 1005: .el .if \\n(_M=2 APPENDIX\ \ \\n(ch ! 1006: .if \w"\\$1" .sp 3-\\n(.L ! 1007: .if \w"\\$1" \\$1 ! 1008: .if (\\n(_M<3):(\w"\\$1") \ ! 1009: . sp 4-\\n(.L ! 1010: .ce 0 ! 1011: .ft ! 1012: .sz ! 1013: .ie \\n(_M=1 \ ! 1014: . $C Chapter \\n(ch "\\$1" ! 1015: .el .if \\n(_M=2 \ ! 1016: . $C Appendix \\n(ch "\\$1" ! 1017: .. ! 1018: .de tp \" *** title page ! 1019: .hx ! 1020: .bp ! 1021: .br ! 1022: .rs ! 1023: .pn \\n% ! 1024: .. ! 1025: .de ac \" *** setup for ACM photo-ready paper ! 1026: .rn ac @T ! 1027: .so \\*(||/acm.me ! 1028: .ac "\\$1" "\\$2" ! 1029: .rm @T ! 1030: .. ! 1031: .de lo \" *** pull in the set of local macros ! 1032: .\" all these macros should be named "*X", where X is any letter ! 1033: .so \\*(||/local.me ! 1034: .rm lo ! 1035: .. ! 1036: .de lh \" *** letterhead ! 1037: .so \\*(||/letterhead.me ! 1038: .. ! 1039: .\" *** DATES *** ! 1040: .if \n(mo=1 .ds mo January ! 1041: .if \n(mo=2 .ds mo February ! 1042: .if \n(mo=3 .ds mo March ! 1043: .if \n(mo=4 .ds mo April ! 1044: .if \n(mo=5 .ds mo May ! 1045: .if \n(mo=6 .ds mo June ! 1046: .if \n(mo=7 .ds mo July ! 1047: .if \n(mo=8 .ds mo August ! 1048: .if \n(mo=9 .ds mo September ! 1049: .if \n(mo=10 .ds mo October ! 1050: .if \n(mo=11 .ds mo November ! 1051: .if \n(mo=12 .ds mo December ! 1052: .if \n(dw=1 .ds dw Sunday ! 1053: .if \n(dw=2 .ds dw Monday ! 1054: .if \n(dw=3 .ds dw Tuesday ! 1055: .if \n(dw=4 .ds dw Wednesday ! 1056: .if \n(dw=5 .ds dw Thursday ! 1057: .if \n(dw=6 .ds dw Friday ! 1058: .if \n(dw=7 .ds dw Saturday ! 1059: .ds td \*(mo \n(dy, 19\n(yr ! 1060: .\" *** PARAMETRIC INITIALIZATIONS *** ! 1061: .if (1m<0.1i)&(\nx!=0) \ ! 1062: . vs 9p \" for 12-pitch DTC terminals ! 1063: .rr x ! 1064: .nr $r \n(.v/\n(.s \" ratio of vs to ps for .sz request ! 1065: .nr $R \n($r \" ratio for displays & footnotes ! 1066: .nr hm 4v \" header margin ! 1067: .nr tm 7v \" top margin ! 1068: .nr bm 6v \" bottom margin ! 1069: .nr fm 3v \" footer margin ! 1070: .nr tf 3 \" title font: (real) Times Bold ! 1071: .nr tp 10 \" title point size ! 1072: .hy 14 ! 1073: .nr bi 4m \" indent for blocks ! 1074: .nr pi 5n \" indent for paragraphs ! 1075: .nr pf 1 \" normal text font ! 1076: .nr pp 10 \" normal text point size ! 1077: .nr qi 4n \" indent for quotes ! 1078: .nr qp -1 \" down one point ! 1079: .nr ii 5n \" indent for .ip's and .np's ! 1080: .nr $m 1 \" max number of columns ! 1081: .nr $s 4n \" column separation ! 1082: .ds || /usr/lib/me ! 1083: .if \n@>0 .ds || . ! 1084: .bd S B 3 ! 1085: .\" *** OTHER INITIALIZATION *** ! 1086: .ds [ \u\x'-0.25v' ! 1087: .ds ] \d ! 1088: .ds < \d\x'0.25v' ! 1089: .ds > \u ! 1090: .ds - -- ! 1091: .if t \ ! 1092: \{\ ! 1093: . ds [ \v'-0.4m'\x'-0.2m'\s-3 ! 1094: . ds ] \s0\v'0.4m' ! 1095: . ds < \v'0.4m'\x'0.2m'\s-3 ! 1096: . ds > \s0\v'-0.4m' ! 1097: . ds - \(em ! 1098: . nr fi 0.3i ! 1099: .\} ! 1100: .if n \ ! 1101: \{\ ! 1102: . nr fi 3n ! 1103: .\} ! 1104: .nr _o \n(.o ! 1105: .if n .po 1i ! 1106: .if \n(.V=1v \ ! 1107: . nr $T 2 ! 1108: .if n .if \n(.T=0 \ ! 1109: . nr $T 1 ! 1110: .if \nv=2 \ ! 1111: \{\ ! 1112: . nr $T 0 ! 1113: . po -0.5i \" make ugly line on LHS on C/A/T typesetters ! 1114: .\} ! 1115: .if \n($T \ ! 1116: \{\ ! 1117: . if \n($T=1 \ ! 1118: . po 0 ! 1119: . ds [ [ ! 1120: . ds ] ] ! 1121: . ds < < ! 1122: . ds > > ! 1123: .\} ! 1124: .nr $b \nb \" figure the real font 8 font ! 1125: .rr b ! 1126: .if \n($b=0 \ ! 1127: \{\ ! 1128: . if n .nr $b 2 \" italic ! 1129: . if t .nr $b 3 \" bold ! 1130: .\} ! 1131: .nr ps 0.5v \" paragraph pre/post spacing ! 1132: .if \n($T \ ! 1133: . nr ps 1v ! 1134: .if t .nr ps 0.35v ! 1135: .nr bs \n(ps \" block pre/post spacing ! 1136: .nr qs \n(ps \" quote pre/post spacing ! 1137: .nr zs 1v \" float-block pre/postspacing ! 1138: .nr xs 0.2v \" index prespacing ! 1139: .nr fs 0.2v \" footnote prespacing ! 1140: .if \n($T \ ! 1141: . nr fs 0 ! 1142: .if n .nr es 1v \" equation pre/postspacing ! 1143: .if t .nr es 0.5v ! 1144: .wh 0 @h \" set header ! 1145: .nr $l \n(.lu \" line length ! 1146: .nr _L \n(.lu \" line length of page ! 1147: .nr $c 1 \" current column number ! 1148: .nr $f 1 1 \" footnote number ! 1149: .ds * \*[1\*]\k*\" \" footnote "name" ! 1150: .nr $d 1 1 \" delayed text number ! 1151: .ds # [1]\k#\" \" delayed text "name" ! 1152: .nr _M 1 \" chapter mode is chapter ! 1153: .ds lq \&"\" \" left quote ! 1154: .ds rq \&"\" \" right quote ! 1155: .if t \ ! 1156: . ds lq `` ! 1157: .if t \ ! 1158: . ds rq '' ! 1159: .em @z ! 1160: .\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS *** ! 1161: .de sc \" *** define special characters ! 1162: .so \\*(||/chars.me ! 1163: .rm sc ! 1164: .. ! 1165: .ll 6.0i ! 1166: .lt 6.0i
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.