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