]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - share/me/tmac.orig_me
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / share / me / tmac.orig_me
1 .nr _0 \n(.c
2 .\" Copyright (c) 1988, 1993
3 .\"     The Regents of the University of California.  All rights reserved.
4 .\"
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
7 .\" are met:
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\"    notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\"    notice, this list of conditions and the following disclaimer in the
12 .\"    documentation and/or other materials provided with the distribution.
13 .\" 3. All advertising materials mentioning features or use of this software
14 .\"    must display the following acknowledgement:
15 .\"     This product includes software developed by the University of
16 .\"     California, Berkeley and its contributors.
17 .\" 4. Neither the name of the University nor the names of its contributors
18 .\"    may be used to endorse or promote products derived from this software
19 .\"    without specific prior written permission.
20 .\"
21 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 .\" SUCH DAMAGE.
32 .\"
33 .\"     @(#)tmac.e      8.1 (Berkeley) 6/5/93
34 .\"
35 .\"     $FreeBSD$
36 .\"
37 .\"     %beginstrip%
38 .\"
39 .\"**********************************************************************
40 .\"*                                                                    *
41 .\"*    ******  - M E   N R O F F / T R O F F   M A C R O S  ******     *
42 .\"*                                                                    *
43 .\"*    Produced for your edification and enjoyment by:                 *
44 .\"*            Eric Allman                                             *
45 .\"*            Electronics Research Laboratory                         *
46 .\"*            U.C. Berkeley.                                          *
47 .\"*    current address:                                                *
48 .\"*            Britton-Lee, Inc.                                       *
49 .\"*            1919 Addison Street Suite 105                           *
50 .\"*            Berkeley, California  94704                             *
51 .\"*                                                                    *
52 .\"*    VERSION 8.1     First Release: 11 Sept 1978                     *
53 .\"*    See file \*(||/revisions for revision history                   *
54 .\"*                                                                    *
55 .\"*    Documentation is available.                                     *
56 .\"*                                                                    *
57 .\"**********************************************************************
58 .\"
59 .\"     Code on .de commands:
60 .\"             ***     a user interface macro.
61 .\"             &&&     a user interface macro which is redefined
62 .\"                     when used to be the real thing.
63 .\"             $$$     a macro which may be redefined by the user
64 .\"                     to provide variant functions.
65 .\"             ---     an internal macro.
66 .\"
67 .\" library directory for sourced files:
68 .ds || /usr/old/lib/me
69 .if \n@>0 .ds || .
70 .\"
71 .if !\n(.V .tm You are using the wrong version of NROFF/TROFF!!
72 .if !\n(.V .tm This macro package works only on the version seven
73 .if !\n(.V .tm release of NROFF and TROFF.
74 .if !\n(.V .ex
75 .if \n(pf \
76 .       nx \*(||/null.me
77 .\"\f            *** INTERNAL GP MACROS ***
78 .de @C                  \" --- change ev's, taking info with us
79 .nr _S \\n(.s
80 .nr _V \\n(.v
81 .nr _F \\n(.f
82 .nr _I \\n(.i
83 .ev \\$1
84 .ps \\n(_S
85 .vs \\n(_Vu
86 .ft \\n(_F
87 'in \\n(_Iu
88 .xl \\n($lu
89 .lt \\n($lu
90 .rr _S
91 .rr _V
92 .rr _F
93 .rr _I
94 .ls 1
95 'ce 0
96 ..
97 .de @D                  \" --- determine display type (Indent, Left, Center)
98 .ds |p "\\$3
99 .nr _d \\$1
100 .ie "\\$2"C" \
101 .       nr _d 1
102 .el .ie "\\$2"L" \
103 .       nr _d 2
104 .el .ie "\\$2"I" \
105 .       nr _d 3
106 .el .ie "\\$2"M" \
107 .       nr _d 4
108 .el \
109 .       ds |p "\\$2
110 ..
111 .de @z                  \" --- end macro
112 .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
113 .if !"\\n(.z"" \
114 \{\
115 .       tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
116 .       di
117 .       ex
118 .\}
119 .if \\n(?a \
120 .       bp                      \" force out final table
121 .rm bp
122 .rm @b\"                        \" don't start another page
123 .if t \
124 .       wh -1p @m
125 .br
126 .if \n@>1 .tm << @z
127 ..
128 .de @I                  \" --- initialize processor
129 .rm th
130 .rm ac
131 .rm lo
132 .rm sc
133 .rm @I
134 ..
135 .\"\f            *** STANDARD HEADERS AND FOOTERS ***
136 .de he                  \" *** define header
137 .ie !\\n(.$ \
138 \{\
139 .       rm |4
140 .       rm |5
141 .\}
142 .el \
143 \{\
144 .       ds |4 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
145 .       ds |5 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
146 .\}
147 ..
148 .de eh                  \" *** define even header
149 .ie !\\n(.$ \
150 .       rm |4
151 .el \
152 .       ds |4 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
153 ..
154 .de oh                  \" *** define odd header
155 .ie !\\n(.$ \
156 .       rm |5
157 .el \
158 .       ds |5 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
159 ..
160 .de fo                  \" *** define footer
161 .ie !\\n(.$ \
162 \{\
163 .       rm |6
164 .       rm |7
165 .\}
166 .el \
167 \{\
168 .       ds |6 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
169 .       ds |7 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
170 .\}
171 ..
172 .de ef                  \" *** define even foot
173 .ie !\\n(.$ \
174 .       rm |6
175 .el \
176 .       ds |6 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
177 ..
178 .de of                  \" *** define odd footer
179 .ie !\\n(.$ \
180 .       rm |7
181 .el \
182 .       ds |7 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
183 ..
184 .de ep                  \" *** end page (must always be followed by a .bp)
185 .if \\n(nl>0 \
186 \{\
187 .       wh 0
188 .       rs
189 .       @b
190 .\}
191 ..
192 .\"\f            *** INTERNAL HEADER AND FOOTER MACROS ***
193 .de @h                  \" --- header
194 .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
195 .if (\\n(.i+\\n(.o)>=\\n(.l \
196 .       tm Line \\n(c. -- Offset + indent exceeds line length
197 .if t .if (\\n(.l+\\n(.o)>7.75i \
198 .       tm Line \\n(c. -- Offset + line length exceeds paper width
199 .\" initialize a pile of junk
200 .nr ?h \\n(?H                   \" transfer "next page" to "this page"
201 .rr ?H
202 .nr ?c \\n(?C
203 .rr ?C
204 .if !"\\*(|4"" .rn |4 |0
205 .if !"\\*(|5"" .rn |5 |1
206 .if !"\\*(|6"" .rn |6 |2
207 .if !"\\*(|7"" .rn |7 |3
208 .nr _w 0                        \" reset max footnote width
209 .nr ?W 0                        \" no wide floats this page (yet)
210 .nr ?I 1
211 .\" begin actual header stuff
212 .ev 2
213 .rs
214 .if t .@m                       \" output cut mark
215 .if \\n(hm>0 \
216 .       sp |\\n(hmu             \" move to header position
217 .@t $h                          \" output header title
218 .if \\n(tm<=0 \
219 .       nr tm \n(.Vu
220 .sp |\\n(tmu                    \" move to top of text
221 .ev
222 .mk _k                          \" for columned output
223 .if \\n(?n .nm 1                \" restore line numbering if n1 mode
224 .nr $c 1                        \" set first column
225 .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
226 .ie \\n(?s \
227 \{\
228 .       rr ?s
229 .       rs
230 '       @b
231 .\}
232 .el \
233 .       @n                      \" begin the column
234 .if \n@>2 .tm << @h
235 ..
236 .if \nv=2 \
237 \{\
238 .       de @m           \" --- output cut mark (only on C/A/T-style)
239 .       @O 0
240 .       lt 7.5i
241 .       tl '\(rn''\(rn'
242 .       @O
243 .       lt
244 ..
245 .\}
246 .de @n                  \" --- new column or page
247 .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
248 .if \\n(bm<=0 \
249 .       nr bm \\n(.Vu
250 .if (\\n(_w<=\\n($l)&(\\n(?W=0) \
251 \{\
252 .       nr _b (\\n(ppu*\\n($ru)/2u      \" compute fudge factor (must be < 1P)
253 .       if \\n(_bu>((\\n(bmu-\\n(fmu-(\\n(tpu*\\n($ru))/2u) \
254 .               nr _b (\\n(ppu*\\n($ru)-\n(.Vu
255 .       nr _b +\\n(bmu
256 .\}
257 .nr _B \\n(_bu
258 .ch @f
259 .wh -\\n(_bu @f
260 .nr _b +(\\n(ppu*\\n($ru)       \" add 1 paragraph v in case of sweep past
261 .if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
262 .nr ?f 0                        \" reset footnote flag
263 .if \\n(?o \
264 \{\
265 .       (f _                    \" reprocess footnotes which run off page
266 .       nf
267 .       |o
268 .       fi
269 .       )f
270 .       rm |o
271 .\}
272 .nr ?o 0
273 .if \\n(?T \
274 \{\
275 .       nr _i \\n(.i
276 .       in \\n($iu
277 .       |h                      \" output the table header
278 .       in \\n(_iu
279 .       rr _i
280 .       mk #T                   \" for tbl commands
281 .       ns
282 .\}
283 .if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
284 \{\
285 .       nr ?a 0                 \" output floating keep
286 .       @k |t
287 .       if \\n(?w \
288 .               mk _k           \" don't overstrike wide keeps
289 .       nr ?w 0
290 .\}
291 .os
292 .$H                             \" special column header macro
293 .ns
294 ..
295 .de @f                  \" --- footer
296 .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
297 .if \n@>2 .nr VL \\n(.pu-\\n(nlu
298 .if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
299 .ec
300 .if \\n(?T \
301 \{\
302 .       nr T. 1                 \" for tbl commands (to output bottom line)
303 .       T# 1                    \" output the sides and bottom lines
304 .       br
305 .\}
306 .ev 2
307 .ce 0
308 .if \\n(?b \
309 \{\
310 .       nr ?b 0
311 .       @k |b\"                 \" output bottom of page tables
312 .\}
313 .if \\n(?f \
314 .       @o                      \" output footnote if present
315 .ie \\n($c<\\n($m \
316 .       @c                      \" handle new column
317 .el \
318 .       @e                      \" new page
319 .ev
320 .if \n@>2 .tm << @f
321 ..
322 .de @o                  \" --- output footnote
323 .nf
324 .ls 1
325 .in 0
326 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
327 .wh -\\n(_Bu @r
328 .|f
329 .fi
330 .if \n@>2 .tm @o triggered @r (?o) = \\n(?o
331 .if \\n(?o \
332 \{\
333 .       di                      \" just in case triggered @r
334 .       if \\n(dn=0 \
335 \{\
336 .               rm |o
337 .               nr ?o 0
338 .       \}
339 .       nr dn \\n(_D
340 .       rr _D
341 .\}
342 .rm |f
343 .ch @r
344 ..
345 .de @c                  \" --- new column
346 .if \n@>2 .tm   >> @c %=\\n%
347 .rs
348 .sp |\\n(_ku
349 .@O +\\n($lu+\\n($su
350 .nr $c +1
351 .@n
352 ..
353 .de @e                  \" --- end page
354 .if \n@>2 .tm   >> @e
355 .@O \\n(_ou
356 .rs
357 .sp |\\n(.pu-\\n(fmu-(\\n(tpu*\\n($ru)  \" move to footer position
358 .@t $f                          \" output footer title
359 .nr ?h 0
360 .bp
361 ..
362 .de @t                  \" --- output header or footer title
363 .if !\\n(?h \
364 \{\
365 .       sz \\n(tp               \" set header/footer type fonts, etc.
366 .       @F \\n(tf
367 .       lt \\n(_Lu              \" make title span entire page
368 .       nf
369 .       \\$1
370 .       br
371 .\}
372 ..
373 .de $h                  \" $$$ print header
374 .rm |z
375 .if !\\n(?c \
376 \{\
377 .       if e .ds |z "\\*(|0
378 .       if o .ds |z "\\*(|1
379 .\}
380 .if !\(ts\\*(|z\(ts\(ts \
381 '       tl \\*(|z
382 .rm |z
383 ..
384 .de $f                  \" $$$ print footer
385 .rm |z
386 .if \\n(?c \
387 \{\
388 .       if e .ds |z "\\*(|0
389 .       if o .ds |z "\\*(|1
390 .\}
391 .if \(ts\\*(|z\(ts\(ts \
392 \{\
393 .       if e .ds |z "\\*(|2
394 .       if o .ds |z "\\*(|3
395 .\}
396 .if !\(ts\\*(|z\(ts\(ts \
397 '       tl \\*(|z
398 .rm |z
399 ..
400 .de @r                  \" --- reprocess overflow footnotes
401 .if \n@>3 .tm           >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
402 .di |o                          \" save overflow footnote
403 .nr ?o 1
404 .nr _D \\n(dn
405 .ns
406 ..
407 .\"\f            *** COMMANDS WITH VARIANT DEFINITIONS ***
408 .rn bp @b               \" --- begin page
409 .de bp                  \" *** begin new page (overrides columns)
410 .nr $c \\n($m                   \" force new page, not new column
411 .ie \\n(nl>0 \
412 .       @b \\$1
413 .el \
414 \{\
415 .       if \\n(.$>0 \
416 .               pn \\$1
417 .       if \\n(?I \
418 .               @h              \" 'spring' the header trap
419 .\}
420 .br
421 .wh 0 @h                        \" reset header
422 ..
423 .rn ll xl               \" *** special line length (local)
424 .de ll                  \" *** line length (global to environments)
425 .xl \\$1
426 .lt \\$1
427 .nr $l \\n(.l
428 .if (\\n($m<=1):(\\n($l>\\n(_L) \
429 .       nr _L \\n(.l
430 ..
431 .rn po @O               \" --- local page offset
432 .de po                  \" *** page offset
433 .@O \\$1
434 .nr _o \\n(.o
435 ..
436 .\"\f            *** MISCELLANEOUS ROFF COMMANDS ***
437 .de hx                  \" *** suppress headers and footers next page
438 .nr ?H 1
439 ..
440 .de ix                  \" *** indent, no break
441 'in \\$1
442 ..
443 .de bl                  \" *** contiguous blank lines
444 .br
445 .ne \\$1
446 .rs
447 .sp \\$1
448 ..
449 .de n1                  \" *** line numbering 1
450 .nm 1
451 .xl -\w'0000'u
452 .nr ?n 1
453 ..
454 .de n2                  \" *** line numbering 2
455 .nm \\$1
456 .ie \\n(.$ \
457 .       xl -\w'0000'u
458 .el \
459 .       xl \\n($lu
460 ..
461 .de pa                  \" *** new page
462 .bp \\$1
463 ..
464 .de ro                  \" *** roman page numbers
465 .af % i
466 ..
467 .de ar                  \" *** arabic page numbers
468 .af % 1
469 ..
470 .de m1                  \" *** position one space
471 .nr _0 \\n(hmu
472 .nr hm \\$1v
473 .nr tm +\\n(hmu-\\n(_0u
474 .rr _0
475 ..
476 .de m2                  \" *** position two space
477 .nr tm \\n(hmu+\\n(tpp+\\$1v
478 ..
479 .de m3                  \" *** position three space
480 .nr bm \\n(fmu+\\n(tpp+\\$1v
481 ..
482 .de m4                  \" *** position four space
483 .nr _0 \\n(fmu
484 .nr fm \\$1v
485 .nr bm +\\n(fmu-\\n(_0u
486 ..
487 .de sk                  \" *** leave a blank page (next page)
488 .if \\n(.$>0 \
489 .       tm Line \\n(c. -- I cannot skip multiple pages
490 .nr ?s 1
491 ..
492 .\"\f            *** MISCELLANEOUS USER SUPPORT COMMANDS ***
493 .de re                  \" *** reset tabs (TROFF defines 15 stops default)
494 .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
495 ..
496 .if t .ig
497 .de re                  \" *** reset tabs (NROFF version)
498 .ta 0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i +0.8i
499 ..
500 .de ba                  \" *** set base indent
501 .ie \\n(.$ \
502 .       nr $i \\$1n
503 .el \
504 .       nr $i \\n(siu*\\n($0u
505 ..
506 .de hl                  \" *** draw horizontal line
507 .br
508 \l'\\n(.lu-\\n(.iu'
509 .sp
510 ..
511 .\"\f            *** PARAGRAPHING ***
512 .de pp                  \" *** paragraph
513 .lp \\n(piu
514 ..
515 .de lp                  \" *** left aligned paragraph
516 .@p
517 .if \\n(.$ \
518 .       ti +\\$1
519 .nr $p 0 1
520 ..
521 .de ip                  \" *** indented paragraph w/ optional tag
522 .if (\\n(ii>0)&(\\n(ii<1n) \
523 .       nr ii \\n(iin
524 .nr _0 \\n(ii
525 .if \\n(.$>1 \
526 .       nr _0 \\$2n
527 .@p \\n(_0u
528 .if \\w"\\$1" \
529 \{\
530 .       ti -\\n(_0u
531 .       ie \\w"\\$1">=\\n(_0 \
532 \{\
533 \&\\$1
534 .               br
535 .       \}
536 .       el \&\\$1\h'|\\n(_0u'\c
537 .\}
538 .rr _0
539 ..
540 .de np                  \" *** numbered paragraph
541 .if \\n($p<0 \
542 .       nr $p 0                 \" reset number after .bu
543 .nr $p +1                       \" increment paragraph number
544 .@p \w'\0(000)\0'u
545 .ti -\w'\0(000)\0'u
546 \0(\\n($p)\h'|\w'\0(000)\0'u'\c
547 ..
548 .de bu                  \" *** bulleted paragraph
549 .br
550 .if \\n($p<0 \
551 .       ns                      \" don't space between .bu paragraphs
552 .nr $p 0-1                      \" mark "bulleted paragraph" mode
553 .@p \w'\0\(bu\0'u
554 .ti -\w'\0\(bu\0'u
555 \0\(bu\0\c
556 ..
557 .de @p                  \" --- initialize for paragraph
558 .@I                             \" initialize macro processor
559 .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
560 .in \\n($iu+\\n(pou
561 .if \\n(.$ \
562 .       in +\\$1n
563 .ce 0
564 .fi
565 .@F \\n(pf
566 .sz \\n(pp
567 .sp \\n(psu
568 .ne \\n(.Lv+\\n(.Vu
569 .ns
570 ..
571 .\"\f            *** SECTION HEADINGS ***
572 .de sh                  \" &&& section heading
573 .rn sh @T
574 .so \\*(||/sh.me
575 .sh "\\$1" "\\$2" \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
576 .rm @T
577 ..
578 .de $p                  \" $$$ print section heading
579 .if (\\n(si>0)&(\\n(.$>2) \
580 .       nr $i \\$3*\\n(si
581 .in \\n($iu
582 .ie !"\\$1\\$2"" \
583 \{\
584 .       sp \\n(ssu              \" one of them is non-null
585 .       ne \\n(.Lv+\\n(.Vu+\\n(psu+(\\n(spu*\\n($ru*\\n(.Lu)
586 .       ie \\n(.$>2 \
587 .               ti -(\\n(siu-\\n(sou)
588 .       el \
589 .               ti +\\n(sou
590 .       @F \\n(sf
591 .       sz \\n(sp
592 .       if \\$3>0 \
593 .               $\\$3
594 .       if \w"\\$2">0 \\$2.
595 .       if \w"\\$1">0 \\$1\f1\ \ \&
596 .\}
597 .el \
598 .       sp \\n(psu
599 .@F \\n(pf
600 .sz \\n(pp
601 ..
602 .de uh                  \" *** unnumbered section heading
603 .rn uh @T
604 .so \\*(||/sh.me
605 .uh "\\$1"
606 .rm @T
607 ..
608 .\"\f            *** COLUMNED OUTPUT ***
609 .de 2c                  \" *** double columned output
610 .br
611 .if \\n($m>1 \
612 .       1c                      \" revert to 1c if already 2c
613 .nr $c 1
614 .nr $m 2
615 .if \\n(.$>1 \
616 .       nr $m \\$2
617 .if \\n(.$>0 \
618 .       nr $s \\$1n             \" param 1: column separation
619 .nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
620 .xl \\n($lu
621 .mk _k
622 .ns
623 ..
624 .de 1c                  \" *** single columned output
625 .br
626 .nr $c 1
627 .nr $m 1
628 .ll \\n(_Lu                     \" return to normal output
629 .sp |\\n(.hu
630 .@O \\n(_ou
631 ..
632 .de bc                  \" *** begin column
633 .sp 24i
634 ..
635 .\"\f            *** FLOATING TABLES AND NONFLOATING BLOCKS ***
636 .de (z                  \" &&& begin floating keep
637 .rn (z @V
638 .so \\*(||/float.me
639 .(z \\$1 \\$2
640 .rm @V
641 ..
642 .de )z                  \" &&& end floating keep
643 .tm Line \\n(c. -- unmatched .)z
644 ..
645 .de (t                  \" XXX temp ref to (z
646 .(z \\$1 \\$2
647 ..
648 .de )t                  \" XXX temp ref to )t
649 .)z \\$1 \\$2
650 ..
651 .de (b                  \" *** begin block
652 .br
653 .@D 3 \\$1 \\$2
654 .sp \\n(bsu
655 .@(
656 ..
657 .de )b                  \" *** end block
658 .br
659 .@)
660 .if (\\n(bt=0):(\\n(.t<\\n(bt) \
661 .       ne \\n(dnu              \" make it all on one page
662 .ls 1
663 .nf
664 .|k
665 .ec
666 .fi
667 .in 0
668 .xl \\n($lu
669 .ev
670 .rm |k
671 .sp \\n(bsu+\\n(.Lv-1v
672 ..
673 .de @(                  \" --- begin keep
674 .if !"\\n(.z"" .tm Line \\n(c. -- Illegal nested keep \\n(.z
675 .@M
676 .di |k
677 \!'rs
678 ..
679 .de @M                  \" --- set modes for display
680 .nr ?k 1
681 .@C 1
682 .@F \\n(df
683 .vs \\n(.su*\\n($Ru
684 .nf
685 .if "\\*(|p"F" \
686 .       fi                      \" set fill mode if "F" parameter
687 .if \\n(_d=4 \
688 .       in 0
689 .if \\n(_d=3 \
690 \{\
691 .       in +\\n(biu
692 .       xl -\\n(biu
693 .\}
694 .if \\n(_d=1 \
695 .       ce 10000
696 ..
697 .de @)                  \" --- end keep
698 .br
699 .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
700 .nr ?k 0
701 .di
702 .in 0
703 .ce 0
704 ..
705 .de (c                  \" *** begin block centered text
706 .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
707 .di |c
708 ..
709 .de )c                  \" *** end block centered text
710 .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
711 .br                             \" force out final line
712 .di
713 .if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
714 .ev 1
715 .ls 1
716 .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
717 .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
718 .nf
719 .|c
720 .ec
721 .in
722 .ls
723 .ev
724 .rm |c
725 ..
726 .\"\f            *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
727 .de (q                  \" *** begin block quote
728 .br
729 .@C 1
730 .fi
731 .sp \\n(qsu
732 .in +\\n(qiu
733 .xl -\\n(qiu
734 .sz \\n(qp
735 ..
736 .de )q                  \" *** end block quote
737 .br
738 .ev
739 .sp \\n(qsu+\\n(.Lv-1v
740 .nr ?k 0
741 ..
742 .de (l                  \" *** begin list
743 .br
744 .sp \\n(bsu
745 .@D 3 \\$1 \\$2
746 .@M
747 ..
748 .de )l                  \" *** end list
749 .br
750 .ev
751 .sp \\n(bsu+\\n(.Lv-1v
752 .nr ?k 0
753 ..
754 .\"\f            *** PREPROCESSOR SUPPORT ***
755 .\"
756 .\"     EQN
757 .\"
758 .de EQ                  \" &&& begin equation
759 .rn EQ @T
760 .so \\*(||/eqn.me
761 .EQ \\$1 \\$2
762 .rm @T
763 ..
764 .\"
765 .\"     TBL
766 .\"
767 .de TS                  \" &&& begin table
768 .rn TS @W
769 .so \\*(||/tbl.me
770 .TS \\$1 \\$2
771 .rm @W
772 ..
773 .\"
774 .\"     REFER
775 .\"
776 .de ]-                  \" &&& initialize reference
777 .rn ]- @]
778 .so \\*(||/refer.me
779 .]-
780 .rm @]
781 ..
782 .de ]<                  \" &&& initialize reference
783 .rn ]< @]
784 .so \\*(||/refer.me
785 .]<
786 .rm @]
787 ..
788 .if n .ds [. " [
789 .if t .ds [. \s-2\v'-.4m'\f1
790 .if n .ds .] ]
791 .if t .ds .] \v'.4m'\s+2\fP
792 .if n .ds <. "
793 .if t .ds <. .
794 .if n .ds >. .
795 .if t .ds >. "
796 .\"
797 .\"     IDEAL
798 .\"
799 .de IS                  \" *** start ideal picture
800 .nr g7 \\n(.u
801 .ls 1
802 ..
803 .de IF
804 .if \\n(g7 .fi
805 .ls
806 ..
807 .de IE                  \" *** end ideal picture
808 .if \\n(g7 .fi
809 .ls
810 ..
811 .\"
812 .\"     PIC
813 .\"
814 .de PS          \" *** start picture: $1=height, $2=width in units or inches
815 .if t \
816 .       sp 0.3
817 .nr g7 \\$2
818 .in (\\n(.lu-\\n(g7u)/2u
819 .ne \\$1u
820 .nr g7 \\n(.u
821 .ls 1
822 ..
823 .de PE                  \" *** end picture
824 .ls
825 .in
826 .if \\n(g7 .fi
827 .if t .sp .6
828 ..
829 .\"
830 .\"     GREMLIN
831 .\"
832 .de GS                  \" *** start gremlin picture
833 .nr g7 (\\n(.lu-\\n(g1u)/2u
834 .if "\\$1"L" .nr g7 \\n(.iu
835 .if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
836 .in \\n(g7u
837 .nr g7 \\n(.u
838 .ls 1
839 .nf
840 .ne \\n(g2u
841 ..
842 .de GE                  \" *** end gremlin picture
843 .GF
844 .if t .sp .6
845 ..
846 .de GF                  \" *** finish gremlin picture; stay at top
847 .ls
848 .in
849 .if \\n(g7 .fi
850 ..
851 .\"\f            *** FONT AIDS ***
852 .de sz                  \" *** set point size and vertical spacing
853 .ps \\$1
854 .vs \\n(.su*\\n($ru             \" default vs at pointsize + 20%
855 .bd S B \\n(.su/3u
856 ..
857 .de r                   \" *** enter roman font
858 .nr _F \\n(.f
859 .ul 0
860 .ft 1
861 .if \\n(.$ \&\\$1\f\\n(_F\\$2
862 .rr _F
863 ..
864 .de i                   \" *** enter italic
865 .nr _F \\n(.f
866 .ul 0
867 .ft 2
868 .if \\n(.$ \&\\$1\f\\n(_F\\$2
869 .rr _F
870 ..
871 .de b                   \" *** enter boldface (underline in NROFF)
872 .nr _F \\n(.f
873 .ul 0
874 .ft \\n($b
875 .if \\n(.$ \&\\$1\f\\n(_F\\$2
876 .rr _F
877 ..
878 .de rb                  \" *** enter real boldface (not underlined in NROFF)
879 .nr _F \\n(.f
880 .ul 0
881 .ft 3
882 .if \\n(.$ \&\\$1\f\\n(_F\\$2
883 .rr _F
884 ..
885 .de u                   \" *** enter underlined word
886 \&\\$1\l'|0\(ul'\\$2
887 ..
888 .de q                   \" *** enter quoted word
889 \&\\*(lq\\$1\\*(rq\\$2
890 ..
891 .de bi                  \" *** enter word in bold italics
892 .ft 2
893 .ie t \&\k~\\$1\h'|\\n~u+(\\w' 'u/4u)'\\$1\fP\\$2
894 .el \&\\$1\fP\\$2
895 ..
896 .de bx                  \" *** enter boxed word
897 .ie \\n($T \&\f2\\$1\fP\\$2
898 .el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
899 ..
900 .de sm                  \" *** print in smaller font
901 \s-1\\$1\\s0\\$2
902 ..
903 .de @F                  \" --- change font (8 -> underlined, 0 -> no change)
904 .nr ~ \\$1
905 .if \\n~>0 \
906 \{\
907 .       ul 0
908 .       if \\n~=8 \
909 .               nr ~ \\n($b
910 .       ft \\n~
911 .\}
912 .rr ~
913 ..
914 .\"\f            *** FOOTNOTING ***
915 .de (f                  \" &&& begin footnote
916 .rn (f @U
917 .so \\*(||/footnote.me
918 .(f \\$1 \\$2
919 .rm @U
920 ..
921 .de )f                  \" &&& end footnote
922 .tm Line \\n(c. -- unmatched .)f
923 ..
924 .de $s                  \" $$$ footnote separator
925 \l'2i'
926 .if n \
927 .       sp 0.3
928 ..
929 .\"\f            *** DELAYED TEXT ***
930 .de (d                  \" &&& begin delayed text
931 .rn (d @U
932 .so \\*(||/deltext.me
933 .(d \\$1 \\$2
934 .rm @U
935 ..
936 .de )d                  \" &&& end delayed text
937 .tm Line \\n(c. -- unmatched .)d
938 ..
939 .\"\f            *** INDEXES (TABLE OF CONTENTS) ***
940 .de (x                  \" &&& begin index
941 .rn (x @U
942 .so \\*(||/index.me
943 .(x \\$1 \\$2
944 .rm @U
945 ..
946 .de )x                  \" &&& end index entry
947 .tm Line \\n(c. -- unmatched .)x
948 ..
949 .\"\f            *** STUFF FOR "STANDARD" PAPERS ***
950 .de th                  \" *** set "thesis" mode
951 .so \\*(||/thesis.me
952 .rm th
953 ..
954 .de +c                  \" *** begin chapter
955 .ep                             \" force out footnotes
956 .if \\n(?o:\\n(?a \
957 \{\
958 .       bp                      \" force out a table or more footnote
959 .       rs
960 .       ep
961 .\}
962 .nr ?C 1
963 .nr $f 1 1
964 .ds * \\*[1\\*]\k*
965 .if \\n(?R \
966 .       pn 1
967 .bp
968 .in \\n($iu                     \" reset the indent
969 .rs
970 .ie \\n(.$ \
971 .       $c "\\$1"
972 .el \
973 .       sp 3
974 ..
975 .de ++                  \" *** declare chapter type
976 .nr _0 0
977 .if "\\$1"C" \
978 .       nr _0 1                 \" chapter
979 .if "\\$1"RC" \
980 .       nr _0 11                \" renumbered chapter
981 .if "\\$1"A" \
982 .       nr _0 2                 \" appendix
983 .if "\\$1"RA" \
984 .       nr _0 12                \" renumbered appendix
985 .if "\\$1"P" \
986 .       nr _0 3                 \" preliminary material
987 .if "\\$1"B" \
988 .       nr _0 4                 \" bibliographic material
989 .if "\\$1"AB" \
990 .       nr _0 5                 \" abstract
991 .if \\n(_0=0 \
992 .       tm Line \\n(c. -- Bad mode to .++
993 .nr ?R 0
994 .if \\n(_0>10 \
995 .\{
996 .       nr ?R 1
997 .       nr _0 -10
998 .\}
999 .nr ch 0 1
1000 .if (\\n(_0=3):(\\n(_0=5) \
1001 .       pn 1                    \" must do before .ep
1002 .ep                             \" end page for correct page number types
1003 .if \\n(_0=1 \
1004 \{\
1005 .       af ch 1
1006 .       af % 1
1007 .\}
1008 .if \\n(_0=2 \
1009 \{\
1010 .       af ch A
1011 .       af % 1
1012 .\}
1013 .if \\n(_0=3 \
1014 .       af % i
1015 .if \\n(_0=4 \
1016 .       af % 1
1017 .if \\n(_0=5 \
1018 .       af % 1
1019 .if \\n(.$>1 \
1020 .       he \\$2
1021 .if !\\n(_0=\\n(_M .if \\n(_M=3 \
1022 .       pn 1
1023 .nr _M \\n(_0
1024 .rr _0
1025 ..
1026 .de $c                  \" $$$ print chapter title
1027 .sz 12
1028 .ft B
1029 .ce 1000
1030 .if \\n(_M<3 \
1031 .       nr ch +1
1032 .ie \\n(_M=1 CHAPTER\ \ \\n(ch
1033 .el .if \\n(_M=2 APPENDIX\ \ \\n(ch
1034 .if \w"\\$1" .sp 3-\\n(.L
1035 .if \w"\\$1" \\$1
1036 .if (\\n(_M<3):(\w"\\$1") \
1037 .       sp 4-\\n(.L
1038 .ce 0
1039 .ft
1040 .sz
1041 .ie \\n(_M=1 \
1042 .       $C Chapter \\n(ch "\\$1"
1043 .el .if \\n(_M=2 \
1044 .       $C Appendix \\n(ch "\\$1"
1045 ..
1046 .de tp                  \" *** title page
1047 .hx
1048 .bp
1049 .br
1050 .rs
1051 .pn \\n%
1052 ..
1053 .de ac                  \" *** setup for ACM photo-ready paper
1054 .rn ac @T
1055 .so \\*(||/acm.me
1056 .ac "\\$1" "\\$2"
1057 .rm @T
1058 ..
1059 .de lo                  \" *** pull in the set of local macros
1060 .\" all these macros should be named "*X", where X is any letter
1061 .so \\*(||/local.me
1062 .rm lo
1063 ..
1064 .de lh                  \" *** letterhead
1065 .so \\*(||/letterhead.me
1066 ..
1067 .\"\f            *** DATES ***
1068 .if \n(mo=1 .ds mo January
1069 .if \n(mo=2 .ds mo February
1070 .if \n(mo=3 .ds mo March
1071 .if \n(mo=4 .ds mo April
1072 .if \n(mo=5 .ds mo May
1073 .if \n(mo=6 .ds mo June
1074 .if \n(mo=7 .ds mo July
1075 .if \n(mo=8 .ds mo August
1076 .if \n(mo=9 .ds mo September
1077 .if \n(mo=10 .ds mo October
1078 .if \n(mo=11 .ds mo November
1079 .if \n(mo=12 .ds mo December
1080 .if \n(dw=1 .ds dw Sunday
1081 .if \n(dw=2 .ds dw Monday
1082 .if \n(dw=3 .ds dw Tuesday
1083 .if \n(dw=4 .ds dw Wednesday
1084 .if \n(dw=5 .ds dw Thursday
1085 .if \n(dw=6 .ds dw Friday
1086 .if \n(dw=7 .ds dw Saturday
1087 .ds td \*(mo \n(dy, \n(yr+1900
1088 .\"\f            *** PARAMETRIC INITIALIZATIONS ***
1089 .if (1m<0.1i)&(\nx!=0) \
1090 .       vs 9p                   \" for 12-pitch DTC terminals
1091 .rr x
1092 .nr $r \n(.v/\n(.s              \" ratio of vs to ps for .sz request
1093 .nr $R \n($r                    \" ratio for displays & footnotes
1094 .nr hm 4v                       \" header margin
1095 .nr tm 7v                       \" top margin
1096 .nr bm 6v                       \" bottom margin
1097 .nr fm 3v                       \" footer margin
1098 .nr tf 3                        \" title font: (real) Times Bold
1099 .nr tp 10                       \" title point size
1100 .hy 14
1101 .nr bi 4m                       \" indent for blocks
1102 .nr pi 5n                       \" indent for paragraphs
1103 .nr pf 1                        \" normal text font
1104 .nr pp 10                       \" normal text point size
1105 .nr qi 4n                       \" indent for quotes
1106 .nr qp -1                       \" down one point
1107 .nr ii 5n                       \" indent for .ip's and .np's
1108 .nr $m 1                        \" max number of columns
1109 .nr $s 4n                       \" column separation
1110 .bd S B 3
1111 .\"\f            *** OTHER INITIALIZATION ***
1112 .ds [ \u\x'-0.25v'
1113 .ds ] \d
1114 .ds < \d\x'0.25v'
1115 .ds > \u
1116 .ds - --
1117 .if t \
1118 \{\
1119 .       ds [ \v'-0.4m'\x'-0.2m'\s-3
1120 .       ds ] \s0\v'0.4m'
1121 .       ds < \v'0.4m'\x'0.2m'\s-3
1122 .       ds > \s0\v'-0.4m'
1123 .       ds - \(em
1124 .       nr fi 0.3i
1125 .\}
1126 .if n \
1127 \{\
1128 .       nr fi 3n
1129 .\}
1130 .nr _o \n(.o
1131 .if n .po 1i
1132 .if \n(.V=1v \
1133 .       nr $T 2
1134 .if n .if \n(.T=0 \
1135 .       nr $T 1
1136 .if \nv=2 \
1137 \{\
1138 .       nr $T 0
1139 .       po -0.5i                \" make ugly line on LHS on C/A/T typesetters
1140 .\}
1141 .if \n($T \
1142 \{\
1143 .       if \n($T=1 \
1144 .               po 0
1145 .       ds [ [
1146 .       ds ] ]
1147 .       ds < <
1148 .       ds > >
1149 .\}
1150 .nr $b \nb                      \" figure the real font 8 font
1151 .rr b
1152 .if \n($b=0 \
1153 \{\
1154 .       if n .nr $b 2           \" italic
1155 .       if t .nr $b 3           \" bold
1156 .\}
1157 .nr ps 0.5v                     \" paragraph pre/post spacing
1158 .if \n($T \
1159 .       nr ps 1v
1160 .if t .nr ps 0.35v
1161 .nr bs \n(ps                    \" block pre/post spacing
1162 .nr qs \n(ps                    \" quote pre/post spacing
1163 .nr zs 1v                       \" float-block pre/postspacing
1164 .nr xs 0.2v                     \" index prespacing
1165 .nr fs 0.2v                     \" footnote prespacing
1166 .if \n($T \
1167 .       nr fs 0
1168 .if n .nr es 1v                 \" equation pre/postspacing
1169 .if t .nr es 0.5v
1170 .wh 0 @h                        \" set header
1171 .nr $l \n(.lu                   \" line length
1172 .nr _L \n(.lu                   \" line length of page
1173 .nr $c 1                        \" current column number
1174 .nr $f 1 1                      \" footnote number
1175 .ds * \*[1\*]\k*\"              \" footnote "name"
1176 .nr $d 1 1                      \" delayed text number
1177 .ds # [1]\k#\"                  \" delayed text "name"
1178 .nr _M 1                        \" chapter mode is chapter
1179 .ds lq \&"\"                    \" left quote
1180 .ds rq \&"\"                    \" right quote
1181 .if t \
1182 .       ds lq ``
1183 .if t \
1184 .       ds rq ''
1185 .em @z
1186 .\"             *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
1187 .de sc                  \" *** define special characters
1188 .so \\*(||/chars.me
1189 .rm sc
1190 ..
1191 .ll 6.0i
1192 .lt 6.0i