|
|
1.1 ! root 1: .\" ! 2: .\" Copyright (c) 1990 The Regents of the University of California. ! 3: .\" All rights reserved. ! 4: .\" ! 5: .\" Redistribution and use in source and binary forms are permitted provided ! 6: .\" that: (1) source distributions retain this entire copyright notice and ! 7: .\" comment, and (2) distributions including binaries display the following ! 8: .\" acknowledgement: ``This product includes software developed by the ! 9: .\" University of California, Berkeley and its contributors'' in the ! 10: .\" documentation or other materials provided with the distribution and in ! 11: .\" all advertising materials mentioning features or use of this software. ! 12: .\" Neither the name of the University nor the names of its contributors may ! 13: .\" be used to endorse or promote products derived from this software without ! 14: .\" specific prior written permission. ! 15: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 16: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 17: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 18: .\" ! 19: .\" @(#)tmac.doc 5.9 (Berkeley) 7/24/90 ! 20: .\" ! 21: .\" Assume nroff on crt's only if cR==1 ! 22: .if n .nr cR 1 ! 23: .\" STRING CONSTANTS ! 24: .\" DITROFF ! 25: .if t \{\ ! 26: .\" Address Style ! 27: .ds aD \fI ! 28: .\" Argument Reference Style ! 29: .ds aR \f(CO ! 30: .\" Interactive Comand Modifier (flag) ! 31: .ds cM \f(CB ! 32: .\" Emphasis (in the English sense - usually italics) ! 33: .ds eM \fI ! 34: .\" Errno Style ! 35: .ds eR \fC ! 36: .\" Environment Variable Style ! 37: .ds eV \fC ! 38: .\" Command Line Flag Style ! 39: .ds fL \f(CB ! 40: .\" Header String Style ! 41: .ds Hs \fR ! 42: .\" Interactive Command Style ! 43: .ds iC \f(CB ! 44: .\" Literal Style ! 45: .ds lI \fC ! 46: .\" Left Parenthesis Style ! 47: .ds lP \fR\|(\|\fP ! 48: .\" Right Parenthesis Style ! 49: .ds rP \fR\|)\|\fP ! 50: .\" Options Open Bracket Style ! 51: .ds lB \fR\^[\^\fP ! 52: .\" Options Open Bracket Style ! 53: .ds rB \fR\^]\fP ! 54: .\" Name (subject of manpage) Style ! 55: .ds nM \f(CB ! 56: .\" Pathname Style ! 57: .ds pA \fC ! 58: .\" Accepted punctuation string for -mdoc syntax ! 59: .ds Pu \fR[.,:;(\^)[\^]\fR] ! 60: .\" Section Header Style ! 61: .ds Sp \s12\fB ! 62: .\" .ds sT \s-2\fR ! 63: .\" Symbolic Emphasis (boldface) ! 64: .ds sY \f(CB ! 65: .\" Generic Variable Style ! 66: .ds vA \fI ! 67: .\" Volume Title Style ! 68: .ds Vs \fR ! 69: .\" Cross Reference STyle (man page only) ! 70: .ds xR \fC ! 71: .\" Math * ! 72: .tr *\(** ! 73: .\} ! 74: .\" NROFF ! 75: .if n \{\ ! 76: .\" Address Style ! 77: .ds aD \fI ! 78: .\" Argument Reference Style ! 79: .ds aR \fI ! 80: .\" Interactive Command Modifier (flag) ! 81: .ds cM \fB ! 82: .\" Emphasis (in the English sense - usually italics) ! 83: .ds eM \fI ! 84: .\" Errno Style ! 85: .ds eR \fR ! 86: .\" Environment Variable Style ! 87: .ds eV \fR ! 88: .\" Command Line Flag Style ! 89: .ds fL \fB ! 90: .\" Header String Style ! 91: .ds Hs \fR ! 92: .\" Interactive Command Style ! 93: .ds iC \fB ! 94: .\" Literal Style ! 95: .ds lI \fR ! 96: .\" Left Parenthesis Style ! 97: .ds lP \fR\|(\fP ! 98: .\" Right Parenthesis Style ! 99: .ds rP \fR\|)\fP ! 100: .\" Options Open Bracket Style ! 101: .ds lB \fR\|[\|\fP ! 102: .\" Options Open Bracket Style ! 103: .ds rB \fR\|]\fP ! 104: .\" Name (subject of manpage) Style ! 105: .ds nM \fB ! 106: .\" Pathname Style ! 107: .ds pA \fI ! 108: .\" Accepted punctuation string for -mdoc syntax ! 109: .ds Pu [.,;:()[]] ! 110: .\" Section Header Style ! 111: .ds Sp \s12\fB ! 112: .\" .ds sT \s-2\fR ! 113: .\" .ds sT \s-2\fR ! 114: .\" Symbol, Mode or Mask Style ! 115: .ds sY \fB ! 116: .\" Generic Variable Style ! 117: .ds vA \fI ! 118: .\" Volume Title Style ! 119: .ds Vs \fR ! 120: .\" Cross Reference Style (man page only) ! 121: .ds xR \fR ! 122: .\} ! 123: .\" INDENTS - Subheaders(sI), Text(Ti) between Section Headers and Subsects ! 124: .if t \{\ ! 125: . nr sI \w'\fC,'u*5 ! 126: . nr Ti \n(sIu ! 127: .\} ! 128: .if n \{\ ! 129: . nr sI .5i ! 130: . nr Ti .5i ! 131: .\} ! 132: .\" Flags for macros names which are used only for .Ds ! 133: .nr dI 6n ! 134: .nr dC 1 ! 135: .nr dL 1 ! 136: .nr dR 1 ! 137: .\" INDENT WIDTHS (for Lists) ! 138: .\" Width Needed for Address Tag (indented amount) ! 139: .nr Ad 12n ! 140: .\" Angle Quote Width ! 141: .nr Aq 12n ! 142: .\" Width Needed for Argument ! 143: .nr Ar 12n ! 144: .\" Width Needed for Column offset ! 145: .nr Cl 15n ! 146: .\" Width neeeded for Interactive Command Modifier ! 147: .nr Cm 10n ! 148: .\" Width Needed for Complex Expressions ! 149: .nr Cx 20n ! 150: .\" Indent Width Needed for Display (right and left margins) ! 151: .nr Ds 6n ! 152: .\" Double Quote Width ! 153: .nr Dq 12n ! 154: .\" tI is dependent on Ds and used by .Dp ! 155: .nr tI \n(Dsu ! 156: .\" Width Needed for Display ! 157: .nr Em 10n ! 158: .\" Width Needed for Errno Types ! 159: .nr Er 15n ! 160: .\" Width Needed for Environment Variables ! 161: .nr Ev 15n ! 162: .\" Width Needed for Example Indent ! 163: .nr Ex 10n ! 164: .\" Width Needed for Flag ! 165: .nr Fl 10n ! 166: .\" Width Needed for Function ! 167: .nr Fn 16n ! 168: .\" Width neeeded for Interactive Command Name ! 169: .nr Ic 10n ! 170: .\" Width Needed for Constant ! 171: .nr Li 16n ! 172: .\" Width Needed for Math Symbol ? not sure if needed ! 173: .nr Ms 6n ! 174: .\" Width Needed for Name ! 175: .nr Nm 10n ! 176: .\" Width Needed for Option Begin ! 177: .nr Ob 14n ! 178: .\" Width Needed for Option End ! 179: .nr Oe 14n ! 180: .\" Width Needed for Option (one line) ! 181: .nr Op 14n ! 182: .\" Width Needed for Pathname ! 183: .nr Pa 32n ! 184: .\" Parenthesis Quote Width ! 185: .nr Pq 12n ! 186: .\" Single Quote Width ! 187: .nr Sq 12n ! 188: .\" Width Needed for Symbols, Modes or Masks ! 189: .nr Sy 6n ! 190: .\" Width needed for default or unknown text width ! 191: .nr Tx 22n ! 192: .\" Width Needed for Generic Variable ! 193: .nr Va 12n ! 194: .\" Width Needed for Cross Reference, should the cross ref be annotated. ! 195: .nr Xr 10n ! 196: .\" PARAGRAPH SPACE ! 197: .if t \{\ ! 198: . nr Pp .5v ! 199: .\} ! 200: .if n \{\ ! 201: . nr Pp 1v ! 202: .\} ! 203: .\" PAGE LAYOUT ! 204: .\" .Li Tagged Paragraph Style - zero if break on oversized tag ! 205: .\" one if add em space and continue filling line. ! 206: .nr tP 0 ! 207: .\" Page Layout Macro ! 208: .de pL ! 209: .\" DITROFF ! 210: .ie t \{\ ! 211: .\" Header Margin ! 212: . nr Hm .5i ! 213: .\" Footer Margin ! 214: . nr Fm .5i ! 215: .\" Line length ! 216: . nr ll 5.5i ! 217: .\" Line length ! 218: . ll 5.5i ! 219: .\" Title length ! 220: . nr lt 5.5i ! 221: .\" Title length ! 222: . lt 5.5i ! 223: .\" Page offset ! 224: . nr po 1.56i ! 225: .\" Page offset ! 226: . po 1.56i ! 227: .\" Vertical space distance (from Section headers/Lists/Subsections) ! 228: . nr vV .5v ! 229: .\" em space ! 230: . ds tP \|\|\|\|\|\| ! 231: .\} ! 232: .el \{\ ! 233: .\" Line length ! 234: . nr ll 78n ! 235: . ll 78n ! 236: .\" Title length ! 237: . nr lt 78n ! 238: .\" Title length ! 239: . lt 78n ! 240: .\" Page offset ! 241: . nr po 0i ! 242: .\" Page offset ! 243: . po 0i ! 244: .\" Vertical space distance (from Section headers/Lists/Subsections) ! 245: . nr vV 1v ! 246: .\" em space ! 247: . ds tP \0\0 ! 248: .\" Test for crt ! 249: . ie \\n(cR .nr Hm 0 ! 250: . el .nr Hm .5i ! 251: .\" Footer Margin ! 252: . nr Fm .5i ! 253: .\} ! 254: .. ! 255: .\" Adjustment mode ! 256: .if n \{\ ! 257: .ad l ! 258: .na ! 259: .. ! 260: .\} ! 261: .\" PREDEFINED STRINGS ! 262: .if t \{\ ! 263: . ds <= \(<= ! 264: . ds >= \(>= ! 265: . ds Lq \&`` ! 266: . ds Rq \&'' ! 267: . ds ua \(ua ! 268: . ds aa \(aa ! 269: . ds ga \(ga ! 270: . ds sR \(aa ! 271: . ds sL \(ga ! 272: .\} ! 273: .if n \{\ ! 274: . ds <= \&<\&= ! 275: . ds >= \&>\&= ! 276: . ds Rq '' ! 277: . ds Lq `` ! 278: . ds ua ^ ! 279: . ds aa ' ! 280: . ds ga ` ! 281: . ds sL ` ! 282: . ds sR ' ! 283: .\} ! 284: .\" Note: The distances from the bottom or top of the page are set ! 285: .\" in headers (macro .hK): to -1.25 for troff, and -1.167 for nroff ! 286: .\" bottoms, and top is 0. ! 287: .\" ! 288: .\" .Dt Document/manpage_title section/chapter volume ! 289: .\" The \{ and \} is necessary as roff doesn't nest if-elses ! 290: .\" properly, especially with .ds. ! 291: .\" TODO: separate Dt into Dt, Ch and Vt for supp docs. ! 292: .de Dt ! 293: .ds dT UNTITLED ! 294: .ds vT Local ! 295: .ds cH Null ! 296: .\" Volume and Section Number or Chapter Number ! 297: .if !"\\$1"" .ds dT \\$1 ! 298: .if !"\\$2"" \{\ ! 299: . ds cH \\$2 ! 300: . if "\\$3"" \{\ ! 301: . \" Volume Title if none given ! 302: . if \\$2>=1 .if \\$2<=8 \{\ ! 303: . ds vT UNIX Reference Manual ! 304: . if \\$2>1 .if \\$2<6 .ds vT UNIX Programmer's Manual ! 305: . if "\\$2"8" .ds vT UNIX System Manager's Manual ! 306: . \} ! 307: . if "\\$2"unass" .ds vT DRAFT ! 308: . if "\\$2"draft" .ds vT DRAFT ! 309: . if "\\$2"paper" .ds vT Null ! 310: . \} ! 311: .\} ! 312: .if !"\\$3"" \{\ ! 313: . \" Volume Title if given ! 314: . if "\\$3"USD" .ds vT UNIX User's Supplementary Documents ! 315: . if "\\$3"PS1" .ds vT UNIX Programmers's Supplementary Documents ! 316: . if "\\$3"AMD" .ds vT UNIX Ancestral Manual Documents ! 317: . if "\\$3"SMM" .ds vT UNIX System Manager's Manual ! 318: . if "\\$3"URM" .ds vT UNIX Reference Manual ! 319: . if "\\$3"PRM" .ds vT UNIX Programmers's Manual ! 320: . if "\\$3"IND" .ds vT UNIX Manual Master Index ! 321: . if "\\$3"CON" .ds vT UNIX Contributed Software Manual ! 322: . if "\\$3"IMP" .ds vT UNIX Implementation Notes ! 323: . if "\\$3"HOW" .ds vT UNIX How Pocket Manual ! 324: . if "\\$3"LOCAL" .ds vT UNIX Local Manual ! 325: . if "\\*(vT"Local" .ds vT \\$3 ! 326: .\} ! 327: .. ! 328: .\" ! 329: .\" .Os Operating System/Standard and Release or Version Number ! 330: .\" ! 331: .de Os ! 332: .ds oS Null ! 333: .if "\\$1"" \{\ ! 334: . ds oS 4.4 Berkeley UNIX ! 335: .\} ! 336: .if "\\$2"" \{\ ! 337: . ds o1 Non-Null ! 338: .\} ! 339: .if "\\$1"ATT" \{\ ! 340: . ds oS AT&T ! 341: . if "\\$2"" .as oS \0UNIX ! 342: . if "\\$2"7th" .as oS \07th Edition ! 343: . if "\\$2"7" .as oS \07th Edition ! 344: . if "\\$2"III" .as oS \0System III ! 345: . if "\\$2"3" .as oS \0System III ! 346: . if "\\$2"V" .as oS \0System V ! 347: . if "\\$2"V.2" .as oS \0System V Release 2 ! 348: . if "\\$2"V.3" .as oS \0System V Release 3 ! 349: . if "\\$2"V.4" .as oS \0System V Release 4 ! 350: .\} ! 351: .if "\\$1"BSD" \{\ ! 352: . if "\\$2"3" .ds oS 3rd Berkeley Distribution ! 353: . if "\\$2"4" .ds oS 4th Berkeley Distribution ! 354: . if "\\$2"4.1" .ds oS 4.1 Berkeley Distribution ! 355: . if "\\$2"4.2" .ds oS 4.2 Berkeley Distribution ! 356: . if "\\$2"4.3" .ds oS 4.3 Berkeley Distribution ! 357: . if "\\$2"4.3+" .ds oS 4.3+tahoe Berkeley Distribution ! 358: . if "\\$2"4.4" .ds oS 4.4 Berkeley Distribution ! 359: .\} ! 360: .if "\\*(oS"Null" .ds oS \\$1 ! 361: .if "\\*(o1"Non-Null" .as oS \0\\$2 ! 362: .rm o1 ! 363: .. ! 364: .\" ! 365: .\" Standards ! 366: .\" ! 367: .\" .de St ! 368: .\" .ds sT Null ! 369: .\" .if "\\$1"POSIX" \{\ ! 370: .\" . ds sT IEEE Standard POSIX ! 371: .\" . if \\$2 .as sT \0\\$2 ! 372: .\" .\} ! 373: .\" .if "\\$1"ANSI" \{\ ! 374: .\" . ds sT ANSI Standard ! 375: .\" . if \\$2 .as sT \0\\$2 ! 376: .\" .\} ! 377: .\" .if "\\$1"ISO" \{\ ! 378: .\" . ds sT ISO Standard ! 379: .\" . if \\$2 .as sT \0\\$2 ! 380: .\" .\} ! 381: .\" .if "\\*(sT"Null" .ds sR \\$3 ! 382: .\" .. ! 383: .\" ! 384: .\" .de Gp ! 385: .\" .ie !"\\$1"" .ds gP \&\\$1 \\$2 \\$3 \\$4 \\$5 ! 386: .\" .el .ds gP Null ! 387: .\" .. ! 388: .\" ! 389: .\" ! 390: .de Dd ! 391: .nr aa 0 ! 392: .ie \\n(.$>0 \{\ ! 393: . ie \\n(.$<4 \{\ ! 394: . ds dD \\$1 \\$2 \\$3 ! 395: . \} ! 396: . el .tm Usage: .Dd Month Day, Year (e.g July 4, 1977). ! 397: .\} ! 398: .el \{\ ! 399: . ds dD Epoch ! 400: .\} ! 401: .. ! 402: .\" ! 403: .\" House Keeping Macro - Make sense of dT, cH, vT, sT, gP and dS ! 404: .\" TODO: Try to get else's for efficiency ! 405: .\" TODO: GET RID OF .wh -1.167i (its in v7) ! 406: .\" ! 407: .\" ! 408: .de hK ! 409: .nr % 1 ! 410: .ds hT \\*(dT ! 411: .if !"\\*(cH"Null" \{\ ! 412: . ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|) ! 413: . el .as hT \\|(\\|\\*(cH\\|) ! 414: .\} ! 415: .if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|) ! 416: .if t \{\ ! 417: . wh 0 hM ! 418: . wh -1.25i fM ! 419: .\} ! 420: .if n \{\ ! 421: . ie \\n(cR \{\ ! 422: . hM ! 423: . wh -0v fM ! 424: . \} ! 425: . el \{\ ! 426: . wh 0 hM ! 427: . wh -1.167i fM ! 428: . \} ! 429: .\} ! 430: .if n \{\ ! 431: . if \\n(nl==0:\\n(nl==-1 'bp ! 432: .\} ! 433: .if t 'bp ! 434: .em lM ! 435: .. ! 436: .\" Header Macro ! 437: .\" ! 438: .de hM ! 439: .ev 1 ! 440: .pL ! 441: .if !\\n(cR 'sp \\n(Hmu ! 442: .tl @\\*(Hs\\*(hT\fP@\\*(Vs\\*(vT\fP@\\*(Hs\\*(hT\fP@ ! 443: 'sp \\n(Hmu ! 444: .ev ! 445: .. ! 446: .\" ! 447: .de fM ! 448: .ev 1 ! 449: .pL ! 450: .if !\\n(cR \{\ ! 451: ' sp \\n(Fmu ! 452: . tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@ ! 453: ' bp ! 454: .\} ! 455: .if \\n(cR \{\ ! 456: .\" . tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@ ! 457: .\" ' bp ! 458: .\} ! 459: .ev ! 460: .. ! 461: .de lM ! 462: .fl ! 463: .if \\n(cR \{\ ! 464: . fM ! 465: . pl \\n(nlu ! 466: .\} ! 467: .. ! 468: .de Pp ! 469: .sp \\n(Ppu ! 470: .ne 2 ! 471: .ns ! 472: .. ! 473: .de Lp ! 474: .Pp ! 475: .. ! 476: .de LP ! 477: .tm Not a \-mdoc command: .LP ! 478: .. ! 479: .de PP ! 480: .tm Not a \-mdoc command: .PP ! 481: .. ! 482: .de pp ! 483: .tm Not a \-mdoc command: .pp ! 484: .. ! 485: .de Co ! 486: .tm Not a \-mdoc command: .Co ! 487: .. ! 488: .nr z. 1 ! 489: .nr z, 1 ! 490: .nr z: 1 ! 491: .nr z; 1 ! 492: .nr z) 1 ! 493: .nr z( 1 ! 494: .nr z[ 1 ! 495: .nr z] 1 ! 496: .\" This is disgusting, troff not parse if stmt properly ! 497: .nr z1 0 ! 498: .nr z2 0 ! 499: .nr z3 0 ! 500: .nr z4 0 ! 501: .nr z5 0 ! 502: .nr z6 0 ! 503: .nr z7 0 ! 504: .nr z8 0 ! 505: .nr z9 0 ! 506: .nr z0 0 ! 507: .nr z# 0 ! 508: .\" ! 509: .de Ad ! 510: .ie \\n(.$==0 \{\ ! 511: . tm Usage: .Ad address [...] \\*(Pu ! 512: .\} ! 513: .el \{\ ! 514: . ds sV \\*(aD ! 515: . nr cF \\n(.f ! 516: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 517: . el .as f1 \&\\*(sV ! 518: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 519: . ft \\n(cF ! 520: .\} ! 521: .. ! 522: .\" ! 523: .\" Command Line Argument Macro ! 524: .\" ! 525: .de Ar ! 526: .ie \\n(.$==0 \{\ ! 527: . ie !"\\*(iM"" .as f1 \&[\|\\*(aRfile\ ...\fP\|] ! 528: . el \&[\|\\*(aRfile\ ...\fP\|] ! 529: .\} ! 530: .el \{\ ! 531: . ds sV \\*(aR ! 532: . nr cF \\n(.f ! 533: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 534: . el .as f1 \&\\*(sV ! 535: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 536: . ft \\n(cF ! 537: .\} ! 538: .. ! 539: .\" ! 540: .de Em ! 541: .ie \\n(.$==0 \{\ ! 542: . tm Usage: .Em text ... \\*(Pu ! 543: .\} ! 544: .el \{\ ! 545: . ds sV \\*(eM ! 546: . nr cF \\n(.f ! 547: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 548: . el .as f1 \&\\*(sV ! 549: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 550: . ft \\n(cF ! 551: .\} ! 552: .. ! 553: .\" ! 554: .de Er ! 555: .ie \\n(.$==0 \{\ ! 556: . tm Usage: .Er ERRNOTYPE ... \\*(Pu ! 557: . \} ! 558: .el \{\ ! 559: . ds sV \\*(eR ! 560: . nr cF \\n(.f ! 561: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 562: . el .as f1 \&\\*(sV ! 563: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 564: . ft \\n(cF ! 565: .\} ! 566: .. ! 567: .\" ! 568: .de Ev ! 569: .ie \\n(.$==0 \{\ ! 570: . tm Usage: .Ev ENVIRONMENT_VARIABLE(s) ... \\*(Pu ! 571: . \} ! 572: .el \{\ ! 573: . ds sV \\*(eV ! 574: . nr cF \\n(.f ! 575: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 576: . el .as f1 \&\\*(sV ! 577: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 578: . ft \\n(cF ! 579: .\} ! 580: .. ! 581: .\" ! 582: .\" Flag Name Macro ! 583: .\" ! 584: .de Fl ! 585: .ie \\n(.$==0 \{\ ! 586: . ie !"\\*(iM"" .as f1 \&\\*(fL\-\fP ! 587: . el \&\\*(fL\-\fP ! 588: .\} ! 589: .el \{\ ! 590: . nr rZ 0 ! 591: . sW \\$1 ! 592: . if (\\n(sW==1&\\n(.$==1) .rZ \\$1 ! 593: . ds sV \\*(fL ! 594: . nr cF \\n(.f ! 595: . ie \\n(rZ \{\ ! 596: . ie "\\*(iM"" .ds f1 \&\\*(sV\-\f\\n(cF\\$1 ! 597: . el \&\\*(sV\-\f\\n(cF\\$1 ! 598: . \} ! 599: . el \{\ ! 600: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 601: . el .as f1 \&\\*(sV ! 602: . fB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 603: . ft \\n(cF ! 604: . \} ! 605: .\} ! 606: .. ! 607: .\" Interactive Commands Macro ! 608: .\" ! 609: .de Ic ! 610: .ie \\n(.$==0 \{\ ! 611: . tm Usage: .Ic Interactive Commands(s) ... \\*(Pu ! 612: .\} ! 613: .el \{\ ! 614: . ds sV \\*(iC ! 615: . nr cF \\n(.f ! 616: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 617: . el .as f1 \&\\*(sV ! 618: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 619: . ft \\n(cF ! 620: .\} ! 621: .. ! 622: .\" ! 623: .\" Interactive Command Modifiers (flags) ! 624: .\" ! 625: .de Cm ! 626: .ie \\n(.$==0 \{\ ! 627: . tm Usage: .Cm Interactive Command Modifier(s) ... \\*(Pu ! 628: .\} ! 629: .el \{\ ! 630: . ds sV \\*(cM ! 631: . nr cF \\n(.f ! 632: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 633: . el .as f1 \&\\*(sV ! 634: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 635: . ft \\n(cF ! 636: .\} ! 637: .. ! 638: .\" ! 639: .de Li ! 640: .ie \\n(.$==0 \{\ ! 641: . tm Usage: .Li literal ... \\*(Pu ! 642: . \} ! 643: .el \{\ ! 644: . ds sV \\*(lI ! 645: . nr cF \\n(.f ! 646: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 647: . el .as f1 \&\\*(sV ! 648: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 649: . ft \\n(cF ! 650: .\} ! 651: .. ! 652: .\" If in nroff or any other case where the default font ! 653: .\" is constant width, and literal means zilch, single quote instead. ! 654: .ie n \{\ ! 655: .de Ql ! 656: . ie \\n(.$==0 \{\ ! 657: . tm Usage: .Ql literal ... \\*(Pu ! 658: . \} ! 659: . el \{\ ! 660: . Sq \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 661: . \} ! 662: .. ! 663: .\} ! 664: .el \{\ ! 665: .de Ql ! 666: . ie \\n(.$==0 \{\ ! 667: . tm Usage: .Ql literal ... \\*(Pu ! 668: . \} ! 669: . el \{\ ! 670: . Li \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 671: . \} ! 672: .. ! 673: .\} ! 674: .\" ! 675: .de Nm ! 676: .ie \\n(.$==0 \{\ ! 677: . if "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu ! 678: . ie !"\\*(iM"" .as f1 \&\\*(nM\\*(n1\\$1\fP ! 679: . el \&\\*(nM\\*(n1\\$1\fP ! 680: .\} ! 681: .el \{\ ! 682: . ds sV \\*(nM ! 683: . nr cF \\n(.f ! 684: . if \\n(nS \{\ ! 685: . rs ! 686: . in -\\n(iSu ! 687: . ie \\n(nS>1 .br ! 688: . el \{\ ! 689: . sW \\$1 ! 690: . nr iS ((\\n(sW+1)*\\n(fW)u ! 691: . \} ! 692: . in +\\n(iSu ! 693: . ti -\\n(iSu ! 694: . nr nS \\n(nS+1 ! 695: . \} ! 696: . if "\\*(n1"" .ds n1 \\$1 ! 697: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 698: . el .as f1 \&\\*(sV ! 699: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 700: . ft \\n(cF ! 701: .\} ! 702: .. ! 703: .\" ! 704: .de Pa ! 705: .ie \\n(.$==0 \{\ ! 706: \&\\*(pA~\fP ! 707: .\} ! 708: .el \{\ ! 709: . ds sV \\*(pA ! 710: . nr cF \\n(.f ! 711: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 712: . el .as f1 \&\\*(sV ! 713: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 714: . ft \\n(cF ! 715: .\} ! 716: .. ! 717: .\" ! 718: .de Sy ! 719: .ie \\n(.$==0 \{\ ! 720: . tm Usage: .Sy Symbolic Text ... \\*(Pu ! 721: . \} ! 722: .el \{\ ! 723: . ds sV \\*(sY ! 724: . nr cF \\n(.f ! 725: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 726: . el .as f1 \&\\*(sV ! 727: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 728: . ft \\n(cF ! 729: .\} ! 730: .. ! 731: .\" ! 732: .de Ms ! 733: .ie \\n(.$==0 \{\ ! 734: . tm Usage: .Ms Math Symbol ... \\*(Pu ! 735: . \} ! 736: .el \{\ ! 737: . ds sV \\*(sY ! 738: . nr cF \\n(.f ! 739: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 740: . el .as f1 \&\\*(sV ! 741: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 742: . ft \\n(cF ! 743: .\} ! 744: .. ! 745: .\" ! 746: .de Va ! 747: .ie \\n(.$==0 \{\ ! 748: . tm Usage: .Va variable_name(s) ... \\*(Pu ! 749: .\} ! 750: .el \{\ ! 751: . ds sV \\*(vA ! 752: . nr cF \\n(.f ! 753: . ie "\\*(iM"" .ds f1 \&\\*(sV ! 754: . el .as f1 \&\\*(sV ! 755: . nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 756: . ft \\n(cF ! 757: .\} ! 758: .. ! 759: .\" ! 760: .de nB ! 761: .hy 0 ! 762: .if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)? ! 763: .ie \\n(.$>1 \{\ ! 764: . rZ \\$1 ! 765: . ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP ! 766: . el .as f1 \&\\$1 ! 767: . rZ \\$2 ! 768: . if !\\n(rZ \{\ ! 769: . ie !"\\*(iM""\{\ ! 770: .\" I surrender ! 771: . if "\\*(iM"Tp" .as f1 \&\ \& ! 772: . if "\\*(iM"Dp" .as f1 \&\ \& ! 773: . if "\\*(iM"Op" .as f1 \&\ \& ! 774: . if "\\*(iM"Cx" .as f1 \&\ \& ! 775: . if "\\*(iM"Dq" .as f1 \& \& ! 776: . if "\\*(iM"Sq" .as f1 \& \& ! 777: . if "\\*(iM"Pq" .as f1 \& \& ! 778: . if "\\*(iM"Aq" .as f1 \& \& ! 779: . \} ! 780: . el .as f1 \& \& ! 781: . \} ! 782: . nB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 783: .\} ! 784: .el \{\ ! 785: . rZ \\$1 ! 786: . ie \\n(rZ .as f1 \&\f\\n(cF\\$1 ! 787: . el .as f1 \&\\$1\f\\n(cF ! 788: . if "\\*(iM"" \{\&\\*(f1 ! 789: . ds f1 ! 790: . \} ! 791: . hy ! 792: .\} ! 793: .. ! 794: .de fB ! 795: .hy 0 ! 796: .if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)? ! 797: .ie \\n(.$>1 \{\ ! 798: . rZ \\$1 ! 799: . ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP ! 800: . el \{\ ! 801: . ie "\\$1"-" .as f1 \&\-\- ! 802: . el .as f1 \&\-\\$1 ! 803: . \} ! 804: . rZ \\$2 ! 805: . if !\\n(rZ \{\ ! 806: . ie !"\\*(iM""\{\ ! 807: .\" I surrender ! 808: . if "\\*(iM"Tp" .as f1 \&\ \& ! 809: . if "\\*(iM"Dp" .as f1 \&\ \& ! 810: . if "\\*(iM"Op" .as f1 \&\ \& ! 811: . if "\\*(iM"Cx" .as f1 \&\ \& ! 812: . if "\\*(iM"Dq" .as f1 \& \& ! 813: . if "\\*(iM"Sq" .as f1 \& \& ! 814: . if "\\*(iM"Pq" .as f1 \& \& ! 815: . if "\\*(iM"Aq" .as f1 \& \& ! 816: . \} ! 817: . el .as f1 \& \& ! 818: . \} ! 819: . fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 820: .\} ! 821: .el \{\ ! 822: . rZ \\$1 ! 823: . ie \\n(rZ .as f1 \&\f\\n(cF\\$1 ! 824: . el \{\ ! 825: . ie "\\$1"-" .as f1 \&\-\-\f\\n(cF ! 826: . el .as f1 \&\-\\$1\f\\n(cF ! 827: . \} ! 828: . if "\\*(iM"" \{\&\\*(f1 ! 829: . ds f1 ! 830: . \} ! 831: . hy ! 832: .\} ! 833: .. ! 834: .\" ! 835: .\" Single quoted Items ! 836: .\" eF, sB g[0-9] and f2 ! 837: .de Sq ! 838: .nr eF 0 ! 839: .ie \\n(.$==0 \{\ ! 840: . ie "\\*(iM"" \&\\*(sL\&\\*sR ! 841: . el .as f1 \&\\*(sL\&\\*(sR ! 842: .\} ! 843: .el \{\ ! 844: . ie "\\*(iM"" \{\ ! 845: . ds f1 \&\\*(sL ! 846: . ds iM Sq ! 847: . \} ! 848: . el .as f1 \&\\*(sL ! 849: . sB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 850: . ie \\n(eF>0 .\\*(g1 \\*(g2 \\*(g3 \\*(g4 \\*(g5 \\*(g6 \\*(g7 \\*(g8 ! 851: . el .as f1 \\*(g0 ! 852: . as f1 \\*(sR ! 853: . if !"\\*(f2"" .as f1 \\*(f2 ! 854: . if "\\*(iM"Sq" \{\ ! 855: \&\\*(f1 ! 856: . ds f1 ! 857: . ds iM ! 858: . \} ! 859: . ds f2 ! 860: . rm g0 g1 g2 g3 g4 g5 g6 g7 g8 g9 ! 861: . nr eF 0 ! 862: .\} ! 863: .. ! 864: .\" ! 865: .\" Double quoted Items ! 866: .de Dq ! 867: .nr Ef 0 ! 868: .ie \\n(.$==0 \{\ ! 869: . ie "\\*(iM"" \&\\*(Lq\&\\*(Rq ! 870: . el .as f1 \&\\*(Lq\&\\*(Rq ! 871: .\} ! 872: .el \{\ ! 873: . ie "\\*(iM"" \{\ ! 874: . ds f1 \&\\*(Lq ! 875: . ds iM Dq ! 876: . \} ! 877: . el .as f1 \&\\*(Lq ! 878: . Sb \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 879: . ie \\n(Ef>0 .\\*(k1 \\*(k2 \\*(k3 \\*(k4 \\*(k5 \\*(k6 \\*(k7 \\*(k8 ! 880: . el .as f1 \\*(k0 ! 881: . as f1 \\*(Rq ! 882: . if !"\\*(f4"" .as f1 \\*(f4 ! 883: . if "\\*(iM"Dq" \{\ ! 884: \&\\*(f1 ! 885: . ds f1 ! 886: . ds iM ! 887: . \} ! 888: . ds f4 ! 889: . rm k0 k1 k2 k3 k4 k5 k6 k7 k8 k9 ! 890: . nr Ef 0 ! 891: .\} ! 892: .. ! 893: .\" ! 894: .\" Parenthesis quoted Items ! 895: .de Pq ! 896: .nr pQ 0 ! 897: .ie \\n(.$==0 \{\ ! 898: . ie "\\*(iM"" \&(\&) ! 899: . el .as f1 \&(\&) ! 900: .\} ! 901: .el \{\ ! 902: . ie "\\*(iM"" \{\ ! 903: . ds f1 \&( ! 904: . ds iM Pq ! 905: . \} ! 906: . el .as f1 \&( ! 907: . pB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 908: . ie \\n(pQ>0 .\\*(y1 \\*(y2 \\*(y3 \\*(y4 \\*(y5 \\*(y6 \\*(y7 \\*(y8 ! 909: . el .as f1 \\*(y0 ! 910: . as f1 \&) ! 911: . if !"\\*(f3"" .as f1 \\*(f3 ! 912: . if "\\*(iM"Pq" \{\ ! 913: \&\\*(f1 ! 914: . ds f1 ! 915: . ds iM ! 916: . \} ! 917: . ds f3 ! 918: . rm y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 ! 919: . nr pQ 0 ! 920: .\} ! 921: .. ! 922: .\" eF, sB g[0-9] and f2 ! 923: .de sB ! 924: .hy 0 ! 925: .ie \\n(.$==0 .tm Sick Logic: macro sB ! 926: .el \{\ ! 927: . ie \\n(eF>=1 .nr eF \\n(eF+1 ! 928: . el \{\ ! 929: . mN \\$1 ! 930: . if \\n(mN .nr eF \\n(eF+1 ! 931: . \} ! 932: . rZ \\$1 ! 933: . ie \\n(rZ .as f2 \\$1 ! 934: . el \{\ ! 935: . ie \\n(eF<1 .as g\\n(eF \\$1 ! 936: . el .as g\\n(eF \\$1 ! 937: . \} ! 938: . if \\n(.$>1 \{\ ! 939: . rZ \\$2 ! 940: . if \\n(rZ==0 \{\ ! 941: . if \\n(eF<1 \{\ ! 942: . as g\\n(eF \& \& ! 943: . \} ! 944: . \} ! 945: . sB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 946: . \} ! 947: .\} ! 948: .. ! 949: .de Sb ! 950: .hy 0 ! 951: .ie \\n(.$==0 .tm Sick Logic: macro Sb ! 952: .el \{\ ! 953: . ie \\n(Ef>=1 .nr Ef \\n(Ef+1 ! 954: . el \{\ ! 955: . mN \\$1 ! 956: . if \\n(mN .nr Ef \\n(Ef+1 ! 957: . \} ! 958: . rZ \\$1 ! 959: . ie \\n(rZ .as f4 \\$1 ! 960: . el \{\ ! 961: . ie \\n(Ef<1 .as k\\n(Ef \\$1 ! 962: . el .as k\\n(Ef \\$1 ! 963: . \} ! 964: . if \\n(.$>1 \{\ ! 965: . rZ \\$2 ! 966: . if \\n(rZ==0 \{\ ! 967: . if \\n(Ef<1 \{\ ! 968: . as k\\n(Ef \& \& ! 969: . \} ! 970: . \} ! 971: . Sb \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 972: . \} ! 973: .\} ! 974: .. ! 975: .de pB ! 976: .hy 0 ! 977: .ie \\n(.$==0 .tm Sick Logic: macro pB ! 978: .el \{\ ! 979: . ie \\n(pQ>=1 .nr pQ \\n(pQ+1 ! 980: . el \{\ ! 981: . mN \\$1 ! 982: . if \\n(mN .nr pQ \\n(pQ+1 ! 983: . \} ! 984: . rZ \\$1 ! 985: . ie \\n(rZ .as f3 \\$1 ! 986: . el \{\ ! 987: . ie \\n(pQ<1 .as y\\n(pQ \\$1 ! 988: . el .as y\\n(pQ \\$1 ! 989: . \} ! 990: . if \\n(.$>1 \{\ ! 991: . rZ \\$2 ! 992: . if \\n(rZ==0 \{\ ! 993: . if \\n(pQ<1 \{\ ! 994: . as y\\n(pQ \& \& ! 995: . \} ! 996: . \} ! 997: . pB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 998: . \} ! 999: .\} ! 1000: .. ! 1001: .de aQ ! 1002: .hy 0 ! 1003: .ie \\n(.$==0 .tm Bad Syntax: .Aq ! 1004: .el \{\ ! 1005: . ie \\n(aQ>=1 .nr aQ \\n(aQ+1 ! 1006: . el \{\ ! 1007: . mN \\$1 ! 1008: . if \\n(mN .nr aQ \\n(aQ+1 ! 1009: . \} ! 1010: . rZ \\$1 ! 1011: . ie \\n(rZ .as aZ \\$1 ! 1012: . el \{\ ! 1013: . ie \\n(aQ<1 .as a\\n(aQ \\$1 ! 1014: . el .as a\\n(aQ \\$1 ! 1015: . \} ! 1016: . if \\n(.$>1 \{\ ! 1017: . rZ \\$2 ! 1018: . if \\n(rZ==0 \{\ ! 1019: . if \\n(aQ<1 \{\ ! 1020: . as a\\n(aQ \& \& ! 1021: . \} ! 1022: . \} ! 1023: . aQ \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1024: . \} ! 1025: .\} ! 1026: .. ! 1027: .\" Angle Bracket Quoted Items ! 1028: .de Aq ! 1029: .nr aQ 0 ! 1030: .ie \\n(.$==0 \{\ ! 1031: . ie "\\*(iM"" \&<\&> ! 1032: . el .as f1 \&<\&> ! 1033: .\} ! 1034: .el \{\ ! 1035: . ie "\\*(iM"" \{\ ! 1036: . ds f1 \&< ! 1037: . ds iM Aq ! 1038: . \} ! 1039: . el .as f1 \&< ! 1040: . aQ \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 ! 1041: . ie \\n(aQ>0 .\\*(a1 \\*(a2 \\*(a3 \\*(a4 \\*(a5 \\*(a6 \\*(a7 \\*(a8 ! 1042: . el .as f1 \\*(a0 ! 1043: . as f1 \&> ! 1044: . if !"\\*(aZ"" .as f1 \\*(aZ ! 1045: . if "\\*(iM"Aq" \{\ ! 1046: \&\\*(f1 ! 1047: . ds f1 ! 1048: . ds iM ! 1049: . \} ! 1050: . ds aZ ! 1051: . rm a0 a1 a2 a3 a4 a5 a6 a7 a8 ! 1052: . nr aQ 0 ! 1053: .\} ! 1054: .. ! 1055: .\" macro Name test, return macro register value if true ! 1056: .de mN ! 1057: .nr mN 0 ! 1058: .sW \\$1 ! 1059: .if \\n(sW==2 \{\ ! 1060: . if \\n(\\$1 .nr mN \\n(\\$1 ! 1061: .\} ! 1062: .. ! 1063: .\" Punctuation test (using z registers), return 1 if true ! 1064: .de rZ ! 1065: .nr rZ 0 ! 1066: .sW \\$1 ! 1067: .if \\n(sW==1 \{\ ! 1068: . if \\n(z\\$1==1 \{\ ! 1069: . nr rZ 1 ! 1070: . \} ! 1071: .\} ! 1072: .. ! 1073: .\" ! 1074: .\" sW returns number of characters in a string ! 1075: .if t \{\ ! 1076: .nr fW \w'\fC,' ! 1077: .de sW ! 1078: .nr sW \w'\fC\\$1' ! 1079: .\} ! 1080: .if n \{\ ! 1081: .nr fW \w'0' ! 1082: .de sW ! 1083: .nr sW \w'\\$1' ! 1084: .\} ! 1085: .ie \\n(sW>=\\n(fW \{\ ! 1086: . ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 ! 1087: . el .nr sW \\n(sW/\\n(fW ! 1088: .\} ! 1089: .el .nr sW 0 ! 1090: .. ! 1091: .\" Option Expression - ! 1092: .\" TODO - add line overflow check (right!) ! 1093: .nr eP 0 ! 1094: .ds e1 ! 1095: .nr oE 0 ! 1096: .nr hP 0 ! 1097: .ds hP ! 1098: .nr Ep 0 ! 1099: .de Op ! 1100: .hy 0 ! 1101: .if "\\*(iM"" \{\ ! 1102: . ds iM Op ! 1103: . ds f1 \& ! 1104: .\} ! 1105: .as f1 \&\\*(lB ! 1106: .\" .tm Op: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1107: .dO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1108: .ie !"\\$1"Cx" .oE ! 1109: .el .nr oE \\n(oE+1 ! 1110: .. ! 1111: .\" ! 1112: .\" just for mike, with every bite of garlic in mind (oops, i mean burp). ! 1113: .\" dO: go dOwn an argument vector and test each argument to see if ! 1114: .\" a macro name or punctuation. stash in respective place along ! 1115: .\" with its arguments. ! 1116: .nr oO 0 ! 1117: .nr oP 0 ! 1118: .nr aO 0 ! 1119: .de dO ! 1120: .mN \\$1 ! 1121: .ie \\n(mN \{\ ! 1122: . if \\n(oP \{\ ! 1123: . if \\n(hP \{\ ! 1124: . nr oZ 1 ! 1125: . oZ ! 1126: . Oz ! 1127: . \} ! 1128: . if \\n(e1==1 \{\ ! 1129: .\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9 ! 1130: . \} ! 1131: . uO ! 1132: . if !(\\n(oO:\\n(aO) .as f1 \& \& ! 1133: . \} ! 1134: . ie "\\$1"Op" \{\ ! 1135: . as f1 \&\\*(lB ! 1136: . nr aO \\n(aO+1 ! 1137: . \} ! 1138: . el \{\ ! 1139: . nr eP \\n(eP+1 ! 1140: . ds e\\n(eP \\$1 ! 1141: . nr e\\n(eP 1 ! 1142: . \} ! 1143: .\} ! 1144: .el \{\ ! 1145: .\" .tm dO: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE ! 1146: . rZ \\$1 ! 1147: . ie \\n(rZ \{\ ! 1148: .\" .tm dO:rZ: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(eP ! 1149: . nr hP \\n(hP+1 ! 1150: . ds h\\n(hP \\$1 ! 1151: . \} ! 1152: . el \{\ ! 1153: .\" .tm dO:word $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE ! 1154: . if \\n(eP==0:\\n(e\\n(eP==1 .nr eP \\n(eP+1 ! 1155: . if \\n(eZ .as e\\n(eP \& \& ! 1156: . as e\\n(eP \&\\$1 ! 1157: .\" . ds e\\n(eP \&\\$1 ! 1158: . nr eZ \\n(eZ+1 ! 1159: . \} ! 1160: .\} ! 1161: .nr oP 1 ! 1162: .ie \\n(.$>1 \{\ ! 1163: . dO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1164: .\} ! 1165: .el \{\ ! 1166: . ie \\n(e1 \{\ ! 1167: .\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9 ! 1168: . \} ! 1169: . el \{\ ! 1170: . as f1 \\*(e1 ! 1171: . \} ! 1172: .\} ! 1173: .. ! 1174: .\" handle old style arguments such as the arg -Idir ! 1175: .\" in adb, .Oo is a toggle. ! 1176: .de Oo ! 1177: .ie \\n(oO .nr oO 0 ! 1178: .el .nr oO 1 ! 1179: .. ! 1180: .\" stash punctuation ! 1181: .de oZ ! 1182: .if \\n(hP>=\\n(oZ \{\ ! 1183: . nr eP \\n(eP+1 ! 1184: . ds e\\n(eP \\*(h\\n(oZ ! 1185: . nr oZ \\n(oZ+1 ! 1186: . oZ ! 1187: .\} ! 1188: .. ! 1189: .\" clean up punctuation vector ! 1190: .de Oz ! 1191: .if \\n(hP>0 \{\ ! 1192: . rm h\\n(hP ! 1193: . nr hP \\n(hP-1 ! 1194: . Oz ! 1195: .\} ! 1196: .. ! 1197: .\" uO: go back up created vector cleaning it up along the way ! 1198: .de uO ! 1199: .if \\n(eP>0 \{\ ! 1200: . rm e\\n(eP ! 1201: . rr e\\n(eP ! 1202: . nr eP \\n(eP-1 ! 1203: . nr oP 0 ! 1204: . nr eZ 0 ! 1205: . uO ! 1206: .\} ! 1207: .. ! 1208: .\" option end ! 1209: .de oE ! 1210: .uO ! 1211: .ie \\n(hP \{\ ! 1212: . as f1 \\*(rB\\*(h1\\*(h2\\*(h3 ! 1213: . Oz ! 1214: . nr oZ 0 ! 1215: .\} ! 1216: .el \{\ ! 1217: . as f1 \\*(rB ! 1218: .\} ! 1219: .ie "\\*(iM"Op" \{\ ! 1220: . if \\n(aO .aO ! 1221: .if t \{\ ! 1222: . if (\\n(.lu-\\n(.ku-\\n(.ou-(2*\\n(fWu))<\w'\fC\\*(f1'u .br ! 1223: .\} ! 1224: .if n \{\ ! 1225: . nr aa \w'\\*(f1'u ! 1226: .\" . nr qq \\n(.lu-\\n(.ku-\\n(.ou ! 1227: .\" \&aa == \\n(aa, f1==\\*(f1, qq==\\n(qq ! 1228: . if (\\n(.lu-\\n(.ku-\\n(.ou-\\n(aau)<=(8*\\n(fWu) .br ! 1229: .\} ! 1230: \&\\*(f1 ! 1231: . ds iM ! 1232: . ds f1 ! 1233: . hy ! 1234: .\} ! 1235: .el .nr oE \\n(oE-1 ! 1236: .. ! 1237: .de aO ! 1238: .as f1 \\*(rB ! 1239: .nr aO \\n(aO-1 ! 1240: .if \\n(aO >0 .aO ! 1241: .. ! 1242: .\" ! 1243: .de Xr ! 1244: .if \\n(.$<=1 \{\ ! 1245: . ie \\n(.$==1 \{\ ! 1246: . if !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP ! 1247: . if "\\*(iM"" \&\\*(xR\\$1\fP ! 1248: . \} ! 1249: . el .tm Xr Usage: .Xr manpage_name [section#] \\*(Pu ! 1250: .\} ! 1251: .if \\n(.$==2 \{\ ! 1252: . rZ \\$2 ! 1253: . ie "\\*(iM"" \{\ ! 1254: . ie \\n(rZ \&\\*(xR\\$1\fP\\$2 ! 1255: . el \&\\*(xR\\$1\fP(\\$2) ! 1256: . \} ! 1257: . el \{\ ! 1258: . ie \\n(rZ .as f1 \&\\*(xR\\$1\fP\\$2 ! 1259: . el .as f1 \&\\*(xR\\$1\fP(\\$2) ! 1260: . \} ! 1261: .\} ! 1262: .if \\n(.$>=3 \{\ ! 1263: . rZ \\$2 ! 1264: . ie \\n(rZ \{\ ! 1265: . ie !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8 ! 1266: . el \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8 ! 1267: . \} ! 1268: . el \{\ ! 1269: . rZ \\$3 ! 1270: . ie \\n(rZ \{\ ! 1271: . if !"\\*(iM"" \{\ ! 1272: . as f1 \&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8 ! 1273: . \} ! 1274: . if "\\*(iM"" \{\ ! 1275: \&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8 ! 1276: . \} ! 1277: . \} ! 1278: . el \{\ ! 1279: . tm rZ = \\n(rZ the arg is \\$3 ! 1280: . tm Xr-XX Usage: .Xr manpage_name [section#] \\*(Pu ! 1281: . \} ! 1282: . \} ! 1283: .\} ! 1284: .. ! 1285: .\" ! 1286: .\" ! 1287: .de Ex ! 1288: .tm Ex defunct, Use .Dl: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1289: .. ! 1290: .\" Display (one) Line of text. ! 1291: .de Dl ! 1292: .ie "\\*(iM"" \{\ ! 1293: ' ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ! 1294: . in \\n(.iu+\\n(Dsu ! 1295: . mN \\$1 ! 1296: . ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1297: . el \{\ ! 1298: . nr cF \\n(.f ! 1299: .\" Literal font is none specified ! 1300: \&\\*(lI\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1301: . ft \\n(cF ! 1302: . \} ! 1303: . in \\n(.iu-\\n(Dsu ! 1304: .\} ! 1305: .el \{\ ! 1306: . mN \\$1 ! 1307: . ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 ! 1308: . el \{\ ! 1309: . nr cF \\n(.f ! 1310: . ds f1 \&\\*(lI\\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 ! 1311: . as f1 \&\f\\n(cF ! 1312: . \} ! 1313: .\} ! 1314: .. ! 1315: .\" ! 1316: .\" ! 1317: .\" user set Tagged Paragraph Width (used in both Dp and Tp) ! 1318: .de Tw ! 1319: .ie \\n(.$==0 \{\ ! 1320: . nr aa 0 ! 1321: .\} ! 1322: .el \{\ ! 1323: . mN \\$1 ! 1324: . ie \\n(sW>2 \{\ ! 1325: . nr tW (\\n(sW+3)*\\n(fWu) ! 1326: . \} ! 1327: . el \{\ ! 1328: . ie \\n(mN .nr tW \\n(mN ! 1329: . el .nr tW \\$1 ! 1330: . \} ! 1331: . nr tF 1 ! 1332: .\} ! 1333: .. ! 1334: .\" ! 1335: .de Dw ! 1336: .Tw \\$1 ! 1337: .. ! 1338: .\" ! 1339: .de Di ! 1340: .ie \\n(.$==0 \{\ ! 1341: . nr tI \\n(Dsu ! 1342: .\} ! 1343: .el \{\ ! 1344: . sW \\$1 ! 1345: . if \\n(sW>=2 \{\ ! 1346: . nr tI \\$1u ! 1347: . \} ! 1348: . if \\n(sW<2 \{\ ! 1349: . if "\\$1"L" \{\ ! 1350: . nr tI 0 ! 1351: . \} ! 1352: . \} ! 1353: .\} ! 1354: .. ! 1355: .\" tagged paragraph ! 1356: .\" initialize baby stack variables ! 1357: .nr np 0 ! 1358: .nr p1 0 ! 1359: .ds s\n(np ! 1360: .\" ! 1361: .de Tp ! 1362: .ie "\\$1"" .pE p s np ! 1363: .el \{\ ! 1364: . ds iM Tp ! 1365: . mN \\$1 ! 1366: . ie \\n(tF \{\ ! 1367: . ds tC Tw ! 1368: . nr tC 1 ! 1369: . nr tF 0 ! 1370: . \} ! 1371: . el \{\ ! 1372: . if !"Tw"\\*(s\\n(np" \{\ ! 1373: . ie \\n(mN \{\ ! 1374: . ds tC \\$1 ! 1375: . nr tW \\n(mN ! 1376: . \} ! 1377: . el \{\ ! 1378: . ds tC Tx ! 1379: . nr tW \\n(Tx ! 1380: . \} ! 1381: . if !"\\*(tC"\\*(s\\n(np" .nr tC 1 ! 1382: . \} ! 1383: . \} ! 1384: . sp \\n(vVu ! 1385: . if !\\n(cR .ne 2 ! 1386: . if \\n(tC \{\ ! 1387: . nr np \\n(np+1 ! 1388: . nr p\\n(np \\n(tW ! 1389: . ds s\\n(np \\*(tC ! 1390: . nr tC 0 ! 1391: . ds tC ! 1392: . in \\n(.iu+\\n(p\\n(npu ! 1393: . \} ! 1394: . ie \\n(mN \{\ ! 1395: . ds f1 ! 1396: . \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1397: . if !"\\$1"Cx" .pT st p np ! 1398: . \} ! 1399: . el \{\ ! 1400: . br ! 1401: . ev 1 ! 1402: . fi ! 1403: . di Td ! 1404: \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1405: . br ! 1406: . di ! 1407: . ev ! 1408: . na ! 1409: . ds tD \\*(Td\\ ! 1410: . pT di p np ! 1411: . \} ! 1412: .\} ! 1413: .. ! 1414: .\" ! 1415: .\" ! 1416: .\" Complex Expression Macro ! 1417: .\" ! 1418: .\" TODO: add length across line boundary check (like Li) ! 1419: .de Cx ! 1420: .hy 0 ! 1421: .ie \\n(.$==0 \{\ ! 1422: . if "\\*(iM"Cx" \{\ ! 1423: . ds iM ! 1424: . if \\n(oE .oE ! 1425: \&\\*(f1 ! 1426: . ds f1 ! 1427: . \} ! 1428: . if "\\*(iM"Tp" .pT st p np ! 1429: . if "\\*(iM"Dp" .pT st q mp ! 1430: .\} ! 1431: .el \{\ ! 1432: . if "\\*(iM"" \{\ ! 1433: . ds iM Cx ! 1434: . ds f1 \& ! 1435: . \} ! 1436: . mN \\$1 ! 1437: .\" Here are the args: `\\$1' `\\$2' `\\$3' `\\$4' ! 1438: . ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1439: . el \{\ ! 1440: . as f1 \&\\$1 ! 1441: . if \\n(.$>1 .Cx \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1442: . \} ! 1443: .\} ! 1444: .. ! 1445: .\" Prefix string in default font to content specified string ! 1446: .de Pf ! 1447: .Cx \\$1 ! 1448: .\\$2 \\$3 \\$4 \\$5 ! 1449: .Cx ! 1450: .. ! 1451: .\" Suffix string in default font to content specified string ! 1452: .de Sf ! 1453: .Cx \\$1 \\$2 ! 1454: .Cx \\$3 ! 1455: .Cx ! 1456: .. ! 1457: .\" Simple Option Begin ! 1458: .de Ob ! 1459: .hy 0 ! 1460: .ie "\\*(iM"" \{\ ! 1461: . ev 2 ! 1462: . fi ! 1463: . di oB ! 1464: .\} ! 1465: .el \{\ ! 1466: .tm shouldn't be here ! 1467: . as f1 \&[ ! 1468: . mN \\$1 ! 1469: . ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1470: . el \{\ ! 1471: . as f1 \&\\$1 ! 1472: . if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1473: . \} ! 1474: .\} ! 1475: .. ! 1476: .de Oc ! 1477: .as f1 \&\\$1 ! 1478: .if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1479: .. ! 1480: .de Oe ! 1481: .hy 0 ! 1482: .ie "\\*(iM"" \{\ ! 1483: . br ! 1484: . di ! 1485: . ev ! 1486: . ds bO \\*(oB\\ ! 1487: \&[\\*(bO\&] ! 1488: .\} ! 1489: .el \{\ ! 1490: . as f1 \&] ! 1491: .\} ! 1492: .. ! 1493: .\" White space for Cx ! 1494: .de Ws ! 1495: .Cx \&\ \& ! 1496: .. ! 1497: .\" tagged paragraph ! 1498: .\" initialize baby stack variables ! 1499: .nr mp 0 ! 1500: .nr q1 0 ! 1501: .ds r\n(np ! 1502: .\" ! 1503: .\" Complex Dp tag ! 1504: .de Dc ! 1505: .Dp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 ! 1506: .. ! 1507: .\" Complex Tp tag ! 1508: .de Tc ! 1509: .Tp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 ! 1510: .. ! 1511: .\" Tag with a flag and an argument with a space ! 1512: .de Ta ! 1513: .if "\\$2"" \{\ ! 1514: . Tp Fl \\$1 ! 1515: .\} ! 1516: .el \{\ ! 1517: . Tp Fl \\$1 ! 1518: . Cx \&\ \& ! 1519: . Ar \\$2 \\$3 ! 1520: . Cx ! 1521: .\} ! 1522: .. ! 1523: .de Da ! 1524: .Dp Cx Fl \\$1 ! 1525: .Ws ! 1526: .Ar \\$2 \\$3 ! 1527: .Cx ! 1528: .. ! 1529: .de To ! 1530: .Tp Cx Fl \\$1 ! 1531: .Ar \\$2 \\$3 ! 1532: .Cx ! 1533: .. ! 1534: .de Do ! 1535: .Dp Cx Fl \\$1 ! 1536: .Ar \\$2 \\$3 ! 1537: .Cx ! 1538: .. ! 1539: .\" Blended tag toggle ! 1540: .de Bt ! 1541: .ie \\n(tP==0 .nr tP 1 ! 1542: .el .nr tP 0 ! 1543: .. ! 1544: .\" Bullet paragraph ! 1545: .de Bu ! 1546: .Tp Sy \&\(bu ! 1547: .. ! 1548: .\" Display tagged paragraph ! 1549: .de Dp ! 1550: .ie "\\$1"" \{\ ! 1551: . pE q r mp ! 1552: . sp \\n(vVu ! 1553: .\} ! 1554: .el \{\ ! 1555: . ds iM Dp ! 1556: . mN \\$1 ! 1557: . ie \\n(tF \{\ ! 1558: . ds tC Tw ! 1559: . nr tC 1 ! 1560: . nr tF 0 ! 1561: . \} ! 1562: . el \{\ ! 1563: . if !"Tw"\\*(r\\n(mp" \{\ ! 1564: . ie \\n(mN \{\ ! 1565: . ds tC \\$1 ! 1566: . nr tW \\n(mN ! 1567: . \} ! 1568: . el \{\ ! 1569: . ds tC Tx ! 1570: . nr tW \\n(Tx ! 1571: . \} ! 1572: . if !"\\*(tC"\\*(r\\n(mp" .nr tC 1 ! 1573: . \} ! 1574: . \} ! 1575: . if !\\n(cR .ne 2 ! 1576: . if \\n(tC \{\ ! 1577: . nr mp \\n(mp+1 ! 1578: . nr q\\n(mp \\n(tW ! 1579: . ds r\\n(mp \\*(tC ! 1580: . nr tC 0 ! 1581: . ds tC ! 1582: . ie \\n(tIu==\\n(Dsu .nr i\\n(mp \\n(Dsu ! 1583: . el \{\ ! 1584: . nr i\\n(mp \\n(tIu ! 1585: . nr tI \\n(Dsu ! 1586: . \} ! 1587: . in \\n(.iu+\\n(i\\n(mpu ! 1588: . sp \\n(vVu ! 1589: . in \\n(.iu+\\n(\\q\\n(mpu ! 1590: . \} ! 1591: . ie \\n(mN \{\ ! 1592: . \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1593: . if !"\\$1"Cx" .pT st q mp ! 1594: . \} ! 1595: . el \{\ ! 1596: . br ! 1597: . ev 1 ! 1598: . fi ! 1599: . di Td ! 1600: \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1601: . br ! 1602: . di ! 1603: . ev ! 1604: . na ! 1605: . ds tD \\*(Td\\ ! 1606: . pT di q mp ! 1607: . \} ! 1608: .\} ! 1609: .. ! 1610: .\" ! 1611: .\" .pE number_stack string_stack counter ! 1612: .de pE ! 1613: .ie "\\$3"mp" \{\ ! 1614: . in \\n(.iu-(\\n(\\$1\\n(\\$3u)-(\\n(i\\n(mpu) ! 1615: . rr i\\n(mp ! 1616: .\} ! 1617: .el .in \\n(.iu-\\n(\\$1\\n(\\$3u ! 1618: .\" .in \\n(.iu-\\n(\\$1\\n(\\$3u ! 1619: .if \\n(\\$3<=0 .tm Extraneous call .Tp or .Dp ! 1620: .rr \\$1\\n(\\$3 ! 1621: .rm \\$2\\n(\\$3 ! 1622: .nr \\$3 \\n(\\$3-1 ! 1623: .ds iM ! 1624: .. ! 1625: .\" ! 1626: .\" .pT [st or di] number_stack counter ! 1627: .de pT ! 1628: .ie "\\$1"st" \{\ ! 1629: . nr bb \\n(\\$2\\n(\\$3u ! 1630: . ti -\\n(bbu ! 1631: . ie (\\n(\\$2\\n(\\$3u-2n)<=\w'\\*(f1'u \{\&\\*(f1\\*(tP ! 1632: . if \\n(tP==0 .br ! 1633: . \} ! 1634: . el \\*(f1\h'|\\n(\\$2\\n(\\$3u'\c ! 1635: .\} ! 1636: .el \{\ ! 1637: . ti -\\n(\\$2\\n(\\$3u ! 1638: . ie (\\n(\\$2\\n(\\$3u-2n)<=\\n(dlu \{\&\\*(tD\\*(tP ! 1639: . if !\\n(tP .br ! 1640: . \} ! 1641: . el \\*(tD\h'|\\n(\\$2\\n(\\$3u-'\c ! 1642: . if t 'ad ! 1643: .\} ! 1644: . ds iM ! 1645: . ds f1 ! 1646: 'fi ! 1647: .. ! 1648: .\" ! 1649: .\" The new SH ! 1650: .\" ! 1651: .de Sh ! 1652: .\" set Sh state off, check for list state before calling indent (.In) ! 1653: .nr nS 0 ! 1654: .nr sE 0 ! 1655: .ie "\\$1"NAME" \{\ ! 1656: .\" name state on, housekeep (headers & footers) ! 1657: . hK ! 1658: ' in 0 ! 1659: .\} ! 1660: .el \{\ ! 1661: . if "\\$1"SYNOPSIS" .nr nS 1 ! 1662: . in 0 ! 1663: .\} ! 1664: .pL ! 1665: 'sp ! 1666: .ns ! 1667: .ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ! 1668: .if !\\n(cR .ne 3 ! 1669: 'fi ! 1670: \&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9 ! 1671: \&\fP\& ! 1672: .in \\n(.iu+\\n(Tiu ! 1673: .if "\\$1"SEE" .nr sE 1 ! 1674: .ns ! 1675: .. ! 1676: .\" ! 1677: .\" Nd minus sign for an en dash used in .Sh Name ! 1678: .de Nd ! 1679: \&\-\& \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1680: .. ! 1681: .de Ss ! 1682: .sp ! 1683: .ti -.25i ! 1684: \&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9 ! 1685: \&\fP\& ! 1686: .ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ! 1687: .if !\\n(cR .ne 2 ! 1688: .br ! 1689: .. ! 1690: .\" .if "\\$1"Ss" .in \\n(.iu+\\n(sIu ! 1691: .\".. ! 1692: .\" ! 1693: .\" ! 1694: .\" Column Macro ! 1695: .\" ! 1696: .hy 0 ! 1697: .de Cw ! 1698: .ie \\n(.$==0 \{\ ! 1699: . br ! 1700: . in \\n(.iu-\\n(eWu ! 1701: . ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ! 1702: .\} ! 1703: .el \{\ ! 1704: . Pp ! 1705: . if \\n(.$==1 \{\ ! 1706: . ta \w'\\$1 'u ! 1707: . nr eW \w'\\$1 'u ! 1708: ' in \\n(.iu+\\n(eWu ! 1709: . \} ! 1710: . if \\n(.$==2 \{\ ! 1711: . ta \w'\\$1 'u +\w'\\$2 'u ! 1712: . nr eW \w'\\$1 'u+\w'\\$2 'u ! 1713: ' in \\n(.iu+\\n(eWu ! 1714: . \} ! 1715: . if \\n(.$==3 \{\ ! 1716: . ta \w'\\$1 'u +\w'\\$2 'u +\w'\\$3 'u ! 1717: . nr eW \w'\\$1 'u+\w'\\$2 'u+\w'\\$3 'u ! 1718: ' in \\n(.iu+\\n(eWu ! 1719: . \} ! 1720: . if \\n(.$==4 \{\ ! 1721: . ta \w'\\$1 'u +\w'\\$2 'u +\w'\\$3 'u +\w'\\$4 'u ! 1722: . nr eW \w'\\$1 'u+\w'\\$2 'u+\w'\\$3 'u +\w'\\$4 'u ! 1723: ' in \\n(.iu+\\n(eWu ! 1724: . \} ! 1725: . if \\n(.$==5 \{\ ! 1726: .ta \w'\\$1 'u +\w'\\$2 'u +\w'\\$3 'u +\w'\\$4 'u +\w'\\$5 'u ! 1727: .nr eW \w'\\$1 'u +\w'\\$2 'u +\w'\\$3 'u +\w'\\$4 'u +\w'\\$5 'u ! 1728: ' in \\n(.iu+\\n(eWu ! 1729: . \} ! 1730: .\} ! 1731: .. ! 1732: .de Cl ! 1733: .ti -\\n(eWu ! 1734: .mN \\$1 ! 1735: .ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1736: .el \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1737: .. ! 1738: .nr dQ 0 ! 1739: .de Ds ! 1740: .ie !"\\$1"" \{\ ! 1741: . mN d\\$1 ! 1742: . if \\n(mN \{\ ! 1743: . nr dQ \\n(dQ+1 ! 1744: . d\\$1 ! 1745: . \} ! 1746: .\} ! 1747: .el .br ! 1748: .nf ! 1749: .. ! 1750: .de Df ! 1751: .ie !"\\$1"" \{\ ! 1752: . mN d\\$1 ! 1753: . if \\n(mN \{\ ! 1754: . nr dQ \\n(dQ+1 ! 1755: . d\\$1 ! 1756: . \} ! 1757: .\} ! 1758: .el .br ! 1759: .. ! 1760: .de Dn ! 1761: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1762: .nf ! 1763: .. ! 1764: .de dI ! 1765: .nr d\\n(dQ \\n(dIu ! 1766: .in \\n(.iu+\\n(dIu ! 1767: .. ! 1768: .de dC ! 1769: .nr d\\n(dQ (\\n(.l-\\n(.i)/4u ! 1770: .in \\n(.iu+\\n(d\\n(dQu ! 1771: .. ! 1772: .de dR ! 1773: .nr d\\n(dQ (\\n(.l/3)u ! 1774: .in \\n(.iu+\\n(d\\n(dQu ! 1775: .. ! 1776: .de dL ! 1777: .nr aa 0 ! 1778: .. ! 1779: .de De ! 1780: .br ! 1781: .if \\n(d\\n(dQ \{\ ! 1782: . in \\n(.iu-\\n(d\\n(dQu ! 1783: . rr d\\n(dQ ! 1784: . nr dQ \\n(dQ-1 ! 1785: .\} ! 1786: .fi ! 1787: .. ! 1788: .\" ! 1789: .de Fn ! 1790: .ie \\n(.$==0 \{\ ! 1791: . tm Usage: .Fn function_name function_arg(s) ... \\*(Pu ! 1792: .\} ! 1793: .el \{\ ! 1794: . nr cF \\n(.f ! 1795: . ie \\n(.$==1 .ds f1 \&\\*(nM\\$1\fP\\*(lP\fP\\*(rP\fP ! 1796: . el \{\ ! 1797: . ds f1 \\*(nM\\$1\fP\\*(lP ! 1798: . nr aa 0 ! 1799: . rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ! 1800: . \} ! 1801: . if "\\*(iM"" \{\\&\\*(f1 ! 1802: . ds f1 ! 1803: . \} ! 1804: .\} ! 1805: .. ! 1806: .\" ! 1807: .de rC ! 1808: .rZ \\$1 ! 1809: .ie \\n(rZ \{\ ! 1810: . as f1 \f\\n(cF\\*(rP\f\\n(cF\\$1\\$2\\$3\\$4\\$5\\$6\\$7 ! 1811: .\} ! 1812: .el \{\ ! 1813: . ie \\n(aa .as f1 \fP, \\*(aR\\$1 ! 1814: . el .as f1 \\*(aR\\$1 ! 1815: . nr aa 1 ! 1816: . ie \\n(.$>1 .rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 ! 1817: . el .as f1 \fP\\*(rP\fP ! 1818: .\} ! 1819: ..
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.