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