Merge from vendor branch HOSTAPD:
[dragonfly.git] / contrib / groff-1.19 / tmac / doc-old.tmac
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 Comand 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 ..