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