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