name change
[unix-history] / usr / src / share / tmac / doc
CommitLineData
fec954f3
CL
1.\" Copyright (c) 1991 The Regents of the University of California.
2.\" All rights reserved.
3.\"
4.\" %sccs.include.redist.man%
5.\"
2ebf7612 6.\" @(#)doc 5.1 (Berkeley) %G%
fec954f3
CL
7.\"
8.\" mdoc-parse - attempt to parse troff request arguments
9.\" %beginstrip%
10.if t \{\
11. so /usr/share/tmac/tmac.doc-ditroff
12.\}
13.if n \{\
14. so /usr/share/tmac/tmac.doc-nroff
15.\}
16.so /usr/share/tmac/tmac.doc-common
17.so /usr/share/tmac/tmac.doc-syms
18.\" .if t \{\
19.\" . so /usr/u0/cael/man/tmac.doc-ditroff
20.\" .\}
21.\" .if n \{\
22.\" . so /usr/u0/cael/man/tmac.doc-nroff
23.\" .\}
24.\" .so /usr/u0/cael/man/tmac.doc-common
25.\" .so /usr/u0/cael/man/tmac.doc-syms
26.\"
27.\" NS Db macro - start/stop DEBUG MODE
28.\" NS Db register DEBUG MODE
29.\" NS iN register DEBUG MODE (inline if 1, to stderr if 0 (default))
30.nr Db 0
31.de Db
32.ie \\n(.$==0 \{\
33. ie \\n(Db==0 \{\
34.tm DEBUGGING ON
35. nr Db 1
36. \}
37. el \{\
38.tm DEBUGGING OFF
39. nr Db 0
40. \}
41.\}
42.el \{\
43. if "\\$1"on" \{\
44.tm DEBUGGING ON
45. nr Db 1
46. \}
47. if "\\$1"off" \{\
48.tm DEBUGGING OFF
49. nr Db 0
50. \}
51.\}
52..
53.\" NS aV macro - parse argument vector (recursive) (.aV arg ... )
54.\" NS fV macro - parse argument vector (recursive) (.fV)
55.\" NS aC register argument counter (aV/fV)
56.\" NS fV register argument counter (must set to \\n(.$ prior to reuqest) (fV)
57.\" NS A[0-9] argument vector (aV/fV)
58.\" NS C[0-9] reg. arg type(1=macro, 2=arg, 3=punct-suf, 4=punct-pre) (aV/fV)
59.\" NS S[0-9] space vector (sV)
60.\" NS aP register argument pointer (aV)
61.\" NS yU local string used for debugging
62.\" NS iI local register (indent for inline debug mode)
63.\" NS mN name of calling request (set in each user requestable macro)
64.de aV
65.nr aC+1
66.ds A\\n(aC \\$1
67.aU \\n(aC
68.nr C\\n(aC \\n(aT
69.s\\n(aT
70.if \\n(Db \{\
71. if \\n(aT==1 .ds yU Executable
72. if \\n(aT==2 .ds yU String
73. if \\n(aT==3 .ds yU Closing Punctuation or suffix
74. if \\n(aT==4 .ds yU Opening Punctuation or prefix
75. if \\n(iN==1 \{\
76. br
77. nr iI \\n(.iu
78. in -\\n(iIu
79. if \\n(aC==1 \{\
80\&\fBDEBUG(argv) MACRO:\fP `.\\*(mN' \fBLine #:\fP \\n(.c
81. \}
82\&\t\fBArgc:\fP \\n(aC \fBArgv:\fP `\\*(A\\n(aC' \fBLength:\fP \\n(sW
83\&\t\fBSpace:\fP `\\*(S\\n(aC' \fBClass:\fP \\*(yU
84. \}
85. if \\n(iN==0 \{\
86. if \\n(aC==1 \{\
87. tm DEBUG(argv) MACRO: `.\\*(mN' Line #: \\n(.c
88. \}
89. tm \tArgc: \\n(aC Argv: `\\*(A\\n(aC' Length: \\n(sW
90. tm \tSpace: `\\*(S\\n(aC' Class: \\*(yU
91. \}
92.\}
93.ie \\n(.$==1 \{\
94. nr aP 0
95. ie \\n(dZ==1 \{\
96. if \\n(oM>1 .as b1 \\*(S0
97. \}
98. el \{\
99. if \\n(oM>0 .as b1 \\*(S0
100. \}
101. ds S0 \\*(S\\n(aC
102. if \\n(Db \{\
103. if \\n(iN==1 \{\
104\&MACRO REQUEST: \t.\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
105. br
106. in \\n(iIu
107. \}
108. if \\n(iN==0 \{\
109.tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
110. \}
111. \}
112.\}
113.el .aV \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
114..
115.de fV
116.nr aC+1
117.aU \\n(aC
118.nr C\\n(aC \\n(aT
119.s\\n(aT
120.if \\n(Db \{\
121. if \\n(aT==1 .ds yU Executable
122. if \\n(aT==2 .ds yU String
123. if \\n(aT==3 .ds yU Closing Punctuation or suffix
124. if \\n(aT==4 .ds yU Opening Punctuation or prefix
125. if \\n(iN==1 \{\
126. br
127. nr iI \\n(.iu
128. in -\\n(iIu
129. if \\n(aC==1 \{\
130\&\fBDEBUG(fargv) MACRO:\fP `.\\*(mN' \fBLine #:\fP \\n(.c
131. \}
132\&\t\fBArgc:\fP \\n(aC \fBArgv:\fP `\\*(A\\n(aC' \fBLength:\fP \\n(sW
133\&\t\fBSpace:\fP `\\*(S\\n(aC' \fBClass:\fP \\*(yU
134. \}
135. if \\n(iN==0 \{\
136. if \\n(aC==1 \{\
137. tm DEBUG(fargv) MACRO: `.\\*(mN' Line #: \\n(.c
138. \}
139. tm \tArgc: \\n(aC Argv: `\\*(A\\n(aC' Length: \\n(sW
140. tm \tSpace: `\\*(S\\n(aC' Class: \\*(yU
141. \}
142.\}
143.ie \\n(fV==1 \{\
144. nr aP 0
145. ie \\n(dZ==1 \{\
146. if \\n(oM>1 .as b1 \\*(S0
147. \}
148. el \{\
149. if \\n(oM>0 .as b1 \\*(S0
150. \}
151. ds S0 \\*(S\\n(aC
152. nr fV 0
153. if \\n(Db \{\
154. ie \\n(iN \{\
155\&\tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
156. br
157. in \\n(iIu
158. \}
159. el \{\
160.tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
161. \}
162. \}
163.\}
164.el \{\
165. nr fV-1
166. fV
167.\}
168..
169.\" NS aX macro - stuff saved strings into `b1' (used by -diag list)
170.de aX
171.nr aP+1
172.as b1 \&\\*(A\\n(aP
173.ie \\n(fV==1 \{\
174. nr aP 0
175. nr fV 0
176.\}
177.el \{\
178. nr fV-1
179. aX
180.\}
181..
182.\" NS aI macro - append arg to arg vector: .aI [arg] [type] (used by .En only)
183.de aI
184.ie \\n(aC<9 \{\
185. nr aC+1
186. ds A\\n(aC \\$1
187. nr C\\n(aC \\$2
188. s\\$2
189. ds xV S\\n(aC
190.\}
191.el \{\
192. tm Usage: Too many arguments (maximum of 8 accepted) (#\\n(.c)
193. tm \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
194.\}
195..
196.\"
197.\" NS aZ macro - print buffer (pB) and clean up arg vectors (aY)
198.de aZ
199.pB
200.aY
201..
202.\" NS aY macro - clean up arg vector
203.de aY
204.rm C0 C1 C2 C3 C4 C5 C6 C7 C8 C9
205.rm A0 A1 A2 A3 A4 A5 A6 A7 A8 A9
206.rm S1 S2 S3 S4 S5 S6 S7 S8 S9
207.nr aC 0
208.nr aP 0
209..
210.\" NS pB macro - test for end of vector (eol) (print b1 buffer or divert)
211.de pB
212.ie \\n(dZ==1 \{\
213. if \\n(oM==1 \{\&\\*(b1
214. rm S0
215. ds b1
216. \}
217. if \\n(oM==0 \{\
218. x2
219. \}
220.\}
221.el \{\
222. ie \\n(oM==0 \{\&\\*(b1
223. rm S0
224. ds b1
225. \}
226. el \{\
227. if ((\\n(sM==1)&(\\n(tP==0)) \{\
228. x1
229. \}
230. \}
231.\}
232.hy
233..
234.\" NS x1 macro - save buffer and divert if tP flag set
235.\" NS eB diversion string
236.\" NS b2 string save of buffer
237.\" NS lK register count of lines read from input file
238.de x1
239.nr dZ+1
240.ds b2 \\*(b1
241.ds b1
242.nr lK \\n(.c
243.ev 2
244.fi
245.di eB
246..
247.\"
248.\" NS x2 macro - end diversion and print
249.\" NS b0 string local temporary
250.de x2
251.br
252.di
253.ev
254.ie (\\n(.c-\\n(lK>1) \{\
255. ds b0 \&\\*(eB\\
256. ds b1 \\*(b2\\*(b0\\*(b1
257.\}
258.el .ds b1 \\*(b2\\*(b1
259\&\\*(b1
260.rm eB b2 b0 b1
261.nr dZ-1
262..
263.\" NS Fl macro - flags (appends - and prints flags)
264.\" NS cF register save current font
265.\" NS cZ register save current font size
266.de Fl
267.as b1 \&\\*(fL
268.if \\n(aC==0 \{\
269. ie \\n(.$==0 \{\
270. as b1 \&\|\-\|\fP\s0
271. pB
272. \}
273. el \{\
274. ds mN Fl
275. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
276. \}
277.\}
278.if \\n(aC>0 \{\
279. ie (\\n(aC-\\n(aP)==0 \{\
280. as b1 \&\|\-\fP\s0
281. aZ
282. \}
283. el \{\
284. nr aP+1
285. ie \\n(C\\n(aP==1 \{\
286. as b1 \&\|\-\fP\s0
287. \\*(A\\n(aP
288. \}
289. el \{\
290. nr cF \\n(.f
291. nr cZ \\n(.s
292. if \\n(C\\n(aP==3 \{\
293. as b1 \&\|\-\|
294. \}
295. fR
296. \}
297. \}
298.\}
299..
300.\"
301.\" NS fR macro - Fl flag recursion routine (special handling)
302.\" NS jM local register
303.\" NS jN local register
304.\"
305.de fR
306.hy 0
307.nr jM \\n(C\\n(aP
308.ie \\n(jM==1 \{\
309. as b1 \&\fP\s0
310. \\*(A\\n(aP
311.\}
312.el \{\
313. nr jN \\n(aP
314. ie \\n(jM==2 \{\
315. ie "\\*(A\\n(aP"-" .as b1 \&\|\-\-\|
316. el .as b1 \&\|\-\\*(A\\n(aP
317. \}
318. el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
319. ie \\n(aC==\\n(aP \{\
320. if \\n(jM==4 .as b1 \&\|\-
321. as b1 \&\fP\s0
322. aZ
323. \}
324. el \{\
325. nr aP+1
326. ie ((\\n(C\\n(aP==3)&(\\n(C\\n(jN==4)) .as b1 \&\|\-
327. el .as b1 \&\\*(S\\n(jN
328. fR \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
329. \}
330.\}
331.rr jM jN
332..
333.\"
334.\" NS nR macro - general name recursion routine
335.\" NS jM local register
336.\" NS jN local register
337.de nR
338.hy 0
339.nr jM \\n(C\\n(aP
340.ie \\n(jM==1 \{\
341. as b1 \&\f\\n(cF\s\\n(cZ
342. \\*(A\\n(aP
343.\}
344.el \{\
345. nr jN \\n(aP
346. ie \\n(jM==2 .as b1 \&\\*(A\\n(aP
347. el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
348. ie \\n(aC==\\n(aP \{\
349. as b1 \&\f\\n(cF\s\\n(cZ
350. aZ
351. \}
352. el \{\
353. nr aP+1
354. as b1 \&\\*(S\\n(jN
355. nR
356. \}
357.\}
358.rr jM jN
359..
360.\" NS Ar macro - command line `argument' macro
361.\"
362.de Ar
363.as b1 \\*(aR
364.if \\n(aC==0 \{\
365. ie \\n(.$==0 \{\
366. as b1 file\ ...\fP\s0
367. pB
368. \}
369. el \{\
370. ds mN Ar
371. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
372. \}
373.\}
374.if \\n(aC>0 \{\
375. ie (\\n(aC-\\n(aP)==0 \{\
376. as b1 \&file\ ...\fP\s0
377. aZ
378. \}
379. el \{\
380. nr aP+1
381. ie \\n(C\\n(aP==1 \{\
382. as b1 \&file\ ...\fP\s0
383. \\*(A\\n(aP
384. \}
385. el \{\
386. nr cF \\n(.f
387. nr cZ \\n(.s
388. if \\n(C\\n(aP==3 \{\
389. as b1 \&file\ ...
390. \}
391. nR
392. \}
393. \}
394.\}
395..
396.\" NS Ad macro - Addresses
397.de Ad
398.if \\n(aC==0 \{\
399. ie \\n(.$==0 .tm Usage: .Ad address ... \\*(Pu (#\\n(.c)
400. el \{\
401. ds mN Ad
402. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
403. \}
404.\}
405.if \\n(aC>\\n(aP \{\
406. as b1 \\*(aD
407. nr aP+1
408. nr cF \\n(.f
409. nr cZ \\n(.s
410. nR
411.\}
412..
413.\" NS Cd macro - Config declaration (for section 4 SYNOPSIS) (not callable)
414.\" needs work - not very translatable
415.de Cd
416.if \\n(aC==0 \{\
417. ie \\n(.$==0 .tm Usage: .Cd Configuration file declaration (#\\n(.c)
418. el \{\
419. ds mN Cd
420. ds A1 \\$1
421. ds A2 \\$2
422. ds A3 \\$3
423. ds A4 \\$4
424. ds A5 \\$5
425. ds A6 \\$6
426. ds A7 \\$7
427. ds A8 \\$8
428. ds A9 \\$9
429. nr fV \\n(.$
430. fV
431. \}
432.\}
433.br
434.if \\n(aC>\\n(aP \{\
435. as b1 \\*(nM
436. nr aP+1
437. nr cF \\n(.f
438. nr cZ \\n(.s
439. if \\n(nS \{\
440. if "\\*(mN"Cd" \{\
441. rs
442. in -\\n(iSu
443. ie \\n(nS>1 .br
444. el \{\
445. if \\n(iS==0 .nr iS Dsu
446. \}
447. in +\\n(iSu
448. ti -\\n(iSu
449. nr nS \\n(nS+1
450. \}
451. \}
452. nR
453.\}
454..
455.\" NS Cm macro - Interactive command modifier (flag)
456.de Cm
457.if \\n(aC==0 \{\
458. ie \\n(.$==0 .tm Usage: .Cm Interactive command modifier ... \\*(Pu (#\\n(.c)
459. el \{\
460. ds mN Cm
461. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
462. \}
463.\}
464.if \\n(aC>\\n(aP \{\
465. as b1 \\*(cM
466. nr aP+1
467. nr cF \\n(.f
468. nr cZ \\n(.s
469. nR
470.\}
471..
472.\" NS Dv macro - define variable
473.de Dv
474.if \\n(aC==0 \{\
475. ie \\n(.$==0 .tm Usage: .Dv define_variable ... \\*(Pu (#\\n(.c)
476. el \{\
477. ds mN Dv
478. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
479. \}
480.\}
481.if \\n(aC>\\n(aP \{\
482. as b1 \\*(eR
483. nr aP+1
484. nr cF \\n(.f
485. nr cZ \\n(.s
486. nR
487.\}
488..
489.\" NS Em macro - Emphasis
490.de Em
491.if \\n(aC==0 \{\
492. ie \\n(.$==0 \{\
493. tm Usage: .Em text ... \\*(Pu (#\\n(.c)
494. \}
495. el \{\
496. ds mN Em
497. ds A1 \\$1
498. ds A2 \\$2
499. ds A3 \\$3
500. ds A4 \\$4
501. ds A5 \\$5
502. ds A6 \\$6
503. ds A7 \\$7
504. ds A8 \\$8
505. ds A9 \\$9
506. nr fV \\n(.$
507. fV
508. \}
509.\}
510.if \\n(aC>\\n(aP \{\
511. as b1 \\*(eM
512. nr aP+1
513. nr cF \\n(.f
514. nr cZ \\n(.s
515. nR
516.\}
517..
518.\" NS Er macro - Errnotype
519.de Er
520.if \\n(aC==0 \{\
521. ie \\n(.$==0 .tm Usage: .Er ERRNOTYPE ... \\*(Pu (#\\n(.c)
522. el \{\
523. ds mN Er
524. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
525. \}
526.\}
527.if \\n(aC>\\n(aP \{\
528. as b1 \\*(eR
529. nr aP+1
530. nr cF \\n(.f
531. nr cZ \\n(.s
532. nR
533.\}
534..
535.\" NS Ev macro - Environment variable
536.de Ev
537.if \\n(aC==0 \{\
538. ie \\n(.$==0 .tm Usage: .Ev ENVIRONMENT_VARIABLE ... \\*(Pu (#\\n(.c)
539. el \{\
540. ds mN Ev
541. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
542. \}
543.\}
544.if \\n(aC>\\n(aP \{\
545. as b1 \\*(eV
546. nr aP+1
547. nr cF \\n(.f
548. nr cZ \\n(.s
549. nR
550.\}
551..
552.\" NS Fd macro - function declaration - not callable (& no err check)
553.\" NS fD register subroutine test (in synopsis only)
554.\" NS fY register subroutine count (in synopsis only)
555.\" NS fZ register also subroutine count (in synopsis only)
556.de Fd
557.ds mN Fd
558.if \\n(nS>0 \{\
559. if \\n(fZ>0 \{\
560. ie \\n(fD==0 .Pp
561. el .br
562. \}
563. nr fD+1
564. nr fZ+1
565. nr fY+1
566.\}
567.nr cF \\n(.f
568.nr cZ \\n(.s
569\&\\*(fD\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
570.br
571.ft \\n(cF
572.fs \\n(cZ
573..
574.\" NS Fr macro - function return value - not callable (at the moment)
575.de Fr
576.if \\n(aC==0 \{\
577. ie \\n(.$==0 .tm Usage: .Fr Function_return_value... \\*(Pu (#\\n(.c)
578. el \{\
579. ds mN Fr
580. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
581. \}
582.\}
583.if \\n(aC>\\n(aP \{\
584. as b1 \\*(aR
585. nr aP+1
586. nr cF \\n(.f
587. nr cZ \\n(.s
588. nR
589.\}
590..
591.\" NS Ic macro - Interactive command
592.de Ic
593.if \\n(aC==0 \{\
594. ie \\n(.$==0 .tm Usage: .Ic Interactive command ... \\*(Pu (#\\n(.c)
595. el \{\
596. ds mN Ic
597. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
598. \}
599.\}
600.if \\n(aC>\\n(aP \{\
601. as b1 \\*(iC
602. nr aP+1
603. nr cF \\n(.f
604. nr cZ \\n(.s
605. nR
606.\}
607..
608.\" NS Li macro - literals
609.de Li
610.if \\n(aC==0 \{\
611. ie \\n(.$==0 .tm Usage .Li argument ... \\*(Pu (#\\n(.c)
612. el \{\
613. ds mN Li
614. ds A1 \\$1
615. ds A2 \\$2
616. ds A3 \\$3
617. ds A4 \\$4
618. ds A5 \\$5
619. ds A6 \\$6
620. ds A7 \\$7
621. ds A8 \\$8
622. ds A9 \\$9
623. nr fV \\n(.$
624. fV
625. \}
626.\}
627.if \\n(aC>\\n(aP \{\
628. as b1 \\*(lI
629. nr aP+1
630. nr cF \\n(.f
631. nr cZ \\n(.s
632. nR
633.\}
634..
635.\" NS Ms macro - Math symbol
636.de Ms
637.if \\n(aC==0 \{\
638. ie \\n(.$==0 .tm Usage: .Ms Math symbol ... \\*(Pu (#\\n(.c)
639. el \{\
640. ds mN Ms
641. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
642. \}
643.\}
644.if \\n(aC>\\n(aP \{\
645. as b1 \\*(sY
646. nr aP+1
647. nr cF \\n(.f
648. nr cZ \\n(.s
649. nR
650.\}
651..
652.\" NS Nm macro - Name of command or page topic
653.\" NS n1 string - save first invocation of .Nm
654.\" NS iS register - indent second command line in a synopsis
655.de Nm
656.as b1 \\*(nM
657.if \\n(aC==0 \{\
658. ie \\n(.$==0 \{\
659. ie "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu (#\\n(.c)
660. el \&\\*(nM\\*(n1\fP\s0
661. \}
662. el \{\
663. ds mN Nm
664. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
665. \}
666.\}
667.if \\n(aC>0 \{\
668. ie \\n(aC==\\n(aP \{\
669. as b1 \&\\*(nM\\*(n1\fP\s0
670. aZ
671. \}
672. el \{\
673. nr aP+1
674. ie \\n(C\\n(aP==1 \{\
675. as b1 \&\\*(n1\fP\s0
676. \\*(A\\n(aP
677. \}
678. el \{\
679. nr cF \\n(.f
680. nr cZ \\n(.s
681. if \\n(nS \{\
682. if "\\*(mN"Nm" \{\
683. rs
684. in -\\n(iSu
685. ie \\n(nS>1 .br
686. el \{\
687. if \\n(iS==0 \{\
688. sw \\$1
689. nr iS (\\n(sWu*\\n(fW)u
690. \}
691. \}
692. in +\\n(iSu
693. ti -\\n(iSu
694. nr nS \\n(nS+1
695. \}
696. \}
697. if "\\*(n1"" .ds n1 \\*(A\\n(aP
698. nR
699. \}
700. \}
701.\}
702..
703.\" NS Pa macro - Pathname
704.de Pa
705.if \\n(aC==0 \{\
706. ie \\n(.$==0 \&\\*(pA~\fP\s0
707. el \{\
708. ds mN Pa
709. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
710. \}
711.\}
712.if \\n(aC>\\n(aP \{\
713. as b1 \\*(pA
714. nr aP+1
715. nr cF \\n(.f
716. nr cZ \\n(.s
717. nR
718.\}
719..
720.\" NS Sy macro - Symbolics
721.de Sy
722.if \\n(aC==0 \{\
723. ie \\n(.$==0 .tm Usage: .Sy symbolic_text ... \\*(Pu (#\\n(.c)
724. el \{\
725. ds mN Sy
726. ds A1 \\$1
727. ds A2 \\$2
728. ds A3 \\$3
729. ds A4 \\$4
730. ds A5 \\$5
731. ds A6 \\$6
732. ds A7 \\$7
733. ds A8 \\$8
734. ds A9 \\$9
735. nr fV \\n(.$
736. fV
737. \}
738.\}
739.if \\n(aC>\\n(aP \{\
740. as b1 \\*(sY
741. nr aP+1
742. nr cF \\n(.f
743. nr cZ \\n(.s
744. nR
745.\}
746..
747.\" NS Tn macro - Trade Name Macro
748.de Tn
749.if \\n(aC==0 \{\
750. ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c)
751. el \{\
752. ds mN Tn
753. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
754. \}
755.\}
756.if \\n(aC>\\n(aP \{\
757. as b1 \\*(tN
758. nr aP+1
759. nr cF \\n(.f
760. nr cZ \\n(.s
761. nR
762.\}
763..
764.\" NS nN macro - Trade Name Macro for inside of reference
765.de nN
766.if \\n(aC==0 \{\
767. ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c)
768. el \{\
769. ds mN Tn
770. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
771. \}
772.\}
773.if \\n(aC>\\n(aP \{\
774. as b1 \\*(tN
775. nr aP+1
776. nr cF \\n(.f
777. nr cZ \\n(.s
778. rR
779.\}
780..
781.\" NS Va macro - variable name macro
782.de Va
783.if \\n(aC==0 \{\
784. ie \\n(.$==0 .tm Usage: .Va variable_name(s) ... \\*(Pu (#\\n(.c)
785. el \{\
786. ds mN Va
787. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
788. \}
789.\}
790.if \\n(aC>\\n(aP \{\
791. as b1 \\*(vA
792. nr aP+1
793. nr cF \\n(.f
794. nr cZ \\n(.s
795. nR
796.\}
797..
798.\"
799.\" NS No macro - Normal text macro (default text style if mess up)
800.de No
801.as b1 \\*(nO
802.if \\n(aC==0 \{\
803. ie \\n(.$==0 .tm Usage: .No must be called with arguments (#\\n(.c)
804. el \{\
805. ds mN No
806. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
807. \}
808.\}
809.if \\n(aC>\\n(aP \{\
810. nr aP+1
811. ie \\n(C\\n(aP==1 \{\
812. \\*(A\\n(aP
813. \}
814. el \{\
815. nr cF \\n(.f
816. nr cZ \\n(.s
817. nR
818. \}
819.\}
820..
821.\"------------------------------------------------------------------------
822.\" NS Op macro - Option Expression
823.de Op
824.if \\n(aC==0 \{\
825. ds mN Op
826.\}
827.\" .ds qL \&\\*(lO
828.\" .ds qR \&\\*(rO
829.ds qL \&\\*(lB
830.ds qR \&\\*(rB
831.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
832..
833.\" NS Aq macro - Enclose string in angle brackets
834.de Aq
835.if \\n(aC==0 .ds mN Aq
836.ds qL \&<
837.ds qR \&>
838.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
839..
840.\" NS Bq macro - Enclose string in square brackets
841.de Bq
842.if \\n(aC==0 .ds mN Bq
843.ds qL \&\\*(lB
844.ds qR \&\\*(rB
845.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
846..
847.\" NS Dq macro - Enclose string in double quotes
848.de Dq
849.if \\n(aC==0 .ds mN Dq
850.ds qL \&\\*(Lq
851.ds qR \&\\*(Rq
852.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
853..
854.\" NS Eq macro - Enclose string in double quotes
855.de Eq
856.if \\n(aC==0 .ds mN Eq
857.ds qL \\$1
858.ds qR \\$2
859.En \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
860..
861.\" NS Pq macro - Enclose string in parenthesis
862.de Pq
863.if \\n(aC==0 .ds mN Pq
864.ds qL \&\\*(lP
865.ds qR \&\\*(rP
866.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
867..
868.\" NS Ql macro - Quoted literal is in file mdoc-[dit|n|g]roff (too large
869.\" an if-else to carry along recursively for `if n ...')
870.\"
871.\" NS Sq macro - Enclose string in single quotes
872.de Sq
873.if \\n(aC==0 .ds mN Sq
874.ds qL \&\\*(sL
875.ds qR \&\\*(sR
876.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
877..
878.\"
879.\" NS Es macro - Set up strings for .En call
880.de Es
881.if \\n(aC==0 \{\
882. ie \\n(.$>2 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
883. el \{\
884. ds qL \\$1
885. ds qR \\$2
886. \}
887.\}
888.if \\n(aC>\\n(aP \{\
889. nr aP+1
890. ds qL \\*(A\\n(aP
891. nr aP+1
892. ds qR \\*(A\\n(aP
893. ie \\n(aC>\\n(aP .c\\n(C\\n(aP
894. el .aZ
895.\}
896..
897.\" .tm En beg arg(A[\\n(aP])==\\*(A\\n(aP;
898.\" .tm En oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC
899.\" NS En macro - Enclose string with given args (eg [ and ] etc)
900.\" NS qL string variable set by calling macro
901.\" NS qR string variable set by calling macro
902.\" NS aJ register (for vR)
903.de En
904.as b1 \&\\*(qL
905.if \\n(aC==0 \{\
906. ie \\n(.$==0 \{\
907. as b1 \&\\*(qR
908. pB
909. \}
910. el \{\
911. as mN (En)
912. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
913. \}
914.\}
915.if \\n(aC>0 \{\
916. ie (\\n(aC-\\n(aP)==0 \{\
917. as b1 \&\\*(qR
918. aZ
919. \}
920. el \{\
921. ie \\n(C\\n(aC==3 \{\
922. nr aJ \\n(aC-1
923. vR
924. nr aJ+1
925. ds A\\n(aJ \&\\*(qR\\*(A\\n(aJ
926. \}
927. el .aI \&\\*(qR 3
928. nr aP+1
929. if \\n(C\\n(aP==1 .\\*(A\\n(aP
930. if \\n(C\\n(aP>1 \{\
931. nr aP-1
932. No
933. \}
934. \}
935.\}
936..
937.\" NS vR macro - vector routine (for En, trace backwards past trail punct)
938.de vR
939.if \\n(C\\n(aJ==3 \{\
940. nr aJ-1
941. vR
942.\}
943..
944.\"------------------------------------------------------------------------
945.\" NS Ao macro - Angle open
946.de Ao
947.if \\n(aC==0 .ds mN Ao
948.ds qL \&<
949.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
950..
951.\" NS Ac macro - Angle close
952.de Ac
953.if \\n(aC==0 .ds mN Ac
954.ds qR \&>
955.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
956..
957.\" NS Bo macro - Bracket open
958.de Bo
959.if \\n(aC==0 .ds mN Bo
960.ds qL \&[
961.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
962..
963.\" NS Bc macro - Bracket close
964.de Bc
965.if \\n(aC==0 .ds mN Bc
966.ds qR \&]
967.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
968..
969.\" NS Do macro - Double Quote open
970.de Do
971.if \\n(aC==0 .ds mN Do
972.ds qL \&\\*(Lq
973.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
974..
975.\" NS Dc macro - Double Quote close
976.de Dc
977.if \\n(aC==0 .ds mN Dc
978.ds qR \&\\*(Rq
979.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
980..
981.\" NS Eo macro - Enclose open
982.de Eo
983.if \\n(aC==0 .ds mN Eo
984.ds qL \\$1
985.eO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
986..
987.\" NS Ec macro - Enclose close
988.de Ec
989.if \\n(aC==0 .ds mN Ec
990.ds qR \\$1
991.eC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
992..
993.\" NS Oo macro - Option open
994.de Oo
995.if \\n(aC==0 .ds mN Oo
996.ds qL \&[
997.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
998..
999.\" NS Oc macro - Option close
1000.de Oc
1001.if \\n(aC==0 .ds mN Oc
1002.ds qR \&]
1003.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1004..
1005.\" NS Po macro - Parenthesis open
1006.de Po
1007.if \\n(aC==0 .ds mN Po
1008.ds qL \&(
1009.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1010..
1011.\" NS Pc macro - Parenthesis close
1012.de Pc
1013.if \\n(aC==0 .ds mN Pc
1014.ds qR \&)
1015.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1016..
1017.\" NS Xo macro - Extend open (continue)
1018.de Xo
1019.if \\n(aC==0 .ds mN Xo
1020.ds qL
1021.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1022..
1023.\" NS Xe macro - Extend close (end)
1024.de Xc
1025.if \\n(aC==0 .ds mN Xc
1026.ds qR
1027.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1028..
1029.\" NS eO macro - enclose string open
1030.\" NS oM register (extension possible)
1031.nr oM 0
1032.de eO
1033.as b1 \\*(qL
1034.nr oM+1
1035.\" .tm eO last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ;
1036.if \\n(aC==0 \{\
1037. ie \\n(.$>0 \{\
1038. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1039. \}
1040. el \{\
1041. if (\\n(dZ==0)&(\\n(sM==1) \{\
1042. nr dZ+1
1043. ds b2 \\*(b1
1044. ds b1
1045. nr lK \\n(.c
1046. ev 2
1047. fi
1048. di eB
1049. \}
1050. \}
1051.\}
1052.ie \\n(aC>0 \{\
1053. if \\n(aC>\\n(aP \{\
1054. nr aP +1
1055. ie \\n(C\\n(aP==1 .\\*(A\\n(aP
1056. el \{\
1057. nr aP-1
1058. No
1059. \}
1060. \}
1061. if \\n(aC==\\n(aP \{\
1062. if \\n(tP==1 \{\
1063. nr Xt 1
1064. \}
1065. aY
1066. \}
1067.\}
1068.el \{\
1069. if \\n(oM>1 .as b1 \\*(sV
1070.\}
1071..
1072.\"
1073.\" NS eC macro - enclose string close
1074.\" NS aa local register
1075.de eC
1076.nr oM-1
1077.\" .tm eO last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ;
1078.as b1 \\*(qR
1079.if \\n(aC==0 \{\
1080. ie \\n(.$>0 \{\
1081. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1082. \}
1083. el \{\
1084. ie "\\*(xB"" \{\
1085. pB
1086. \}
1087. el \{\
1088. pB
1089.\\*(L\\n(lC
1090. nr Xt 0
1091. ds xB
1092. \}
1093. \}
1094.\}
1095.if \\n(aC>0 \{\
1096. ie \\n(aC==\\n(aP \{\
1097. ie \\n(oM==0 \{\
1098. aZ
1099. \}
1100. el .aY
1101. \}
1102. el \{\
1103. nr aa \\n(aP+1
1104. if \\n(C\\n(aa==2 .as b1 \\*(S\\n(aC
1105. rr aa
1106. No
1107. \}
1108.\}
1109..
1110.\"------------------------------------------------------------------------
1111.\" NS Pf macro - Prefix (calls .pF)
1112.de Pf
1113.if \\n(aC==0 .ds mN Pf
1114.ds qL \&\\$1
1115.pF \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1116..
1117.\" NS pF macro - Prefix (for prefixing open quotes, brackets etc)
1118.de pF
1119.ie \\n(aC==0 \{\
1120. as b1 \&\\*(qL
1121. ie \\n(.$<2 \{\
1122. tm Warning: Missing arguments - prefix .Pf)
1123. pB
1124. \}
1125. el .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1126.\}
1127.el \{\
1128. ie (\\n(aC-\\n(aP)>1 \{\
1129. nr aP+1
1130. as b1 \&\\*(A\\n(aP
1131. \}
1132. el .tm Warning: trailing prefix Pf)
1133.\}
1134.if \\n(aC>0 \{\
1135. ie (\\n(aC-\\n(aP)==0 .aZ
1136. el \{\
1137. nr aP+1
1138. c\\n(C\\n(aP
1139. \}
1140.\}
1141..
1142.\" NS Ns macro - remove space (space remove done by .aV or .fV)
1143.de Ns
1144.if \\n(aC==0 \{\
1145. ds mN Ns
1146. ie \\n(.$>0 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1147. el .tm Usage: .Ns must be called with arguments (#\\n(.c)
1148.\}
1149.No
1150..
1151.de Ap
1152.if \\n(aC==0 \{\
1153. ds mN Ap
1154. tm Usage: Ap "cannot be first request on a line (no .Ap)" (#\\n(.c)
1155.\}
1156.as b1 \&'
1157.No
1158..
1159.\" NS Hv macro - Hard (unpaddable) Space vector
1160.\" NS iV string inter-vector space
1161.\" NS sV string inter-argument space
1162.de Hv
1163.ds iV \\*(sV
1164.ds sV \\*(hV
1165..
1166.\" NS Sv macro - Soft Space vector (troff limitation)
1167.de Sv
1168.ds sV \\*(iV
1169..
1170.\" NS Tv macro - Tab Space vector
1171.de Tv
1172.ds sV \\*(tV
1173..
1174.\" NS Sm macro - Space mode
1175.\" NS sM register - default is one (space mode on)
1176.nr sM 1
1177.de Sm
1178.if \\n(aC==0 \{\
1179. ie \\n(.$==0 .tm "Usage: .Sm [off | on]" (#\\n(.c)
1180. el \{\
1181. ds mN Sm
1182. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1183. \}
1184.\}
1185.if \\n(aC>0 \{\
1186. nr aP+1
1187. if "\\*(A\\n(aP"on" \{\
1188. ds sV \\*(iV
1189. nr sM 1
1190. \}
1191. if "\\*(A\\n(aP"off" \{\
1192. ds sV
1193. rm S0 S1 S2 S3 S4 S5 S6 S7 S8 S9
1194. nr sM 0
1195. \}
1196. ie \\n(aC>\\n(aP \{\
1197. No
1198. \}
1199. el .aY
1200.\}
1201..
1202.\"------------------------------------------------------------------------
1203.\" Size and Argument type macros
1204.\" NS aT macro - argument type
1205.\" NS aU macro - argument type (same as .aT but uses A[1-9] strings
1206.\" NS aT register argument type
1207.de aT
1208.nr aT 0
1209.ie \\n(sW>2 \{\
1210. nr aT 2
1211.\}
1212.el \{\
1213. if \\n(sW==1 \{\
1214. ie \\n(z\\$1>2 \{\
1215. nr aT \\n(z\\$1
1216. \}
1217. el .nr aT 2
1218. \}
1219. if \\n(sW==2 \{\
1220. ie \\n(\\$1 \{\
1221. nr aT 1
1222. \}
1223. el .nr aT 2
1224. \}
1225.\}
1226..
1227.de aU
1228.nr aT 0
1229.aW \\$1
1230.ie \\n(sW>2 .nr aT 2
1231.el \{\
1232. if \\n(sW==1 \{\
1233. ie \\n(z\\*(A\\$1>2 \{\
1234. nr aT \\n(z\\*(A\\$1
1235. \}
1236. el .nr aT 2
1237. \}
1238. if \\n(sW==2 \{\
1239. ie (\\n(\\*(A\\$1) \{\
1240. nr aT 1
1241. \}
1242. el .nr aT 2
1243. \}
1244.\}
1245..
1246.\" NS s0 macro - catch errors (spacing for non-existent class type 0)
1247.\" NS s1 macro - set spacing for class type 1
1248.\" NS s1 macro - set spacing for class type 1
1249.\" NS s2 macro - set spacing for class type 2
1250.\" NS s3 macro - set spacing for class type 3
1251.\" NS s4 macro - set spacing for class type 4
1252.\" NS S[0-9] string spacing
1253.\" NS xX local register
1254.\" NS aa local register
1255.de s0
1256.tm MDOC-ERROR: bogus type 0 (can't set space \\*(A\\n(aC) (#\\n(.c)
1257..
1258.de s1
1259.if \\n(\\*(A\\n(aC==3 \{\
1260. nr xX \\n(aC-1
1261. rm S\\n(xX
1262. ds S\\n(aC \\*(sV
1263.\}
1264.if \\n(\\*(A\\n(aC==2 \{\
1265. nr xX \\n(aC-1
1266. rm S\\n(xX
1267.\}
1268..
1269.de s2
1270.ds S\\n(aC \\*(sV
1271..
1272.de s3
1273.if \\n(aC>1 \{\
1274. nr xX \\n(aC-1
1275. rm S\\n(xX
1276.\}
1277.ds S\\n(aC \\*(sV
1278..
1279.de s4
1280.nr aa 0
1281..
1282.\" Class switches (on current argument aP)
1283.\" NS c0 macro - catch errors (non-existent class type 0)
1284.\" NS c1 macro - call request if type 1
1285.\" NS c2 macro - call .No if type 2
1286.\" NS c3 macro - call .No if type 3
1287.\" NS c4 macro - call .No if type 4
1288.de c0
1289.tm MDOC-ERROR: bogus class 0 (can't determine \\*(A\\n(aC) (#\\n(.c)
1290..
1291.de c1
1292.\\*(A\\n(aP
1293..
1294.de c2
1295.nr aP-1
1296.No
1297..
1298.de c3
1299.nr aP-1
1300.No
1301..
1302.de c4
1303.nr aP-1
1304.No
1305..
1306.\" NS y1 macro - ignore if class 1
1307.\" NS y2 macro - ignore if class 2
1308.\" NS y3 macro - append if type 3
1309.\" NS y4 macro - append if type 4
1310.de y1
1311.nr aa 1
1312..
1313.de y2
1314.nr aa 1
1315..
1316.de y3
1317.as b1 \\*(A\\n(aP
1318.nr aP+1
1319.n\\C\\n(aP
1320..
1321.de y4
1322.as b1 \\*(A\\n(aP
1323.nr aP+1
1324.n\\C\\n(aP
1325..
1326.\"--------------------------------------------------------------------------
1327.\" Ns Bf macro - Begin Font Mode (will be begin-mode/end-mode in groff & TeX)
1328.\" Ns Ef macro - End Font Mode
1329.de Bf
1330.ds mN Bf
1331.ie \\n(.$>0 \{\
1332. nr bF \\n(.f
1333. nr bZ \\n(.s
1334. if "\\$1"Em" \&\\*(eM
1335. if "\\$1"Li" \&\\*(lI
1336. if "\\$1"Sy" \&\\*(sY
1337. if "\\$1"-emphasis" \&\\*(eM
1338. if "\\$1"-literal" \&\\*(lI
1339. if "\\$1"-symbolic" \&\\*(sY
1340.\}
1341.el .tm Usage .Bf [Em | emphasis | Li | literal | Sy | symbolic] (#\\n(.c)
1342..
1343.de Ef
1344.ds mN Ef
1345.ie \\n(.$>0 .tm Usage .Ef (#\\n(.c)
1346.el \&\f\\n(bF\s\\n(bZ
1347..
1348.\" NS Bd macro - Begin Display display-type [offset string]
1349.\" NS Ed macro - end Display
1350.\" NS O[0-9] registers - stack of indent
1351.\" NS d[0-9] registers - display-type stack
1352.de Bd
1353.ds mN Bd
1354.ie \\n(.$==0 \{\
1355.tm Usage: .Bd [-literal | -filled | -ragged ] [-offset [string]] [-compact] (#\\n(.c)
1356.\}
1357.el \{\
1358. ds aa
1359. nr bV 0
1360. nr iD 0
1361. nr dP+1
1362. if "\\$1"-literal" \{\
1363. nr iD+1
1364. ds d\\n(dP dL
1365. nr cF \\n(.f
1366. nr cZ \\n(.s
1367. ie t \{\&\\*(lI
1368' ta 9n 18n 27n 36n 45n 54n 63n 72n
1369. \}
1370. el \{\
1371' ta 8n 16n 24n 32n 40n 48n 56n 64n 72n
1372. \}
1373. nf
1374. \}
1375. if "\\$1"-filled" \{\
1376. nr iD+1
1377. ds d\\n(dP dF
1378. br
1379. \}
1380. if "\\$1"-ragged" \{\
1381. nr iD+1
1382. ds d\\n(dP dR
1383. nf
1384. \}
1385.\" .tm Here is argc: \\n(.$ and here is iD \\n(iD
1386. if ((\\n(iD>=1)&(\\n(.$>\\n(iD)) \{\
1387. bV \\$2 \\$3 \\$4
1388. \}
1389. if \\n(O\\n(dP>0 'in \\n(.iu+\\n(O\\n(dPu
1390. if (\\n(bV==0)&(\\n(nS==0) \{\
1391' sp \\n(dVu
1392. \}
1393. if \\n(cR==0 .ne 2v
1394. nr bV 0
1395. nr iD 0
1396.\}
1397..
1398.\" NS bV macro - resolve remaining .Bd arguments
1399.de bV
1400.\" .tm in bV with args: \\$1 \\$2 \\$3
1401.nr iD 1
1402.ds bY
1403.if "\\$1"-offset" \{\
1404. ds bY \\$2
1405. if "\\*(bY"left" \{\
1406. nr iD+1
1407. nr O\\n(dP 0
1408. \}
1409. if "\\*(bY"right" \{\
1410. nr iD+1
1411. nr O\\n(dP (\\n(.l/3)u
1412. \}
1413. if "\\*(bY"center" \{\
1414. nr iD+1
1415. nr O\\n(dP (\\n(.l-\\n(.i)/4u
1416. \}
1417. if "\\*(bY"indent" \{\
1418. nr iD+1
1419. nr O\\n(dP \\n(dIu
1420. \}
1421. if "\\*(bY"indent-two" \{\
1422. nr iD+1
1423. nr O\\n(dP \\n(dIu+\\n(dIu
1424. \}
1425. if \\n(iD==1 \{\
1426. nr iD+1
1427. sW "\\*(bY"
1428. ie \\n(sW>2 \{\
1429. ie ((\\*(bY>9n)&(\\$3<100n)) \{\
1430. nr O\\n(dP \\*(bY
1431. \}
1432. el .nr O\\n(dP (\\n(sW)*\\n(fWu
1433. \}
1434. el \{\
1435. if \\n(sW==2 .aT \\*(bY
1436. ie \\n(aT==1 \{\
1437. nr O\\n(dP \\n(\\*(bY
1438. \}
1439. el .nr O\\n(dP \\*(bY
1440. \}
1441. \}
1442.\}
1443.if "\\$1"-compact" \{\
1444. nr bV 1
1445.\}
1446.if \\n(iD<\\n(.$ \{\
1447. ie "\\*(bY"" \{\
1448. bV \\$2 \\$3
1449. \}
1450. el \{\
1451. bV \\$3
1452. \}
1453.\}
1454..
1455.\" NS Ed macro - end display
1456.de Ed
1457.ds mN Ed
1458.br
1459.if "\\*(d\\n(dP"dL" \{\
1460. ft \\n(cF
1461. fz \\n(cZ
1462.\}
1463.in \\n(.iu-\\n(O\\n(dPu
1464.rr O\\n(dP
1465.rm d\\n(dP
1466.nr dP \\n(dP-1
1467.fi
1468..
1469.\"--------------------------------------------------------------------------
1470.\" NS Bl macro - begin list (.Bl list-type)
1471.\" NS L[0-9] registers - stack of list types
1472.de Bl
1473.ie \\n(.$==0 \{\
1474.tm Usage: .Bl [[-hang | -tag] [-width]] [ -item | -enum | -bullet | -diag] (#\\n(.c)
1475.\}
1476.el \{\
1477. ds mN Bl
1478. nr aP 0
1479. nr lC+1
1480. ds A1 \\$2
1481. ds A2 \\$3
1482. ds A3 \\$4
1483. ds A4 \\$5
1484. ds A5 \\$6
1485. ds A6 \\$7
1486. ds A7 \\$8
1487. ds A8 \\$9
1488. nr fV \\n(.$-1
1489. if "\\$1"-hang" \{\
1490. nr aP+1
1491. ds L\\n(lC hL
1492. nr w\\n(lC 6n
1493. nr tC 1
1494. \}
1495. if "\\$1"-tag" \{\
1496. nr aP+1
1497. ds L\\n(lC tL
1498. nr tC 1
1499. \}
1500. if "\\$1"-item" \{\
1501. nr aP+1
1502. ds L\\n(lC iT
1503. nr tC 1
1504. \}
1505. if "\\$1"-enum" \{\
1506. nr aP+1
1507. ds L\\n(lC nU
1508. nr w\\n(lC 2n
1509. nr tC 1
1510. \}
1511. if "\\$1"-bullet" \{\
1512. nr aP+1
1513. ds L\\n(lC bU
1514. nr w\\n(lC 2n
1515. nr tC 1
1516. \}
1517. if "\\$1"-dash" \{\
1518. nr aP+1
1519. ds L\\n(lC hU
1520. nr w\\n(lC 2n
1521. nr tC 1
1522. \}
1523. if "\\$1"-inset" \{\
1524. nr aP+1
1525. ds L\\n(lC lL
1526. nr tC 1
1527. \}
1528. if "\\$1"-diag" \{\
1529. nr aP+1
1530. ds L\\n(lC mL
1531. nr mL 1
1532. \}
1533. if "\\$1"-ohang" \{\
1534. nr aP+1
1535. ds L\\n(lC oL
1536. nr tC 1
1537. \}
1538. if "\\$1"-column" \{\
1539. nr aP+1
1540. ds L\\n(lC cL
1541. \}
1542. ie \\n(aP==0 \{\
1543. tm \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
1544. tm Usage: .Bl [[-inset|-tag] -width] [-item|-enum|-bullet|-diag] (#\\n(.c)
1545. \}
1546. el \{\
1547. tY
1548. if (\\n(aP==1)&(\\n(aP<\\n(.$) \{\
1549. nr aP 0
1550. lV
1551. if "\\*(L\\n(lC"cL" \{\
1552. W\\n(wV
1553. nr w\\n(lC 0
1554' in -\\n(eWu
1555. ie \\n(v\\n(lC==1 \{\
1556. nr aa 0
1557. \}
1558. el \{\
1559. sp \\n(dVu
1560. \}
1561. nf
1562. nr wV 0
1563. \}
1564. \}
1565. \}
1566. nr aP 0
1567. aY
1568.\" .tm Here is L[\\n(lC]==\\*(L\\n(lC
1569.\}
1570..
1571.\" NS lV macro - resolve remaining .Bl arguments
1572.de lV
1573.nr aP+1
1574.if \\n(fV>=\\n(aP \{\
1575. nr iD 0
1576. if "\\*(A\\n(aP"-compact" \{\
1577. nr iD 1
1578. nr v\\n(lC 1
1579. \}
1580. if "\\*(A\\n(aP"-width" \{\
1581. nr iD 1
1582. nr aP+1
1583. nr tW 1
1584. ds t\\n(lC TagwidtH
1585. ds tS \\*(A\\n(aP
1586. aW \\n(aP
1587. ie \\n(sW>2 \{\
1588. ie \\n(sW==3 \{\
1589. ie (\\*(tS>9n)&(\\*(tS<99n) \{\
1590. nr w\\n(lC \\*(tSu
1591. \}
1592. el .nr w\\n(lC (\\n(sW)*\\n(fWu
1593. \}
1594. el .nr w\\n(lC (\\n(sW)*\\n(fWu
1595. \}
1596. el \{\
1597. aT \\*(tS
1598. ie \\n(aT==1 \{\
1599. nr w\\n(lC \\n(\\*(tS
1600. \}
1601. el \{\
1602. nr w\\n(lC \\*(tSu
1603. \}
1604. \}
1605. \}
1606. if "\\*(A\\n(aP"-offset" \{\
1607. nr iD 1
1608. nr aP+1
1609. ie "\\*(A\\n(aP"indent" \{\
1610. nr o\\n(lC \\n(Dsu
1611. \}
1612. el \{\
1613. ds tS \\*(A\\n(aP
1614. aW \\n(aP
1615. ie \\n(sW>2 \{\
1616. ie (\\*(tS>9n)&(\\*(tS<100n) \{\
1617. nr o\\n(lC \\*(tS
1618. \}
1619. el .nr o\\n(lC (\\n(sW)*\\n(fWu
1620. \}
1621. el \{\
1622. ie \\n(C\\n(aP==1 .nr o\\n(lC \\n(\\*(tS
1623. el .nr o\\n(lC \\*(tS
1624. \}
1625. \}
1626. \}
1627. if \\n(iD==0 \{\
1628. if "\\*(L\\n(lC"cL" \{\
1629. nr wV+1
1630. ds A\\n(wV \\*(A\\n(aP
1631. \}
1632. \}
1633. if \\n(fV>\\n(aP .lV
1634.\}
1635..
1636.\" NS El macro - end list
1637.\" NS iD local register
1638.de El
1639.ie \\n(.$>0 \{\
1640. tm Usage: .El (#\\n(.c)
1641.\}
1642.el \{\
1643. ds mN El
1644. nr iD 0
1645. if "\\*(L\\n(lC"cL" \{\
1646. nr iD 1
1647. cC
1648. \}
1649. if "\\*(L\\n(lC"nU" \{\
1650. nr nU 0
1651. \}
1652. if \\n(mL>0 \{\
1653. nr iD 1
1654. nr mL 0
1655. \}
1656. if "\\*(L\\n(lC"iT" \{\
1657' in \\n(.iu-\\n(o\\n(lCu
1658. tZ
1659. nr lC-1
1660. tY
1661. nr iD 1
1662. \}
1663. if "\\*(L\\n(lC"oL" \{\
1664' in \\n(.iu-\\n(o\\n(lCu
1665. tZ
1666. nr lC-1
1667. tY
1668. nr iD 1
1669. \}
1670. if "\\*(L\\n(lC"lL" \{\
1671' in \\n(.iu-\\n(o\\n(lCu
1672. tZ
1673. nr lC-1
1674. tY
1675. nr iD 1
1676. \}
1677. if \\n(iD==0 \{\
1678. lE
1679. \}
1680. br
1681. nr iD 0
1682.\}
1683..
1684.\" NS It macro - list item
1685.\" NS iD local register
1686.\" NS aA save pA font string for section FILES (no underline if nroff)
1687.de It
1688.if "\\*(L\\n(lC"" \{\
1689. tm Usage .Bl -list-type [-width [string] | -compact | -offset [string]] (#\\n(.c)
1690. tm .It \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
1691.\}
1692.\" .tm Here is L[\\n(lC]==\\*(L\\n(lC
1693.ne 2v
1694.ie \\n(.$>0 \{\
1695. ds mN It
1696. ds b1
1697. nr iD 0
1698. ds A1 \\$1
1699. ds A2 \\$2
1700. ds A3 \\$3
1701. ds A4 \\$4
1702. ds A5 \\$5
1703. ds A6 \\$6
1704. ds A7 \\$7
1705. ds A8 \\$8
1706. ds A9 \\$9
1707. nr fV \\n(.$
1708. if "\\*(L\\n(lC"mL" \{\
1709. nr iD 1
1710. nr aP 0
1711. aX
1712. \\*(L\\n(lC
1713. \}
1714. if "\\*(L\\n(lC"cL" \{\
1715. ds b1
1716. nr aP 0
1717. nr iD 1
1718. \\*(L\\n(lC
1719. \}
1720. if "\\*(L\\n(lC"iT" \{\
1721. nr aP 0
1722. nr iD 1
1723. \\*(L\\n(lC
1724. \}
1725. if \\n(iD==0 \{\
1726. fV
1727.\" .tm It list-type==\\*(L\\n(lC, aP==\\n(aP
1728.\" .tm It beg arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC
1729. nr oM+1
1730. nr tP 1
1731. nr aP+1
1732. nr tX \\n(C\\n(aP
1733. ds tX \\*(A\\n(aP
1734. if \\n(nF==1 \{\
1735. ds aA \\*(pA
1736. if n .ds pA \\*(nO
1737. \}
1738. ie \\n(C\\n(aP==1 \{\
1739. \\*(A\\n(aP
1740. \}
1741. el \{\
1742. nr aP-1
1743. No
1744. \}
1745. ie \\n(Xt==1 .ds xB \&\\*(L\\n(lC
1746. el .\\*(L\\n(lC
1747. \}
1748. nr iD 0
1749.\}
1750.el .\\*(L\\n(lC
1751..
1752.\" NS lL macro - .It item of list-type inset
1753.de lL
1754.lY
1755.br
1756\&\\*(b1
1757.nr oM-1
1758.nr tP 0
1759.dZ+1
1760.ds b1
1761.aY
1762'fi
1763..
1764.\" NS hL macro - .It item of list-type hanging label (as opposed to tagged)
1765.de hL
1766.lX
1767.nr bb \\n(w\\n(lCu+\\n(lSu
1768.ti -\\n(bbu
1769.\" .ie \w'\\*(b1'u>=(\\n(w\\n(lCu) \&\\*(b1\\*(lS
1770.ie \w'\\*(b1'u>=(\\n(w\\n(lCu) \&\\*(b1
1771.el \&\\*(b1\h'|\\n(bbu'\c
1772.nr oM-1
1773.dZ+1
1774.ds b1
1775.nr tP 0
1776.aY
1777'fi
1778..
1779.\" NS oL macro - .It item of list-type overhanging label
1780.de oL
1781.lY
1782\&\\*(b1
1783.br
1784.nr oM-1
1785.dZ+1
1786.ds b1
1787.nr tP 0
1788.aY
1789'fi
1790..
1791.\" NS iT macro - .It item of list-type [empty label]
1792.de iT
1793.lY
1794.br
1795.aY
1796'fi
1797..
1798.\" NS nU macro - Enumerated list
1799.\" NS nU register count
1800.\" NS hU macro - Hyphen paragraph list (sub bullet list)
1801.\" NS bU macro - Bullet paragraph list
1802.de nU
1803.nr oM+1
1804.nr nU+1
1805.ds b1 \&\\n(nU
1806.uL
1807..
1808.de bU
1809.nr oM+1
1810.nr bU+1
1811.ds b1 \&\\*(sY\&\(bu\fP
1812.uL
1813..
1814.de hU
1815.nr oM+1
1816.nr bU+1
1817.ds b1 \&\\*(sY\&\-\fP
1818.uL
1819..
1820.\" NS uL macro - .It item of list-type enum/bullet/hyphen
1821.de uL
1822.lX
1823.nr bb \\n(w\\n(lCu+\\n(lSu
1824.ti -\\n(bbu
1825.ie \w'\\*(b1'u>=(\\n(w\\n(lCu) \&\\*(b1
1826.\" .ie \w'\\*(b1'u>=(\\n(w\\n(lCu) \&\\*(b1\0
1827.el \&\\*(b1\h'|\\n(bbu'\c
1828.nr oM-1
1829.dZ+1
1830.ds b1
1831.nr tP 0
1832.aY
1833'fi
1834..
1835.\" NS mL macro - .It item of list-type diagnostic-message
1836.de mL
1837.nr cF \\n(.f
1838.nr cZ \\n(.s
1839.ie \\n(mL==1 \{\
1840. nr zB \\n(.c
1841. ie (\\n(zB-\\n(zA)>1 .Pp
1842. el .br
1843. nr zA \\n(zB
1844. nr zB 0
1845.\}
1846.el \{\
1847. nr zA \\n(.c
1848. br
1849.\}
1850\&\\*(sY\\*(b1\f\\n(cF\s\\n(cZ\\*(lS\c
1851.aY
1852.ds b1
1853'fi
1854..
1855.\" NS tL macro - .It item of list-type "tag"
1856.de tL
1857.if \\n(tW==0 .lW
1858.lX
1859.if "\\*(A1"Ql" .tm -mdoc limitation: Cannot create item of type `Ql'
1860.\" . nr bb \\n(w\\n(lCu+\\n(lSu+2n
1861.\" . ti -\\n(bbu
1862.\" . ie (\w'\\*(b1'u)>(\\n(w\\n(lCu) \{\\&\\*(sL\\*(b1\\*(sR
1863.\" . br
1864.\" . \}
1865.\" . el \&\\*(sL\\*(b1\\*(sR\h'|\\n(bbu'\c
1866.\" .\}
1867.\" .el \{\
1868.\" 'nf
1869.nr bb \\n(w\\n(lCu+\\n(lSu
1870.ti -\\n(bbu
1871.ie (\w'\\*(b1'u)>(\\n(w\\n(lCu) \{\&\\*(b1
1872. br
1873.\}
1874.el \&\\*(b1\h'|\\n(bbu'\c
1875.if \\n(nF==1 \{\
1876. if n .ds pA \\*(aA
1877.\}
1878.nr oM-1
1879.nr tP 0
1880.dZ+1
1881.ds b1
1882.aY
1883'fi
1884..
1885.\" NS lW macro - resolve unknown label/tag width (if .Bl [inset | tag] only)
1886.de lW
1887.if !"TagwidtH"\\*(t\\n(lC" \{\
1888. ie \\n(tX==1 \{\
1889. ds t\\n(lN \\*(tX
1890. nr w\\n(lN \\n(\\*(tX
1891. \}
1892. el \{\
1893. ds t\\n(lN No
1894. nr w\\n(lN \\n(No
1895. \}
1896. if !"\\*(t\\n(lC"\\*(t\\n(lN" .nr tC 1
1897.\}
1898..
1899.\" NS lX macro - set up vertical spacing (if compact) and offset+indent (all)
1900.de lX
1901.ie \\n(tC \{\
1902. nr tC 0
1903. nr tW 0
1904. if \\n(v\\n(lC==0 .sp \\n(dVu
1905. in \\n(.iu+\\n(w\\n(lCu+\\n(o\\n(lCu+\\n(lSu
1906.\}
1907.el \{\
1908. ie \\n(v\\n(lC==1 \{\
1909. nr aa 0
1910. \}
1911. el \{\
1912. sp \\n(dVu
1913. \}
1914.\}
1915.if !\\n(cR .ne 2v
1916..
1917.\" NS lY macro - set up vertical spacing (if compact) and offset+indent (all)
1918.de lY
1919.ie \\n(tC \{\
1920. nr tC 0
1921. nr tW 0
1922. if \\n(v\\n(lC==0 .sp \\n(dVu
1923. in \\n(.iu+\\n(o\\n(lCu
1924.\}
1925.el \{\
1926. ie \\n(v\\n(lC==1 \{\
1927. nr aa 0
1928. \}
1929. el \{\
1930. sp \\n(dVu
1931. \}
1932.\}
1933.if !\\n(cR .ne 2v
1934..
1935.\" NS tS temporary string
1936.\" NS hL macro - hanging list function
1937.\" NS tS temporary string
1938.\" NS hL macro - hanging list function
1939.\" NS lT macro - tagged list function
1940.\" NS lE macro - list end function
1941.\" NS tX string (initial string)
1942.\" NS tX register (initial class)
1943.\" NS tC parameter change flag
1944.\" NS Xt something to do with diversions...
1945.\" NS lC register - list type stack counter
1946.\" NS tP register tag flag (for diversions)
1947.\" NS w[0-9] register tag stack (nested tags)
1948.\" NS t[0-9] register tag string stack (nested tags)
1949.\" NS o[0-9] register offset stack (nested tags)
1950.\" NS v[0-9] register vertical tag break stack
1951.\" NS h[0-9] register horizontal tag stack (continuous if 1, break if 0)
1952.nr lC 0
1953.nr wV 0
1954.nr w1 0
1955.nr o1 0
1956.nr v1 0
1957.nr h1 0
1958.ds t\n(lC
1959.de lE
1960.\" IN lC o[\\n(lC]==\\n(o\\n(lC, w[\\n(lC]==\\n(w\\n(lC,
1961.ie \\n(o\\n(lC>0 \{\
1962' in \\n(.iu-(\\n(w\\n(lCu)-(\\n(o\\n(lCu)-\\n(lSu
1963. rr o\\n(lC
1964.\}
1965.el 'in \\n(.iu-\\n(w\\n(lCu-\\n(lSu
1966.if \\n(lC<=0 .tm Extraneous .Bl or .El call (#\\n(.c)
1967.tZ
1968.nr lC-1
1969.tY
1970..
1971.\" NS tY macro - set up next block for list
1972.\" NS tZ macro - decrement stack
1973.\" NS tY register (next possible lC value)
1974.de tY
1975.nr tY (\\n(lC+1)
1976.nr w\\n(tY 0
1977.nr h\\n(tY 0
1978.nr o\\n(tY 0
1979.ds t\\n(tY \\*(t\\n(lC
1980.ds L\\n(tY
1981.nr v\\n(tY 0
1982..
1983.de tZ
1984.rm L\\n(tY
1985.rr w\\n(tY
1986.rr h\\n(tY
1987.rr o\\n(tY
1988.rm t\\n(tY
1989.rr v\\n(tY
1990.nr tY-1
1991..
1992.\" initial values
1993.nr w1 0
1994.nr o1 0
1995.nr h1 0
1996.ds t1
1997.nr v1 0
1998.nr tY 1
1999.\" NS Xr macro - cross reference (man page only)
2000.de Xr
2001.if \\n(aC==0 \{\
2002. ie \\n(.$==0 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c)
2003. el \{\
2004. ds mN Xr
2005. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2006. \}
2007.\}
2008.if \\n(aC>\\n(aP \{\
2009. nr aP+1
2010. ie \\n(C\\n(aP==1 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c)
2011. el \{\
2012. ie \\n(C\\n(aP>2 .y\\n(C\\n(aP
2013. el \{\
2014. as b1 \&\\*(xR\\*(A\\n(aP\fP\s0
2015. if \\n(aC>\\n(aP \{\
2016. nr aP+1
2017. if \\n(C\\n(aP==2 \{\
2018. as b1 \&(\\*(A\\n(aP)
2019. nr aP+1
2020. \}
2021. if \\n(aC>=\\n(aP \{\
2022. c\\n(C\\n(aP
2023. \}
2024. \}
2025. \}
2026. aZ
2027. \}
2028.\}
2029..
2030.\" NS Sx macro - cross section reference
2031.de Sx
2032.if \\n(aC==0 \{\
2033. ie \\n(.$==0 .tm Sx Usage: .Sx Section Header \\*(Pu (#\\n(.c)
2034. el \{\
2035. ds mN Sx
2036. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2037. \}
2038.\}
2039.\}
2040.if \\n(aC>\\n(aP \{\
2041. nr aP+1
2042. as b1 \\*(sX
2043. nr cF \\n(.f
2044. nr cZ \\n(.s
2045. nR
2046.\}
2047..
2048.\" NS cC macro - column-list end-list
2049.\" NS eW macro - column indent width
2050.\" NS cI register - column indent width
2051.\" NS W[1-5] macro - establish tabs for list-type column
2052.de cC
2053'in \\n(.iu-\\n(o\\n(lCu-\\n(w\\n(lCu
2054.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
2055.fi
2056.tZ
2057.nr lC-1
2058.tY
2059..
2060.de W1
2061.ta \w'\\*(A1 'u
2062.nr eW \w'\\*(A1 'u
2063'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
2064..
2065.de W2
2066.\" ARGS2 Here is offset == \\n(o\\n(lCu
2067.ta \w'\\*(A1 'u +\w'\\*(A2 'u
2068.nr eW \w'\\*(A1 'u+\w'\\*(A2 'u
2069'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
2070..
2071.de W3
2072.ta \w'\\*(A1 'u +\w'\\*(A2 'u +\w'\\*(A3 'u
2073.nr eW \w'\\*(A1 'u+\w'\\*(A2 'u+\w'\\*(A3 'u
2074'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
2075..
2076.de W4
2077.\" ARGS4Here is o[\\n(lC] == \\n(o\\n(lCu,
2078.\" A1==\\*(A1
2079.\" A2==\\*(A2
2080.\" A3==\\*(A3
2081.\" A4==\\*(A4
2082.ta \w'\\*(A1 'u +\w'\\*(A2 'u +\w'\\*(A3 'u +\w'\\*(A4 'u
2083.nr eW \w'\\*(A1 'u+\w'\\*(A2 'u+\w'\\*(A3 'u +\w'\\*(A4 'u
2084'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
2085..
2086.de W5
2087.ta \w'\\*(A1 'u +\w'\\*(A2 'u +\w'\\*(A3 'u +\w'\\*(A4 'u +\w'\\*(A5 'u
2088.nr eW \w'\\*(A1 'u +\w'\\*(A2 'u +\w'\\*(A3 'u +\w'\\*(A4 'u +\w'\\*(A5 'u
2089' in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
2090..
2091.\" NS cL macro - column items
2092.de cL
2093.if \\n(w\\n(lC==0 .nr w\\n(lC \\n(eWu
2094.if \\n(.u==0 \{\
2095. fi
2096' in \\n(.iu+\\n(eWu
2097.\}
2098.ti -\\n(eWu
2099.fV
2100.nr aP+1
2101.ie \\n(aC>=\\n(aP \{\
2102. if "\\*(A\\n(aP"Ta" \{\
2103. nr jJ \\n(aP-1
2104. rm S\\n(jJ
2105. rr jJ
2106. \}
2107. c\\n(C\\n(aP
2108.\}
2109.el .tm Usage: .It column_string [Ta [column_string ...] ] (#\\n(.c)
2110..
2111.\" NS Ta macro - append tab (\t)
2112.de Ta
2113.ie \\n(aC>0 \{\
2114. nr aP+1
2115. ie \\n(aC>=\\n(aP \{\
2116. if "\\*(A\\n(aP"Ta" \{\
2117. nr jJ \\n(aP-1
2118. rm S\\n(jJ
2119. rr jJ
2120. \}
2121. as b1 \\t
2122. c\\n(C\\n(aP
2123. \}
2124. el \{\
2125. as b1 \\t\\c
2126. rm S\\n(aP
2127. pB
2128. aY
2129. \}
2130.\}
2131.el \{\
2132. tm Usage: Ta must follow column entry: e.g. (#\\n(.c)
2133. tm .It column_string [Ta [column_string ...] ]
2134.\}
2135..
2136.\"
2137.\" NS Dl macro - display (one line) literal
2138.de Dl
2139'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
2140.in \\n(.iu+\\n(Dsu
2141.ie \\n(aC==0 \{\
2142. ie \\n(.$==0 \{\
2143. tm Usage: .Dl argument ... (#\\n(.c)
2144. \}
2145. el \{\
2146. ds mN Dl
2147. ds A1 \\$1
2148. ds A2 \\$2
2149. ds A3 \\$3
2150. ds A4 \\$4
2151. ds A5 \\$5
2152. ds A6 \\$6
2153. ds A7 \\$7
2154. ds A8 \\$8
2155. ds A9 \\$9
2156. nr fV \\n(.$
2157. fV
2158. Li
2159. \}
2160.\}
2161.el \{\
2162. tm Usage: .Dl not callable by other macros (#\\n(.c)
2163.\}
2164.in \\n(.iu-\\n(Dsu
2165..
2166.\"
2167.\" NS D1 macro - display (one line)
2168.de D1
2169'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
2170.in \\n(.iu+\\n(Dsu
2171.ie \\n(aC==0 \{\
2172. ie \\n(.$==0 \{\
2173. tm Usage: .D1 argument ... (#\\n(.c)
2174. \}
2175. el \{\
2176. ds mN D1
2177. ds A1 \\$1
2178. ds A2 \\$2
2179. ds A3 \\$3
2180. ds A4 \\$4
2181. ds A5 \\$5
2182. ds A6 \\$6
2183. ds A7 \\$7
2184. ds A8 \\$8
2185. ds A9 \\$9
2186. nr fV \\n(.$
2187. fV
2188. nr aP+1
2189. ie \\n(C\\n(aP==1 .\\*(A\\n(aP
2190. el .No
2191. \}
2192.\}
2193.el \{\
2194. tm Usage: .D1 not callable by other macros (#\\n(.c)
2195.\}
2196.in \\n(.iu-\\n(Dsu
2197..
2198.\" NS Ex macro - DEFUNCT
2199.de Ex
2200.tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2201..
2202.\"
2203.\" NS Ex macro - DEFUNCT
2204.de Ex
2205.tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2206..
2207.\"
2208.\" NS Vt macro - Variable type (for forcing old style variable declarations)
2209.de Vt
2210.nr cF \\n(.f
2211.ft \\n(vT
2212\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2213.ft \\n(cF
2214..
2215.\"
2216.\" NS Ft macro - Function type
2217.nr fZ 0
2218.de Ft
2219.if \\n(nS>0 \{\
2220. if \\n(fZ>0 .Pp
2221. nr fZ+1
2222. nr fY+1
2223.\}
2224.nr cF \\n(.f
2225.nr cZ \\n(.s
2226.\" .ft \\n(fT
2227\&\\*(fT\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2228.ft \\n(cF
2229.fs \\n(cZ
2230.br
2231..
2232.\"
2233.\" NS Ot macro - Old Function type (fortran - no newline)
2234.de Ot
2235.if \\n(nS>0 \{\
2236. if \\n(fZ>0 .Pp
2237. nr fZ+1
2238. nr fY+1
2239.\}
2240.nr cF \\n(.f
2241.ft \\n(fT
2242\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2243.ft \\n(cF
2244..
2245.\"
2246.\" NS Fa macro - Function arguments
2247.de Fa
2248.if \\n(aC==0 \{\
2249. ie \\n(.$==0 .tm Usage: .Fa Function Arguments ... \\*(Pu (#\\n(.c)
2250. el \{\
2251. ds mN Fa
2252. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2253. \}
2254.\}
2255.if \\n(aC>\\n(aP \{\
2256. as b1 \\*(fA
2257. nr aP+1
2258. nr cF \\n(.f
2259. nr cZ \\n(.s
2260. nR
2261. if \\n(nS>0 \{\
2262. if \\n(fZ>0 .br
2263. \}
2264.\}
2265..
2266.\" NS Fn macro - functions
2267.\" NS fY register - dick with old style function declarations (fortran)
2268.\" NS fZ register - break a line when more than one function in a synopsis
2269.\"
2270.de Fn
2271.if \\n(aC==0 \{\
2272. ie \\n(.$==0 .tm Usage: .Fn function_name function_arg(s) ... \\*(Pu (#\\n(.c)
2273. el \{\
2274. ds mN Fn
2275. ds A1 \\$1
2276. ds A2 \\$2
2277. ds A3 \\$3
2278. ds A4 \\$4
2279. ds A5 \\$5
2280. ds A6 \\$6
2281. ds A7 \\$7
2282. ds A8 \\$8
2283. ds A9 \\$9
2284. nr fV \\n(.$
2285. fV
2286. \}
2287.\}
2288.if \\n(nS>0 \{\
2289. if (\\n(fY==0) \{\
2290. if \\n(fZ>0 .Pp
2291. nr fZ+1
2292. \}
2293. nr fD 0
2294.\}
2295.if \\n(aC>\\n(aP \{\
2296. nr aP+1
2297. nr cF \\n(.f
2298. nr cZ \\n(.s
2299. as b1 \\*(fN\\*(A\\n(aP\fP\s0\\*(lp
2300. ie \\n(aC>\\n(aP \{\
2301. as b1 \\*(fA
2302. nr aP+1
2303. f\\n(C\\n(aP
2304. \}
2305. el \{\
2306. as b1 \\*(rp
2307. aZ
2308. \}
2309. if \\n(nS>0 .br
2310.\}
2311..
2312.\"
2313.\" NS f1 macro - class switch
2314.\" NS f2 macro - handle function arguments
2315.\" NS f3 macro - punctuation
2316.\" NS f4 macro - write out function
2317.de f1
2318.as b1 \\*(rp\f\\n(cF\s\\n(cZ
2319.\\*(A\\n(aP
2320..
2321.de f2
2322.as b1 \\*(A\\n(aP
2323.ie \\n(aC>\\n(aP \{\
2324. nr aa \\n(aP
2325. nr aP+1
2326. if \\n(C\\n(aP==2 \{\
2327. as b1 \&\|\f\\n(cF\s\\n(cZ,\\*(S\\n(aa\fP\s0\|
2328. \}
2329. f\\n(C\\n(aP
2330.\}
2331.el \{\
2332. as b1 \\*(rp\f\\n(cF\s\\n(cZ
2333. aZ
2334.\}
2335..
2336.de f3
2337.as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(A\\n(aP
2338.ie \\n(aC>\\n(aP \{\
2339. No
2340.\}
2341.el .aZ
2342..
2343.de f4
2344.as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(S\\n(aP\\*(A\\n(aP
2345.ie \\n(aC>\\n(aP \{\
2346. nr aP+1
2347. No
2348.\}
2349.el .aZ
2350..
2351.\" NS Fc - Function close - not implemented yet
2352.\" NS Fo - Function open - not implemented yet
2353.\"
2354.\" Very crude references, stash all reference info into strings (usual
2355.\" use of b1 buffer, then b1 contents copied to string of retrievable
2356.\" naming convention), print out reference on .Re request and clean up.
2357.\" Ordering very limited, no fancy citations, but can do articles, journals
2358.\" and books - need to add several missing options (like date, city etc).
2359.\" should be able to grab a refer entry, massage it a wee bit (prefix
2360.\" a `.' to the %[A-Z]) and not worry (ha!)
2361.\"
2362.\" NS Rs macro - Reference Start
2363.\" NS rS register - Reference Start flag
2364.\" NS rS string - Reference Start buffer name for next save (of b1 buffer)
2365.de Rs
2366.nr rS 1
2367.rC
2368.if \\n(nA==1 .br
2369.nr Kl 0
2370..
2371.\" NS Re macro - Reference End
2372.de Re
2373.rZ
2374.rC
2375.nr rS 0
2376..
2377.\" NS Js macro - Journal Citation Start
2378.\" .de Js
2379.\" .ds rS
2380.\" .if \\n(nA==1 .br
2381.\" .rC
2382.\" .nr jS 1
2383.\" ..
2384.\" .\" .\" NS Je macro - Journal Citation End
2385.\" .de Je
2386.\" .jZ
2387.\" .rC
2388.\" .nr jS 0
2389.\" ..
2390.\" NS rC macro - reference cleanup
2391.de rC
2392.nr uK 0
2393.nr jK 0
2394.nr nK 0
2395.nr oK 0
2396.nr qK 0
2397.nr rK 0
2398.nr tK 0
2399.nr vK 0
2400.ds rS
2401.rm U1 U2 U3 U4 U5 U6 U7 U8
2402.rm uK jK nK oK rK qK tK vK
2403..
2404.\" NS rZ macro - reference print
2405.de rZ
2406.tm here is Kl==\\n(Kl
2407.tm Here is tK==\\n(tK %T \\*(tK
2408.tm here is oK==\\n(oK %O \\*(oK
2409.if \\n(uK \{\&\\*(U1,
2410. nr aK 1
2411. if (\\n(uK>1 \{\
2412. aK
2413. \}
2414. nr Kl-\\n(uK
2415.\}
2416.if \\n(tK \{\
2417. nr Kl-1
2418. if \\n(Kl==0 \{\
2419. ie (\\n(jK:\\n(bK) \&\\*(tK.
2420. el \&\\*(eM\\*(tK\\*(nO.
2421. \}
2422. if \\n(Kl>0 \{\
2423. ie (\\n(jK:\\n(bK) \&\\*(tK
2424. el \&\\*(eM\\*(tK\\*(nO,
2425. \}
2426.\}
2427.if \\n(bK \{\
2428. nr Kl-1
2429. if \\n(Kl==0 \&\\*(eM\\*(bK\\*(nO.
2430. if \\n(Kl>0 \&\\*(eM\\*(bK\\*(nO,
2431.\}
2432.if \\n(jK \{\
2433. nr Kl-1
2434. if \\n(Kl==0 \&\\*(eM\\*(jK\\*(nO.
2435. if \\n(Kl>0 \&\\*(eM\\*(jK\\*(nO,
2436.\}
2437.if \\n(rK \{\
2438. nr Kl-1
2439. if \\n(Kl==0 \&\\*(rK.
2440. if \\n(Kl>0 \&\\*(rK,
2441.\}
2442.if \\n(nK \{\
2443. nr Kl-1
2444. if \\n(Kl==0 \&\\*(nK.
2445. if \\n(Kl>0 \&\\*(nK,
2446.\}
2447.if \\n(vK \{\
2448. nr Kl-1
2449. if \\n(Kl==0 \&\\*(vK.
2450. if \\n(Kl>0 \&\\*(vK,
2451.\}
2452.if \\n(oK \{\
2453. nr Kl-1
2454. if \\n(Kl==0 \&\\*(oK.
2455. if \\n(Kl>0 \&\\*(oK,
2456.\}
2457.if \\n(Kl>0 .tm unresolved reference problem
2458..
2459.\" NS aK macro - print out reference authors
2460.de aK
2461.nr aK+1
2462.ie (\\n(uK-\\n(aK)==0 \{\&and \\*(U\\n(aK,
2463.el \{\&\\*(U\\n(aK,
2464. aK
2465.\}
2466..
2467.\" NS %A macro - reference author(s)
2468.\" NS uK register - reference author(s) counter
2469.\" NS U[1-9] strings - reference author(s) names
2470.de %A
2471.if \\n(aC==0 \{\
2472. ie \\n(.$==0 .tm Usage: .%A Author_name (#\\n(.c)
2473. el \{\
2474. nr uK+1
2475. nr Kl+1
2476. ds rS U\\n(uK
2477. ds mN %A
2478. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2479. \}
2480.\}
2481.if \\n(aC>\\n(aP \{\
2482. as b1 \\*(rA
2483. nr aP+1
2484. nr cF \\n(.f
2485. nr cZ \\n(.s
2486. rR
2487.\}
2488..
2489.\" NS %B macro - [reference] Book Name
2490.\" NS bK string - Book Name
2491.\" NS bK register - Book Name flag
2492.de %B
2493.if \\n(aC==0 \{\
2494. ie \\n(.$==0 .tm Usage: .%B Book Name (#\\n(.c)
2495. el \{\
2496. ds mN %B
2497. nr bK+1
2498. nr Kl+1
2499. ds rS bK
2500. ds A1 \\$1
2501. ds A2 \\$2
2502. ds A3 \\$3
2503. ds A4 \\$4
2504. ds A5 \\$5
2505. ds A6 \\$6
2506. ds A7 \\$7
2507. ds A8 \\$8
2508. ds A9 \\$9
2509. nr fV \\n(.$
2510. fV
2511. \}
2512.\}
2513.if \\n(aC>\\n(aP \{\
2514. as b1 \\*(rA
2515. nr aP+1
2516. nr cF \\n(.f
2517. nr cZ \\n(.s
2518. rR
2519.\}
2520..
2521.\" NS %J macro - [reference] Journal Name
2522.\" NS jK register - [reference] Journal Name flag
2523.\" NS jK string - [reference] Journal Name
2524.de %J
2525.if \\n(aC==0 \{\
2526. ie \\n(.$==0 .tm Usage: .%J Journal Name (#\\n(.c)
2527. el \{\
2528. ds mN %J
2529. nr jK+1
2530. ds rS jK
2531. nr Kl+1
2532. ds A1 \\$1
2533. ds A2 \\$2
2534. ds A3 \\$3
2535. ds A4 \\$4
2536. ds A5 \\$5
2537. ds A6 \\$6
2538. ds A7 \\$7
2539. ds A8 \\$8
2540. ds A9 \\$9
2541. nr fV \\n(.$
2542. fV
2543. \}
2544.\}
2545.if \\n(aC>\\n(aP \{\
2546. as b1 \\*(eM
2547. nr aP+1
2548. nr cF \\n(.f
2549. nr cZ \\n(.s
2550. rR
2551.\}
2552..
2553.\" NS %N macro - [reference] issue number
2554.\" NS nK register - [reference] issue number flag
2555.\" NS nK string - [reference] issue number
2556.de %N
2557.if \\n(aC==0 \{\
2558. ie \\n(.$==0 .tm Usage: .%N issue number (#\\n(.c)
2559. el \{\
2560. nr nK+1
2561. nr Kl+1
2562. ds rS nK
2563. ds mN %N
2564. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2565. \}
2566.\}
2567.if \\n(aC>\\n(aP \{\
2568. as b1 \\*(rA
2569. nr aP+1
2570. nr cF \\n(.f
2571. nr cZ \\n(.s
2572. rR
2573.\}
2574..
2575.\" NS %O macro - [reference] optional information
2576.\" NS oK register - [reference] optional information flag
2577.\" NS oK string - [reference] optional information
2578.de %O
2579.if \\n(aC==0 \{\
2580. ie \\n(.$==0 .tm Usage: .%O optional information ... \\*(Pu (#\\n(.c)
2581. el \{\
2582. ds mN %O
2583. nr oK+1
2584. nr Kl+1
2585. ds rS oK
2586. ds A1 \\$1
2587. ds A2 \\$2
2588. ds A3 \\$3
2589. ds A4 \\$4
2590. ds A5 \\$5
2591. ds A6 \\$6
2592. ds A7 \\$7
2593. ds A8 \\$8
2594. ds A9 \\$9
2595. nr fV \\n(.$
2596. fV
2597. \}
2598.\}
2599.if \\n(aC>\\n(aP \{\
2600. as b1 \\*(rA
2601. nr aP+1
2602. nr cF \\n(.f
2603. nr cZ \\n(.s
2604. rR
2605.\}
2606..
2607.\" NS %Q macro - Corporate or Foreign Author
2608.\" NS qK string - Corporate or Foreign Author
2609.\" NS qK register - Corporate or Foreign Author flag
2610.de %Q
2611.if \\n(aC==0 \{\
2612. ie \\n(.$==0 .tm Usage: .%Q Corporate or Foreign Author (#\\n(.c)
2613. el \{\
2614. ds mN %Q
2615. nr qK+1
2616. nr Kl+1
2617. ds rS qK
2618. ds A1 \\$1
2619. ds A2 \\$2
2620. ds A3 \\$3
2621. ds A4 \\$4
2622. ds A5 \\$5
2623. ds A6 \\$6
2624. ds A7 \\$7
2625. ds A8 \\$8
2626. ds A9 \\$9
2627. nr fV \\n(.$
2628. fV
2629. \}
2630.\}
2631.if \\n(aC>\\n(aP \{\
2632. as b1 \\*(rA
2633. nr aP+1
2634. nr cF \\n(.f
2635. nr cZ \\n(.s
2636. rR
2637.\}
2638..
2639.\" NS %R macro - [reference] report name
2640.\" NS rK string - [reference] report name
2641.\" NS rK register - [reference] report flag
2642.de %R
2643.if \\n(aC==0 \{\
2644. ie \\n(.$==0 .tm Usage: .%R reference report (#\\n(.c)
2645. el \{\
2646. ds mN %R
2647. nr rK+1
2648. nr Kl+1
2649. ds rS rK
2650. ds A1 \\$1
2651. ds A2 \\$2
2652. ds A3 \\$3
2653. ds A4 \\$4
2654. ds A5 \\$5
2655. ds A6 \\$6
2656. ds A7 \\$7
2657. ds A8 \\$8
2658. ds A9 \\$9
2659. nr fV \\n(.$
2660. fV
2661. \}
2662.\}
2663.if \\n(aC>\\n(aP \{\
2664. as b1 \\*(rA
2665. nr aP+1
2666. nr cF \\n(.f
2667. nr cZ \\n(.s
2668. rR
2669.\}
2670..
2671.\" NS %T macro - reference title
2672.\" NS tK string - reference title
2673.\" NS tK register - reference title flag
2674.de %T
2675.if \\n(aC==0 \{\
2676. ie \\n(.$==0 .tm Usage: .%T (#\\n(.c)
2677. el \{\
2678. ds mN %T
2679. nr tK+1
2680. nr Kl+1
2681. ds rS tK
2682. ds A1 \\$1
2683. ds A2 \\$2
2684. ds A3 \\$3
2685. ds A4 \\$4
2686. ds A5 \\$5
2687. ds A6 \\$6
2688. ds A7 \\$7
2689. ds A8 \\$8
2690. ds A9 \\$9
2691. nr fV \\n(.$
2692. fV
2693. \}
2694.\}
2695.if \\n(aC>\\n(aP \{\
2696. ie \\n(jS==1 \{\
2697. nr cF \\n(.f
2698. nr cZ \\n(.s
2699. ds qL \&\\*(Lq\\*(rA
2700. ds qR \&\\*(Rq\f\\n(cF\s\\n(cZ
2701. En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2702. \}
2703. el \{\
2704. as b1 \\*(eM
2705. nr aP+1
2706. nr cF \\n(.f
2707. nr cZ \\n(.s
2708. rR
2709. \}
2710.\}
2711..
2712.\" NS %V macro - reference volume
2713.\" NS vK string - reference volume
2714.\" NS vK register - reference volume flag
2715.de %V
2716.if \\n(aC==0 \{\
2717. ie \\n(.$==0 .tm Usage: .%V Volume , ... \\*(Pu (#\\n(.c)
2718. el \{\
2719. ds mN %V
2720. nr vK+1
2721. nr Kl+1
2722. ds rS vK
2723. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2724. \}
2725.\}
2726.if \\n(aC>\\n(aP \{\
2727. as b1 \\*(rA
2728. nr aP+1
2729. nr cF \\n(.f
2730. nr cZ \\n(.s
2731. nR
2732.\}
2733..
2734.\" NS rR macro - reference recursion routine
2735.\" NS jM local register
2736.\" NS jN local register
2737.de rR
2738.hy 0
2739.nr jM \\n(C\\n(aP
2740.ie \\n(jM==1 \{\
2741. as b1 \&\f\\n(cF\s\\n(cZ
2742. ie "\\*(A\\n(aP"Tn" \{\
2743. .nN
2744. \}
2745. el \{\
2746. if \\n(aC>8 .tm Usage: \\*(mN - maximum 8 arguments (#\\n(.c)
2747. aI rR 1
2748. \\*(A\\n(aP
2749. \}
2750.\}
2751.el \{\
2752. nr jN \\n(aP
2753. ie \\n(jM==2 .as b1 \&\\*(A\\n(aP
2754. el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
2755. ie \\n(aC==\\n(aP \{\
2756. as b1 \&\f\\n(cF\s\\n(cZ
2757. rD
2758. \}
2759. el \{\
2760. nr aP+1
2761. as b1 \&\\*(S\\n(jN
2762. rR
2763. \}
2764.\}
2765.rr jM jN
2766..
2767.\" NS rD macro - save b1 buffer in to appropriate name
2768.de rD
2769.as \\*(rS \\*(b1
2770.ds b1
2771.ds rS
2772.aY
2773..
2774.\" NS Hf macro - source include header files.
2775.de Hf
2776.Pp
2777File:
2778.Pa \\$1
2779.Pp
2780.nr cF \\n(.f
2781.nr cZ \\n(.s
2782.ie t \{\
2783\&\\*(lI
2784.br
2785.ta +9n 18n 27n 36n 45n 54n 63n 72n
2786.\}
2787.el \{\
2788.ta +8n 16n 24n 32n 40n 48n 56n 64n 72n
2789.\}
2790.nf
2791.so \\$1
2792.fi
2793.ft \\n(cF
2794.fz \\n(cZ
2795.Pp
2796..
2797.\" NS An macro - author name (for AUTHOR section only)
2798.\" NS aN register
2799.nr aN 0
2800.de An
2801.ie \\n(aN==1 \{\
2802. br
2803.\}
2804.el \{\
2805. nr aN 1
2806.\}
2807\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
2808..
2809.\" NS Sf macro -defunct
2810.de Sf
2811.tm .Sf defunct, use prefix or Ns
2812..