Commit Diff


commit - 3dd8aba69153883d7dc9f694de8aafebe12d5070
commit + 9847210bcb677f11ea6b80bb2942486d989647a9
blob - /dev/null
blob + 1333a31cf9caf407e44f4bd09aba43b0cfd12007 (mode 644)
--- /dev/null
+++ tmac/tmac.pm
@@ -0,0 +1,966 @@
+.\" 10/22/92 activate next line before installing
+.pi /usr/local/plan9/bin/auxpm
+.
+.		\" IZ - initialization
+.de IZ
+.fp 10 S			\" force a font out into prefix
+.nr PS 10		\" point size
+.nr VS 12		\" line spacing
+.ps \\n(PS
+.ie \\n(VS>=41 .vs \\n(VSu
+.el .vs \\n(VSp
+.nr LL 6i		\" line length
+.ll \\n(LLu
+.nr LT \\n(.l		\" title length
+.lt \\n(LTu
+.if !\\n(HM .nr HM 1i   \" top of page
+.if !\\n(FM .nr FM 1i	\" footer margin
+.if !\\n(FO .nr FO \\n(.p-\\n(FM	\" bottom of page
+.			\" to set text ht to N, set FO to N + \n(HM.  default is 10i
+.pl 32767u		\" safety first: big pages for pm
+.if !\\n(PO .nr PO \\n(.ou	\" page offset
+.nr PI 5n		\" .PP paragraph indent
+.nr QI 5n		\" .QS indent
+.nr DI 5n		\" .DS indent
+.nr PD 0.3v		\" paragraph vertical separation
+.nr TS 0.5v		\" space around tables
+.nr Kf 0.5v		\" space around .KF/.KE
+.nr Ks 0.5v		\" space around .KS/.KE
+.
+.nr P1 .4i		\" indent for .P1/.P2
+.nr dP 1		\" delta point size for programs in .P1/.P2
+.nr dV 2p		\" delta vertical for programs
+.nr dT 8		\" delta tab stop for programs
+.nr DV .5v		\" space before start of program
+.nr IP 0		\" ?
+.nr IR 0		\" ?
+.nr I1 \\n(PIu
+.ev 1
+.if !\\n(FL .nr FL \\n(LLu	\" footnote length
+.ll \\n(FLu
+.ps 8			\" text size & leading in footnote
+.vs 10p
+.ev
+.if \\*(CH .ds CH "\(hy \\\\n(PN \(hy
+.ds # #\\\\n(.c \\\\n(.F
+.
+.
+.ME	\" initialize date strings
+.rm ME
+.	\"  accents:  \*'e \*`e \*:u \*^e \*~n \*va \*,c
+.ds ' \h'\w'e'u*4/10'\z\(aa\h'-\w'e'u*4/10'
+.ds ` \h'\w'e'u*4/10'\z\(ga\h'-\w'e'u*4/10'
+.ds : \\v'-0.6m'\\h'(1u-(\\\\n(.fu%2u))*0.13m+0.00m'\\z.\\h'0.2m'\\z.\\h'-((1u-(\\\\n(.fu%2u))*0.13m+0.20m)'\\v'0.6m'
+.ds ^ \\\\k:\\h'-\\\\n(.fu+1u/2u*2u+\\\\n(.fu-1u*0.13m+0.06m'\\z^\\h'|\\\\n:u'
+.ds ~ \\\\k:\\h'-\\\\n(.fu+1u/2u*2u+\\\\n(.fu-1u*0.13m+0.06m'\\z~\\h'|\\\\n:u'
+.ds v \\\\k:\\\\h'+\\\\w'e'u/4u'\\\\v'-0.6m'\\\\s6v\\\\s0\\\\v'0.6m'\\\\h'|\\\\n:u'
+.ds , \\\\k:\\\\h'\\\\w'c'u*0.4u'\\\\z,\\\\h'|\\\\n:u'
+..
+.
+.
+.		\" SP - generate paddable space
+.de SP
+.br
+.nr X 1v
+.if \\n(.$ .nr X \\$1v
+.ie '\\$2'exactly' \{\
+\v'\\nXu'\ \h'-\w'\ 'u'\c
+.sp \\$1\}
+.el .X "SP \\nX \\$2"
+..
+.		\" NE - need space on this page
+.de NE
+.nr X 1v
+.if \\n(.$ .nr X \\$1v
+.X "NE \\nX \\$2"
+..
+.		\" BP, FL, FC - begin page, flush figures, flush column
+.de BP
+.br
+.X CMD BP
+..
+.de FL
+.br
+.X CMD FL
+..
+.de FC
+.br
+.X CMD FC
+..
+.		\" X - generate an x X ... command in the output
+.de X
+....ie '\\n(.z'' \\!x X \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+....el \\!.X "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+...
+.if !'\\n(.z'' .if \\n(.$=1 \\!.X "\\$1
+.if !'\\n(.z'' .if \\n(.$=2 \\!.X "\\$1 \\$2
+.if !'\\n(.z'' .if \\n(.$=3 \\!.X "\\$1 \\$2 \\$3
+.if !'\\n(.z'' .if \\n(.$>3 \\!.X "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.if '\\n(.z'' .if \\n(.$=1 \\!x X \\$1 \\*#
+.if '\\n(.z'' .if \\n(.$=2 \\!x X \\$1 \\$2 \\*#
+.if '\\n(.z'' .if \\n(.$=3 \\!x X \\$1 \\$2 \\$3 \\*#
+.if '\\n(.z'' .if \\n(.$=4 \\!x X \\$1 \\$2 \\$3 \\$4 \\*#
+.if '\\n(.z'' .if \\n(.$>4 \\!x X \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 \\*#
+..
+.		\" DA - force date
+.de DA
+.if \\n(.$ .ds DY \\$1 \\$2 \\$3 \\$4
+.ds CF \\*(DY
+..
+.		\" ND - set new or no date
+.de ND
+.ds DY \\$1 \\$2 \\$3 \\$4
+.rm CF
+..
+.de ME		\" ME - set month strings
+.if \\n(mo-0 .ds MO January
+.if \\n(mo-1 .ds MO February
+.if \\n(mo-2 .ds MO March
+.if \\n(mo-3 .ds MO April
+.if \\n(mo-4 .ds MO May
+.if \\n(mo-5 .ds MO June
+.if \\n(mo-6 .ds MO July
+.if \\n(mo-7 .ds MO August
+.if \\n(mo-8 .ds MO September
+.if \\n(mo-9 .ds MO October
+.if \\n(mo-10 .ds MO November
+.if \\n(mo-11 .ds MO December
+.if \\n(dw-0 .ds DW Sunday
+.if \\n(dw-1 .ds DW Monday
+.if \\n(dw-2 .ds DW Tuesday
+.if \\n(dw-3 .ds DW Wednesday
+.if \\n(dw-4 .ds DW Thursday
+.if \\n(dw-5 .ds DW Friday
+.if \\n(dw-6 .ds DW Saturday
+.if "\\*(DY"" .ds DY \\*(MO \\n(dy, 19\\n(yr
+..
+.		\" FP - font position for a family
+.de FP
+.if '\\$1'palatino'\{\
+.	fp 1 PA
+.	fp 2 PI
+.	fp 3 PB
+.	fp 4 PX\}
+.if '\\$1'lucidasans'\{\
+.	fp 1 R LucidaSans
+.	fp 2 I LucidaSansI
+.	fp 3 B LucidaSansB
+.	fp 5 CW LucidaCW\}
+.if '\\$1'century'\{\
+.	ie '\\*(.T'202'\{\
+.		fp 1 NR Centsb
+.		fp 2 NI CentI
+.		fp 3 NB CentB
+.		fp 4 NX CentBI\}
+.	el \{\
+.		fp 1 NR
+.		fp 2 NI
+.		fp 3 NB
+.		fp 4 NX\}\}
+.if '\\$1'helvetica'\{\
+.	fp 1 H
+.	fp 2 HI
+.	fp 3 HB
+.	fp 4 HX\}
+.if '\\$1'bembo'\{\
+.	ie '\\*(.T'202'\{\
+.		fp 1 B1 Bembo
+.		fp 2 B2 BemboI
+.		fp 3 B3 BemboB
+.		fp 4 B4 BemboBI\}
+.	el \{\
+.		fp 1 B1
+.		fp 2 B2
+.		fp 3 B3
+.		fp 4 B4\}\}
+.if '\\$1'optima'\{\
+.	fp 1 R Optima
+.	fp 2 I OptimaI
+.	fp 3 B OptimaB
+.	fp 4 BI OptimaBI\}
+.if '\\$1'souvenir'\{\
+.	fp 1 R Souvenir
+.	fp 2 I SouvenirI
+.	fp 3 B SouvenirB
+.	fp 4 BI SouvenirBI\}
+.if '\\$1'melior'\{\
+.	fp 1 R Melior
+.	fp 2 I MeliorI
+.	fp 3 B MeliorB
+.	fp 4 BI MeliorBI\}
+.if '\\$1'times'\{\
+.	fp 1 R
+.	fp 2 I
+.	fp 3 B
+.	fp 4 BI\}
+..
+.		\" TL - title
+.de TL
+.br
+.if !\\n(1T .BG
+....hy 0
+.ft 3
+.ps \\n(PS+2p
+.vs \\n(VS+2p
+.ll \\n(LLu
+.ce 100		\" turned off in .RT
+.sp .5i
+..
+.		\" AU - remember author(s)
+.de AU
+.ft 1
+.ps \\n(PS
+.ie \\n(VS>=41 .vs \\n(VSu
+.el .vs \\n(VSp
+.SP .5
+..
+.		\" AI - author's institution
+.de AI
+.SP .25
+.ft 2
+..
+.		\" AB - begin abstract
+.de AB
+.nr AB 1	  \" we're in abstract
+.if !\\n(1T .BG
+.ft 1
+.ps \\n(PS
+.vs \\n(VSp
+.ce
+.in +\\n(.lu/12u
+.ll -\\n(.lu/12u
+.SP 1
+.ie \\n(.$ \\$1
+.el ABSTRACT
+.SP .75 
+.RT
+..
+.		\" AE - end of abstract
+.de AE
+.br
+.nr AB 0
+.in 0
+.ll \\n(LLu
+.ps \\n(PS
+.ie \\n(VS>=41 .vs \\n(VSu
+.el .vs \\n(VSp
+.SP
+..
+.		\" 2C - 2 columns
+.de 2C
+.MC 2
+..
+.		\" 1C - 1 column
+.de 1C
+.MC 1
+..
+.		\" MC - multiple columns
+.de MC
+.br
+.if \\n(1T .RT
+.if \\n(1T .NP
+.if !\\n(OL .nr OL \\n(LL
+.if \\n(CW=0 .nr CW \\n(LL*7/15
+.if \\n(GW=0 .nr GW \\n(LL-(2*\\n(CW)
+.nr x \\n(CW+\\n(GW
+.if "\\$1"" .MC 2
+.if \\$1=1 \{\
+.	X MC 1 0
+.	nr LL \\n(OLu\}
+.if \\$1=2 \{\
+.	X MC 2 \\nx
+.	nr LL \\n(CWu\}
+.ll \\n(LLu
+.if \\$1>2 .tm -mpm can't handle more than two columns
+.if \\n(1T .RT
+..
+.		\" TS - table start, TE - table end;  also TC, TQ, TH
+.de TS
+.br
+.if !\\n(1T .RT
+.SP \\n(TSu TS
+.X "US TS
+.if \\$1H .TQ
+.nr IX 1
+..
+.de TC
+.nr TZ \\n(.lu
+.if \\n(.$ .nr TZ \\$1n
+.ta \\n(TZuR
+..
+.de TD
+.LP
+.nr TZ 0
+..
+.de TQ
+.di TT
+.nr IT 1
+..
+.de TH
+.if \\n(.d>0.5v \{\
+.	nr T. 0
+.	T# 0\}
+.di
+.nr TQ \\n(.i
+.nr HT 1
+.in 0
+.mk #a
+.mk #b
+.mk #c
+.mk #d
+.mk #e
+.mk #f
+.TT
+.in \\n(TQu
+.mk #T
+..
+.		\" TE - table end
+.de TE
+.nr IX 0
+.if \\n(IT .if !\\n(HT \{\
+.	di
+.	nr EF \\n(.u
+.	nf
+.	TT
+.	if \\n(EF .fi\}
+.nr IT 0
+.nr HT 0
+.rm a+ b+ c+ d+ e+ f+ g+ h+ i+ j+ k+ l+ n+ m+
+.rr 32 33 34 35 36 37 38 40 79 80 81 82
+.rr a| b| c| d| e| f| g| h| i| j| k| l| m|
+.rr a- b- c- d- e- f- g- h- i- j- k- l- m-
+.X "END US TE
+.SP \\n(TSu TE
+.bp
+..
+.		\" EQ - equation, breakout and display
+.de EQ
+.nr EF \\n(.u
+.rm EE
+.nr LE 1	\" 1 is center
+.ds EL \\$1
+.if "\\$1"L" \{\
+.	ds EL \\$2
+.	nr LE 0\}
+.if "\\$1"C" .ds EL \\$2
+.if "\\$1"R" \{\
+.	ds EL \\$2 \" 2 is right adjust
+.	nr LE 2\}
+.if "\\$1"I" \{\
+.	nr LE 0
+.	if "\\$3"" .ds EE \\h'|10n'
+.	el .ds EE \\h'\\$3'
+.	ds EL \\$2\}
+.if \\n(YE .nf
+.di EZ
+..
+.		\" EN - end of equation
+.de EN 
+.br
+.di
+.rm EZ
+.nr ZN \\n(dn
+.if \\n(ZN .if !\\n(YE .LP
+.if !\\n(ZN .if !"\\*(EL"" .nr ZN 1
+.if \\n(ZN \{\
+.	SP .5v EQ
+.	X "US EQ"\}
+'pc
+.if \\n(BD .nr LE 0 \" don't center if block display or mark/lineup
+.if \\n(MK \{\
+.	if \\n(LE=1 .ds EE \\h'|10n'
+.	nr LE 0\}
+'lt \\n(.lu
+.if !\\n(EP .if \\n(ZN \{\
+.	if \\n(LE=1 .tl \(ts\(ts\\*(10\(ts\\*(EL\(ts
+.	if \\n(LE=2 .tl \(ts\(ts\(ts\\*(10\\*(EL\(ts
+.	if !\\n(LE \{\
+.		if !\\n(BD .tl \(ts\\*(EE\\*(10\(ts\(ts\\*(EL\(ts
+.		if \\n(BD .if \\n(BD<\\w\(ts\\*(10\(ts .nr BD \\w\(ts\\*(10\(ts
+.		if \\n(BD \!\\*(10\\t\\*(EL\}\}
+.if \\n(EP .if \\n(ZN \{\
+.	if \\n(LE=1 .tl \(ts\\*(EL\(ts\\*(10\(ts\(ts
+.	if \\n(LE=2 .tl \(ts\\*(EL\(ts\(ts\\*(10\(ts
+.	if !\\n(LE \{\
+.		if !\\n(BD .tl \(ts\\*(EL\\*(EE\\*(10\(ts\(ts\(ts
+.		if \\n(BD .if \\n(BD<\\w\(ts\\*(10\(ts .nr BD \\w\(ts\\*(10\(ts
+.		if \\n(BD \!\\h'-\\\\n(.iu'\\*(EL\\h'|0'\\*(10\}\}
+'lt \\n(LLu
+'pc %
+.if \\n(YE .if \\n(EF .fi
+.if \\n(ZN .X "END US EQ"
+.if \\n(ZN .SP .5v EN
+.if \\n(ZN .bp
+..
+.		\" PS - start picture
+.de PS			\" $1 is height, $2 is width, in inches
+.br
+.nr X 0.35v
+.if \\$1>0 .X "SP \\nX PS"
+.ie \\$1>0 .nr $1 \\$1
+.el .nr $1 0
+.X "US PS \\$1
+.in (\\n(.lu-\\$2)/2u
+..
+.		\" PE - end of picture
+.de PE
+.in
+.X "END US PE
+.nr X .65v
+.if \\n($1>0 .X "SP \\nX PE"
+.bp
+..
+.de IS	\" for -mpm only
+.KS
+..
+.de IE
+.KE
+.bp
+..
+.		\" NP - new page
+.de NP
+.ev 2
+.bp
+.if \\n(KF=0 \{\
+.	nr PX \\n(.s
+.	nr PF \\n(.f
+.	nr PV \\n(.v
+.	lt \\n(LTu
+.	ps \\n(PS
+.	vs \\n(PS+2
+.	ft 1
+.	if \\n(PO .po \\n(POu	\" why isn't this reset???
+.	PT \\$1
+.	bp
+.	rs
+.	BT
+.	bp
+.	nr %# +1
+.	ps \\n(PX
+.	vs \\n(PVu
+.	ft \\n(PF \}
+.ev
+..
+.
+.ds %e .tl '\\*(LH'\\*(CH'\\*(RH'
+.ds %o .tl '\\*(LH'\\*(CH'\\*(RH'
+.ds %E .tl '\\*(LF'\\*(CF'\\*(RF'
+.ds %O .tl '\\*(LF'\\*(CF'\\*(RF'
+.
+.		\" PT - page title
+.de PT
+.nr PN \\n(%#
+.X "PT \\n(%#
+.sp \\n(HMu/2u
+.if \\n(OL .lt \\n(OLu		\" why isn't this reset???
+.if \\n(BT>0 .if \\n(%#%2 \\*(%o
+.if \\n(BT>0 .if !\\n(%#%2 \\*(%e
+.if \\n(BT=0 .tl '\0'''		\" put out something or spacing is curdled
+.X "END PT \\n(%#
+..
+.		\" BT - bottom title
+.de BT
+.X "BT \\n(%#
+.sp |\\n(FMu/2u+\\n(FOu-1v
+.if \\n(%#%2 \\*(%O
+.if !\\n(%#%2 \\*(%E
+.nr BT \\n(BT+1
+.X "END BT \\n(%#
+..
+.		\" KS - non-floating keep
+.de KS
+.br
+.if "\\n(.z"" .NP  \" defends poorly against including ht of page stuff in diversion for .B1
+.X "US KS 0
+.nr KS +1
+.SP \\n(Ksu
+..
+.		\" KF - floating keep
+.de KF
+.ev 1
+.br
+.if \\n(KS>0 .tm KF won't work inside KS, line \\n(.c, file \\n(.F
+.if \\n(KF>0 .tm KF won't work inside KF, line \\n(.c, file \\n(.F
+.nr KF 1
+.nr 10 0
+.	if !'\\$1'' .nr 10 \\$1u
+.	if '\\$1'bottom' .nr 10 \\n(FOu-1u
+.	if '\\$1'top' .nr 10 \\n(HM
+.	if \\n(10 .X "UF \\n(10 KF"
+.	if !\\n(10 .X "UF \\n(HM KF"
+.	nr X \\n(FOu-2u
+.	if \\n(10 .X "UF \\n(10 KF"
+.	if !\\n(10 .X "UF \\nX KF"
+.nr SJ \\n(.u
+.ps \\n(PS
+.if \\n(VS>40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+.ll \\n(LLu
+.lt \\n(LTu
+.SP \\n(Kfu
+..
+.		\" KE - end of KS/KF
+.de KE
+.bp
+.ie \\n(KS>0 \{\
+.	SP \\n(Ksu
+.	X "END US KS
+.	nr KS -1 \}
+.el .ie \\n(KF>0 \{\
+.	SP \\n(Kfu
+.	nr KF 0
+.	X "END UF KF"
+.	if \\n(SJ .fi
+.	ev \}
+.el .tm .KE without preceding .KS or .KF, line \\n(.c, file \\n(.F
+..
+.
+.		\" DS - display. .DS C center; L left-adjust; I indent (default)
+.de DS		\"  $2 = amount of indent
+.KS
+.nf
+.\\$1D \\$2 \\$1
+.ft 1
+.if !\\n(IF \{\
+.	ps \\n(PS
+.	if \\n(VS>40 .vs \\n(VSu
+.	if \\n(VS<=39 .vs \\n(VSp\}
+..
+.de D
+.ID \\$1
+..
+.de CD
+.XD
+.ce 1000
+..
+.de ID
+.XD
+.if \\n(.$=0 .in +\\n(DIu
+.if \\n(.$=1 .if "\\$1"I" .in +\\n(DIu
+.if \\n(.$=1 .if !"\\$1"I" .in +\\$1n
+.if \\n(.$>1 .in +\\$2n
+.....in +0.5i
+.....if \\n(.$ .if !"\\$1"I" .if !"\\$1"" .in \\n(DIu
+.....if \\n(.$ .if !"\\$1"I" .if !"\\$1"" .in +\\$1n
+..
+.de LD
+.XD
+..
+.de XD
+.nf
+.nr OI \\n(.i
+.SP \\n(DVu
+..
+.		\" BD - block display: save everything, then center it.
+.de BD
+.XD
+.nr BD 1
+.nf
+.in \\n(OIu
+.di DD
+..
+.		\" DE - display end
+.de DE
+.ce 0
+.if \\n(BD>0 .XF
+.nr BD 0
+.in \\n(OIu
+.SP \\n(DVu
+.KE
+.fi
+..
+.		\" XF - finish a block display to be recentered.
+.de XF
+.di
+.if \\n(dl>\\n(BD .nr BD \\n(dl
+.if \\n(BD<\\n(.l .in (\\n(.lu-\\n(BDu)/2u
+.nr EI \\n(.l-\\n(.i
+.ta \\n(EIuR
+.nf
+.DD
+.in \\n(OIu
+..
+.
+.
+.		\" SH - (unnumbered) section heading
+.de SH
+.RT
+.nr X 1v
+.nr Y 3v
+.if \\n(1T .NP
+.if \\n(1T .X "NE \\nY SH"	\" should these be reversed, change Y to 4v
+.if \\n(1T .X "SP \\nX SH
+.ft 3
+..
+.		\" NH - numbered heading
+.de NH
+.RT
+.nr X 1v
+.nr Y 3v
+.if \\n(1T .NP
+.if \\n(1T .X "NE \\nY NH"	\" should these be reversed, change Y to 4v
+.if \\n(1T .X "SP \\nX NH
+.ft 3
+.nr NS \\$1
+.if !\\n(.$ .nr NS 1
+.if !\\n(NS .nr NS 1
+.nr H\\n(NS +1
+.if !\\n(NS-4 .nr H5 0
+.if !\\n(NS-3 .nr H4 0
+.if !\\n(NS-2 .nr H3 0
+.if !\\n(NS-1 .nr H2 0
+.if !\\$1 .if \\n(.$ .nr H1 1
+.ds SN \\n(H1.
+.if \\n(NS-1 .as SN \\n(H2.
+.if \\n(NS-2 .as SN \\n(H3.
+.if \\n(NS-3 .as SN \\n(H4.
+.if \\n(NS-4 .as SN \\n(H5.
+\\*(SN
+..
+.		\" RT - reset at beginning of each PP, LP, etc.
+.de RT
+.if !\\n(AB .if !\\n(1T .BG
+.ce 0
+.if !\\n(AB .if !\\n(KF .if !\\n(IF .if !\\n(IX .if !\\n(BE .di
+.if \\n(QP \{\
+.	ll +\\n(QIu
+.	in -\\n(QIu
+.	nr QP -1\}
+.if !\\n(AB \{\
+.	ll \\n(LLu\}
+.if !\\n(IF .if !\\n(AB \{\
+.	ps \\n(PS
+.	ie \\n(VS>=41 .vs \\n(VSu
+.	el .vs \\n(VSp\}
+.ie \\n(IP \{\
+.	in \\n(I\\n(IRu
+.	nr IP -1\}
+.el .if !\\n(IR \{\
+.	nr I1 \\n(PIu
+.	nr I2 0
+.	nr I3 0
+.	nr I4 0
+.	nr I5 0\}
+.if !\\n(AB .ft 1
+.ta 5n 10n 15n 20n 25n 30n 35n 40n 45n 50n 55n 60n 65n 70n 75n 80n
+.fi
+..
+.		\" BG - begin, execute at first TL, AB, NH, SH, PP, etc.
+.de BG		\"	IZ has been called, so registers have some value
+.br
+.if \\n(CW>0 .if \\n(LL=0 .nr LL \\n(CW+\\n(CW+\\n(GW
+.ll \\n(LLu
+.lt \\n(LLu
+.po \\n(POu
+.nr YE 1		\" ok to cause break in .EQ (earlier ones won't)
+.ev 0
+.hy 14
+.ev
+.ev 1
+.hy 14
+.ev
+.ev 2
+.hy 14
+.ev
+.nr 1T 1
+.X "PARM NP \\n(HM
+.X "PARM FO \\n(FO
+.if !\\n(%# .nr %# 1
+..
+.		\" PP - paragraph
+.de PP
+.RT
+.if \\n(1T .NP
+.if \\n(1T .X "SP \\n(PD PP"
+.if \\n(1T .X "BS 2 PP"
+.ti +\\n(PIu
+..
+.		\" LP - left aligned paragraph
+.de LP
+.RT
+.if \\n(1T .NP
+.if \\n(1T .X "SP \\n(PD LP"
+.if \\n(1T .X "BS 2 LP"
+..
+.		\" IP - indented paragraph
+.de IP
+.RT
+.if !\\n(IP .nr IP +1
+.if \\n(1T .NP
+.if \\n(1T .X "SP \\n(PD PP"
+.if \\n(1T .X "BS 2 IP"
+.nr IU \\n(IR+1
+.if \\n(.$>1 .nr I\\n(IU \\$2n+\\n(I\\n(IRu
+.if \\n(I\\n(IU=0 .nr I\\n(IU \\n(PIu+\\n(I\\n(IRu
+.in \\n(I\\n(IUu
+.nr TY \\n(TZ-\\n(.i
+.nr JQ \\n(I\\n(IU-\\n(I\\n(IR
+.ta \\n(JQu \\n(TYuR
+.if \\n(.$ \{\
+.ti \\n(I\\n(IRu
+\&\\$1\t\c\}
+..
+.		\" QP - quoted paragraph (within IP)
+.de QP
+.RT
+.if \\n(1T .NP
+.if \\n(1T .X "SP \\n(PD QP"
+.if \\n(1T .X "BS 2 QP"
+.nr QP 1
+.in +\\n(QIu
+.ll -\\n(QIu
+.ti \\n(.iu
+..
+.		\" RS - prepare for double indenting
+.de RS
+.nr IS \\n(IP
+.RT
+.nr IP \\n(IS
+.nr IU \\n(IR
+.nr IR +1
+.if !\\n(I\\n(IR .nr I\\n(IR \\n(I\\n(IU+\\n(PIu
+.in \\n(I\\n(IRu
+.nr TY \\n(TZ-\\n(.i
+.ta \\n(TYuR
+..
+.		\" RE - retreat to the left
+.de RE
+.nr IS \\n(IP
+.RT
+.nr IP \\n(IS
+.if \\n(IR>0 .nr IR -1
+.in \\n(I\\n(IRu
+..
+.		\" B - bold font
+.de B
+.nr PQ \\n(.f
+.ft 3
+.if \\n(.$ \&\\$1\\f\\n(PQ\\$2
+..
+.		\" BI - bold italic
+.de BI
+.nr PQ \\n(.f
+.ft 4
+.if \\n(.$ \&\\$1\\f\\n(PQ\\$2
+..
+.		\" R - Roman font
+.de R
+.nr PQ \\n(.f
+.ft 1
+.if \\n(.$ \&\\$1\f\\n(PQ\\$2
+..
+.		\" I - italic font
+.de I
+.nr PQ \\n(.f
+.ft 2
+.if \\n(.$ \&\\$1\^\f\\n(PQ\\$2
+..
+.		\" CW - constant width font from -ms
+.de CW
+.nr PQ \\n(.f
+.if \\n(.$=0 .ft CW
+.if \\n(.$>0 \%\&\\$3\f(CW\\$1\\f\\n(PQ\\$2
+..
+.de IT		\" ditto to italicize argument
+.nr Sf \\n(.f
+\%\&\\$3\f2\\$1\f\\n(Sf\&\\$2
+..
+.		\" TA - tabs set in ens or chars
+.de TA
+.ta \\$1n \\$2n \\$3n \\$4n \\$5n \\$6n \\$7n \\$8n \\$9n
+..
+.		\" SM - make smaller size
+.de SM
+.ie \\n(.$ \&\\$3\s-2\\$1\s0\\$2
+.el .ps -2
+..
+.		\" LG - make larger size
+.de LG
+.ie \\n(.$ \&\\$3\s+2\\$1\s0\\$2
+.el .ps +2
+..
+.		\" NL - return to normal size
+.de NL
+.ps \\n(PS
+..
+.		\" FS - begin footnote
+.de FS
+.if \\n(IF>0 .tm .FS within .FS/.FE, line \\n(.c, file \\n(.F
+.if \\n(KF>0 .tm .FS won't work inside .KF, line \\n(.c, file \\n(.F
+.if \\n(KS>0 .tm .FS won't work inside .KS, line \\n(.c, file \\n(.F
+.nr IF 1
+.ev 1
+.ps \\n(PS-2
+.ie \\n(VS>=41 .vs \\n(VSu-2p
+.el .vs \\n(VSp-2p
+.ll \\n(LLu
+.br
+.nr X \\n(FOu
+.X "BF \\nX FS
+.SP .3v
+....FA	\" deleted by authority of cvw, 10/17/88
+..
+.		\" FE - end footnote
+.de FE
+.if !\\n(IF .tm .FE without .FS, line \\n(.c, file \\n(.F
+.br
+.X "END BF FE
+.bp
+.ev
+.nr IF 0
+..
+.		\" FA - the line for a footnote
+.de FA
+\l'1i'
+.br
+..
+.		\" Tm - message to be passed on
+.de Tm
+.ev 2
+.if \\n(.$=1 .X "TM \\$1
+.if \\n(.$=2 .X "TM \\$1 \\$2
+.if \\n(.$=3 .X "TM \\$1 \\$2 \\$3
+.if \\n(.$=4 .X "TM \\$1 \\$2 \\$3 \\$4
+.if \\n(.$=5 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5
+.if \\n(.$=6 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5 \\$6
+.if \\n(.$=7 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+.if \\n(.$=8 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.if \\n(.$=9 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.br
+.ev
+..
+.de MH
+AT&T Bell Laboratories
+Murray Hill, New Jersey 07974
+..
+.de HO
+AT&T Bell Laboratories
+Holmdel, New Jersey 07733
+..
+.de WH
+AT&T Bell Laboratories
+Whippany, New Jersey 07981
+..
+.de IH
+AT&T Bell Laboratories
+Naperville, Illinois 60540
+..
+.		\" UL - underline argument, don't italicize
+.de UL
+\\$1\l'|0\(ul'\\$2
+..
+.		\" UX - print $2 UNIX $1
+.de UX
+.ie \\n(UX \\$2\s-1UNIX\s0\\$1
+.el \{\
+\\$2\s-1UNIX\\s0\\$1\(rg
+.nr UX 1\}
+..
+.		\" QS - start quote
+.de QS
+.br
+.LP
+.in +\\n(QIu
+.ll -\\n(QIu
+..
+.		\" QE - end quote
+.de QE
+.br
+.ll +\\n(QIu
+.in -\\n(QIu
+.LP
+..
+.		\"  B1 - begin boxed stuff
+.de B1
+.br
+.di BB
+.nr BC 0
+.if "\\$1"C" .nr BC 1
+.nr BE 1
+..
+.		\" B2 - end boxed stuff
+.de B2 
+.br
+.nr BI 1n
+.if \\n(.$>0 .nr BI \\$1n
+.di
+.nr BE 0
+.nr BW \\n(dl
+.nr BH \\n(dn
+.ne \\n(BHu+\\n(.Vu
+.nr BQ \\n(.j
+.nf
+.ti 0
+.if \\n(BC>0 .in +(\\n(.lu-\\n(BWu)/2u
+.in +\\n(BIu
+.ls 1
+.BB
+.ls
+.in -\\n(BIu
+.nr BW +2*\\n(BI
+.sp -1
+\l'\\n(BWu\(ul'\L'-\\n(BHu'\l'|0\(ul'\h'|0'\L'\\n(BHu'
+.if \\n(BC>0 .in -(\\n(.lu-\\n(BWu)/2u
+.if \\n(BQ .fi
+.br
+..
+.		\" BX - boxed stuff
+.de BX
+\(br\|\\$1\|\(br\l'|0\(rn'\l'|0\(ul'
+..
+.
+.	\" macros for programs, etc.
+.
+.ig
+	programs are displayed between .P1/.P2 pairs
+	default is to indent by 1/2 inch, nofill, dP smaller
+	.P1 x causes an indent of x instead.
+
+	.P3 can be used to specify optional page-break points
+	inside .P1/.P2
+..
+.
+.		\" P1 - start of program
+.de P1
+.nr $1 \\n(P1
+.if \\n(.$ .nr $1 \\$1n
+.br
+.X "SP \\n(DV P1"
+.X "US P1"
+.in \\n($1u
+.nf
+.nr v \\n(.v
+.ps -\\n(dP
+.vs -\\n(dVu
+.ft CW
+.nr t \\n(dT*\\w'x'u
+.ta 1u*\\ntu 2u*\\ntu 3u*\\ntu 4u*\\ntu 5u*\\ntu 6u*\\ntu 7u*\\ntu 8u*\\ntu 9u*\\ntu 10u*\\ntu 11u*\\ntu 12u*\\ntu 13u*\\ntu 14u*\\ntu
+..
+.		\" P2 - end of program
+.de P2
+.br
+.ps \\n(PS
+.vs \\nvu
+.ft 1
+.in
+.X "END US P1
+.X "SP \\n(DV P2"
+.fi
+..
+.		\" P3 - provides optional unpadded break in P1/P2
+.de P3
+.nr x \\n(DV
+.nr DV 0
+.P2
+.P1 \\n($1u
+.nr DV \\nx
+..
+.de [
+[
+..
+.de ]
+]
+..
+.IZ
+.rm IZ
+.so /usr/local/plan9/tmac/tmac.srefs