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