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