2BSD/src/me/tmac.e

.nr _0 \n(.c
.\"**********************************************************************
.\"*									*
.\"*	******  - M E   N R O F F / T R O F F   M A C R O S  ******	*
.\"*									*
.\"*	Produced for your edification and enjoyment by:			*
.\"*		Eric Allman						*
.\"*		Electronics Research Laboratory				*
.\"*		U.C. Berkeley.						*
.\"*									*
.\"*	VERSION 1.1	First Release: 11 Sept 1978			*
.\"*	See file \*(||/revisions for revision history			*
.\"*									*
.\"*	Documentation is available.					*
.\"*									*
.\"**********************************************************************
.\" %beginstrip%
.\"
.\"	Code on .de commands:
.\"		***	a user interface macro.
.\"		&&&	a user interface macro which is redefined
.\"			when used to be the real thing.
.\"		$$$	a macro which may be redefined by the user
.\"			to provide variant functions.
.\"		---	an internal macro.
.\"
.if !\n(.V .tm You are using the wrong version of NROFF/TROFF!!
.if !\n(.V .tm This macro package works only on the version seven
.if !\n(.V .tm release of NROFF and TROFF.
.if !\n(.V .ex
.if \n(pf \
.	nx \*(||/null.me
.\"		*** INTERNAL GP MACROS ***
.de @C			\" --- change ev's, taking info with us
.nr _S \\n(.s
.nr _V \\n(.v
.nr _F \\n(.f
.nr _I \\n(.i
.ev \\$1
.ps \\n(_Su
.vs \\n(_Vu
.ft \\n(_F
'in \\n(_Iu
.xl \\n($lu
.lt \\n($lu
.rr _S
.rr _V
.rr _F
.rr _I
.ls 1
'ce 0
..
.de @D			\" --- determine display type (Indent, Left, Center)
.ds |p "\\$3
.nr _d \\$1
.ie "\\$2"C" \
.	nr _d 1
.el .ie "\\$2"L" \
.	nr _d 2
.el .ie "\\$2"I" \
.	nr _d 3
.el .ie "\\$2"M" \
.	nr _d 4
.el \
.	ds |p "\\$2
..
.de @z			\" --- end macro
.if !"\\n(.z"" \
\{\
.	tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
.	di
.	ex
.\}
.if \\n(?a \
.	bp			\" force out final table
.rm bp
.rm @b				\" don't start another page
.if t \
.	wh -1p @m
.br
..
.de @I			\" --- initialize processor
.rm th
.rm ac
.rm lo
.rm sc
.rm @I
..
.\"		*** STANDARD HEADERS AND FOOTERS ***
.de he			\" *** define header
.ie !\\n(.$ \
\{\
.	rm |4
.	rm |5
.\}
.el \
\{\
.	ds |4 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
.	ds |5 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
.\}
..
.de eh			\" *** define even header
.ie !\\n(.$ \
.	rm |4
.el \
.	ds |4 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
..
.de oh			\" *** define odd header
.ie !\\n(.$ \
.	rm |5
.el \
.	ds |5 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
..
.de fo			\" *** define footer
.ie !\\n(.$ \
\{\
.	rm |6
.	rm |7
.\}
.el \
\{\
.	ds |6 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
.	ds |7 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
.\}
..
.de ef			\" *** define even foot
.ie !\\n(.$ \
.	rm |6
.el \
.	ds |6 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
..
.de of			\" *** define odd footer
.ie !\\n(.$ \
.	rm |7
.el \
.	ds |7 "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
..
.de ep			\" *** end page (must always be followed by a .bp)
.if \\n(nl>0 \
\{\
.	wh 0
.	rs
.	@b
.\}
..
.\"		*** INTERNAL HEADER AND FOOTER MACROS ***
.de @h			\" --- header
.if \n@>0 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b
.if (\\n(.i+\\n(.o)>=\\n(.l \
.	tm Line \\n(c. -- Offset + indent exceeds line length
.if t .if (\\n(.l+\\n(.o)>7.75i \
.	tm Line \\n(c. -- Offset + line length exceeds paper width
.\" initialize a pile of junk
.nr ?h \\n(?H			\" transfer "next page" to "this page"
.rr ?H
.nr ?c \\n(?C
.rr ?C
.rn |4 |0
.rn |5 |1
.rn |6 |2
.rn |7 |3
.nr _w 0			\" reset max footnote width
.nr ?I 1
.\" begin actual header stuff
.ev 2
.rs
.if t .@m			\" output cut mark
.if \\n(hm>0 \
.	sp |\\n(hmu		\" move to header position
.if \\n($T=2 \\!.
.@t $h				\" output header title
.if \\n(tm<=0 \
.	nr tm \n(.Vu
.sp |\\n(tmu			\" move to top of text
.ev
.mk _k				\" for columned output
.if \\n(?n .nm 1		\" restore line numbering if n1 mode
.nr $c 1			\" set first column
.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
.ie \\n(?s \
\{\
.	rr ?s
.	rs
'	@b
.\}
.el \
.	@n			\" begin the column
.if \n@>1 .tm << @h
..
.de @m			\" --- output cut mark
.@O 0
.lt 7.5i
.tl '\(rn''\(rn'
.@O
.lt
..
.de @n			\" --- new column or page
.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
.if \\n(bm<=0 \
.	nr bm \\n(.Vu
.if \\n(_w<=\\n($l \
\{\
.	nr _b (\\n(ppu*\\n($ru)/2u	\" compute fudge factor (must be < 1P)
.	if \\n(_bu>((\\n(bmu-\\n(fmu-(\\n(tpu*\\n($ru))/2u) \
.		nr _b (\\n(ppu*\\n($ru)-\n(.Vu
.	nr _b +\\n(bmu
.\}
.nr _B \\n(_bu
.ch @f
.wh -\\n(_bu @f
.nr ?f 0			\" reset footnote flag
.if \\n(?o \
\{\
.	(f			\" reprocess footnotes which run off page
.	nf
.	|o
.	fi
.	)f
.	rm |o
.\}
.nr ?o 0
.if \\n(?T \
\{\
.	nr _i \\n(.i
.	in \\n($iu
.	|h			\" output the table header
.	in \\n(_iu
.	rr _i
.	mk #T			\" for tbl commands
.	ns
.\}
.if \\n(?a \
\{\
.	nr ?a 0			\" output floating keep
.	@k |t
.\}
.os
.$H				\" special column header macro
.ns
..
.de @f			\" --- footer
.if \n@>0 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b
.ec
.if \\n(?T \
\{\
.	nr T. 1			\" for tbl commands (to output bottom line)
.	T# 1			\" output the sides and bottom lines
.	br
.\}
.ev 2
.ce 0
.if \\n(?b \
\{\
.	nr ?b 0
.	@k |b			\" output bottom of page tables
.\}
.if \\n(?f \
.	@o			\" output footnote if present
.ie \\n($c<\\n($m \
.	@c			\" handle new column
.el \
.	@e			\" new page
.ev
.if \n@>2 .tm << @f
..
.de @o			\" --- output footnote
.nf
.ls 1
.in 0
.wh -\\n(_Bu @r
.|f
.fi
.if \\n(?o \
.	di			\" just in case triggered @r
.	if \\n(dn=0 \
\{\
.		rm |o
.		nr ?o 0
.	\}
.	nr dn \\n(_D
.	rr _D
.\}
.rm |f
.ch @r
..
.de @c			\" --- new column
.if \n@>2 .tm	>> @c %=\\n%
.rs
.sp |\\n(_ku
.@O +\\n($lu+\\n($su
.nr $c +1
.@n
..
.de @e			\" --- end page
.if \n@>2 .tm	>> @e
.@O \\n(_ou
.rs
.sp |\\n(.pu-\\n(fmu-(\\n(tpu*\\n($ru)	\" move to footer position
.@t $f				\" output footer title
.nr ?h 0
.bp
..
.de @t			\" --- output header or footer title
.if !\\n(?h \
\{\
.	sz \\n(tp		\" set header/footer type fonts, etc.
.	@F \\n(tf
.	lt \\n(_Lu		\" make title span entire page
.	nf
.	\\$1
.	br
.\}
..
.de $h			\" $$$ print header
.rm |z
.if !\\n(?c \
\{\
.	if e .ds |z "\\*(|0
.	if o .ds |z "\\*(|1
.\}
.if !\(ts\\*(|z\(ts\(ts \
'	tl \\*(|z
.rm |z
..
.de $f			\" $$$ print footer
.rm |z
.if \\n(?c \
\{\
.	if e .ds |z "\\*(|0
.	if o .ds |z "\\*(|1
.\}
.if \(ts\\*(|z\(ts\(ts \
\{\
.	if e .ds |z "\\*(|2
.	if o .ds |z "\\*(|3
.\}
.if !\(ts\\*(|z\(ts\(ts \
'	tl \\*(|z
.rm |z
..
.de @r			\" --- reprocess overflow footnotes
.if \n@>3 .tm		>> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
.di |o				\" save overflow footnote
.nr ?o 1
.nr _D \\n(dn
.ns
..
.\"		*** COMMANDS WITH VARIANT DEFINITIONS ***
.rn bp @b		\" --- begin page
.de bp			\" *** begin new page (overrides columns)
.nr $c \\n($m			\" force new page, not new column
.ie \\n(nl>0 \
.	@b \\$1
.el \
\{\
.	if \\n(.$>0 \
.		pn \\$1
.	if \\n(?I \
.		@h		\" 'spring' the header trap
.\}
.br
.wh 0 @h			\" reset header
..
.rn ll xl		\" *** special line length (local)
.de ll			\" *** line length (global to environments)
.xl \\$1
.lt \\$1
.nr $l \\n(.l
.if (\\n($m<=1):(\\n($l>\\n(_L) \
.	nr _L \\n(.l
..
.rn po @O		\" --- local page offset
.de po			\" *** page offset
.@O \\$1
.nr _o \\n(.o
..
.\"		*** MISCELLANEOUS ROFF COMMANDS ***
.de hx			\" *** suppress headers and footers next page
.nr ?H 1
..
.de ix			\" *** indent, no break
'in \\$1
..
.de bl			\" *** contiguous blank lines
.br
.ne \\$1
.rs
.sp \\$1
..
.de n1			\" *** line numbering 1
.nm 1
.xl -\w'0000'u
.nr ?n 1
..
.de n2			\" *** line numbering 2
.nm \\$1
.ie \\n(.$ \
.	xl -\w'0000'u
.el \
.	xl \\n($lu
..
.de pa			\" *** new page
.bp \\$1
..
.de ro			\" *** roman page numbers
.af % i
..
.de ar			\" *** arabic page numbers
.af % 1
..
.de m1			\" *** position one space
.nr _0 \\n(hmu
.nr hm \\$1v
.nr tm +\\n(hmu-\\n(_0u
.rr _0
..
.de m2			\" *** position two space
.nr tm \\n(hmu+\\n(tpp+\\$1v
..
.de m3			\" *** position three space
.nr bm \\n(fmu+\\n(tpp+\\$1v
..
.de m4			\" *** position four space
.nr _0 \\n(fmu
.nr fm \\$1v
.nr bm +\\n(fmu-\\n(_0u
..
.de sk			\" *** leave a blank page (next page)
.if \\n(.$>0 \
.	tm Line \\n(c. -- I cannot skip multiple pages
.nr ?s 1
..
.\"		*** MISCELLANEOUS USER SUPPORT COMMANDS ***
.de re			\" *** reset tabs (TROFF defines 15 stops default)
.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
..
.if t .ig
.de re			\" *** reset tabs (NROFF version)
.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
..
.de ba			\" *** set base indent
.ie \\n(.$ \
.	nr $i \\$1n
.el \
.	nr $i \\n(siu*\\n($0u
..
.de hl			\" *** draw horizontal line
.br
\l'\\n(.lu-\\n(.iu'
.sp
..
.\"		*** PARAGRAPHING ***
.de pp			\" *** paragraph
.lp \\n(piu
..
.de lp			\" *** left aligned paragraph
.@p
.if \\n(.$ \
.	ti +\\$1
.nr $p 0 1
..
.de ip			\" *** indented paragraph w/ optional tag
.if (\\n(ii>0)&(\\n(ii<1n) \
.	nr ii \\n(iin
.nr _0 \\n(ii
.if \\n(.$>1 \
.	nr _0 \\$2n
.@p \\n(_0u
.if \\w'\\$1' \
\{\
.	ti -\\n(_0u
\&\\$1\h'|\\n(_0u'\c
.\}
.rr _0
..
.de np			\" *** numbered paragraph
.nr $p +1
.ip (\\n($p)
..
.de @p			\" --- initialize for paragraph
.@I				\" initialize macro processor
.if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
.in \\n($iu+\\n(pou
.if \\n(.$ \
.	in +\\$1n
.ce 0
.fi
.@F \\n(pf
.sz \\n(ppu
.sp \\n(psu
.ne \\n(.Lv+\\n(.Vu
.ns
..
.\"		*** SECTION HEADINGS ***
.de sh			\" &&& section heading
.rn sh @T
.so \\*(||/sh.me
.sh "\\$1" "\\$2" \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
.rm @T
..
.de $p			\" $$$ print section heading
.if (\\n(si>0)&(\\n(.$>2) \
.	nr $i \\$3*\\n(si
.in \\n($iu
.ie !"\\$1\\$2"" \
\{\
.	sp \\n(ssu 		\" one of them is non-null
.	ne \\n(.Lv+\\n(.Vu+\\n(psu+(\\n(spu*\\n($ru*\\n(.Lu)
.	ie \\n(.$>2 \
.		ti -(\\n(siu-\\n(sou)
.	el \
.		ti +\\n(sou
.	@F \\n(sf
.	sz \\n(spu
.	if \\$3>0 \
.		$\\$3
.	if \w"\\$2">0 \\$2.
.	if \w"\\$1">0 \\$1\f1\ \  \"
.\}
.el \
.	sp \\n(psu
.@F \\n(pf
.sz \\n(ppu
..
.de uh			\" *** unnumbered section heading
.rn uh @T
.so \\*(||/sh.me
.uh "\\$1"
.rm @T
..
.\"		*** COLUMNNED OUTPUT ***
.de 2c			\" *** double columned output
.br
.if \\n($m>1 \
.	1c			\" revert to 1c if already 2c
.nr $c 1
.nr $m 2
.if \\n(.$>1 \
.	nr $m \\$2
.if \\n(.$>0 \
.	nr $s \\$1n		\" param 1: column seperation
.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
.xl \\n($lu
.mk _k
.ns
..
.de 1c			\" *** single columned output
.br
.nr $c 1
.nr $m 1
.ll \\n(_Lu			\" return to normal output
.sp |\\n(.hu
.@O \\n(_ou
..
.de bc			\" *** begin column
.sp 24i
..
.\"		*** FLOATING TABLES AND NONFLOATING BLOCKS ***
.de (z			\" &&& begin floating keep
.rn (z @T
.so \\*(||/float.me
.(z \\$1 \\$2
.rm @T
..
.de )z			\" &&& end floating keep
.tm Line \\n(c. -- unmatched .)z
..
.de (t			\" XXX temp ref to (z
.(z \\$1 \\$2
..
.de )t			\" XXX temp ref to )t
.)z \\$1 \\$2
..
.de (b			\" *** begin block
.br
.@D 3 \\$1 \\$2
.sp \\n(bsu
.@(
..
.de )b			\" *** end block
.br
.@)
.if (\\n(bt=0):(\\n(.t<\\n(bt) \
.	ne \\n(dnu		\" make it all on one page
.ls 1
.nf
.|k
.ec
.fi
.in 0
.xl \\n($lu
.ev
.rm |k
.sp \\n(bsu+\\n(.Lv-1v
..
.de @(			\" --- begin keep
.if !"\\n(.z"" .tm Line \\n(c. -- Illegal nested keep \\n(.z
.@M
.di |k
\!'rs
..
.de @M			\" --- set modes for display
.nr ?k 1
.@C 1
.@F \\n(df
.vs \\n(.su*\\n($Ru
.nf
.if "\\*(|p"F" \
.	fi			\" set fill mode if "F" parameter
.if \\n(_d=4 \
.	in 0
.if \\n(_d=3 \
\{\
.	in +\\n(biu
.	xl -\\n(biu
.\}
.if \\n(_d=1 \
.	ce 10000
..
.de @)			\" --- end keep
.br
.if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
.nr ?k 0
.di
.in 0
.ce 0
..
.de (c			\" *** begin block centered text
.if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
.di |c
..
.de )c			\" *** end block centered text
.if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
.di
.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
.ev 1
.ls 1
.in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
.nf
.|c
.ec
.in
.ls
.ev
.rm |c
..
.\"		*** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
.de (q			\" *** begin block quote
.br
.@C 1
.fi
.sp \\n(qsu
.in +\\n(qiu
.xl -\\n(qiu
.sz \\n(qp
..
.de )q			\" *** end block quote
.br
.ev
.sp \\n(qsu+\\n(.Lv-1v
.nr ?k 0
..
.de (l			\" *** begin list
.br
.sp \\n(bsu
.@D 3 \\$1 \\$2
.@M
..
.de )l			\" *** end list
.br
.ev
.sp \\n(bsu+\\n(.Lv-1v
.nr ?k 0
..
.\"		*** PREPROCESSOR SUPPORT ***
.de EQ			\" &&& begin equation
.rn EQ @T
.so \\*(||/eqn.me
.EQ \\$1 \\$2
.rm @T
..
.de TS			\" &&& begin table
.rn TS @T
.so \\*(||/tbl.me
.TS \\$1 \\$2
.rm @T
..
.\"		*** FONT AIDS ***
.de sz			\" *** set point size and vertical spacing
.ps \\$1
.vs \\n(.su*\\n($ru		\" default vs at pointsize + 20%
.bd S B \\n(.su/3u
..
.de r			\" *** enter roman font
.nr _F \\n(.f
.ul 0
.ft 1
.if \\n(.$ \&\\$1\f\\n(_F\\$2
.rr _F
..
.de i			\" *** enter italic
.nr _F \\n(.f
.ul 0
.ft 2
.if \\n(.$ \&\\$1\f\\n(_F\\$2
.rr _F
..
.de b			\" *** enter boldface (underline in NROFF)
.nr _F \\n(.f
.ul 0
.ie t \
.	ft 3
.el \
.	ul 10000
.if \\n(.$ \&\\$1\f\\n(_F\\$2
.if \\n(.$ \
.	ul 0
.rr _F
..
.de rb			\" *** enter real boldface (not underlined in NROFF)
.nr _F \\n(.f
.ul 0
.ft 3
.if \\n(.$ \&\\$1\f\\n(_F\\$2
.rr _F
..
.de u			\" *** enter underlined word
\&\\$1\l'|0\(ul'\\$2
..
.de q			\" *** enter quoted word
\&\\*(lq\\$1\\*(rq\\$2
..
.de bi			\" *** enter word in bold italics
.ft 2
.ie t \&\k~\\$1\h'|\\n~u+(\\n(.su/3u)'\\$1\fP\\$2
.el \&\\$1\fP\\$2
..
.de bx			\" *** enter boxed word
.ie \\n($T \&\f2\\$1\fP\\$2
.el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
..
.de @F			\" --- change font (8 -> underlined, 0 -> no change)
.nr ~ \\$1
.if \\n~>0 \
\{\
.	ul 0
.	ie \\n~>4 \
\{\
.		if n .ul 10000
.		if t .ft 3
.	\}
.	el \
.		ft \\n~
.\}
.rr ~
..
.\"		*** FOOTNOTING ***
.de (f			\" &&& begin footnote
.rn (f @T
.so \\*(||/footnote.me
.(f \\$1 \\$2
.rm @T
..
.de )f			\" &&& end footnote
.tm Line \\n(c. -- unmatched .)f
..
.de $s			\" $$$ footnote separator
\l'2i'
.if n \
.	sp 0.3
..
.\"		*** DELAYED TEXT ***
.de (d			\" &&& begin delayed text
.rn (d @T
.so \\*(||/deltext.me
.(d \\$1 \\$2
.rm @T
..
.de )d			\" &&& end delayed text
.tm Line \\n(c. -- unmatched .)d
..
.\"		*** INDEXES (TABLE OF CONTENTS) ***
.de (x			\" &&& begin index
.rn (x @T
.so \\*(||/index.me
.(x \\$1 \\$2
.rm @T
..
.de )x			\" &&& end index entry
.tm Line \\n(c. -- unmatched .)x
..
.\"		*** STUFF FOR "STANDARD" PAPERS ***
.de th			\" *** set "thesis" mode
.so \\*(||/thesis.me
.rm th
..
.de +c			\" *** begin chapter
.ep				\" force out footnotes
.if \\n(?o:\\n(?a \
\{\
.	bp			\" force out a table or more footnote
.	rs
.	ep
.\}
.nr ?C 1
.nr $f 1 1
.ds * \\*[1\\*]\k*
.if \\n(?R \
.	pn 1
.bp
.in \\n($iu			\" reset the indent
.rs
.ie \\n(.$ \
.	$c "\\$1"
.el \
.	sp 3
..
.de ++			\" *** declare chapter type
.nr _0 0
.if "\\$1"C" \
.	nr _0 1			\" chapter
.if "\\$1"RC" \
.	nr _0 11		\" renumbered chapter
.if "\\$1"A" \
.	nr _0 2			\" appendix
.if "\\$1"RA" \
.	nr _0 12		\" renumbered appendix
.if "\\$1"P" \
.	nr _0 3			\" preliminary material
.if "\\$1"B" \
.	nr _0 4			\" bibliographic material
.if "\\$1"AB" \
.	nr _0 5			\" abstract
.if \\n(_0=0 \
.	tm Line \\n(c. -- Bad mode to .++
.nr ?R 0
.if \\n(_0>10 \
.\{
.	nr ?R 1
.	nr _0 -10
.\}
.nr ch 0 1
.if (\\n(_0=3):(\\n(_0=5) \
.	pn 1			\" must do before .ep
.ep				\" end page for correct page number types
.if \\n(_0=1 \
\{\
.	af ch 1
.	af % 1
.\}
.if \\n(_0=2 \
\{\
.	af ch A
.	af % 1
.\}
.if \\n(_0=3 \
.	af % i
.if \\n(_0=4 \
.	af % 1
.if \\n(_0=5 \
.	af % 1
.if \\n(.$>1 \
.	he \\$2
.if !\\n(_0=\\n(_M .if \\n(_M=3 \
.	pn 1
.nr _M \\n(_0
.rr _0
..
.de $c			\" $$$ print chapter title
.sz 12
.ft B
.ce 1000
.if \\n(_M<3 \
.	nr ch +1
.ie \\n(_M=1 CHAPTER\ \ \\n(ch
.el .if \\n(_M=2 APPENDIX\ \ \\n(ch
.if \w"\\$1" .sp 3-\\n(.L
.if \w"\\$1" \\$1
.if (\\n(_M<3):(\w"\\$1") \
.	sp 4-\\n(.L
.ce 0
.ft
.sz
.ie \\n(_M=1 \
.	$C Chapter \\n(ch "\\$1"
.el .if \\n(_M=2 \
.	$C Appendix \\n(ch "\\$1"
..
.de tp			\" *** title page
.hx
.bp
.br
.rs
.pn \\n%
..
.de ac			\" *** setup for ACM photo-ready paper
.rn ac @T
.so \\*(||/acm.me
.ac "\\$1" "\\$2"
.rm @T
..
.de lo			\" *** pull in the set of local macros
.\" all these macros should be named "*X", where X is any letter
.so \\*(||/local.me
.rm lo
..
.\"		*** DATES ***
.if \n(mo=1 .ds mo January
.if \n(mo=2 .ds mo February
.if \n(mo=3 .ds mo March
.if \n(mo=4 .ds mo April
.if \n(mo=5 .ds mo May
.if \n(mo=6 .ds mo June
.if \n(mo=7 .ds mo July
.if \n(mo=8 .ds mo August
.if \n(mo=9 .ds mo September
.if \n(mo=10 .ds mo October
.if \n(mo=11 .ds mo November
.if \n(mo=12 .ds mo December
.if \n(dw=1 .ds dw Sunday
.if \n(dw=2 .ds dw Monday
.if \n(dw=3 .ds dw Tuesday
.if \n(dw=4 .ds dw Wednesday
.if \n(dw=5 .ds dw Thursday
.if \n(dw=6 .ds dw Friday
.if \n(dw=7 .ds dw Saturday
.ds td \*(mo \n(dy, 19\n(yr
.\"		*** PARAMETRIC INITIALIZATIONS ***
.if (1m<0.1i)&(\nx!=0) \
.	vs 9p			\" for 12-pitch DTC terminals
.rr x
.nr $r \n(.v/\n(.s		\" ratio of vs to ps for .sz request
.nr $R \n($r			\" ratio for displays & footnotes
.nr hm 4v			\" header margin
.nr tm 7v			\" top margin
.nr bm 6v			\" bottom margin
.nr fm 3v			\" footer margin
.nr tf 3			\" title font: (real) Times Bold
.nr tp 10			\" title point size
.hy 14
.nr bi 4n			\" indent for blocks
.nr pi 5n			\" indent for paragraphs
.nr pf 1			\" normal text font
.nr pp 10			\" normal text point size
.nr qi 4n			\" indent for quotes
.nr qp -1			\" down one point
.nr ii 5n			\" indent for .ip's and .np's
.nr $m 1			\" max number of columns
.nr $s 4n			\" column separation
.ds || /usr/lib/me
.if \n@>0 .ds || .
.bd S B 3
.\"		*** OTHER INITIALIZATION ***
.ds [ \u
.ds ] \d
.ds < \d
.ds > \u
.ds - --
.if t \
\{\
.	ds [ \v'-0.4m'\s-3
.	ds ] \s0\v'0.4m'
.	ds < \v'0.4m'\s-3
.	ds > \s0\v'-0.4m'
.	ds - \-
.\}
.nr _o \n(.o
.if n .po 1i
.if \n(.V=1v \
.	nr $T 2
.if \n(.T=0 \
.	nr $T 1
.if t \
\{\
.	nr $T 0
.	po -0.5i		\" make ugly line on LHS
.\}
.if \n($T \
\{\
.	if \n($T=1 \
.		po 0
.	ds [ [
.	ds ] ]
.	ds < <
.	ds > >
.\}
.nr ps 0.5v			\" paragraph pre/post spacing
.if \n($T \
.	nr ps 1v
.if t .nr ps 0.35v
.nr bs \n(ps			\" block pre/post spacing
.nr qs \n(ps			\" quote pre/post spacing
.nr zs 1v			\" float-block pre/postspacing
.nr xs 0.2v			\" index prespacing
.nr fs 0.2v			\" footnote prespacing
.if \n($T \
.	nr fs 0
.if n .nr es 1v			\" equation pre/postspacing
.if t .nr es 0.5v
.wh 0 @h			\" set header
.nr $l \n(.lu			\" line length
.nr _L \n(.lu			\" line length of page
.nr $c 1			\" current column number
.nr $f 1 1			\" footnote number
.ds * \*[1\*]\k*\"		\" footnote "name"
.nr $d 1 1			\" delayed text number
.ds # [1]\k#\"			\" delayed text "name"
.nr _M 1			\" chapter mode is chapter
.ds lq \&"\"			\" left quote
.ds rq \&"\"			\" right quote
.if t \
.	ds lq ``
.if t \
.	ds rq ''
.em @z
.\"		*** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
.de sc			\" *** define special characters
.so \\*(||/chars.me
.rm sc
..
.ll 6.0i
.lt 6.0i