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