PageRenderTime 29ms CodeModel.GetById 14ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 1ms

/contrib/groff/tmac/doc-old.tmac

https://bitbucket.org/freebsd/freebsd-head/
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..