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