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