Merge branch 'vendor/BZIP'
[dragonfly.git] / contrib / groff / tmac / e.tmac
1 .\"     @(#)e.tmac      2.31 (Berkeley) 5/21/88
2 .\"     Modified by James Clark for use with groff.
3 .\"
4 .\" Copyright (c) 1988 Regents of the University of California.
5 .\" All rights reserved.
6 .\"
7 .\" Redistribution and use in source and binary forms are permitted
8 .\" provided that this notice is preserved and that due credit is given
9 .\" to the University of California at Berkeley. The name of the University
10 .\" may not be used to endorse or promote products derived from this
11 .\" software without specific prior written permission. This software
12 .\" is provided ``as is'' without express or implied warranty.
13 .\"     %beginstrip%
14 .\"
15 .\"**********************************************************************
16 .\"*                                                                    *
17 .\"*    ******  - M E   N R O F F / T R O F F   M A C R O S  ******     *
18 .\"*                                                                    *
19 .\"*    Produced for your edification and enjoyment by:                 *
20 .\"*            Eric Allman                                             *
21 .\"*            Electronics Research Laboratory                         *
22 .\"*            U.C. Berkeley.                                          *
23 .\"*    current address:                                                *
24 .\"*            Britton-Lee, Inc.                                       *
25 .\"*            1919 Addison Street Suite 105                           *
26 .\"*            Berkeley, California  94704                             *
27 .\"*                                                                    *
28 .\"*    VERSION 2.31    First Release: 11 Sept 1978                     *
29 .\"*                                                                    *
30 .\"*    Documentation is available.                                     *
31 .\"*                                                                    *
32 .\"**********************************************************************
33 .\"
34 .\"     Code on .de commands:
35 .\"             ***     a user interface macro.
36 .\"             &&&     a user interface macro which is redefined
37 .\"                     when used to be the real thing.
38 .\"             $$$     a macro which may be redefined by the user
39 .\"                     to provide variant functions.
40 .\"             ---     an internal macro.
41 .\"
42 .
43 .do nr need_eo_h 0
44 .do nr need_eo_tl 0
45 .do nr need_tl 1
46 .
47 .do mso devtag.tmac
48 .
49 .if !\n(.g .ig
50 .de @R                  \" --- initialize number register to 0, if undefined
51 .if !r\\$1 .nr \\$1 0
52 ..
53 .
54 .\" --- check whether grohtml needs end of title/heading
55 .de @html_check_need_title
56 .do if (\\n[need_eo_tl] == 1) \
57 \{\
58 .       do nr need_eo_tl 0
59 .       do DEVTAG-EO-TL
60 .\}
61 .do if (\\n[need_tl] == 1) \
62 \{\
63 .       do DEVTAG-TL
64 .       do nr need_tl 0
65 .       do nr need_eo_tl 1
66 .\}
67 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
68 .do nr need_eo_h 0
69 ..
70 .
71 .de @check_need_title
72 ..
73 .
74 .ie '\*(.T'html' \
75 .       do als check_need_title @html_check_need_title
76 .el \
77 .       do als check_need_title @check_need_title
78 .
79 .@R pf
80 .if \n(pf .nx
81 .
82 .if !\n(.g .ig
83 .de @S                  \" --- initialize string/macro to empty, if undefined
84 .if !d\\$1 .ds \\$1 \" empty
85 ..
86 .
87 .@R @\"                 \" debugging level
88 .
89 .
90 .\"             *** INTERNAL GP MACROS ***
91 .
92 .
93 .de @C                  \" --- change ev's, taking info with us
94 .nr _S \\n(.s
95 .nr _V \\n(.v
96 .nr _F \\n(.f
97 .nr _J \\n(.j
98 .do ds _A \\n[.fam]
99 .nr _I \\n(.i
100 .ev \\$1
101 .ps \\n(_S
102 .vs \\n(_Vu
103 .ft \\n(_F
104 .ad \\n(_J
105 .do @fam \\*(_A
106 'in \\n(_Iu
107 .xl \\n($lu
108 .lt \\n($lu
109 .rr _S
110 .rr _V
111 .rr _F
112 .rr _I
113 .rr _J
114 .ls 1
115 'ce 0
116 ..
117 .
118 .de @D                  \" --- determine display type (Indent, Left, Center)
119 .ds |p "\\$3
120 .nr _d 0
121 .if "\\$2"C" \
122 .       nr _d 1
123 .if "\\$2"L" \
124 .       nr _d 2
125 .if "\\$2"I" \
126 .       nr _d 3
127 .if "\\$2"M" \
128 .       nr _d 4
129 .if !\\n(_d \
130 \{\
131 .       nr _d \\$1
132 .       ds |p "\\$2
133 .\}
134 .
135 ..
136 .
137 .de @z                  \" --- end macro
138 .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
139 .if !"\\n(.z"" \
140 \{\
141 .       tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
142 .       di
143 .       ex
144 .\}
145 .if \\n(?a \
146 .       bp                      \" force out final table
147 .ds bp
148 .ds @b\"                        \" don't start another page
149 .br
150 .if \n@>1 .tm << @z
151 ..
152 .
153 .
154 .\"             *** STANDARD HEADERS AND FOOTERS ***
155 .
156 .
157 .ie \n(.g .ds $* \\\\$*
158 .el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
159 .
160 .de he                  \" *** define header
161 .ie !\\n(.$ \
162 \{\
163 .       rm |4
164 .       rm |5
165 .\}
166 .el \
167 \{\
168 .       ds |4 "\*($*
169 .       ds |5 "\*($*
170 .\}
171 ..
172 .
173 .de eh                  \" *** define even header
174 .ie !\\n(.$ \
175 .       rm |4
176 .el \
177 .       ds |4 "\*($*
178 ..
179 .
180 .de oh                  \" *** define odd header
181 .ie !\\n(.$ \
182 .       rm |5
183 .el \
184 .       ds |5 "\*($*
185 ..
186 .
187 .de fo                  \" *** define footer
188 .ie !\\n(.$ \
189 \{\
190 .       rm |6
191 .       rm |7
192 .\}
193 .el \
194 \{\
195 .       ds |6 "\*($*
196 .       ds |7 "\*($*
197 .\}
198 ..
199 .
200 .de ef                  \" *** define even foot
201 .ie !\\n(.$ \
202 .       rm |6
203 .el \
204 .       ds |6 "\*($*
205 ..
206 .
207 .de of                  \" *** define odd footer
208 .ie !\\n(.$ \
209 .       rm |7
210 .el \
211 .       ds |7 "\*($*
212 ..
213 .
214 .de ep                  \" *** end page (must always be followed by a .bp)
215 .if \\n(nl>0 \
216 \{\
217 .       wh 0
218 .       rs
219 .       @b
220 .\}
221 ..
222 .
223 .
224 .\"             *** INTERNAL HEADER AND FOOTER MACROS ***
225 .
226 .
227 .de @h                  \" --- header
228 .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
229 .if (\\n(.i+\\n(.o)>=\\n(.l \
230 .       tm Line \\n(c. -- Offset + indent exceeds line length
231 .\" initialize a pile of junk
232 .nr ?h \\n(?H                   \" transfer "next page" to "this page"
233 .nr ?H 0
234 .nr ?c \\n(?C
235 .nr ?C 0
236 .rn |4 |0
237 .rn |5 |1
238 .rn |6 |2
239 .rn |7 |3
240 .nr _w 0                        \" reset max footnote width
241 .nr ?W 0                        \" no wide floats this page (yet)
242 .nr ?I 1
243 .\" begin actual header stuff
244 .ev 2
245 .rs
246 .if \\n(hm>0 \
247 .       if !'\*(.T'html' \
248 .               sp |\\n(hmu     \" move to header position
249 .@t $h\"                        \" output header title
250 .if \\n(tm<=0 \
251 .       nr tm \n(.Vu
252 .if !'\*(.T'html' \
253 .       sp |\\n(tmu             \" move to top of text
254 .ev
255 .mk _k                          \" for columned output
256 .if \\n(?n .nm 1                \" restore line numbering if n1 mode
257 .nr $c 1                        \" set first column
258 .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
259 .ie \\n(?s \
260 \{\
261 .       nr ?s 0
262 .       rs
263 '       @b
264 .\}
265 .el \
266 .       @n\"                    \" begin the column
267 .if \n@>2 .tm << @h
268 ..
269 .
270 .de @n                  \" --- new column or page
271 .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
272 .if \\n(bm<=0 \
273 .       nr bm \\n(.Vu
274 .if (\\n(_w<=\\n($l)&(\\n(?W=0) \
275 \{\
276 .       nr _b (\\n(ppp*\\n($vu)/200u    \" compute fudge factor (must be < 1P)
277 .       if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
278 .               nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
279 .       nr _b +\\n(bmu
280 .\}
281 .nr _B \\n(_bu
282 .ch @f
283 .wh -\\n(_bu @f
284 .nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
285 .if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
286 .nr ?f 0                        \" reset footnote flag
287 .if \\n(?o \
288 \{\
289 .       (f _\"                  \" reprocess footnotes which run off page
290 .       nf
291 .       |o
292 .       fi
293 .       )f
294 .       rm |o
295 .\}
296 .nr ?o 0
297 .if \\n(?T \
298 \{\
299 .       nr _i \\n(.i
300 .       in 0
301 .       |h\"                    \" output the table header
302 .       in \\n(_iu
303 .       rr _i
304 .       mk #T                   \" for tbl commands
305 .       ns
306 .\}
307 .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
308 \{\
309 .       nr ?a 0                 \" output floating keep
310 .       @k |t
311 .       if \\n(?w \
312 .               mk _k           \" don't overstrike wide keeps
313 .       nr ?w 0
314 .\}
315 .os
316 .$H\"                           \" special column header macro
317 .ns
318 ..
319 .
320 .de @f                  \" --- footer
321 .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
322 .if \n@>2 .nr VL \\n(.pu-\\n(nlu
323 .if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
324 .ec
325 .if \\n(?T \
326 \{\
327 .       nr T. 1                 \" for tbl commands (to output bottom line)
328 .       T# 1\"                  \" output the sides and bottom lines
329 .       br
330 .\}
331 .ev 2
332 .ce 0
333 .if \\n(?b \
334 \{\
335 .       nr ?b 0
336 .       @k |b\"                 \" output bottom of page tables
337 .\}
338 .if \\n(?f \
339 .       @o\"                    \" output footnote if present
340 .ie \\n($c<\\n($m \
341 .       @c\"                    \" handle new column
342 .el \
343 .       @e\"                    \" new page
344 .ev
345 .if \n@>2 .tm << @f
346 ..
347 .
348 .de @o                  \" --- output footnote
349 .nf
350 .ls 1
351 .in 0
352 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
353 .wh -\\n(_Bu @r
354 .|f
355 .fi
356 .if \n@>2 .tm @o triggered @r (?o) = \\n(?o
357 .if \\n(?o \
358 \{\
359 .       di                      \" just in case triggered @r
360 .       if \\n(dn=0 \
361 \{\
362 .               rm |o
363 .               nr ?o 0
364 .       \}
365 .       nr dn \\n(_D
366 .       rr _D
367 .\}
368 .rm |f
369 .ch @r
370 ..
371 .
372 .de @c                  \" --- new column
373 .if \n@>2 .tm   >> @c %=\\n%
374 .rs
375 .sp |\\n(_ku
376 .@O +\\n($lu+\\n($su
377 .nr $c +1
378 .@n
379 ..
380 .
381 .de @e                  \" --- end page
382 .if \n@>2 .tm   >> @e
383 .@O \\n(_ou
384 .rs
385 .sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u)   \" move to footer position
386 .@t $f\"                        \" output footer title
387 .nr ?h 0
388 .bp
389 ..
390 .
391 .de @t                  \" --- output header or footer title
392 .if !\\n(?h \
393 \{\
394 .       sz \\n(tp\"             \" set header/footer type fonts, etc.
395 .       @F \\n(tf
396 .       lt \\n(_Lu              \" make title span entire page
397 .       nf
398 .       \\$1
399 .       br
400 .\}
401 ..
402 .
403 .de $h                  \" $$$ print header
404 .ds |z
405 .if !\\n(?c \
406 \{\
407 .       if e .ds |z "\\*(|0
408 .       if o .ds |z "\\*(|1
409 .\}
410 .if !\(ts\\*(|z\(ts\(ts \
411 '       tl \\*(|z
412 .rm |z
413 ..
414 .
415 .de $f                  \" $$$ print footer
416 .ds |z
417 .if \\n(?c \
418 \{\
419 .       if e .ds |z "\\*(|0
420 .       if o .ds |z "\\*(|1
421 .\}
422 .if \(ts\\*(|z\(ts\(ts \
423 \{\
424 .       if e .ds |z "\\*(|2
425 .       if o .ds |z "\\*(|3
426 .\}
427 .if !\(ts\\*(|z\(ts\(ts \
428 '       tl \\*(|z
429 .rm |z
430 ..
431 .
432 .de @r                  \" --- reprocess overflow footnotes
433 .if \n@>3 .tm           >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
434 .di |o                          \" save overflow footnote
435 .nr ?o 1
436 .nr _D \\n(dn
437 .ns
438 ..
439 .
440 .
441 .\"             *** COMMANDS WITH VARIANT DEFINITIONS ***
442 .
443 .
444 .if !'\*(.T'html' .rn bp @b     \" --- begin page
445 .
446 .de bp                  \" *** begin new page (overrides columns)
447 .nr $c \\n($m                   \" force new page, not new column
448 .ie \\n(nl>0 \
449 .       @b \\$1
450 .el \
451 \{\
452 .       if \\n(.$>0 \
453 .               pn \\$1
454 .       if \\n(?I \
455 .               @h\"            \" 'spring' the header trap
456 .\}
457 .br
458 .wh 0 @h                        \" reset header
459 ..
460 .
461 .rn ll xl               \" *** special line length (local)
462 .de ll                  \" *** line length (global to environments)
463 .xl \\$1
464 .lt \\$1
465 .nr $l \\n(.l
466 .if (\\n($m<=1):(\\n($l>\\n(_L) \
467 .       nr _L \\n(.l
468 ..
469 .
470 .rn po @O               \" --- local page offset
471 .
472 .de po                  \" *** page offset
473 .@O \\$1
474 .nr _o \\n(.o
475 ..
476 .
477 .\" Redefine the fam request to set the family in
478 .\" environment 2 as well as the current environment.
479 .if !\n(.g .ig
480 .do rn fam @fam         \" --- set family in current environment
481 .do de fam              \" *** set font family in ev 2 and current ev
482 .do @fam \\$1
483 .ev 2
484 .do @fam \\$1
485 .ev
486 ..
487 .
488 .
489 .\"             *** MISCELLANEOUS ROFF COMMANDS ***
490 .
491 .
492 .de hx                  \" *** suppress headers and footers next page
493 .nr ?H 1
494 ..
495 .
496 .de ix                  \" *** indent, no break
497 'in \\$1
498 ..
499 .
500 .de bl                  \" *** contiguous blank lines
501 .br
502 .ne \\$1
503 .rs
504 .sp \\$1
505 ..
506 .
507 .de n1                  \" *** line numbering 1
508 .nm 1
509 .xl -\w'0000'u
510 .nr ?n 1
511 ..
512 .
513 .de n2                  \" *** line numbering 2
514 .nm \\$1
515 .ie \\n(.$ \
516 .       xl -\w'0000'u
517 .el \
518 .       xl \\n($lu
519 ..
520 .
521 .de pa                  \" *** new page
522 .bp \\$1
523 ..
524 .
525 .de ro                  \" *** roman page numbers
526 .af % i
527 ..
528 .
529 .de ar                  \" *** arabic page numbers
530 .af % 1
531 ..
532 .
533 .de m1                  \" *** position one space
534 .nr _0 \\n(hmu
535 .nr hm \\$1v
536 .nr tm +\\n(hmu-\\n(_0u
537 .rr _0
538 ..
539 .
540 .de m2                  \" *** position two space
541 .nr tm \\n(hmu+\\n(tpp+\\$1v
542 ..
543 .
544 .de m3                  \" *** position three space
545 .nr bm \\n(fmu+\\n(tpp+\\$1v
546 ..
547 .
548 .de m4                  \" *** position four space
549 .nr _0 \\n(fmu
550 .nr fm \\$1v
551 .nr bm +\\n(fmu-\\n(_0u
552 ..
553 .
554 .de sk                  \" *** leave a blank page (next page)
555 .if \\n(.$>0 \
556 .       tm Line \\n(c. -- I cannot skip multiple pages
557 .nr ?s 1
558 ..
559 .
560 .
561 .\"             *** MISCELLANEOUS USER SUPPORT COMMANDS ***
562 .
563 .
564 .if !\n(.g .ig
565 .de re                  \" *** reset tabs (TROFF defines 15 stops default)
566 .ta T 0.5i
567 ..
568 .
569 .if \n(.g .ig
570 .de re
571 .ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i
572 ..
573 .
574 .de ba                  \" *** set base indent
575 .ie \\n(.$ \
576 .       nr $i \\$1n
577 .el \
578 .       nr $i \\n(siu*\\n($0u
579 ..
580 .
581 .de hl                  \" *** draw horizontal line
582 .br
583 .if '\*(.T'html' \
584 \{\
585 .       HR
586 .       do return
587 .\}
588 .ie \n(.g .do nr _I \\n[.in]
589 .el .nr _I \\n(.i
590 \l'\\n(.lu-\\n(_Iu'
591 .sp
592 ..
593 .
594 .
595 .\"             *** PARAGRAPHING ***
596 .
597 .
598 .de pp                  \" *** paragraph
599 .lp \\n(piu
600 ..
601 .
602 .de lp                  \" *** left aligned paragraph
603 .@p
604 .if \\n(.$ \
605 .       ti +\\$1
606 .nr $p 0 1
607 ..
608 .
609 .de ip                  \" *** indented paragraph w/ optional tag
610 .if (\\n(ii>0)&(\\n(ii<1n) \
611 .       nr ii \\n(iin
612 .nr _0 \\n(ii
613 .if \\n(.$>1 \
614 .       nr _0 \\$2n
615 .@p \\n(_0u
616 .nr _I \\n(.iu
617 .in 0
618 .di |i
619 \&\\$1
620 .br
621 .di
622 .in \\n(_Iu
623 .ds |j \\*(|i\\
624 .ie \\w"\\*(|j" \
625 \{\
626 .       ti -\\n(_0u
627 .       ie \\w"\\*(|j">=\\n(_0 \
628 \{\
629 .               do DEVTAG-COL 1
630 \\*(|j
631 .               do DEVTAG-COL-NEXT 2
632 .               br
633 .       \}
634 .       el \
635 \{\
636 .               do DEVTAG-COL 1
637 \\*(|j\h'|\\n(_0u'\c
638 .               do DEVTAG-COL 2
639 .       \}
640 .\}
641 .el .do DEVTAG-COL 2
642 .rr _0
643 .rm |i |j
644 ..
645 .
646 .de np                  \" *** numbered paragraph
647 .\" use string comparison in case user has changed format of $p
648 .if '\\n($p'-1' \
649 .       nr $p 0                 \" reset number after .bu
650 .nr $p +1                       \" increment paragraph number
651 .@p \w'\0(000)\0'u
652 .ti -\w'\0(000)\0'u
653 \0(\\n($p)\h'|\w'\0(000)\0'u'\c
654 ..
655 .
656 .de bu                  \" *** bulleted paragraph
657 .br
658 .\" use string comparison in case user has changed format of $p
659 .if '\\n($p'-1' \
660 .       ns                      \" don't space between .bu paragraphs
661 .nr $p 0-1                      \" mark "bulleted paragraph" mode
662 .@p \w'\0\(bu\0'u
663 .ti -\w'\0\(bu\0'u
664 \0\(bu\0\c
665 ..
666 .
667 .de @p                  \" --- initialize for paragraph
668 .do check_need_title
669 .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
670 .in \\n($iu+\\n(pou
671 .if \\n(.$ \
672 .       in +\\$1n
673 .ce 0
674 .fi
675 .@F \\n(pf
676 .sz \\n(pp
677 .sp \\n(psu
678 .ne \\n(.Lv+\\n(.Vu
679 .ns
680 ..
681 .
682 .
683 .\"             *** SECTION HEADINGS ***
684 .
685 .
686 .de sh                  \" *** section heading
687 .fi
688 .do check_need_title
689 .if (\\n(si>0)&(\\n(si<1n) \
690 .       nr si \\n(sin
691 .if '\*(.T'html' .nr si 0
692 .ce 0
693 .if '\*(.T'html' \
694 \{\
695 .       do DEVTAG-SH \\$1
696 .       do nr need_eo_h 1
697 .\}
698 .@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
699 .if !"\\$2"_" \
700 \{\
701 .       ds |n \&\\$2
702 .       $p "\\*(|n" "\\*($n" \\n($0
703 .       $0 "\\*(|n" "\\*($n" \\n($0
704 .       rm |n
705 .\}
706 .nr $p 0 1                      \" reset .np count
707 ..
708 .
709 .de @d                  \" --- change section depth
710 .if !""\\$1" \
711 .       nr $0 \\$1
712 .if \\n($0&(\\n(.$>1) \
713 .       nr $\\n($0 \\$2
714 .ds $n \&\"
715 .ie \\n($0>=1 \
716 \{\
717 .       if '\\n($1'0' \
718 .               nr $1 1
719 .       if (\\n(.$>=3) .if !"\\$3"-" \
720 .               nr $1 \\$3
721 .       as $n \\n($1
722 .\}
723 .el \
724 .       nr $1 0
725 .ie \\n($0>=2 \
726 \{\
727 .       if '\\n($2'0' \
728 .               nr $2 1
729 .       if (\\n(.$>=4) .if !"\\$4"-" \
730 .               nr $2 \\$4
731 .       as $n .\\n($2
732 .\}
733 .el \
734 .       nr $2 0
735 .ie \\n($0>=3 \
736 \{\
737 .       if '\\n($3'0' \
738 .               nr $3 1
739 .       if (\\n(.$>=5) .if !"\\$5"-" \
740 .               nr $3 \\$5
741 .       as $n .\\n($3
742 .\}
743 .el \
744 .       nr $3 0
745 .ie \\n($0>=4 \
746 \{\
747 .       if '\\n($4'0' \
748 .               nr $4 1
749 .       if (\\n(.$>=6) .if !"\\$6"-" \
750 .               nr $4 \\$6
751 .       as $n .\\n($4
752 .\}
753 .el \
754 .       nr $4 0
755 .ie \\n($0>=5 \
756 \{\
757 .       if '\\n($5'0' \
758 .               nr $5 1
759 .       if (\\n(.$>=7) .if !"\\$7"-" \
760 .               nr $5 \\$7
761 .       as $n .\\n($5
762 .\}
763 .el \
764 .       nr $5 0
765 .ie \\n($0>=6 \
766 \{\
767 .       if '\\n($6'0' \
768 .               nr $6 1
769 .       if (\\n(.$>=8) .if !"\\$8"-" \
770 .               nr $6 \\$8
771 .       as $n .\\n($6
772 .\}
773 .el \
774 .       nr $6 0
775 ..
776 .
777 .de sx                  \" *** heading up, no increment (2.1.1 -> 2.1)
778 .ce 0
779 .ul 0
780 .nr _0 \\n($0-1
781 .if \\n(.$ .nr _0 +1
782 .if \\n(.$ .nr _0 \\$1
783 .@d \\n(_0
784 .rr _0
785 .$p "" "" \\n($0
786 .nr $p 0 1                      \" reset .np count
787 ..
788 .
789 .de uh                  \" *** unnumbered section heading
790 .$p "\\$1"
791 .$0 "\\$1"
792 ..
793 .
794 .de $p                  \" $$$ print section heading
795 .if (\\n(si>0)&(\\n(.$>2) \
796 .       nr $i \\$3*\\n(si
797 .in \\n($iu
798 .ie !"\\$1\\$2"" \
799 \{\
800 .       sp \\n(ssu              \" one of them is non-null
801 .       ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
802 .       \" exdent if \\$3 > 0
803 .       ie 0\\$3 \
804 .               ti -(\\n(siu-\\n(sou)
805 .       el \
806 .               ti +\\n(sou
807 .       @F \\n(sf
808 .       sz \\n(sp
809 .       if 0\\$3 \
810 .               $\\$3
811 .       if \w"\\$2">0 \\$2.
812 .       if \w"\\$1">0 \\$1\f1\ \ \&
813 .\}
814 .el \
815 .       sp \\n(psu
816 .@F \\n(pf
817 .sz \\n(pp
818 ..
819 .
820 .
821 .\"             *** COLUMNNED OUTPUT ***
822 .
823 .
824 .de 2c                  \" *** double columned output
825 .br
826 .if \\n($m>1 \
827 .       1c\"                    \" revert to 1c if already 2c
828 .nr $c 1
829 .nr $m 2
830 .if \\n(.$>1 \
831 .       nr $m \\$2
832 .if \\n(.$>0 \
833 .       nr $s \\$1n             \" param 1: column seperation
834 .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
835 .xl \\n($lu
836 .mk _k
837 .ns
838 ..
839 .
840 .de 1c                  \" *** single columned output
841 .br
842 .nr $c 1
843 .nr $m 1
844 .ll \\n(_Lu                     \" return to normal output
845 .sp |\\n(.hu
846 .@O \\n(_ou
847 ..
848 .
849 .de bc                  \" *** begin column
850 .sp 24i
851 ..
852 .
853 .
854 .\"             *** FLOATING TABLES AND NONFLOATING BLOCKS ***
855 .
856 .
857 .de (z                  \" *** begin floating keep
858 .if \n@>4 .tm >> (z, .z=\n(.z
859 .@D 4 \\$1 \\$2
860 .@(
861 ..
862 .
863 .de )z                  \" *** end floating keep
864 .if \n@>4 .tm >> )z, .z=\n(.z
865 .sp \\n(zsu
866 .@)
867 .if \n@>4 .tm -- )z << @), .z=\n(.z
868 .rr _0
869 .if !\\n(?b \
870 .       nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
871 .nr dl -\n(.H                   \" fudge factor necessary to make it work
872 .ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
873 \{\
874 .       nr ?a 1
875 .       if (\\n(dl>\\n($l)&(\\n($m>1) \
876 .               nr ?w 1         \" mark wider than one column (top)
877 .       ds |x |t
878 .\}
879 .el \
880 \{\
881 .       nr ?b 1
882 .       if (\\n(dl>\\n($l)&(\\n($m>1) \
883 .               nr ?W 1         \" mark wider than one column (bottom)
884 .       nr _b +\\n(dnu
885 .       \" avoid moving @f back past the current position
886 .       if \\n(.p-\\n(nl-\n(.V<\\n(_b \
887 .               nr _b \\n(.p-\\n(nl-\n(.V
888 .       ch @f -\\n(_bu
889 .       ds |x |b
890 .\}
891 .da \\*(|x                      \" copy to save macro
892 .nf
893 .ls 1
894 .nr ?k 1
895 .if \n@>4 .tm -- )z >> \\*(|x
896 \!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
897 .|k\"                           \" and the body
898 .ec
899 .if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
900 .nr ?k 0
901 .rm |k\"                        \" remove the temp macro
902 .da
903 .in 0
904 .ls 1
905 .xl \\n($lu
906 .ev
907 .if \n@>4 .tm << )z, .z=\\n(.z
908 ..
909 .
910 .de @k                  \" --- output floating keep
911 .if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
912 .ev 1
913 .nf
914 .ls 1
915 .in 0
916 .sp \\n(zsu
917 .\\$1
918 .ec
919 .br
920 .rm \\$1
921 .ev
922 ..
923 .
924 .de (t                  \" XXX temp ref to (z
925 .(z \\$1 \\$2
926 ..
927 .
928 .de )t                  \" XXX temp ref to )t
929 .)z \\$1 \\$2
930 ..
931 .
932 .de (b                  \" *** begin block
933 .br
934 .@D 3 \\$1 \\$2
935 .sp \\n(bsu
936 .@(
937 .if '\*(.T'html' .sp \\n(bsu
938 ..
939 .
940 .de )b                  \" *** end block
941 .br
942 .@)
943 .if (\\n(bt=0):(\\n(.t<\\n(bt) \
944 .       ne \\n(dnu              \" make it all on one page
945 .ls 1
946 .nf
947 .|k
948 .ec
949 .fi
950 .in 0
951 .xl \\n($lu
952 .ev
953 .rm |k
954 .sp \\n(bsu+\\n(.Lv-1v
955 ..
956 .
957 .de @(                  \" --- begin keep
958 .if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
959 .@M
960 .di |k
961 \!'rs
962 ..
963 .
964 .de @M                  \" --- set modes for display
965 .nr ?k 1
966 .@C 1
967 .@F \\n(df
968 .if \\n($R .@V
969 .vs \\n(.sp*\\n($Vu/100u
970 .nf
971 .if "\\*(|p"F" \
972 .       fi                      \" set fill mode if "F" parameter
973 .if \\n(_d=4 \
974 .       in 0
975 .if \\n(_d=3 \
976 \{\
977 .       in +\\n(biu
978 .       xl -\\n(biu
979 .\}
980 .if \\n(_d=1 \
981 .       ce 10000
982 ..
983 .
984 .de @)                  \" --- end keep
985 .br
986 .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
987 .nr ?k 0
988 .di
989 .in 0
990 .ce 0
991 ..
992 .
993 .de (c                  \" *** begin block centered text
994 .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
995 .di |c
996 ..
997 .
998 .de )c                  \" *** end block centered text
999 .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
1000 .br                             \" force out final line
1001 .di
1002 .if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
1003 .ev 1
1004 .ls 1
1005 .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
1006 .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
1007 .nf
1008 .|c
1009 .ec
1010 .in
1011 .ls
1012 .ev
1013 .rm |c
1014 ..
1015 .
1016 .
1017 .\"             *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
1018 .
1019 .
1020 .de (q                  \" *** begin block quote
1021 .br
1022 .@C 1
1023 .fi
1024 .sp \\n(qsu
1025 .in +\\n(qiu
1026 .xl -\\n(qiu
1027 .sz \\n(qp
1028 ..
1029 .
1030 .de )q                  \" *** end block quote
1031 .br
1032 .ev
1033 .sp \\n(qsu+\\n(.Lv-1v
1034 .nr ?k 0
1035 ..
1036 .
1037 .de (l                  \" *** begin list
1038 .br
1039 .sp \\n(bsu
1040 .@D 3 \\$1 \\$2
1041 .@M
1042 .if '\*(.T'html' .sp \\n(bsu
1043 ..
1044 .
1045 .de )l                  \" *** end list
1046 .br
1047 .ev
1048 .sp \\n(bsu+\\n(.Lv-1v
1049 .nr ?k 0
1050 ..
1051 .
1052 .
1053 .\"             *** PREPROCESSOR SUPPORT ***
1054 .
1055 .
1056 .\"
1057 .\"     EQN
1058 .\"
1059 .de EQ                  \" *** equation start
1060 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
1061 .do nr need_eo_h 0
1062 .ec
1063 .if "\*(.T"html" \
1064 \{\
1065 .       do nr e-EQ-ll \\n(.l
1066 .       ll 1000n
1067 .\}
1068 .do HTML-IMAGE
1069 .if !\\n(?e \
1070 \{\
1071 .       if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
1072 .       @D 1 "\\$1" "\\$2"
1073 .       @C 2
1074 .       di |e
1075 .\}
1076 .ls 1
1077 .in 0
1078 .nf
1079 ..
1080 .
1081 .de EN                  \" *** equation end
1082 .br
1083 .do HTML-IMAGE-END
1084 .if "\*(.T"html" \
1085 .       do ll \\n[e-EQ-ll]u
1086 .ie "\\$1"C" \
1087 \{\
1088 .       nr ?e 1
1089 .       sp \\n(esu
1090 .\}
1091 .el \
1092 \{\
1093 .       nr ?e 0
1094 .       di
1095 .       if \\n(dn \
1096 .               @q\"            \" actual equation output
1097 .       rm |e
1098 .       ev
1099 .\}
1100 ..
1101 .
1102 .de @q                  \" --- equation output
1103 .nr _Q \\n(dnu
1104 .ev
1105 .sp \\n(esu                     \" output rest of preceeding text
1106 .if !"\\n(.z"" \!.ne \\n(_Qu
1107 .ne \\n(_Qu+\n(.Vu              \" keep it on one page
1108 .@C 2\"                         \" .ev 2 may be jumbled from header
1109 .if \\n(_d=1 \
1110 .       in (\\n(.lu+\\n($iu-\\n(dlu)/2u
1111 .if \\n(_d=2 \
1112 .       in \\n($iu
1113 .if \\n(_d=3 \
1114 .       in \\n(biu+\\n($iu
1115 .if \\n(_d=4 \
1116 .       in 0
1117 .mk _q
1118 .if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
1119 .if !"\\*(|p"" \
1120 \{\
1121 .       rs
1122 .       sp (\\n(_Qu-\\n(.vu)/2u
1123 .       tl """\\*(|p"
1124 .       rt \\n(_qu
1125 .\}
1126 .|e
1127 .sp |\\n(_qu+\\n(_Qu
1128 .sp \\n(esu+\\n(.Lv-1v
1129 .rr _q
1130 .rr _Q
1131 ..
1132 .
1133 .\"
1134 .\"     TBL
1135 .\"
1136 .de TS                  \" *** table start
1137 .sp \\n(bsu
1138 .if "\*(.T"html" \
1139 \{\
1140 .       do nr e-TS-ll \\n(.l
1141 .       ll 1000n
1142 .\}
1143 .do HTML-IMAGE
1144 .@C 1
1145 .fi                             \" drop into fill mode for text boxes
1146 .if "\\$1"H" \
1147 \{\
1148 .       di |h                   \" save header part
1149 .       nr ?T 1
1150 .\}
1151 .ls 1
1152 .ch @f -(\\n(_bu+1v)            \" set pseudo-trap for bottom line
1153 .if \\n(.p-\\n(_b-1v<=\\n(nl \
1154 .       ch @f \\n(nlu+\n(.Vu
1155 ..
1156 .
1157 .de TH                  \" *** end header part of table
1158 .nr T. 0
1159 .T# 0
1160 .di
1161 .nr _T \\n(?T
1162 .nr ?T 0
1163 .ne \\n(dnu+1v
1164 .nr ?T \\n(_T
1165 .nr _i \\n(.i
1166 .in 0
1167 .|h\"                           \" put in the initial header
1168 .in \\n(_iu
1169 .rr _i
1170 .mk #T
1171 ..
1172 .
1173 .de TE                  \" *** table end
1174 .nr ?T 0
1175 .ch @f -\\n(_bu                 \" reset pseudo-trap
1176 .if \\n(.p-\\n(_b<=\\n(nl \
1177 .       ch @f \\n(nlu+\n(.Vu
1178 .ev
1179 .do HTML-IMAGE-END
1180 .if "\*(.T"html" \
1181 .       do ll \\n[e-TS-ll]u
1182 .sp \\n(bsu+\\n(.Lv-1v
1183 .re
1184 ..
1185 .
1186 .de T&
1187 ..
1188 .
1189 .\"
1190 .\"     REFER
1191 .\"
1192 .de ][                          \" *** refer output
1193 .if \\$1>5 .tm Bad arg to []
1194 .[\\$1
1195 ..
1196 .
1197 .de [0                          \" --- other
1198 .(f
1199 .ip "\\*([F.\0"
1200 .if !"\\*([A"" \\*([A,
1201 .if !"\\*([T"" \\f2\\*([T\\f1\c
1202 .if !"\\*([T"" .if !"\\*([O"" ,\ \"
1203 .ie !"\\*([O"" \\*([O
1204 .el .if !"\\*([T"" \&.
1205 .if !"\\*([D"" \\*([D.
1206 .@p
1207 .)f
1208 ..
1209 .
1210 .de [1                          \" --- journal article
1211 .(f
1212 .ip "\\*([F.\0"
1213 \\*([A,
1214 .if !"\\*([T"" \\*(lq\\*([T,\\*(rq
1215 .if "\\*([V"" \\f2\\*([J\\f1,
1216 .if !"\\*([V"" \\f2\\*([J\\f1
1217 .if !"\\*([V"" \\f3\\*([V\\f1\c
1218 .if !"\\*([N"" (\\*([N)\c
1219 .if !"\\*([P"" \
1220 \{\
1221 .       ie \\n([P>0 \ pp.\&
1222 .       el \ p.\&
1223 \\*([P
1224 .\}
1225 .if !"\\*([I"" .if "\\*([R"" \\*([I,
1226 (\\*([D).
1227 .if !"\\*([O"" \\*([O
1228 .)f
1229 ..
1230 .
1231 .de [2                          \" --- book
1232 .(f
1233 .ip "\\*([F.\0"
1234 \\*([A, \\f2\\*([T,\\f1
1235 \\*([I\c
1236 .if !"\\*([C"" , \\*([C\c
1237  (\\*([D).
1238 .if !"\\*([G"" Gov't. ordering no. \\*([G
1239 .if !"\\*([O"" \\*([O
1240 .)f
1241 ..
1242 .
1243 .de [3                          \" --- article in book
1244 .(f
1245 .ip "\\*([F.\0"
1246 \\*([A, \\*(lq\\*([T,\\*(rq
1247 .if !"\\*([P"" pp. \\*([P
1248 in \\f2\\*([B\\f1, \c
1249 .if !"\\*([E"" ed. \\*([E, \c
1250 .if !"\\*([I"" \\*([I\c
1251 .if !"\\*([C"" , \\*([C\c
1252  (\\*([D).
1253 .if !"\\*([O"" \\*([O
1254 .)f
1255 ..
1256 .
1257 .de [4                          \" --- report
1258 .(f
1259 .ip "\\*([F.\0"
1260 \\*([A, \\*(lq\\*([T,\\*(rq
1261 \\*([R\c
1262 .if !"\\*([G"" \& (\\*([G)\c
1263 .if !"\\*([I"" , \\*([I\c
1264 .if !"\\*([C"" , \\*([C\c
1265  (\\*([D).
1266 .if !"\\*([O"" \\*([O
1267 .)f
1268 ..
1269 .
1270 .de [5                          \" --- tm style
1271 .(f
1272 .ip "\\*([F.\0"
1273 \\*([A, \\f2\\*([T\\f1,
1274 .ie \\n(TN \\*([M.
1275 .el Bell Laboratories internal memorandum (\\*([D).
1276 .)f
1277 ..
1278 .
1279 .de ]<
1280 .$p References
1281 .lp
1282 .rm (f )f
1283 ..
1284 .
1285 .de ]>
1286 .sp
1287 ..
1288 .
1289 .de ]-
1290 .rm [V [P [A [T [N [C [B [O [R [I [E [D
1291 ..
1292 .
1293 .ie \n(.V<1v \
1294 \{\
1295 .       ds [. \s-2\v'-.4m'\f1
1296 .       ds .] \v'.4m'\s+2\fP
1297 .\}
1298 .el \
1299 \{\
1300 .       ds [. " [
1301 .       ds .] ]
1302 .\}
1303 .
1304 .\"
1305 .\"     IDEAL
1306 .\"
1307 .de IS                  \" *** start ideal picture
1308 .nr g7 \\n(.u
1309 .ls 1
1310 ..
1311 .
1312 .de IF
1313 .if \\n(g7 .fi
1314 .ls
1315 ..
1316 .
1317 .de IE                  \" *** end ideal picture
1318 .if \\n(g7 .fi
1319 .ls
1320 ..
1321 .
1322 .\"
1323 .\"     PIC
1324 .\"
1325 .de PS          \" *** start picture: $1=height, $2=width in units or inches
1326 .sp 0.3
1327 .do HTML-IMAGE
1328 .nr g7 \\$2
1329 .in (u;\\n(.l-\\n(g7>?0/2)
1330 .ne \\$1u
1331 .nr g7 \\n(.u
1332 .ls 1
1333 ..
1334 .
1335 .de PE                  \" *** end picture
1336 .ls
1337 .in
1338 .if \\n(g7 .fi
1339 .do HTML-IMAGE-END
1340 .sp .6
1341 ..
1342 .
1343 .\"
1344 .\"     GREMLIN
1345 .\"
1346 .de GS                  \" *** start gremlin picture
1347 .ie '\*(.T'html' \
1348 \{\
1349 .       ie "\\$1"L" .do HTML-IMAGE-LEFT
1350 .       el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
1351 .       el .do HTML-IMAGE
1352 .\}
1353 .el \
1354 \{\
1355 .       nr g7 (\\n(.lu-\\n(g1u)/2u
1356 .       if "\\$1"L" .nr g7 \\n(.iu
1357 .       if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
1358 .       in \\n(g7u
1359 .       nr g7 \\n(.u
1360 .       ls 1
1361 .       nf
1362 .       ne \\n(g2u
1363 .\}
1364 ..
1365 .
1366 .de GE                  \" *** end gremlin picture
1367 .ie '\*(.T'html' .do HTML-IMAGE-END
1368 .el \
1369 \{\
1370 .       GF
1371 .       sp .6
1372 .\}
1373 ..
1374 .
1375 .de GF                  \" *** finish gremlin picture; stay at top
1376 .ls
1377 .in
1378 .if \\n(g7 .fi
1379 ..
1380 .
1381 .
1382 .\"             *** FONT AIDS ***
1383 .
1384 .
1385 .de sz                  \" *** set point size and vertical spacing
1386 .ps \\$1
1387 .if \\n($r .@v
1388 .vs \\n(.sp*\\n($vu/100u        \" default vs at pointsize + 20%
1389 ..
1390 .
1391 .de @v                  \" --- possibly set $v from $r
1392 .if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
1393 ..
1394 .
1395 .de @V                  \" --- possibly set $V from $R
1396 .if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
1397 ..
1398 .
1399 .de @E                  \" --- store in _F argument to \f for restoring font
1400 .ie \\n(.f<10 \
1401 .       ds _F \\n(.f
1402 .el \
1403 \{\
1404 .       ie \\n(.f<100&\n(.g \
1405 .               ds _F (\\n(.f
1406 .       el \
1407 .               ds _F P
1408 .\}
1409 ..
1410 .
1411 .de r                   \" *** enter roman font
1412 .do check_need_title
1413 .@E
1414 .ft 1
1415 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1416 .do check_need_title
1417 ..
1418 .
1419 .de i                   \" *** enter italic
1420 .do check_need_title
1421 .@E
1422 .ft 2
1423 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1424 .do check_need_title
1425 ..
1426 .
1427 .de b                   \" *** enter boldface
1428 .do check_need_title
1429 .@E
1430 .ft 3
1431 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1432 .do check_need_title
1433 ..
1434 .
1435 .de rb                  \" *** enter real boldface
1436 .do check_need_title
1437 .@E
1438 .ft 3
1439 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1440 .do check_need_title
1441 ..
1442 .
1443 .de bi                  \" *** enter bold italic
1444 .do check_need_title
1445 .@E
1446 .ft 4
1447 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1448 .do check_need_title
1449 ..
1450 .
1451 .de u                   \" *** enter underlined word
1452 \&\\$1\l'|0\(ul'\\$2
1453 ..
1454 .
1455 .\" a better version of u
1456 .if !\n(.g .ig
1457 .de u
1458 \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
1459 ..
1460 .
1461 .de q                   \" *** enter quoted word
1462 \&\\*(lq\\$1\\*(rq\\$2
1463 ..
1464 .
1465 .de bx                  \" *** enter boxed word
1466 .ie '\*(.T'html' \\$1\\$2
1467 .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
1468 ..
1469 .
1470 .de sm                  \" *** print in smaller font
1471 \s-1\\$1\\s0\\$2
1472 ..
1473 .
1474 .de @F                  \" --- change font (0 -> no change)
1475 .nr ~ \\$1
1476 .if \\n~>0 \
1477 .       ft \\n~
1478 .rr ~
1479 ..
1480 .
1481 .
1482 .\"             *** FOOTNOTING ***
1483 .
1484 .
1485 .de (f                  \" *** begin footnote
1486 .ec
1487 .if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
1488 .ie "\\n(.z"" \
1489 \{\
1490 .       nr _D \\n(dn
1491 .       nr _0 1v+\\n(nlu
1492 .       ev 2
1493 .       da |f
1494 .       in 0
1495 .       xl \\n($lu-\\n(fuu
1496 .       @F \\n(ff
1497 .       sz \\n(fp
1498 .       vs \\n(.sp*\\n($Vu/100u
1499 .       if !\\n(?f \
1500 \{\
1501 .               nr _b +1v       \" allow space for $s
1502 .               $s
1503 .       \}
1504 .       br
1505 .       if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
1506 \{\
1507 .               da\"            \" won't fit on page at all
1508 .               bc
1509 .               if !\\n(?f \
1510 .                       rm |f
1511 .               da |f
1512 .\" next five lines could be dropped if headers had their own environment
1513 .               in 0            \" reset everything from .bc
1514 .               xl \\n($lu-\\n(fuu
1515 .               @F \\n(ff
1516 .               sz \\n(fp
1517 .               vs \\n(.sp*\\n($Vu/100u
1518 .               if !\\n(?f \
1519 .                       $s
1520 .               br
1521 .       \}
1522 .       rr _0
1523 .       sp \\n(fsu
1524 .       nr ?f 1
1525 .       fi
1526 .       if !"\\$1"_" \
1527 .               ti \\n(fiu
1528 .       if \n@>2 .tm    << (f $f=\\n($f
1529 .\}
1530 .el \
1531 \{\
1532 .       ev 2
1533 .       in 0
1534 .       xl \\n($lu-\\n(fuu
1535 .       @F \\n(ff
1536 .       sz \\n(fp
1537 .       vs \\n(.sp*\\n($Vu/100u
1538 .       fi
1539 \!.(f \\$1
1540 \!.@N
1541 .\}
1542 ..
1543 .
1544 .de @N                  \" --- set no fill mode in the top-level diversion
1545 .ie "\\n(.z"" .nf
1546 .el \!.@N
1547 ..
1548 .
1549 .de )f                  \" *** end footnote
1550 .ie "\\n(.z"|f" \
1551 \{\
1552 .       if \\n* \
1553 .               nr $f +1
1554 .       ds * \\*{\\n($f\\*}\k*
1555 .       nr * 0
1556 .       in 0
1557 .       da
1558 .       ev
1559 .       if \\n(_w<\\n(dl \
1560 .               nr _w \\n(dl    \" compute maximum fn width
1561 .       nr _b +\\n(dn
1562 .       ch @f -\\n(_bu
1563 .       if \\n(.p-\\n(_b<=\\n(nl \
1564 .               ch @f \\n(nlu+\n(.Vu
1565 .       nr dn \\n(_D
1566 .       rr _D
1567 .\}
1568 .el \
1569 \{\
1570 .       br
1571 \!.)f
1572 .       ev
1573 .\}
1574 ..
1575 .
1576 .@R ff
1577 .if \n(ff<=0 \
1578 .       nr ff 1                 \" footnote font: Times Roman
1579 .@R fp
1580 .if \n(fp<=0 \
1581 .       nr fp 8                 \" footnote pointsize
1582 .
1583 .de $s                  \" $$$ footnote separator
1584 \l'2i'
1585 ..
1586 .
1587 .
1588 .\"             *** DELAYED TEXT ***
1589 .
1590 .
1591 .de (d                  \" *** begin delayed text
1592 .am |d )d
1593 .sp \\n(bsu
1594 ..
1595 .
1596 .de )d                  \" *** end delayed text
1597 .if \\n# \
1598 .       nr $d +1
1599 .ds # [\\n($d]\k#
1600 .rr #
1601 ..
1602 .
1603 .de pd                  \" *** print delayed text
1604 .|d
1605 .rm |d
1606 .nr $d 1 1
1607 .ds # [1]\k#
1608 ..
1609 .
1610 .
1611 .\"             *** INDEXES (TABLE OF CONTENTS) ***
1612 .
1613 .
1614 .nr _x 0 1
1615 .do nr _xn 0
1616 .af _x a
1617 .
1618 .de (x                  \" *** begin index entry
1619 .if \n@>4 .tm >> (x, .z=\\n(.z
1620 .ds |X x
1621 .if \\n(.$>0 \
1622 .       ds |X \\$1
1623 .ie "\\n(.z"" \
1624 .       nr _z 0
1625 .el \
1626 .       nr _z 1
1627 .@\\n(_z
1628 ..
1629 .
1630 .de @0                  \" --- finish (x if no current diversion
1631 .am %\\*(|X )x
1632 .sp \\n(xsu
1633 .ti -\\n(piu
1634 ..
1635 .
1636 .de @1                  \" --- finish (x if current diversion
1637 .if "\\n(_x"z" .nr _x 0
1638 .de =\\n+(_x )x
1639 ..
1640 .
1641 .de )x                  \" *** end index entry
1642 .if \n@>4 .tm >> )x, .z=\\n(.z
1643 .ie "\\n(.z"" \
1644 \{\
1645 .       ds |x \\n%
1646 .       if \\n(.$>0 \
1647 .               ds |x \\$1
1648 .       if "\\*(|x"_" \
1649 .               ig ..
1650 .       am %\\*(|X ..
1651 .       if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
1652 .               ti +\\n(xuu
1653 \\\\a\\\\t\\$2\\*(|x
1654 ...
1655 .       rm |x
1656 .       rm |X
1657 .\}
1658 .el \
1659 \{\
1660 \!.(x \\*(|X
1661 \!\\\\*(=\\n(_x\\\\
1662 \!.)x \\$1 \\$2
1663 \!.rm =\\n(_x
1664 .\}
1665 ..
1666 .
1667 .de xp                  \" *** print the index
1668 .br
1669 .@C 2
1670 .ls 1
1671 .vs \\n(.sp*\\n($Vu/100u
1672 .fi
1673 .in +\\n(piu
1674 .ds |X x
1675 .if \\n(.$>0 \
1676 .       ds |X \\$1
1677 .xl -(\\n(xuu+\w'...'u)
1678 .di |x
1679 .%\\*(|X
1680 .br
1681 .di
1682 .rm %\\*(|X
1683 .xl \\n($lu
1684 .rm |X
1685 .ev
1686 .nf
1687 .in 0
1688 .ta \\n(.lu-\\n(xuuR \\n(.luR
1689 .|x
1690 .fi
1691 .in
1692 .rm |x
1693 ..
1694 .
1695 .
1696 .\"             *** HTML VERSIONS OF .x(, .x), AND .xp ***
1697 .
1698 .
1699 .de (x-html    \" --- create TAG and divert text
1700 .nr _x +1
1701 .do nr _xn +1
1702 .do TAG "_x\\n[_x]
1703 .br
1704 .do di |x\\n[_xn]
1705 .br
1706 ..
1707 .
1708 .de )x-html    \" --- end diversion
1709 .br
1710 .di
1711 ..
1712 .
1713 .de xp-html    \" --- create list of links
1714 .do nr _xx 1
1715 .br
1716 .do ev xp-html-ev
1717 .sp
1718 .do ULS
1719 .do while \\n[_xx]<=\\n[_xn] \
1720 \{\
1721 .       br
1722 .       do unformat |x\\n[_xx]
1723 .       do di xp-html-div
1724 .       br
1725 .       ll 100i
1726 .       fi
1727 .       do |x\\n[_xx]
1728 .       br
1729 .       di
1730 .       do asciify xp-html-div
1731 .       do rm xp-html-as
1732 .       do as xp-html-as #
1733 .       do as xp-html-as _x\\n[_xx]
1734 .       ll
1735 .       LI
1736 .       do URL \\*[xp-html-as] "\\*[xp-html-div]
1737 .       do rm xp-html-as
1738 .       do nr _xx +1
1739 .\}
1740 .do ULE
1741 .sp
1742 .ev
1743 ..
1744 .
1745 .if '\*(.T'html' \
1746 \{\
1747 .       rm (x
1748 .       do als (x (x-html
1749 .       rm )x
1750 .       do als )x )x-html
1751 .       rm xp
1752 .       do als xp xp-html
1753 .\}
1754 .
1755 .
1756 .\"             *** CHAPTERS AND TITLES ***
1757 .
1758 .
1759 .de +c                          \" *** begin chapter
1760 .ep\"                           \" force out footnotes
1761 .if \\n(?o:\\n(?a \
1762 \{\
1763 .       bp                      \" force out a table or more footnote
1764 .       rs
1765 .       ep
1766 .\}
1767 .nr ?C 1
1768 .nr $f 1 1
1769 .ds * \\*{1\\*}\k*
1770 .if \\n(?R \
1771 .       pn 1
1772 .bp
1773 .in \\n($iu                     \" reset the indent
1774 .rs
1775 .ie \\n(.$ \
1776 .       $c "\\$1"
1777 .el \
1778 .       sp 3
1779 ..
1780 .
1781 .de ++                  \" *** declare chapter type
1782 .nr _0 0
1783 .if "\\$1"C" \
1784 .       nr _0 1                 \" chapter
1785 .if "\\$1"RC" \
1786 .       nr _0 11                \" renumbered chapter
1787 .if "\\$1"A" \
1788 .       nr _0 2                 \" appendix
1789 .if "\\$1"RA" \
1790 .       nr _0 12                \" renumbered appendix
1791 .if "\\$1"P" \
1792 .       nr _0 3                 \" preliminary material
1793 .if "\\$1"B" \
1794 .       nr _0 4                 \" bibliographic material
1795 .if "\\$1"AB" \
1796 .       nr _0 5                 \" abstract
1797 .if \\n(_0=0 \
1798 .       tm Line \\n(c. -- Bad mode to .++
1799 .nr ?R 0
1800 .if \\n(_0>10 \
1801 .\{
1802 .       nr ?R 1
1803 .       nr _0 -10
1804 .\}
1805 .nr ch 0 1
1806 .if (\\n(_0=3):(\\n(_0=5) \
1807 .       pn 1                    \" must do before .ep
1808 .if !\\n(_0=\\n(_M .if \\n(_M=3 \
1809 .       pn 1                    \" must do before .ep
1810 .ep\"                           \" end page for correct page number types
1811 .if \\n(_0=1 \
1812 \{\
1813 .       af ch 1
1814 .       af % 1
1815 .\}
1816 .if \\n(_0=2 \
1817 \{\
1818 .       af ch A
1819 .       af % 1
1820 .\}
1821 .if \\n(_0=3 \
1822 .       af % i
1823 .if \\n(_0=4 \
1824 .       af % 1
1825 .if \\n(_0=5 \
1826 .       af % 1
1827 .if \\n(.$>1 \
1828 .       he \\$2
1829 .nr _M \\n(_0
1830 .rr _0
1831 ..
1832 .
1833 .de $c                  \" $$$ print chapter title
1834 .sz 12
1835 .ft 3
1836 .ce 1000
1837 .if \\n(_M<3 \
1838 .       nr ch +1
1839 .ie \\n(_M=1 CHAPTER\ \ \\n(ch
1840 .el .if \\n(_M=2 APPENDIX\ \ \\n(ch
1841 .if \w"\\$1" .sp 3-\\n(.L
1842 .if \w"\\$1" \\$1
1843 .if (\\n(_M<3):(\w"\\$1") \
1844 .       sp 4-\\n(.L
1845 .ce 0
1846 .ft
1847 .sz
1848 .ie \\n(_M=1 \
1849 .       $C Chapter \\n(ch "\\$1"
1850 .el .if \\n(_M=2 \
1851 .       $C Appendix \\n(ch "\\$1"
1852 ..
1853 .
1854 .de tp                  \" *** title page
1855 .hx
1856 .bp
1857 .br
1858 .rs
1859 .pn \\n%
1860 ..
1861 .
1862 .\"             *** DATES ***
1863 .if \n(mo=1 .ds mo January
1864 .if \n(mo=2 .ds mo February
1865 .if \n(mo=3 .ds mo March
1866 .if \n(mo=4 .ds mo April
1867 .if \n(mo=5 .ds mo May
1868 .if \n(mo=6 .ds mo June
1869 .if \n(mo=7 .ds mo July
1870 .if \n(mo=8 .ds mo August
1871 .if \n(mo=9 .ds mo September
1872 .if \n(mo=10 .ds mo October
1873 .if \n(mo=11 .ds mo November
1874 .if \n(mo=12 .ds mo December
1875 .if \n(dw=1 .ds dw Sunday
1876 .if \n(dw=2 .ds dw Monday
1877 .if \n(dw=3 .ds dw Tuesday
1878 .if \n(dw=4 .ds dw Wednesday
1879 .if \n(dw=5 .ds dw Thursday
1880 .if \n(dw=6 .ds dw Friday
1881 .if \n(dw=7 .ds dw Saturday
1882 .nr y2 \n(yr%100
1883 .af y2 00
1884 .nr y4 \n(yr+1900
1885 .ds td \*(mo \n(dy, \n(y4
1886 .
1887 .
1888 .\"             *** PARAMETRIC INITIALIZATIONS ***
1889 .
1890 .
1891 .rr x
1892 .nr $v \n(.v00+\n(.sp-1/\n(.sp  \" vs as percentage of ps for .sz request
1893 .nr $V \n($v                    \" same for displays & footnotes
1894 .nr hm 4v                       \" header margin
1895 .nr tm 7v                       \" top margin
1896 .nr bm 6v                       \" bottom margin
1897 .nr fm 3v                       \" footer margin
1898 .nr tf 3                        \" title font: (real) Times Bold
1899 .nr tp 10                       \" title point size
1900 .hy 14
1901 .nr bi 4m                       \" indent for blocks
1902 .nr pi 5n                       \" indent for paragraphs
1903 .nr pf 1                        \" normal text font
1904 .nr pp 10                       \" normal text point size
1905 .nr qi 4n                       \" indent for quotes
1906 .nr qp -1                       \" down one point
1907 .nr ii 5n                       \" indent for .ip's and .np's
1908 .nr $m 1                        \" max number of columns
1909 .nr $s 4n                       \" column separation
1910 .nr sf 3                        \" section font -- Times Bold
1911 .nr sp 10                       \" section title pointsize
1912 .nr ss 12p                      \" section prespacing
1913 .nr si 0                        \" section indent
1914 .
1915 .
1916 .\"             *** OTHER INITIALIZATION ***
1917 .
1918 .
1919 .\" GNU pic sets this register to 1, to indicate that \x should not be used.
1920 .@R 0x
1921 .ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
1922 .ds } \s0\v'0.4m'
1923 .\" for compatibility with traditional -me
1924 .\" (the first will work only in compatibility mode)
1925 .ds [ \*{
1926 .ds ] \*}
1927 .ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
1928 .ds > \s0\v'-0.4m'
1929 .ds - \(em
1930 .\" Avoid warnings from groff -ww.
1931 .@S |0
1932 .@S |1
1933 .@S |2
1934 .@S |3
1935 .@S $H
1936 .@S $0
1937 .@S $1
1938 .@S $2
1939 .@S $3
1940 .@S $4
1941 .@S $5
1942 .@S $6
1943 .@S $7
1944 .@S $8
1945 .@S $9
1946 .@S ..
1947 .
1948 .@R po\"                        \" simulated page offset
1949 .@R $0\"                        \" section depth
1950 .@R $i\"                        \" paragraph base indent
1951 .@R $p\"                        \" numbered paragraph number
1952 .@R $r\"                        \" ratio of vs to ps (may override $v)
1953 .@R $R\"                        \" same for displays (may override $V)
1954 .@R df\"                        \" display font: same as surrounding text
1955 .@R so\"                        \" additional section title offset
1956 .@R fu\"                        \" footnote undent
1957 .@R bt\"                        \" block keep threshold
1958 .@R *\"                         \" has \** been referenced?
1959 .@R ?a\"                        \" pending floating keep at page top?
1960 .@R ?b\"                        \" pending floating keep at page bottom?
1961 .@R ?C\"                        \" at chapter header?
1962 .@R ?e\"                        \" in equation?
1963 .@R ?H\"                        \" suppress headers and footers next page?
1964 .@R ?I\"                        \" has the header trap been sprung?
1965 .@R ?n\"                        \" n1 mode?
1966 .@R ?o\"                        \" footnote overflow?
1967 .@R ?R\"                        \" renumbered chapter?
1968 .@R ?s\"                        \" skip next page?
1969 .@R ?T\"                        \" inside .TS H?
1970 .@R ?W\"                        \" wide floating keep at page bottom?
1971 .@R ?w\"                        \" wide floating keep at page top?
1972 .
1973 .nr fi 0.3i
1974 .nr _o \n(.o
1975 .nr $b 3                        \" bold
1976 .nr ps 0.35v
1977 .if \n(ps<\n(.V .nr ps \n(.V
1978 .nr bs \n(ps                    \" block pre/post spacing
1979 .nr qs \n(ps                    \" quote pre/post spacing
1980 .nr zs 1v                       \" float-block pre/postspacing
1981 .nr xs 0.2v                     \" index prespacing
1982 .nr xu 0.5i                     \" index undent
1983 .nr fs 0.2v                     \" footnote prespacing
1984 .nr es 0.5v                     \" equation pre/postspacing
1985 .if \n(es<\n(.V .nr es \n(.V
1986 .wh 0 @h                        \" set header
1987 .nr $l \n(.lu                   \" line length
1988 .nr _L \n(.lu                   \" line length of page
1989 .nr $c 1                        \" current column number
1990 .nr $f 1 1                      \" footnote number
1991 .ds * \*{1\*}\k*\"              \" footnote "name"
1992 .nr $d 1 1                      \" delayed text number
1993 .ds # [1]\k#\"                  \" delayed text "name"
1994 .nr _M 1                        \" chapter mode is chapter
1995 .ds lq \(lq\"                   \" left quote
1996 .ds rq \(rq\"                   \" right quote
1997 .em @z
1998 .
1999 .
2000 .\"             *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
2001 .
2002 .
2003 .ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
2004 .ds #v 0.6m
2005 .
2006 .\"                     \" accents
2007 .ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
2008 .ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
2009 .
2010 .\"                     \" umlaut
2011 .ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
2012 .
2013 .\"                     \" circumflex and tilde
2014 .ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
2015 .ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
2016 .
2017 .\"                     \" cedilla and czech
2018 .ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
2019 .ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
2020 .
2021 .\"                     \" Norwegian A or angstrom
2022 .ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
2023 .
2024 .\"                     \" there exists, for all
2025 .ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m'
2026 .ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m'
2027 .rm #h #v
2028 .ll 6.0i
2029 .lt 6.0i
2030 .
2031 .de @U
2032 .tm The \\$1 macro has been removed from this version of the -me macros.
2033 ..
2034 .
2035 .de lo
2036 .@U lo
2037 ..
2038 .
2039 .de th
2040 .@U th
2041 ..
2042 .
2043 .de ac
2044 .@U ac
2045 ..
2046 .
2047 .\" EOF