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