tmac/mdoc-syms: add a couple of entries (Anthony J. Bentley)..
[s-roff.git] / tmac / e.tmac
blobc31eb4892a64413ad8c9c5cf9debc0a5526d2875
1 .\"     @(#)e.tmac      2.31 (Berkeley) 5/21/88
2 .\"     Modified by James Clark for use with groff.
3 .\" Adapted to S-roff by Steffen (Daode) Nurpmeso <steffen@sdaoden.eu>.
4 .\"
5 .\" Copyright (c) 1988 Regents of the University of California.
6 .\" All rights reserved.
7 .\"
8 .\" Redistribution and use in source and binary forms are permitted
9 .\" provided that this notice is preserved and that due credit is given
10 .\" to the University of California at Berkeley. The name of the University
11 .\" may not be used to endorse or promote products derived from this
12 .\" software without specific prior written permission. This software
13 .\" is provided ``as is'' without express or implied warranty.
14 .\"     %beginstrip%
15 .\"
16 .\"**********************************************************************
17 .\"*                                                                    *
18 .\"*    ******  - M E   N R O F F / T R O F F   M A C R O S  ******     *
19 .\"*                                                                    *
20 .\"*    Produced for your edification and enjoyment by:                 *
21 .\"*            Eric Allman                                             *
22 .\"*            Electronics Research Laboratory                         *
23 .\"*            U.C. Berkeley.                                          *
24 .\"*    current address:                                                *
25 .\"*            Britton-Lee, Inc.                                       *
26 .\"*            1919 Addison Street Suite 105                           *
27 .\"*            Berkeley, California  94704                             *
28 .\"*                                                                    *
29 .\"*    VERSION 2.31    First Release: 11 Sept 1978                     *
30 .\"*                                                                    *
31 .\"*    Documentation is available.                                     *
32 .\"*                                                                    *
33 .\"**********************************************************************
34 .\"
35 .\"     Code on .de commands:
36 .\"             ***     a user interface macro.
37 .\"             &&&     a user interface macro which is redefined
38 .\"                     when used to be the real thing.
39 .\"             $$$     a macro which may be redefined by the user
40 .\"                     to provide variant functions.
41 .\"             ---     an internal macro.
42 .\"
44 .do nr need_eo_h 0
45 .do nr need_eo_tl 0
46 .do nr need_tl 1
48 .do mso devtag.tmac
50 .if !\n(.g .ig
51 .de @R                  \" --- initialize number register to 0, if undefined
52 .if !r\\$1 .nr \\$1 0
55 .\" --- check whether grohtml needs end of title/heading
56 .de @html_check_need_title
57 .do if (\\n[need_eo_tl] == 1) \
58 \{\
59 .       do nr need_eo_tl 0
60 .       do DEVTAG-EO-TL
61 .\}
62 .do if (\\n[need_tl] == 1) \
63 \{\
64 .       do DEVTAG-TL
65 .       do nr need_tl 0
66 .       do nr need_eo_tl 1
67 .\}
68 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
69 .do nr need_eo_h 0
72 .de @check_need_title
75 .ie '\*(.T'html' \
76 .       do als check_need_title @html_check_need_title
77 .el \
78 .       do als check_need_title @check_need_title
80 .@R pf
81 .if \n(pf .nx
83 .if !\n(.g .ig
84 .de @S                  \" --- initialize string/macro to empty, if undefined
85 .if !d\\$1 .ds \\$1 \" empty
88 .@R @\"                 \" debugging level
91 .\"             *** INTERNAL GP MACROS ***
94 .de @C                  \" --- change ev's, taking info with us
95 .nr _S \\n(.s
96 .nr _V \\n(.v
97 .nr _F \\n(.f
98 .nr _J \\n(.j
99 .do ds _A \\n[.fam]
100 .nr _I \\n(.i
101 .ev \\$1
102 .ps \\n(_S
103 .vs \\n(_Vu
104 .ft \\n(_F
105 .ad \\n(_J
106 .do @fam \\*(_A
107 'in \\n(_Iu
108 .xl \\n($lu
109 .lt \\n($lu
110 .rr _S
111 .rr _V
112 .rr _F
113 .rr _I
114 .rr _J
115 .ls 1
116 'ce 0
119 .de @D                  \" --- determine display type (Indent, Left, Center)
120 .ds |p "\\$3
121 .nr _d 0
122 .if "\\$2"C" \
123 .       nr _d 1
124 .if "\\$2"L" \
125 .       nr _d 2
126 .if "\\$2"I" \
127 .       nr _d 3
128 .if "\\$2"M" \
129 .       nr _d 4
130 .if !\\n(_d \
132 .       nr _d \\$1
133 .       ds |p "\\$2
138 .de @z                  \" --- end macro
139 .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
140 .if !"\\n(.z"" \
142 .       tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
143 .       di
144 .       ex
146 .if \\n(?a \
147 .       bp                      \" force out final table
148 .ds bp
149 .ds @b\"                        \" don't start another page
151 .if \n@>1 .tm << @z
155 .\"             *** STANDARD HEADERS AND FOOTERS ***
158 .ie \n(.g .ds $* \\\\$*
159 .el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
161 .de he                  \" *** define header
162 .ie !\\n(.$ \
164 .       rm |4
165 .       rm |5
167 .el \
169 .       ds |4 "\*($*
170 .       ds |5 "\*($*
174 .de eh                  \" *** define even header
175 .ie !\\n(.$ \
176 .       rm |4
177 .el \
178 .       ds |4 "\*($*
181 .de oh                  \" *** define odd header
182 .ie !\\n(.$ \
183 .       rm |5
184 .el \
185 .       ds |5 "\*($*
188 .de fo                  \" *** define footer
189 .ie !\\n(.$ \
191 .       rm |6
192 .       rm |7
194 .el \
196 .       ds |6 "\*($*
197 .       ds |7 "\*($*
201 .de ef                  \" *** define even foot
202 .ie !\\n(.$ \
203 .       rm |6
204 .el \
205 .       ds |6 "\*($*
208 .de of                  \" *** define odd footer
209 .ie !\\n(.$ \
210 .       rm |7
211 .el \
212 .       ds |7 "\*($*
215 .de ep                  \" *** end page (must always be followed by a .bp)
216 .if \\n(nl>0 \
218 .       wh 0
219 .       rs
220 .       @b
225 .\"             *** INTERNAL HEADER AND FOOTER MACROS ***
228 .de @h                  \" --- header
229 .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
230 .if (\\n(.i+\\n(.o)>=\\n(.l \
231 .       tm Line \\n(c. -- Offset + indent exceeds line length
232 .\" initialize a pile of junk
233 .nr ?h \\n(?H                   \" transfer "next page" to "this page"
234 .nr ?H 0
235 .nr ?c \\n(?C
236 .nr ?C 0
237 .rn |4 |0
238 .rn |5 |1
239 .rn |6 |2
240 .rn |7 |3
241 .nr _w 0                        \" reset max footnote width
242 .nr ?W 0                        \" no wide floats this page (yet)
243 .nr ?I 1
244 .\" begin actual header stuff
245 .ev 2
247 .if \\n(hm>0 \
248 .       if !'\*(.T'html' \
249 .               sp |\\n(hmu     \" move to header position
250 .@t $h\"                        \" output header title
251 .if \\n(tm<=0 \
252 .       nr tm \n(.Vu
253 .if !'\*(.T'html' \
254 .       sp |\\n(tmu             \" move to top of text
256 .mk _k                          \" for columned output
257 .if \\n(?n=1 .nm 1              \" restore line numbering if n1 mode
258 .nr $c 1                        \" set first column
259 .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
260 .ie \\n(?s \
262 .       nr ?s 0
263 .       rs
264 '       @b
266 .el \
267 .       @n\"                    \" begin the column
268 .if \n@>2 .tm << @h
271 .de @n                  \" --- new column or page
272 .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
273 .if \\n(bm<=0 \
274 .       nr bm \\n(.Vu
275 .if (\\n(_w<=\\n($l)&(\\n(?W=0) \
277 .       nr _b (\\n(ppp*\\n($vu)/200u    \" compute fudge factor (must be < 1P)
278 .       if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
279 .               nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
280 .       nr _b +\\n(bmu
282 .nr _B \\n(_bu
283 .ch @f
284 .wh -\\n(_bu @f
285 .nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
286 .if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
287 .nr ?f 0                        \" reset footnote flag
288 .if \\n(?o \
290 .       (f _\"                  \" reprocess footnotes which run off page
291 .       nf
292 .       |o
293 .       fi
294 .       )f
295 .       rm |o
297 .nr ?o 0
298 .if \\n(?T \
300 .       nr _i \\n(.i
301 .       if \\n(?n \
302 .               nm \\n(ln
303 .       in 0
304 .       |h\"                    \" output the table header
305 .       in \\n(_iu
306 .       if \\n(?n \
307 .               nm
308 .       rr _i
309 .       mk #T                   \" for tbl commands
310 .       ns
312 .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
314 .       nr ?a 0                 \" output floating keep
315 .       @k |t
316 .       if \\n(?w \
317 .               mk _k           \" don't overstrike wide keeps
318 .       nr ?w 0
321 .$H\"                           \" special column header macro
325 .de @f                  \" --- footer
326 .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
327 .if \n@>2 .nr VL \\n(.pu-\\n(nlu
328 .if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
330 .if \\n(?T \
332 .       nr T. 1                 \" for tbl commands (to output bottom line)
333 .       T# 1\"                  \" output the sides and bottom lines
334 .       br
336 .ev 2
337 .ce 0
338 .if \\n(?b \
340 .       nr ?b 0
341 .       @k |b\"                 \" output bottom of page tables
343 .if \\n(?f \
344 .       @o\"                    \" output footnote if present
345 .ie \\n($c<\\n($m \
346 .       @c\"                    \" handle new column
347 .el \
348 .       @e\"                    \" new page
350 .if \n@>2 .tm << @f
353 .de @o                  \" --- output footnote
355 .ls 1
356 .in 0
357 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
358 .wh -\\n(_Bu @r
359 .if \\n(?n \
360 .       nm \\n(ln
362 .if \\n(?n \
363 .       nm
365 .if \n@>2 .tm @o triggered @r (?o) = \\n(?o
366 .if \\n(?o \
368 .       di                      \" just in case triggered @r
369 .       if \\n(dn=0 \
371 .               rm |o
372 .               nr ?o 0
373 .       \}
374 .       nr dn \\n(_D
375 .       rr _D
377 .rm |f
378 .ch @r
381 .de @c                  \" --- new column
382 .if \n@>2 .tm   >> @c %=\\n%
384 .sp |\\n(_ku
385 .@O +\\n($lu+\\n($su
386 .nr $c +1
390 .de @e                  \" --- end page
391 .if \n@>2 .tm   >> @e
392 .@O \\n(_ou
394 .sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u)   \" move to footer position
395 .@t $f\"                        \" output footer title
396 .nr ?h 0
400 .de @t                  \" --- output header or footer title
401 .if !\\n(?h \
403 .       sz \\n(tp\"             \" set header/footer type fonts, etc.
404 .       @F \\n(tf
405 .       lt \\n(_Lu              \" make title span entire page
406 .       if \\n(?n \
407 .               nm \\n(ln
408 .       nf
409 .       \\$1
410 .       br
411 .       if \\n(?n \
412 .               nm
416 .de $h                  \" $$$ print header
417 .ds |z
418 .if !\\n(?c \
420 .       if e .ds |z "\\*(|0
421 .       if o .ds |z "\\*(|1
423 .if !\(ts\\*(|z\(ts\(ts \
424 '       tl \\*(|z
425 .rm |z
428 .de $f                  \" $$$ print footer
429 .ds |z
430 .if \\n(?c \
432 .       if e .ds |z "\\*(|0
433 .       if o .ds |z "\\*(|1
435 .if \(ts\\*(|z\(ts\(ts \
437 .       if e .ds |z "\\*(|2
438 .       if o .ds |z "\\*(|3
440 .if !\(ts\\*(|z\(ts\(ts \
441 '       tl \\*(|z
442 .rm |z
445 .de @r                  \" --- reprocess overflow footnotes
446 .if \n@>3 .tm           >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
447 .di |o                          \" save overflow footnote
448 .nr ?o 1
449 .nr _D \\n(dn
454 .\"             *** COMMANDS WITH VARIANT DEFINITIONS ***
457 .if !'\*(.T'html' .rn bp @b     \" --- begin page
459 .de bp                  \" *** begin new page (overrides columns)
460 .nr $c \\n($m                   \" force new page, not new column
461 .ie \\n(nl>0 \
462 .       @b \\$1
463 .el \
465 .       if \\n(.$>0 \
466 .               pn \\$1
467 .       if \\n(?I \
468 .               @h\"            \" 'spring' the header trap
471 .wh 0 @h                        \" reset header
474 .rn ll xl               \" *** special line length (local)
475 .de ll                  \" *** line length (global to environments)
476 .xl \\$1
477 .lt \\$1
478 .nr $l \\n(.l
479 .if (\\n($m<=1):(\\n($l>\\n(_L) \
480 .       nr _L \\n(.l
483 .rn po @O               \" --- local page offset
485 .de po                  \" *** page offset
486 .@O \\$1
487 .nr _o \\n(.o
490 .\" Redefine the fam request to set the family in
491 .\" environment 2 as well as the current environment.
492 .if !\n(.g .ig
493 .do rn fam @fam         \" --- set family in current environment
494 .do de fam              \" *** set font family in ev 2 and current ev
495 .do @fam \\$1
496 .ev 2
497 .do @fam \\$1
502 .\"             *** MISCELLANEOUS ROFF COMMANDS ***
505 .de hx                  \" *** suppress headers and footers next page
506 .nr ?H 1
509 .de ix                  \" *** indent, no break
510 'in \\$1
513 .de bl                  \" *** contiguous blank lines
515 .@s \\$1
516 .sp \\$1
519 .de @s                  \" --- diversion-surviving space test
520 .ne \\$1
522 .if !'\\n(.z'' \!.@s \\$1
525 .de n1                  \" *** line numbering 1
526 .nm 1
527 .ll -\w'0000'u
528 .nr ?n 1
531 .de n2                  \" *** line numbering 2
532 .ie \\n(.$ \
534 .       ie !`\\$2`c` \
535 .               po -\w'0000'u
536 .       el \
537 .               ll -\w'0000'u
538 .       ie \\B`\\$1` \
540 .               ds |i \\$1
541 .               ds |j \\$1
542 .               do substring |i 0 0  \" pick off leading char and rest to check
543 .               do substring |j 1    \" for +N / -N
544 .               ie `\\*(|i`+` \
545 .                       nr ln (\\n[_ln])+\\*(|j
546 .               el \
547 .                       ie `\\*(|i`-` \
548 .                               nr ln (\\n[_ln])-\\*(|j
549 .                       el \
550 .                               nr ln \\$1  \" unsigned N
551 .               nm \\n(ln
552 .               nr ?n 2
553 .               rm |i |j
555 .       el \
556 .               tm Line \\n(.c -- Bad .n2 value
558 .el \
560 .       nm
561 .       nr _ln \\n(ln
562 .       po +\w'0000'u
563 .       ll \\n($lu
564 .       nr ?n 0
565 .       nr ln 0
569 .de pa                  \" *** new page
570 .bp \\$1
573 .de ro                  \" *** roman page numbers
574 .af % i
577 .de ar                  \" *** arabic page numbers
578 .af % 1
581 .de m1                  \" *** position one space
582 .nr _0 \\n(hmu
583 .nr hm \\$1v
584 .nr tm +\\n(hmu-\\n(_0u
585 .rr _0
588 .de m2                  \" *** position two space
589 .nr tm \\n(hmu+\\n(tpp+\\$1v
592 .de m3                  \" *** position three space
593 .nr bm \\n(fmu+\\n(tpp+\\$1v
596 .de m4                  \" *** position four space
597 .nr _0 \\n(fmu
598 .nr fm \\$1v
599 .nr bm +\\n(fmu-\\n(_0u
602 .de sk                  \" *** leave a blank page (next page)
603 .if \\n(.$>0 \
604 .       tm Line \\n(c. -- I cannot skip multiple pages
605 .nr ?s 1
609 .\"             *** MISCELLANEOUS USER SUPPORT COMMANDS ***
612 .if !\n(.g .ig
613 .de re                  \" *** reset tabs (TROFF defines 15 stops default)
614 .ta T 0.5i
617 .if \n(.g .ig
618 .de re
619 .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
622 .de ba                  \" *** set base indent
623 .ie \\n(.$ \
624 .       nr $i \\$1n
625 .el \
626 .       nr $i \\n(siu*\\n($0u
629 .de hl                  \" *** draw horizontal line
631 .if '\*(.T'html' \
633 .       HR
634 .       do return
636 .ie \n(.g .do nr _I \\n[.in]
637 .el .nr _I \\n(.i
638 \l'\\n(.lu-\\n(_Iu'
643 .\"             *** PARAGRAPHING ***
646 .de pp                  \" *** paragraph
647 .lp \\n(piu
650 .de lp                  \" *** left aligned paragraph
652 .if \\n(.$ \
653 .       ti +\\$1
654 .nr $p 0 1
657 .de ip                  \" *** indented paragraph w/ optional tag
658 .if (\\n(ii>0)&(\\n(ii<1n) \
659 .       nr ii \\n(iin
660 .nr _0 \\n(ii
661 .if \\n(.$>1 \
662 .       nr _0 \\$2n
663 .@p \\n(_0u
664 .nr _I \\n(.iu
665 .in 0
666 .di |i
667 \&\\$1
670 .in \\n(_Iu
671 .ds |j \\*(|i\\
672 .ie \\w"\\*(|j" \
674 .       ti -\\n(_0u
675 .       ie \\w"\\*(|j">=\\n(_0 \
677 .               do DEVTAG-COL 1
678 \\*(|j
679 .               do DEVTAG-COL-NEXT 2
680 .               br
681 .       \}
682 .       el \
684 .               do DEVTAG-COL 1
685 \\*(|j\h'|\\n(_0u'\c
686 .               do DEVTAG-COL 2
687 .       \}
689 .el .do DEVTAG-COL 2
690 .rr _0
691 .rm |i |j
694 .de np                  \" *** numbered paragraph
695 .\" use string comparison in case user has changed format of $p
696 .if '\\n($p'-1' \
697 .       nr $p 0                 \" reset number after .bu
698 .nr $p +1                       \" increment paragraph number
699 .@p \w'\0(000)\0'u
700 .ti -\w'\0(000)\0'u
701 \0(\\n($p)\h'|\w'\0(000)\0'u'\c
704 .de bu                  \" *** bulleted paragraph
706 .\" use string comparison in case user has changed format of $p
707 .if '\\n($p'-1' \
708 .       ns                      \" don't space between .bu paragraphs
709 .nr $p 0-1                      \" mark "bulleted paragraph" mode
710 .@p \w'\0\(bu\0'u
711 .ti -\w'\0\(bu\0'u
712 \0\(bu\0\c
715 .de @p                  \" --- initialize for paragraph
716 .do check_need_title
717 .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
718 .in \\n($iu+\\n(pou
719 .if \\n(.$ \
720 .       in +\\$1n
721 .ce 0
723 .@F \\n(pf
724 .sz \\n(pp
725 .sp \\n(psu
726 .ne \\n(.Lv+\\n(.Vu
731 .\"             *** SECTION HEADINGS ***
734 .de sh                  \" *** section heading
736 .do check_need_title
737 .if (\\n(si>0)&(\\n(si<1n) \
738 .       nr si \\n(sin
739 .if '\*(.T'html' .nr si 0
740 .ce 0
741 .if '\*(.T'html' \
743 .       do DEVTAG-SH \\$1
744 .       do nr need_eo_h 1
746 .@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
747 .if !"\\$2"_" \
749 .       ds |n \&\\$2
750 .       $p "\\*(|n" "\\*($n" \\n($0
751 .       $0 "\\*(|n" "\\*($n" \\n($0
752 .       rm |n
754 .nr $p 0 1                      \" reset .np count
757 .de @d                  \" --- change section depth
758 .if !""\\$1" \
759 .       nr $0 \\$1
760 .if \\n($0&(\\n(.$>1) \
761 .       nr $\\n($0 \\$2
762 .ds $n \&\"
763 .ie \\n($0>=1 \
765 .       if '\\n($1'0' \
766 .               nr $1 1
767 .       if (\\n(.$>=3) .if !"\\$3"-" \
768 .               nr $1 \\$3
769 .       as $n \\n($1
771 .el \
772 .       nr $1 0
773 .ie \\n($0>=2 \
775 .       if '\\n($2'0' \
776 .               nr $2 1
777 .       if (\\n(.$>=4) .if !"\\$4"-" \
778 .               nr $2 \\$4
779 .       as $n .\\n($2
781 .el \
782 .       nr $2 0
783 .ie \\n($0>=3 \
785 .       if '\\n($3'0' \
786 .               nr $3 1
787 .       if (\\n(.$>=5) .if !"\\$5"-" \
788 .               nr $3 \\$5
789 .       as $n .\\n($3
791 .el \
792 .       nr $3 0
793 .ie \\n($0>=4 \
795 .       if '\\n($4'0' \
796 .               nr $4 1
797 .       if (\\n(.$>=6) .if !"\\$6"-" \
798 .               nr $4 \\$6
799 .       as $n .\\n($4
801 .el \
802 .       nr $4 0
803 .ie \\n($0>=5 \
805 .       if '\\n($5'0' \
806 .               nr $5 1
807 .       if (\\n(.$>=7) .if !"\\$7"-" \
808 .               nr $5 \\$7
809 .       as $n .\\n($5
811 .el \
812 .       nr $5 0
813 .ie \\n($0>=6 \
815 .       if '\\n($6'0' \
816 .               nr $6 1
817 .       if (\\n(.$>=8) .if !"\\$8"-" \
818 .               nr $6 \\$8
819 .       as $n .\\n($6
821 .el \
822 .       nr $6 0
825 .de sx                  \" *** heading up, no increment (2.1.1 -> 2.1)
826 .ce 0
827 .ul 0
828 .nr _0 \\n($0-1
829 .if \\n(.$ .nr _0 +1
830 .if \\n(.$ .nr _0 \\$1
831 .@d \\n(_0
832 .rr _0
833 .$p "" "" \\n($0
834 .nr $p 0 1                      \" reset .np count
837 .de uh                  \" *** unnumbered section heading
838 .$p "\\$1"
839 .$0 "\\$1"
842 .de $p                  \" $$$ print section heading
843 .if (\\n(si>0)&(\\n(.$>2) \
844 .       nr $i \\$3*\\n(si
845 .in \\n($iu
846 .ie !"\\$1\\$2"" \
848 .       sp \\n(ssu              \" one of them is non-null
849 .       ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
850 .       \" exdent if \\$3 > 0
851 .       ie 0\\$3 \
852 .               ti -(\\n(siu-\\n(sou)
853 .       el \
854 .               ti +\\n(sou
855 .       @F \\n(sf
856 .       sz \\n(sp
857 .       if 0\\$3 \
858 .               $\\$3
859 .       if \w"\\$2">0 \\$2.
860 .       if \w"\\$1">0 \\$1\f1\ \ \&
862 .el \
863 .       sp \\n(psu
864 .@F \\n(pf
865 .sz \\n(pp
869 .\"             *** COLUMNED OUTPUT ***
872 .de 2c                  \" *** double columned output
874 .if \\n($m>1 \
875 .       1c\"                    \" revert to 1c if already 2c
876 .nr $c 1
877 .nr $m 2
878 .if \\n(.$>1 \
879 .       nr $m \\$2
880 .if \\n(.$>0 \
881 .       nr $s \\$1n             \" param 1: column separation
882 .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
883 .xl \\n($lu
884 .mk _k
888 .de 1c                  \" *** single columned output
890 .nr $c 1
891 .nr $m 1
892 .ll \\n(_Lu                     \" return to normal output
893 .sp |\\n(.hu
894 .@O \\n(_ou
897 .de bc                  \" *** begin column
898 .sp 24i
902 .\"             *** FLOATING TABLES AND NONFLOATING BLOCKS ***
905 .de (z                  \" *** begin floating keep
906 .if \n@>4 .tm >> (z, .z=\n(.z
907 .@D 4 \\$1 \\$2
911 .de )z                  \" *** end floating keep
912 .if \n@>4 .tm >> )z, .z=\n(.z
913 .sp \\n(zsu
915 .if \n@>4 .tm -- )z << @), .z=\n(.z
916 .rr _0
917 .if !\\n(?b \
918 .       nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
919 .nr dl -\n(.H                   \" fudge factor necessary to make it work
920 .ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
922 .       nr ?a 1
923 .       if (\\n(dl>\\n($l)&(\\n($m>1) \
924 .               nr ?w 1         \" mark wider than one column (top)
925 .       ds |x |t
927 .el \
929 .       nr ?b 1
930 .       if (\\n(dl>\\n($l)&(\\n($m>1) \
931 .               nr ?W 1         \" mark wider than one column (bottom)
932 .       nr _b +\\n(dnu
933 .       \" avoid moving @f back past the current position
934 .       if \\n(.p-\\n(nl-\n(.V<\\n(_b \
935 .               nr _b \\n(.p-\\n(nl-\n(.V
936 .       ch @f -\\n(_bu
937 .       ds |x |b
939 .da \\*(|x                      \" copy to save macro
941 .ls 1
942 .nr ?k 1
943 .if \n@>4 .tm -- )z >> \\*(|x
944 \!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
945 .|k\"                           \" and the body
947 .if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
948 .nr ?k 0
949 .rm |k\"                        \" remove the temp macro
951 .in 0
952 .ls 1
953 .xl \\n($lu
955 .if \n@>4 .tm << )z, .z=\\n(.z
958 .de @k                  \" --- output floating keep
959 .if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
960 .ev 1
962 .ls 1
963 .in 0
964 .sp \\n(zsu
965 .if \\n(?n \
966 .       nm \\n(ln
967 .\\$1
968 .if \\n(?n \
969 .       nm
972 .rm \\$1
976 .de (t                  \" XXX temp ref to (z
977 .(z \\$1 \\$2
980 .de )t                  \" XXX temp ref to )t
981 .)z \\$1 \\$2
984 .de (b                  \" *** begin block
986 .@D 3 \\$1 \\$2
987 .sp \\n(bsu
989 .if '\*(.T'html' .sp \\n(bsu
992 .de )b                  \" *** end block
995 .if (\\n(bt=0):(\\n(.t<\\n(bt) \
996 .       ne \\n(dnu              \" make it all on one page
997 .@k |k
998 .ev                             \" return from display environment
999 .sp \\n(bsu+\\n(.Lv-1v
1002 .de @(                  \" --- begin keep
1003 .if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
1005 .di |k
1006 \!'rs
1009 .de @M                  \" --- set modes for display
1010 .nr ?k 1
1011 .@C 1
1012 .@F \\n(df
1013 .if \\n($R .@V
1014 .vs \\n(.sp*\\n($Vu/100u
1016 .if "\\*(|p"F" \
1017 .       fi                      \" set fill mode if "F" parameter
1018 .if \\n(_d=4 \
1019 .       in 0
1020 .if \\n(_d=3 \
1022 .       in +\\n(biu
1023 .       xl -\\n(biu
1025 .if \\n(_d=1 \
1026 .       ce 10000
1029 .de @)                  \" --- end keep
1031 .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
1032 .nr ?k 0
1034 .in 0
1035 .ce 0
1038 .de (c                  \" *** begin block centered text
1040 .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
1041 .if \\n(?n .nm
1042 .di |c
1045 .de )c                  \" *** end block centered text
1046 .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
1047 .br                             \" force out final line
1049 .if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
1050 .ev 1
1051 .ls 1
1052 .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
1053 .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
1054 .if \\n(?n \
1055 .       nm \\n(ln
1061 .if \\n(?n \
1062 .       nm
1064 .rm |c
1068 .\"             *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
1071 .de (q                  \" *** begin block quote
1073 .@C 1
1075 .sp \\n(qsu
1076 .in +\\n(qiu
1077 .xl -\\n(qiu
1078 .sz \\n(qp
1079 .if \\n(?n \
1080 .       nm \\n(ln
1083 .de )q                  \" *** end block quote
1085 .if \\n(?n \
1086 .       nm
1088 .sp \\n(qsu+\\n(.Lv-1v
1089 .nr ?k 0
1092 .de (l                  \" *** begin list
1094 .sp \\n(bsu
1095 .@D 3 \\$1 \\$2
1097 .if \\n(?n \
1098 .       nm \\n(ln
1099 .if '\*(.T'html' .sp \\n(bsu
1102 .de )l                  \" *** end list
1104 .if \\n(?n \
1105 .       nm
1107 .sp \\n(bsu+\\n(.Lv-1v
1108 .nr ?k 0
1112 .\"             *** PREPROCESSOR SUPPORT ***
1116 .\"     EQN
1118 .de EQ                  \" *** equation start
1119 .do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
1120 .do nr need_eo_h 0
1122 .if "\*(.T"html" \
1124 .       do nr e-EQ-ll \\n(.l
1125 .       ll 1000n
1127 .do HTML-IMAGE
1128 .if !\\n(?e \
1130 .       if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
1131 .       @D 1 "\\$1" "\\$2"
1132 .       @C 2
1133 .       di |e
1135 .ls 1
1136 .in 0
1140 .de EN                  \" *** equation end
1142 .do HTML-IMAGE-END
1143 .if "\*(.T"html" \
1144 .       do ll \\n[e-EQ-ll]u
1145 .ie "\\$1"C" \
1147 .       nr ?e 1
1148 .       sp \\n(esu
1150 .el \
1152 .       nr ?e 0
1153 .       di
1154 .       if \\n(dn \
1155 .               @q\"            \" actual equation output
1156 .       rm |e
1157 .       ev
1161 .de @q                  \" --- equation output
1162 .nr _Q \\n(dnu
1164 .sp \\n(esu                     \" output rest of preceding text
1165 .if !"\\n(.z"" \!.ne \\n(_Qu
1166 .ne \\n(_Qu+\n(.Vu              \" keep it on one page
1167 .@C 2\"                         \" .ev 2 may be jumbled from header
1168 .if \\n(_d=1 \
1169 .       in (\\n(.lu+\\n($iu-\\n(dlu)/2u
1170 .if \\n(_d=2 \
1171 .       in \\n($iu
1172 .if \\n(_d=3 \
1173 .       in \\n(biu+\\n($iu
1174 .if \\n(_d=4 \
1175 .       in 0
1176 .mk _q
1177 .if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
1178 .if !"\\*(|p"" \
1180 .       rs
1181 .       sp (\\n(_Qu-\\n(.vu)/2u
1182 .       tl """\\*(|p"
1183 .       rt \\n(_qu
1185 .if \\n(?n \
1186 .       nm \\n(ln
1188 .if \\n(?n \
1189 .       nm
1190 .sp |\\n(_qu+\\n(_Qu
1191 .sp \\n(esu+\\n(.Lv-1v
1192 .rr _q
1193 .rr _Q
1197 .\"     TBL
1199 .de TS                  \" *** table start
1200 .sp \\n(bsu
1201 .if "\*(.T"html" \
1203 .       do nr e-TS-ll \\n(.l
1204 .       ll 1000n
1206 .do HTML-IMAGE
1207 .@C 1
1208 .fi                             \" drop into fill mode for text boxes
1209 .if "\\$1"H" \
1211 .       di |h                   \" save header part
1212 .       nr ?T 1
1214 .ls 1
1215 .ch @f -(\\n(_bu+1v)            \" set pseudo-trap for bottom line
1216 .if \\n(.p-\\n(_b-1v<=\\n(nl \
1217 .       ch @f \\n(nlu+\n(.Vu
1220 .de TH                  \" *** end header part of table
1221 .nr T. 0
1222 .T# 0
1223 .if \\n(?n \!.nm
1225 .nr _T \\n(?T
1226 .nr ?T 0
1227 .ne \\n(dnu+1v
1228 .nr ?T \\n(_T
1229 .nr _i \\n(.i
1230 .if \\n(?n .nm \\n(ln
1231 .in 0
1232 .|h\"                           \" put in the initial header
1233 .in \\n(_iu
1234 .rr _i
1235 .mk #T
1238 .de TE                  \" *** table end
1239 .nr ?T 0
1240 .ch @f -\\n(_bu                 \" reset pseudo-trap
1241 .if \\n(.p-\\n(_b<=\\n(nl \
1242 .       ch @f \\n(nlu+\n(.Vu
1244 .do HTML-IMAGE-END
1245 .if "\*(.T"html" \
1246 .       do ll \\n[e-TS-ll]u
1247 .sp \\n(bsu+\\n(.Lv-1v
1251 .de T&
1255 .\"     REFER
1257 .mso refer-me.tmac
1260 .\"     IDEAL
1262 .de IS                  \" *** start ideal picture
1263 .nr g7 \\n(.u
1264 .ls 1
1267 .de IF
1268 .if \\n(g7 .fi
1272 .de IE                  \" *** end ideal picture
1273 .if \\n(g7 .fi
1278 .\"     PIC
1280 .de PS          \" *** start picture: $1=height, $2=width in units or inches
1281 .sp 0.3
1282 .do HTML-IMAGE
1283 .nr g7 \\$2
1284 .in (u;\\n(.l-\\n(g7>?0/2)
1285 .ne \\$1u
1286 .nr g7 \\n(.u
1287 .ls 1
1288 .if \\n(?n \
1290 .       de PS_nm_check &&        \" define macro to emit .nm at top diversion
1291 .       if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt]
1292 .       \"                       \" multiple .PS/.PE in a keep.
1293 .       if `\\\\$2`init` \
1294 .               do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1
1295 .       ie `\\\\n(.z`` \
1297 .               if `\\\\$1`suspend` \
1298 .                       nm
1299 .               if `\\\\$1`resume` \
1301 .                       nm \\\\n(ln
1302 .                       do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1
1303 .                       do if !\\\\n[PS_nm_cnt] \
1305 .                               do rm PS_nm_check
1306 .                               do rr PS_nm_cnt
1310 .el \!.PS_nm_check \\\\$1
1312 .       mk _q                    \" emit a single numbered line for PS picture
1313 .       rs
1314 \&\ 
1315 .       br
1316 .       rt \\n(_qu
1317 .       PS_nm_check suspend init
1321 .de PE                  \" *** end picture
1322 .if \\n(?n .PS_nm_check resume
1325 .if \\n(g7 .fi
1326 .do HTML-IMAGE-END
1327 .sp .6
1331 .\"     GREMLIN
1333 .de GS                  \" *** start gremlin picture
1334 .ie '\*(.T'html' \
1336 .       ie "\\$1"L" .do HTML-IMAGE-LEFT
1337 .       el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
1338 .       el .do HTML-IMAGE
1340 .el \
1342 .       nr g7 (\\n(.lu-\\n(g1u)/2u
1343 .       if "\\$1"L" .nr g7 \\n(.iu
1344 .       if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
1345 .       in \\n(g7u
1346 .       nr g7 \\n(.u
1347 .       ls 1
1348 .       nf
1349 .       ne \\n(g2u
1353 .de GE                  \" *** end gremlin picture
1354 .ie '\*(.T'html' .do HTML-IMAGE-END
1355 .el \
1357 .       GF
1358 .       sp .6
1362 .de GF                  \" *** finish gremlin picture; stay at top
1365 .if \\n(g7 .fi
1369 .\"             *** FONT AIDS ***
1372 .de sz                  \" *** set point size and vertical spacing
1373 .ps \\$1
1374 .if \\n($r .@v
1375 .vs \\n(.sp*\\n($vu/100u        \" default vs at pointsize + 20%
1378 .de @v                  \" --- possibly set $v from $r
1379 .if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
1382 .de @V                  \" --- possibly set $V from $R
1383 .if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
1386 .de @E                  \" --- store in _F argument to \f for restoring font
1387 .ie \\n(.f<10 \
1388 .       ds _F \\n(.f
1389 .el \
1391 .       ie \\n(.f<100&\n(.g \
1392 .               ds _F (\\n(.f
1393 .       el \
1394 .               ds _F P
1398 .de r                   \" *** enter roman font
1399 .do check_need_title
1401 .ft 1
1402 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1403 .do check_need_title
1406 .de i                   \" *** enter italic
1407 .do check_need_title
1409 .ft 2
1410 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1411 .do check_need_title
1414 .de b                   \" *** enter boldface
1415 .do check_need_title
1417 .ft 3
1418 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1419 .do check_need_title
1422 .de rb                  \" *** enter real boldface
1423 .do check_need_title
1425 .ft 3
1426 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1427 .do check_need_title
1430 .de bi                  \" *** enter bold italic
1431 .do check_need_title
1433 .ft 4
1434 .if \\n(.$ \&\\$1\f\\*(_F\\$2
1435 .do check_need_title
1438 .de u                   \" *** enter underlined word
1439 \&\\$1\l'|0\(ul'\\$2
1442 .\" a better version of u
1443 .if !\n(.g .ig
1444 .de u
1445 \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
1448 .de q                   \" *** enter quoted word
1449 \&\\*(lq\\$1\\*(rq\\$2
1452 .de bx                  \" *** enter boxed word
1453 .ie '\*(.T'html' \\$1\\$2
1454 .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
1457 .de sm                  \" *** print in smaller font
1458 \s-1\\$1\\s0\\$2
1461 .de @F                  \" --- change font (0 -> no change)
1462 .nr ~ \\$1
1463 .if \\n~>0 \
1464 .       ft \\n~
1465 .rr ~
1469 .\"             *** FOOTNOTING ***
1472 .de (f                  \" *** begin footnote
1474 .if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
1475 .ie "\\n(.z"" \
1477 .       nr _D \\n(dn
1478 .       nr _0 1v+\\n(nlu
1479 .       ev 2
1480 .       nm
1481 .       da |f
1482 .       in 0
1483 .       xl \\n($lu-\\n(fuu
1484 .       @F \\n(ff
1485 .       sz \\n(fp
1486 .       vs \\n(.sp*\\n($Vu/100u
1487 .       if !\\n(?f \
1489 .               nr _b +1v       \" allow space for $s
1490 .               $s
1491 .       \}
1492 .       br
1493 .       if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
1495 .               da\"            \" won't fit on page at all
1496 .               bc
1497 .               if !\\n(?f \
1498 .                       rm |f
1499 .               da |f
1500 .\" next five lines could be dropped if headers had their own environment
1501 .               in 0            \" reset everything from .bc
1502 .               xl \\n($lu-\\n(fuu
1503 .               @F \\n(ff
1504 .               sz \\n(fp
1505 .               vs \\n(.sp*\\n($Vu/100u
1506 .               if !\\n(?f \
1507 .                       $s
1508 .               br
1509 .       \}
1510 .       rr _0
1511 .       sp \\n(fsu
1512 .       nr ?f 1
1513 .       fi
1514 .       if !"\\$1"_" \
1515 .               ti \\n(fiu
1516 .       if \n@>2 .tm    << (f $f=\\n($f
1518 .el \
1520 .       ev 2
1521 .       nm
1522 .       in 0
1523 .       xl \\n($lu-\\n(fuu
1524 .       @F \\n(ff
1525 .       sz \\n(fp
1526 .       vs \\n(.sp*\\n($Vu/100u
1527 .       fi
1528 \!.(f \\$1
1529 \!.@N
1533 .de @N                  \" --- set no fill mode in the top-level diversion
1534 .ie "\\n(.z"" .nf
1535 .el \!.@N
1538 .de )f                  \" *** end footnote
1539 .ie "\\n(.z"|f" \
1541 .       if \\n* \
1542 .               nr $f +1
1543 .       ds * \\*{\\n($f\\*}\k*
1544 .       nr * 0
1545 .       in 0
1546 .       da
1547 .       ev
1548 .       if \\n(_w<\\n(dl \
1549 .               nr _w \\n(dl    \" compute maximum fn width
1550 .       nr _b +\\n(dn
1551 .       ch @f -\\n(_bu
1552 .       if \\n(.p-\\n(_b<=\\n(nl \
1553 .               ch @f \\n(nlu+\n(.Vu
1554 .       nr dn \\n(_D
1555 .       rr _D
1557 .el \
1559 .       br
1560 \!.)f
1561 .       ev
1565 .@R ff
1566 .if \n(ff<=0 \
1567 .       nr ff 1                 \" footnote font: Times Roman
1568 .@R fp
1569 .if \n(fp<=0 \
1570 .       nr fp 8                 \" footnote pointsize
1572 .de $s                  \" $$$ footnote separator
1573 \l'2i'
1577 .\"             *** DELAYED TEXT ***
1580 .de (d                  \" *** begin delayed text
1581 .am |d )d
1582 .sp \\n(bsu
1585 .de )d                  \" *** end delayed text
1586 .if \\n# \
1587 .       nr $d +1
1588 .ds # [\\n($d]\k#
1589 .rr #
1592 .de pd                  \" *** print delayed text
1594 .rm |d
1595 .nr $d 1 1
1596 .ds # [1]\k#
1600 .\"             *** INDEXES (TABLE OF CONTENTS) ***
1603 .nr _x 0 1
1604 .do nr _xn 0
1605 .af _x a
1607 .de (x                  \" *** begin index entry
1608 .if \n@>4 .tm >> (x, .z=\\n(.z
1609 .ds |X x
1610 .if \\n(.$>0 \
1611 .       ds |X \\$1
1612 .ie "\\n(.z"" \
1613 .       nr _z 0
1614 .el \
1615 .       nr _z 1
1616 .@\\n(_z
1619 .de @0                  \" --- finish (x if no current diversion
1620 .am %\\*(|X )x
1621 .sp \\n(xsu
1622 .ti -\\n(piu
1625 .de @1                  \" --- finish (x if current diversion
1626 .if "\\n(_x"z" .nr _x 0
1627 .de =\\n+(_x )x
1630 .de )x                  \" *** end index entry
1631 .if \n@>4 .tm >> )x, .z=\\n(.z
1632 .ie "\\n(.z"" \
1634 .       ds |x \\n%
1635 .       if \\n(.$>0 \
1636 .               ds |x \\$1
1637 .       if "\\*(|x"_" \
1638 .               ig ..
1639 .       am %\\*(|X ..
1640 .       if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
1641 .               ti +\\n(xuu
1642 \\\\a\\\\t\\$2\\*(|x
1644 .       rm |x
1645 .       rm |X
1647 .el \
1649 \!.(x \\*(|X
1650 \!\\\\*(=\\n(_x\\\\
1651 \!.)x \\$1 \\$2
1652 \!.rm =\\n(_x
1656 .de xp                  \" *** print the index
1658 .@C 2
1659 .ls 1
1660 .vs \\n(.sp*\\n($Vu/100u
1662 .in +\\n(piu
1663 .ds |X x
1664 .if \\n(.$>0 \
1665 .       ds |X \\$1
1666 .xl -(\\n(xuu+\w'...'u)
1667 .di |x
1668 .%\\*(|X
1671 .rm %\\*(|X
1672 .xl \\n($lu
1673 .rm |X
1676 .in 0
1677 .ta \\n(.lu-\\n(xuuR \\n(.luR
1681 .rm |x
1685 .\"             *** HTML VERSIONS OF .x(, .x), AND .xp ***
1688 .de (x-html    \" --- create TAG and divert text
1689 .nr _x +1
1690 .do nr _xn +1
1691 .do TAG "_x\\n[_x]
1693 .do di |x\\n[_xn]
1697 .de )x-html    \" --- end diversion
1702 .de xp-html    \" --- create list of links
1703 .do nr _xx 1
1705 .do ev xp-html-ev
1707 .do ULS
1708 .do while \\n[_xx]<=\\n[_xn] \
1710 .       br
1711 .       do unformat |x\\n[_xx]
1712 .       do di xp-html-div
1713 .       br
1714 .       ll 100i
1715 .       fi
1716 .       do |x\\n[_xx]
1717 .       br
1718 .       di
1719 .       do asciify xp-html-div
1720 .       do rm xp-html-as
1721 .       do as xp-html-as #
1722 .       do as xp-html-as _x\\n[_xx]
1723 .       ll
1724 .       LI
1725 .       do URL \\*[xp-html-as] "\\*[xp-html-div]
1726 .       do rm xp-html-as
1727 .       do nr _xx +1
1729 .do ULE
1734 .if '\*(.T'html' \
1736 .       rm (x
1737 .       do als (x (x-html
1738 .       rm )x
1739 .       do als )x )x-html
1740 .       rm xp
1741 .       do als xp xp-html
1745 .\"             *** CHAPTERS AND TITLES ***
1748 .de +c                          \" *** begin chapter
1749 .ep\"                           \" force out footnotes
1750 .if \\n(?o:\\n(?a \
1752 .       bp                      \" force out a table or more footnote
1753 .       rs
1754 .       ep
1756 .nr ?C 1
1757 .nr $f 1 1
1758 .ds * \\*{1\\*}\k*
1759 .if \\n(?R \
1760 .       pn 1
1762 .in \\n($iu                     \" reset the indent
1764 .ie \\n(.$ \
1765 .       $c "\\$1"
1766 .el \
1767 .       sp 3
1770 .de ++                  \" *** declare chapter type
1771 .nr _0 0
1772 .if "\\$1"C" \
1773 .       nr _0 1                 \" chapter
1774 .if "\\$1"RC" \
1775 .       nr _0 11                \" renumbered chapter
1776 .if "\\$1"A" \
1777 .       nr _0 2                 \" appendix
1778 .if "\\$1"RA" \
1779 .       nr _0 12                \" renumbered appendix
1780 .if "\\$1"P" \
1781 .       nr _0 3                 \" preliminary material
1782 .if "\\$1"B" \
1783 .       nr _0 4                 \" bibliographic material
1784 .if "\\$1"AB" \
1785 .       nr _0 5                 \" abstract
1786 .if \\n(_0=0 \
1787 .       tm Line \\n(c. -- Bad mode to .++
1788 .nr ?R 0
1789 .if \\n(_0>10 \
1791 .       nr ?R 1
1792 .       nr _0 -10
1794 .nr ch 0 1
1795 .if (\\n(_0=3):(\\n(_0=5) \
1796 .       pn 1                    \" must do before .ep
1797 .if !\\n(_0=\\n(_M .if \\n(_M=3 \
1798 .       pn 1                    \" must do before .ep
1799 .ep\"                           \" end page for correct page number types
1800 .if \\n(_0=1 \
1802 .       af ch 1
1803 .       af % 1
1805 .if \\n(_0=2 \
1807 .       af ch A
1808 .       af % 1
1810 .if \\n(_0=3 \
1811 .       af % i
1812 .if \\n(_0=4 \
1813 .       af % 1
1814 .if \\n(_0=5 \
1815 .       af % 1
1816 .if \\n(.$>1 \
1817 .       he \\$2
1818 .nr _M \\n(_0
1819 .rr _0
1822 .de $c                  \" $$$ print chapter title
1823 .sz 12
1824 .ft 3
1825 .ce 1000
1826 .if \\n(_M<3 \
1827 .       nr ch +1
1828 .ie \\n(_M=1 CHAPTER\ \ \\n(ch
1829 .el .if \\n(_M=2 APPENDIX\ \ \\n(ch
1830 .if \w"\\$1" .sp 3-\\n(.L
1831 .if \w"\\$1" \\$1
1832 .if (\\n(_M<3):(\w"\\$1") \
1833 .       sp 4-\\n(.L
1834 .ce 0
1837 .ie \\n(_M=1 \
1838 .       $C Chapter \\n(ch "\\$1"
1839 .el .if \\n(_M=2 \
1840 .       $C Appendix \\n(ch "\\$1"
1843 .de tp                  \" *** title page
1848 .pn \\n%
1851 .\"             *** DATES ***
1852 .if \n(mo=1 .ds mo January
1853 .if \n(mo=2 .ds mo February
1854 .if \n(mo=3 .ds mo March
1855 .if \n(mo=4 .ds mo April
1856 .if \n(mo=5 .ds mo May
1857 .if \n(mo=6 .ds mo June
1858 .if \n(mo=7 .ds mo July
1859 .if \n(mo=8 .ds mo August
1860 .if \n(mo=9 .ds mo September
1861 .if \n(mo=10 .ds mo October
1862 .if \n(mo=11 .ds mo November
1863 .if \n(mo=12 .ds mo December
1864 .if \n(dw=1 .ds dw Sunday
1865 .if \n(dw=2 .ds dw Monday
1866 .if \n(dw=3 .ds dw Tuesday
1867 .if \n(dw=4 .ds dw Wednesday
1868 .if \n(dw=5 .ds dw Thursday
1869 .if \n(dw=6 .ds dw Friday
1870 .if \n(dw=7 .ds dw Saturday
1871 .nr y2 \n(yr%100
1872 .af y2 00
1873 .nr y4 \n(yr+1900
1874 .ds td \*(mo \n(dy, \n(y4
1877 .\"             *** PARAMETRIC INITIALIZATIONS ***
1880 .rr x
1881 .nr $v \n(.v00+\n(.sp-1/\n(.sp  \" vs as percentage of ps for .sz request
1882 .nr $V \n($v                    \" same for displays & footnotes
1883 .nr hm 4v                       \" header margin
1884 .nr tm 7v                       \" top margin
1885 .nr bm 6v                       \" bottom margin
1886 .nr fm 3v                       \" footer margin
1887 .nr tf 3                        \" title font: (real) Times Bold
1888 .nr tp 10                       \" title point size
1889 .hy 14
1890 .nr bi 4m                       \" indent for blocks
1891 .nr pi 5n                       \" indent for paragraphs
1892 .nr pf 1                        \" normal text font
1893 .nr pp 10                       \" normal text point size
1894 .nr qi 4n                       \" indent for quotes
1895 .nr qp -1                       \" down one point
1896 .nr ii 5n                       \" indent for .ip's and .np's
1897 .nr $m 1                        \" max number of columns
1898 .nr $s 4n                       \" column separation
1899 .nr sf 3                        \" section font -- Times Bold
1900 .nr sp 10                       \" section title pointsize
1901 .nr ss 12p                      \" section prespacing
1902 .nr si 0                        \" section indent
1905 .\"             *** OTHER INITIALIZATION ***
1908 .\" GNU pic sets this register to 1, to indicate that \x should not be used.
1909 .@R 0x
1910 .ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
1911 .ds } \s0\v'0.4m'
1912 .\" for compatibility with traditional -me
1913 .\" (the first will work only in compatibility mode)
1914 .ds [ \*{
1915 .ds ] \*}
1916 .ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
1917 .ds > \s0\v'-0.4m'
1918 .ds - \(em
1919 .\" Avoid warnings from groff -ww.
1920 .@S |0
1921 .@S |1
1922 .@S |2
1923 .@S |3
1924 .@S $H
1925 .@S $0
1926 .@S $1
1927 .@S $2
1928 .@S $3
1929 .@S $4
1930 .@S $5
1931 .@S $6
1932 .@S $7
1933 .@S $8
1934 .@S $9
1935 .@S ..
1937 .@R po\"                        \" simulated page offset
1938 .@R $0\"                        \" section depth
1939 .@R $i\"                        \" paragraph base indent
1940 .@R $p\"                        \" numbered paragraph number
1941 .@R $r\"                        \" ratio of vs to ps (may override $v)
1942 .@R $R\"                        \" same for displays (may override $V)
1943 .@R df\"                        \" display font: same as surrounding text
1944 .@R so\"                        \" additional section title offset
1945 .@R fu\"                        \" footnote undent
1946 .@R bt\"                        \" block keep threshold
1947 .@R *\"                         \" has \** been referenced?
1948 .@R ?a\"                        \" pending floating keep at page top?
1949 .@R ?b\"                        \" pending floating keep at page bottom?
1950 .@R ?C\"                        \" at chapter header?
1951 .@R ?e\"                        \" in equation?
1952 .@R ?H\"                        \" suppress headers and footers next page?
1953 .@R ?I\"                        \" has the header trap been sprung?
1954 .@R ?n\"                        \" n1 mode?
1955 .@R ?o\"                        \" footnote overflow?
1956 .@R ?R\"                        \" renumbered chapter?
1957 .@R ?s\"                        \" skip next page?
1958 .@R ?T\"                        \" inside .TS H?
1959 .@R ?W\"                        \" wide floating keep at page bottom?
1960 .@R ?w\"                        \" wide floating keep at page top?
1962 .nr fi 0.3i
1963 .nr _o \n(.o
1964 .nr $b 3                        \" bold
1965 .nr ps 0.35v
1966 .if \n(ps<\n(.V .nr ps \n(.V
1967 .nr bs \n(ps                    \" block pre/post spacing
1968 .nr qs \n(ps                    \" quote pre/post spacing
1969 .nr zs 1v                       \" float-block pre/postspacing
1970 .nr xs 0.2v                     \" index prespacing
1971 .nr xu 0.5i                     \" index undent
1972 .nr fs 0.2v                     \" footnote prespacing
1973 .nr es 0.5v                     \" equation pre/postspacing
1974 .if \n(es<\n(.V .nr es \n(.V
1975 .wh 0 @h                        \" set header
1976 .nr $l \n(.lu                   \" line length
1977 .nr _L \n(.lu                   \" line length of page
1978 .nr $c 1                        \" current column number
1979 .nr $f 1 1                      \" footnote number
1980 .ds * \*{1\*}\k*\"              \" footnote "name"
1981 .nr $d 1 1                      \" delayed text number
1982 .ds # [1]\k#\"                  \" delayed text "name"
1983 .nr _M 1                        \" chapter mode is chapter
1984 .ds lq \(lq\"                   \" left quote
1985 .ds rq \(rq\"                   \" right quote
1986 .em @z
1989 .\"             *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
1992 .ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
1993 .ds #v 0.6m
1995 .\"                     \" accents
1996 .ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
1997 .ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
1999 .\"                     \" umlaut
2000 .ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
2002 .\"                     \" circumflex and tilde
2003 .ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
2004 .ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
2006 .\"                     \" cedilla and czech
2007 .ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
2008 .ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
2010 .\"                     \" Norwegian A or angstrom
2011 .ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
2013 .\"                     \" there exists, for all
2014 .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'
2015 .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'
2016 .rm #h #v
2017 .ll 6.0i
2018 .lt 6.0i
2020 .de @U
2021 .tm The \\$1 macro has been removed from this version of the -me macros.
2024 .de lo
2025 .@U lo
2028 .de th
2029 .@U th
2032 .de ac
2033 .@U ac
2036 .\" s-ts-mode