.\"     $NetBSD: tmac.e,v 1.9 2003/08/07 10:31:32 agc Exp $
.\"
.nr _0 \n(.c
.\" Copyright (c) 1988, 1993
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"	@(#)tmac.e	8.1 (Berkeley) 6/5/93
.\"
.\"	%beginstrip%
.\"
.\"**********************************************************************
.\"*									*
.\"*	******  - 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.						*
.\"*	current address:						*
.\"*		Britton-Lee, Inc.					*
.\"*		1919 Addison Street Suite 105				*
.\"*		Berkeley, California  94704				*
.\"*									*
.\"*	VERSION 8.1	First Release: 11 Sept 1978			*
.\"*	See file \*(||/revisions for revision history			*
.\"*									*
.\"*	Documentation is available.					*
.\"*									*
.\"**********************************************************************
.\"
.\"	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.
.\"
.\" library directory for sourced files:
.ds || /usr/share/me
.if \n@>0 .ds || .
.\"
.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(_S
.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@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
.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
.if \n@>1 .tm << @z
..
.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@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
.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
.if !"\\*(|4"" .rn |4 |0
.if !"\\*(|5"" .rn |5 |1
.if !"\\*(|6"" .rn |6 |2
.if !"\\*(|7"" .rn |7 |3
.nr _w 0			\" reset max footnote width
.nr ?W 0			\" no wide floats this page (yet)
.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
.@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@>2 .tm << @h
..
.if \nv=2 \
\{\
.	de @m		\" --- output cut mark (only on C/A/T-style)
.	@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)&(\\n(?W=0) \
\{\
.	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 _b +(\\n(ppu*\\n($ru)	\" add 1 paragraph v in case of sweep past
.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
.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)&((\\n($c<2):(\\n(?w=0)) \
\{\
.	nr ?a 0			\" output floating keep
.	@k |t
.	if \\n(?w \
.		mk _k		\" don't overstrike wide keeps
.	nr ?w 0
.\}
.os
.$H				\" special column header macro
.ns
..
.de @f			\" --- footer
.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
.if \n@>2 .nr VL \\n(.pu-\\n(nlu
.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
.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
.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
.wh -\\n(_Bu @r
.|f
.fi
.if \n@>2 .tm @o triggered @r (?o) = \\n(?o
.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
.	ie \\w"\\$1">=\\n(_0 \
\{\
\&\\$1
.		br
.	\}
.	el \&\\$1\h'|\\n(_0u'\c
.\}
.rr _0
..
.de np			\" *** numbered paragraph
.if \\n($p<0 \
.	nr $p 0			\" reset number after .bu
.nr $p +1			\" increment paragraph number
.@p \w'\0(000)\0'u
.ti -\w'\0(000)\0'u
\0(\\n($p)\h'|\w'\0(000)\0'u'\c
..
.de bu			\" *** bulleted paragraph
.br
.if \\n($p<0 \
.	ns			\" don't space between .bu paragraphs
.nr $p 0-1			\" mark "bulleted paragraph" mode
.@p \w'\0\(bu\0'u
.ti -\w'\0\(bu\0'u
\0\(bu\0\c
..
.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(pp
.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(sp
.	if \\$3>0 \
.		$\\$3
.	if \w"\\$2">0 \\$2.
.	if \w"\\$1">0 \\$1\f1\ \ \&
.\}
.el \
.	sp \\n(psu
.@F \\n(pf
.sz \\n(pp
..
.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 @V
.so \\*(||/float.me
.(z \\$1 \\$2
.rm @V
..
.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
.br				\" force out final line
.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 ***
.\"
.\"	EQN
.\"
.de EQ			\" &&& begin equation
.rn EQ @T
.so \\*(||/eqn.me
.EQ \\$1 \\$2
.rm @T
..
.\"
.\"	TBL
.\"
.de TS			\" &&& begin table
.rn TS @W
.so \\*(||/tbl.me
.TS \\$1 \\$2
.rm @W
..
.\"
.\"	REFER
.\"
.de ]-			\" &&& initialize reference
.rn ]- @]
.so \\*(||/refer.me
.]-
.rm @]
..
.de ]<			\" &&& initialize reference
.rn ]< @]
.so \\*(||/refer.me
.]<
.rm @]
..
.if n .ds [. " [
.if t .ds [. \s-2\v'-.4m'\f1
.if n .ds .] ]
.if t .ds .] \v'.4m'\s+2\fP
.if n .ds <. "
.if t .ds <. .
.if n .ds >. .
.if t .ds >. "
.\"
.\"	IDEAL
.\"
.de IS			\" *** start ideal picture
.nr g7 \\n(.u
.ls 1
..
.de IF
.if \\n(g7 .fi
.ls
..
.de IE			\" *** end ideal picture
.if \\n(g7 .fi
.ls
..
.\"
.\"	PIC
.\"
.de PS		\" *** start picture: $1=height, $2=width in units or inches
.if t \
.	sp 0.3
.nr g7 \\$2
.in (\\n(.lu-\\n(g7u)/2u
.ne \\$1u
.nr g7 \\n(.u
.ls 1
..
.de PE			\" *** end picture
.ls
.in
.if \\n(g7 .fi
.if t .sp .6
..
.\"
.\"	GREMLIN
.\"
.de GS			\" *** start gremlin picture
.nr g7 (\\n(.lu-\\n(g1u)/2u
.if "\\$1"L" .nr g7 \\n(.iu
.if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
.in \\n(g7u
.nr g7 \\n(.u
.ls 1
.nf
.ne \\n(g2u
..
.de GE			\" *** end gremlin picture
.GF
.if t .sp .6
..
.de GF			\" *** finish gremlin picture; stay at top
.ls
.in
.if \\n(g7 .fi
..
.\"		*** 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
.ft \\n($b
.if \\n(.$ \&\\$1\f\\n(_F\\$2
.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+(\\w' 'u/4u)'\\$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 sm			\" *** print in smaller font
\s-1\\$1\\s0\\$2
..
.de @F			\" --- change font (8 -> underlined, 0 -> no change)
.nr ~ \\$1
.if \\n~>0 \
\{\
.	ul 0
.	if \\n~=8 \
.		nr ~ \\n($b
.	ft \\n~
.\}
.rr ~
..
.\"		*** FOOTNOTING ***
.de (f			\" &&& begin footnote
.rn (f @U
.so \\*(||/footnote.me
.(f \\$1 \\$2
.rm @U
..
.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 @U
.so \\*(||/deltext.me
.(d \\$1 \\$2
.rm @U
..
.de )d			\" &&& end delayed text
.tm Line \\n(c. -- unmatched .)d
..
.\"		*** INDEXES (TABLE OF CONTENTS) ***
.de (x			\" &&& begin index
.rn (x @U
.so \\*(||/index.me
.(x \\$1 \\$2
.rm @U
..
.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
..
.de lh			\" *** letterhead
.so \\*(||/letterhead.me
..
.\"		*** 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
.nr *y \n(yr+1900
.ds td \*(mo \n(dy, \n(*y
.\"		*** 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 4m			\" 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
.bd S B 3
.\"		*** OTHER INITIALIZATION ***
.ds { \u\x'-0.25v'
.ds } \d
.ds < \d\x'0.25v'
.ds > \u
.ds - --
.if t \
\{\
.	ds { \v'-0.4m'\x'-0.2m'\s-3
.	ds } \s0\v'0.4m'
.	ds < \v'0.4m'\x'0.2m'\s-3
.	ds > \s0\v'-0.4m'
.	ds - \(em
.	nr fi 0.3i
.\}
.if n \
\{\
.	nr fi 3n
.\}
.nr _o \n(.o
.if n .po 1i
.if \n(.V=1v \
.	nr $T 2
.if n .if \n(.T=0 \
.	nr $T 1
.if \nv=2 \
\{\
.	nr $T 0
.	po -0.5i		\" make ugly line on LHS on C/A/T typesetters
.\}
.if \n($T \
\{\
.	if \n($T=1 \
.		po 0
.	ds [ [
.	ds ] ]
.	ds < <
.	ds > >
.\}
.nr $b \nb			\" figure the real font 8 font
.rr b
.if \n($b=0 \
\{\
.	if n .nr $b 2		\" italic
.	if t .nr $b 3		\" bold
.\}
.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
