ttmac.pm - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       ttmac.pm (17707B)
       ---
            1 .\" 10/22/92 activate next line before installing
            2 .pi /usr/local/plan9/bin/auxpm
            3 .
            4 .                \" IZ - initialization
            5 .de IZ
            6 .fp 10 S                        \" force a font out into prefix
            7 .nr PS 10                \" point size
            8 .nr VS 12                \" line spacing
            9 .ps \\n(PS
           10 .ie \\n(VS>=41 .vs \\n(VSu
           11 .el .vs \\n(VSp
           12 .nr LL 6i                \" line length
           13 .ll \\n(LLu
           14 .nr LT \\n(.l                \" title length
           15 .lt \\n(LTu
           16 .if !\\n(HM .nr HM 1i   \" top of page
           17 .if !\\n(FM .nr FM 1i        \" footer margin
           18 .if !\\n(FO .nr FO \\n(.p-\\n(FM        \" bottom of page
           19 .                        \" to set text ht to N, set FO to N + \n(HM.  default is 10i
           20 .pl 32767u                \" safety first: big pages for pm
           21 .if !\\n(PO .nr PO \\n(.ou        \" page offset
           22 .nr PI 5n                \" .PP paragraph indent
           23 .nr QI 5n                \" .QS indent
           24 .nr DI 5n                \" .DS indent
           25 .nr PD 0.3v                \" paragraph vertical separation
           26 .nr TS 0.5v                \" space around tables
           27 .nr Kf 0.5v                \" space around .KF/.KE
           28 .nr Ks 0.5v                \" space around .KS/.KE
           29 .
           30 .nr P1 .4i                \" indent for .P1/.P2
           31 .nr dP 1                \" delta point size for programs in .P1/.P2
           32 .nr dV 2p                \" delta vertical for programs
           33 .nr dT 8                \" delta tab stop for programs
           34 .nr DV .5v                \" space before start of program
           35 .nr IP 0                \" ?
           36 .nr IR 0                \" ?
           37 .nr I1 \\n(PIu
           38 .ev 1
           39 .if !\\n(FL .nr FL \\n(LLu        \" footnote length
           40 .ll \\n(FLu
           41 .ps 8                        \" text size & leading in footnote
           42 .vs 10p
           43 .ev
           44 .if \\*(CH .ds CH "\(hy \\\\n(PN \(hy
           45 .ds # #\\\\n(.c \\\\n(.F
           46 .
           47 .
           48 .ME        \" initialize date strings
           49 .rm ME
           50 .        \"  accents:  \*'e \*`e \*:u \*^e \*~n \*va \*,c
           51 .ds ' \h'\w'e'u*4/10'\z\(aa\h'-\w'e'u*4/10'
           52 .ds ` \h'\w'e'u*4/10'\z\(ga\h'-\w'e'u*4/10'
           53 .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'
           54 .ds ^ \\\\k:\\h'-\\\\n(.fu+1u/2u*2u+\\\\n(.fu-1u*0.13m+0.06m'\\z^\\h'|\\\\n:u'
           55 .ds ~ \\\\k:\\h'-\\\\n(.fu+1u/2u*2u+\\\\n(.fu-1u*0.13m+0.06m'\\z~\\h'|\\\\n:u'
           56 .ds v \\\\k:\\\\h'+\\\\w'e'u/4u'\\\\v'-0.6m'\\\\s6v\\\\s0\\\\v'0.6m'\\\\h'|\\\\n:u'
           57 .ds , \\\\k:\\\\h'\\\\w'c'u*0.4u'\\\\z,\\\\h'|\\\\n:u'
           58 ..
           59 .
           60 .
           61 .                \" SP - generate paddable space
           62 .de SP
           63 .br
           64 .nr X 1v
           65 .if \\n(.$ .nr X \\$1v
           66 .ie '\\$2'exactly' \{\
           67 \v'\\nXu'\ \h'-\w'\ 'u'\c
           68 .sp \\$1\}
           69 .el .X "SP \\nX \\$2"
           70 ..
           71 .                \" NE - need space on this page
           72 .de NE
           73 .nr X 1v
           74 .if \\n(.$ .nr X \\$1v
           75 .X "NE \\nX \\$2"
           76 ..
           77 .                \" BP, FL, FC - begin page, flush figures, flush column
           78 .de BP
           79 .br
           80 .X CMD BP
           81 ..
           82 .de FL
           83 .br
           84 .X CMD FL
           85 ..
           86 .de FC
           87 .br
           88 .X CMD FC
           89 ..
           90 .                \" X - generate an x X ... command in the output
           91 .de X
           92 ....ie '\\n(.z'' \\!x X \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
           93 ....el \\!.X "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
           94 ...
           95 .if !'\\n(.z'' .if \\n(.$=1 \\!.X "\\$1
           96 .if !'\\n(.z'' .if \\n(.$=2 \\!.X "\\$1 \\$2
           97 .if !'\\n(.z'' .if \\n(.$=3 \\!.X "\\$1 \\$2 \\$3
           98 .if !'\\n(.z'' .if \\n(.$>3 \\!.X "\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
           99 .if '\\n(.z'' .if \\n(.$=1 \\!x X \\$1 \\*#
          100 .if '\\n(.z'' .if \\n(.$=2 \\!x X \\$1 \\$2 \\*#
          101 .if '\\n(.z'' .if \\n(.$=3 \\!x X \\$1 \\$2 \\$3 \\*#
          102 .if '\\n(.z'' .if \\n(.$=4 \\!x X \\$1 \\$2 \\$3 \\$4 \\*#
          103 .if '\\n(.z'' .if \\n(.$>4 \\!x X \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 \\*#
          104 ..
          105 .                \" DA - force date
          106 .de DA
          107 .if \\n(.$ .ds DY \\$1 \\$2 \\$3 \\$4
          108 .ds CF \\*(DY
          109 ..
          110 .                \" ND - set new or no date
          111 .de ND
          112 .ds DY \\$1 \\$2 \\$3 \\$4
          113 .rm CF
          114 ..
          115 .de ME                \" ME - set month strings
          116 .if \\n(mo-0 .ds MO January
          117 .if \\n(mo-1 .ds MO February
          118 .if \\n(mo-2 .ds MO March
          119 .if \\n(mo-3 .ds MO April
          120 .if \\n(mo-4 .ds MO May
          121 .if \\n(mo-5 .ds MO June
          122 .if \\n(mo-6 .ds MO July
          123 .if \\n(mo-7 .ds MO August
          124 .if \\n(mo-8 .ds MO September
          125 .if \\n(mo-9 .ds MO October
          126 .if \\n(mo-10 .ds MO November
          127 .if \\n(mo-11 .ds MO December
          128 .if \\n(dw-0 .ds DW Sunday
          129 .if \\n(dw-1 .ds DW Monday
          130 .if \\n(dw-2 .ds DW Tuesday
          131 .if \\n(dw-3 .ds DW Wednesday
          132 .if \\n(dw-4 .ds DW Thursday
          133 .if \\n(dw-5 .ds DW Friday
          134 .if \\n(dw-6 .ds DW Saturday
          135 .if "\\*(DY"" .ds DY \\*(MO \\n(dy, 19\\n(yr
          136 ..
          137 .                \" FP - font position for a family
          138 .de FP
          139 .if '\\$1'palatino'\{\
          140 .        fp 1 PA
          141 .        fp 2 PI
          142 .        fp 3 PB
          143 .        fp 4 PX\}
          144 .if '\\$1'lucidasans'\{\
          145 .        fp 1 R LucidaSans
          146 .        fp 2 I LucidaSansI
          147 .        fp 3 B LucidaSansB
          148 .        fp 5 CW LucidaCW\}
          149 .if '\\$1'century'\{\
          150 .        ie '\\*(.T'202'\{\
          151 .                fp 1 NR Centsb
          152 .                fp 2 NI CentI
          153 .                fp 3 NB CentB
          154 .                fp 4 NX CentBI\}
          155 .        el \{\
          156 .                fp 1 NR
          157 .                fp 2 NI
          158 .                fp 3 NB
          159 .                fp 4 NX\}\}
          160 .if '\\$1'helvetica'\{\
          161 .        fp 1 H
          162 .        fp 2 HI
          163 .        fp 3 HB
          164 .        fp 4 HX\}
          165 .if '\\$1'bembo'\{\
          166 .        ie '\\*(.T'202'\{\
          167 .                fp 1 B1 Bembo
          168 .                fp 2 B2 BemboI
          169 .                fp 3 B3 BemboB
          170 .                fp 4 B4 BemboBI\}
          171 .        el \{\
          172 .                fp 1 B1
          173 .                fp 2 B2
          174 .                fp 3 B3
          175 .                fp 4 B4\}\}
          176 .if '\\$1'optima'\{\
          177 .        fp 1 R Optima
          178 .        fp 2 I OptimaI
          179 .        fp 3 B OptimaB
          180 .        fp 4 BI OptimaBI\}
          181 .if '\\$1'souvenir'\{\
          182 .        fp 1 R Souvenir
          183 .        fp 2 I SouvenirI
          184 .        fp 3 B SouvenirB
          185 .        fp 4 BI SouvenirBI\}
          186 .if '\\$1'melior'\{\
          187 .        fp 1 R Melior
          188 .        fp 2 I MeliorI
          189 .        fp 3 B MeliorB
          190 .        fp 4 BI MeliorBI\}
          191 .if '\\$1'times'\{\
          192 .        fp 1 R
          193 .        fp 2 I
          194 .        fp 3 B
          195 .        fp 4 BI\}
          196 ..
          197 .                \" TL - title
          198 .de TL
          199 .br
          200 .if !\\n(1T .BG
          201 ....hy 0
          202 .ft 3
          203 .ps \\n(PS+2p
          204 .vs \\n(VS+2p
          205 .ll \\n(LLu
          206 .ce 100                \" turned off in .RT
          207 .sp .5i
          208 ..
          209 .                \" AU - remember author(s)
          210 .de AU
          211 .ft 1
          212 .ps \\n(PS
          213 .ie \\n(VS>=41 .vs \\n(VSu
          214 .el .vs \\n(VSp
          215 .SP .5
          216 ..
          217 .                \" AI - author's institution
          218 .de AI
          219 .SP .25
          220 .ft 2
          221 ..
          222 .                \" AB - begin abstract
          223 .de AB
          224 .nr AB 1          \" we're in abstract
          225 .if !\\n(1T .BG
          226 .ft 1
          227 .ps \\n(PS
          228 .vs \\n(VSp
          229 .ce
          230 .in +\\n(.lu/12u
          231 .ll -\\n(.lu/12u
          232 .SP 1
          233 .ie \\n(.$ \\$1
          234 .el ABSTRACT
          235 .SP .75 
          236 .RT
          237 ..
          238 .                \" AE - end of abstract
          239 .de AE
          240 .br
          241 .nr AB 0
          242 .in 0
          243 .ll \\n(LLu
          244 .ps \\n(PS
          245 .ie \\n(VS>=41 .vs \\n(VSu
          246 .el .vs \\n(VSp
          247 .SP
          248 ..
          249 .                \" 2C - 2 columns
          250 .de 2C
          251 .MC 2
          252 ..
          253 .                \" 1C - 1 column
          254 .de 1C
          255 .MC 1
          256 ..
          257 .                \" MC - multiple columns
          258 .de MC
          259 .br
          260 .if \\n(1T .RT
          261 .if \\n(1T .NP
          262 .if !\\n(OL .nr OL \\n(LL
          263 .if \\n(CW=0 .nr CW \\n(LL*7/15
          264 .if \\n(GW=0 .nr GW \\n(LL-(2*\\n(CW)
          265 .nr x \\n(CW+\\n(GW
          266 .if "\\$1"" .MC 2
          267 .if \\$1=1 \{\
          268 .        X MC 1 0
          269 .        nr LL \\n(OLu\}
          270 .if \\$1=2 \{\
          271 .        X MC 2 \\nx
          272 .        nr LL \\n(CWu\}
          273 .ll \\n(LLu
          274 .if \\$1>2 .tm -mpm can't handle more than two columns
          275 .if \\n(1T .RT
          276 ..
          277 .                \" TS - table start, TE - table end;  also TC, TQ, TH
          278 .de TS
          279 .br
          280 .if !\\n(1T .RT
          281 .SP \\n(TSu TS
          282 .X "US TS
          283 .if \\$1H .TQ
          284 .nr IX 1
          285 ..
          286 .de TC
          287 .nr TZ \\n(.lu
          288 .if \\n(.$ .nr TZ \\$1n
          289 .ta \\n(TZuR
          290 ..
          291 .de TD
          292 .LP
          293 .nr TZ 0
          294 ..
          295 .de TQ
          296 .di TT
          297 .nr IT 1
          298 ..
          299 .de TH
          300 .if \\n(.d>0.5v \{\
          301 .        nr T. 0
          302 .        T# 0\}
          303 .di
          304 .nr TQ \\n(.i
          305 .nr HT 1
          306 .in 0
          307 .mk #a
          308 .mk #b
          309 .mk #c
          310 .mk #d
          311 .mk #e
          312 .mk #f
          313 .TT
          314 .in \\n(TQu
          315 .mk #T
          316 ..
          317 .                \" TE - table end
          318 .de TE
          319 .nr IX 0
          320 .if \\n(IT .if !\\n(HT \{\
          321 .        di
          322 .        nr EF \\n(.u
          323 .        nf
          324 .        TT
          325 .        if \\n(EF .fi\}
          326 .nr IT 0
          327 .nr HT 0
          328 .rm a+ b+ c+ d+ e+ f+ g+ h+ i+ j+ k+ l+ n+ m+
          329 .rr 32 33 34 35 36 37 38 40 79 80 81 82
          330 .rr a| b| c| d| e| f| g| h| i| j| k| l| m|
          331 .rr a- b- c- d- e- f- g- h- i- j- k- l- m-
          332 .X "END US TE
          333 .SP \\n(TSu TE
          334 .bp
          335 ..
          336 .                \" EQ - equation, breakout and display
          337 .de EQ
          338 .nr EF \\n(.u
          339 .rm EE
          340 .nr LE 1        \" 1 is center
          341 .ds EL \\$1
          342 .if "\\$1"L" \{\
          343 .        ds EL \\$2
          344 .        nr LE 0\}
          345 .if "\\$1"C" .ds EL \\$2
          346 .if "\\$1"R" \{\
          347 .        ds EL \\$2 \" 2 is right adjust
          348 .        nr LE 2\}
          349 .if "\\$1"I" \{\
          350 .        nr LE 0
          351 .        if "\\$3"" .ds EE \\h'|10n'
          352 .        el .ds EE \\h'\\$3'
          353 .        ds EL \\$2\}
          354 .if \\n(YE .nf
          355 .di EZ
          356 ..
          357 .                \" EN - end of equation
          358 .de EN 
          359 .br
          360 .di
          361 .rm EZ
          362 .nr ZN \\n(dn
          363 .if \\n(ZN .if !\\n(YE .LP
          364 .if !\\n(ZN .if !"\\*(EL"" .nr ZN 1
          365 .if \\n(ZN \{\
          366 .        SP .5v EQ
          367 .        X "US EQ"\}
          368 'pc
          369 .if \\n(BD .nr LE 0 \" don't center if block display or mark/lineup
          370 .if \\n(MK \{\
          371 .        if \\n(LE=1 .ds EE \\h'|10n'
          372 .        nr LE 0\}
          373 'lt \\n(.lu
          374 .if !\\n(EP .if \\n(ZN \{\
          375 .        if \\n(LE=1 .tl \(ts\(ts\\*(10\(ts\\*(EL\(ts
          376 .        if \\n(LE=2 .tl \(ts\(ts\(ts\\*(10\\*(EL\(ts
          377 .        if !\\n(LE \{\
          378 .                if !\\n(BD .tl \(ts\\*(EE\\*(10\(ts\(ts\\*(EL\(ts
          379 .                if \\n(BD .if \\n(BD<\\w\(ts\\*(10\(ts .nr BD \\w\(ts\\*(10\(ts
          380 .                if \\n(BD \!\\*(10\\t\\*(EL\}\}
          381 .if \\n(EP .if \\n(ZN \{\
          382 .        if \\n(LE=1 .tl \(ts\\*(EL\(ts\\*(10\(ts\(ts
          383 .        if \\n(LE=2 .tl \(ts\\*(EL\(ts\(ts\\*(10\(ts
          384 .        if !\\n(LE \{\
          385 .                if !\\n(BD .tl \(ts\\*(EL\\*(EE\\*(10\(ts\(ts\(ts
          386 .                if \\n(BD .if \\n(BD<\\w\(ts\\*(10\(ts .nr BD \\w\(ts\\*(10\(ts
          387 .                if \\n(BD \!\\h'-\\\\n(.iu'\\*(EL\\h'|0'\\*(10\}\}
          388 'lt \\n(LLu
          389 'pc %
          390 .if \\n(YE .if \\n(EF .fi
          391 .if \\n(ZN .X "END US EQ"
          392 .if \\n(ZN .SP .5v EN
          393 .if \\n(ZN .bp
          394 ..
          395 .                \" PS - start picture
          396 .de PS                        \" $1 is height, $2 is width, in inches
          397 .br
          398 .nr X 0.35v
          399 .if \\$1>0 .X "SP \\nX PS"
          400 .ie \\$1>0 .nr $1 \\$1
          401 .el .nr $1 0
          402 .X "US PS \\$1
          403 .in (\\n(.lu-\\$2)/2u
          404 ..
          405 .                \" PE - end of picture
          406 .de PE
          407 .in
          408 .X "END US PE
          409 .nr X .65v
          410 .if \\n($1>0 .X "SP \\nX PE"
          411 .bp
          412 ..
          413 .de IS        \" for -mpm only
          414 .KS
          415 ..
          416 .de IE
          417 .KE
          418 .bp
          419 ..
          420 .                \" NP - new page
          421 .de NP
          422 .ev 2
          423 .bp
          424 .if \\n(KF=0 \{\
          425 .        nr PX \\n(.s
          426 .        nr PF \\n(.f
          427 .        nr PV \\n(.v
          428 .        lt \\n(LTu
          429 .        ps \\n(PS
          430 .        vs \\n(PS+2
          431 .        ft 1
          432 .        if \\n(PO .po \\n(POu        \" why isn't this reset???
          433 .        PT \\$1
          434 .        bp
          435 .        rs
          436 .        BT
          437 .        bp
          438 .        nr %# +1
          439 .        ps \\n(PX
          440 .        vs \\n(PVu
          441 .        ft \\n(PF \}
          442 .ev
          443 ..
          444 .
          445 .ds %e .tl '\\*(LH'\\*(CH'\\*(RH'
          446 .ds %o .tl '\\*(LH'\\*(CH'\\*(RH'
          447 .ds %E .tl '\\*(LF'\\*(CF'\\*(RF'
          448 .ds %O .tl '\\*(LF'\\*(CF'\\*(RF'
          449 .
          450 .                \" PT - page title
          451 .de PT
          452 .nr PN \\n(%#
          453 .X "PT \\n(%#
          454 .sp \\n(HMu/2u
          455 .if \\n(OL .lt \\n(OLu                \" why isn't this reset???
          456 .if \\n(BT>0 .if \\n(%#%2 \\*(%o
          457 .if \\n(BT>0 .if !\\n(%#%2 \\*(%e
          458 .if \\n(BT=0 .tl '\0'''                \" put out something or spacing is curdled
          459 .X "END PT \\n(%#
          460 ..
          461 .                \" BT - bottom title
          462 .de BT
          463 .X "BT \\n(%#
          464 .sp |\\n(FMu/2u+\\n(FOu-1v
          465 .if \\n(%#%2 \\*(%O
          466 .if !\\n(%#%2 \\*(%E
          467 .nr BT \\n(BT+1
          468 .X "END BT \\n(%#
          469 ..
          470 .                \" KS - non-floating keep
          471 .de KS
          472 .br
          473 .if "\\n(.z"" .NP  \" defends poorly against including ht of page stuff in diversion for .B1
          474 .X "US KS 0
          475 .nr KS +1
          476 .SP \\n(Ksu
          477 ..
          478 .                \" KF - floating keep
          479 .de KF
          480 .ev 1
          481 .br
          482 .if \\n(KS>0 .tm KF won't work inside KS, line \\n(.c, file \\n(.F
          483 .if \\n(KF>0 .tm KF won't work inside KF, line \\n(.c, file \\n(.F
          484 .nr KF 1
          485 .nr 10 0
          486 .        if !'\\$1'' .nr 10 \\$1u
          487 .        if '\\$1'bottom' .nr 10 \\n(FOu-1u
          488 .        if '\\$1'top' .nr 10 \\n(HM
          489 .        if \\n(10 .X "UF \\n(10 KF"
          490 .        if !\\n(10 .X "UF \\n(HM KF"
          491 .        nr X \\n(FOu-2u
          492 .        if \\n(10 .X "UF \\n(10 KF"
          493 .        if !\\n(10 .X "UF \\nX KF"
          494 .nr SJ \\n(.u
          495 .ps \\n(PS
          496 .if \\n(VS>40 .vs \\n(VSu
          497 .if \\n(VS<=39 .vs \\n(VSp
          498 .ll \\n(LLu
          499 .lt \\n(LTu
          500 .SP \\n(Kfu
          501 ..
          502 .                \" KE - end of KS/KF
          503 .de KE
          504 .bp
          505 .ie \\n(KS>0 \{\
          506 .        SP \\n(Ksu
          507 .        X "END US KS
          508 .        nr KS -1 \}
          509 .el .ie \\n(KF>0 \{\
          510 .        SP \\n(Kfu
          511 .        nr KF 0
          512 .        X "END UF KF"
          513 .        if \\n(SJ .fi
          514 .        ev \}
          515 .el .tm .KE without preceding .KS or .KF, line \\n(.c, file \\n(.F
          516 ..
          517 .
          518 .                \" DS - display. .DS C center; L left-adjust; I indent (default)
          519 .de DS                \"  $2 = amount of indent
          520 .KS
          521 .nf
          522 .\\$1D \\$2 \\$1
          523 .ft 1
          524 .if !\\n(IF \{\
          525 .        ps \\n(PS
          526 .        if \\n(VS>40 .vs \\n(VSu
          527 .        if \\n(VS<=39 .vs \\n(VSp\}
          528 ..
          529 .de D
          530 .ID \\$1
          531 ..
          532 .de CD
          533 .XD
          534 .ce 1000
          535 ..
          536 .de ID
          537 .XD
          538 .if \\n(.$=0 .in +\\n(DIu
          539 .if \\n(.$=1 .if "\\$1"I" .in +\\n(DIu
          540 .if \\n(.$=1 .if !"\\$1"I" .in +\\$1n
          541 .if \\n(.$>1 .in +\\$2n
          542 .....in +0.5i
          543 .....if \\n(.$ .if !"\\$1"I" .if !"\\$1"" .in \\n(DIu
          544 .....if \\n(.$ .if !"\\$1"I" .if !"\\$1"" .in +\\$1n
          545 ..
          546 .de LD
          547 .XD
          548 ..
          549 .de XD
          550 .nf
          551 .nr OI \\n(.i
          552 .SP \\n(DVu
          553 ..
          554 .                \" BD - block display: save everything, then center it.
          555 .de BD
          556 .XD
          557 .nr BD 1
          558 .nf
          559 .in \\n(OIu
          560 .di DD
          561 ..
          562 .                \" DE - display end
          563 .de DE
          564 .ce 0
          565 .if \\n(BD>0 .XF
          566 .nr BD 0
          567 .in \\n(OIu
          568 .SP \\n(DVu
          569 .KE
          570 .fi
          571 ..
          572 .                \" XF - finish a block display to be recentered.
          573 .de XF
          574 .di
          575 .if \\n(dl>\\n(BD .nr BD \\n(dl
          576 .if \\n(BD<\\n(.l .in (\\n(.lu-\\n(BDu)/2u
          577 .nr EI \\n(.l-\\n(.i
          578 .ta \\n(EIuR
          579 .nf
          580 .DD
          581 .in \\n(OIu
          582 ..
          583 .
          584 .
          585 .                \" SH - (unnumbered) section heading
          586 .de SH
          587 .RT
          588 .nr X 1v
          589 .nr Y 3v
          590 .if \\n(1T .NP
          591 .if \\n(1T .X "NE \\nY SH"        \" should these be reversed, change Y to 4v
          592 .if \\n(1T .X "SP \\nX SH
          593 .ft 3
          594 ..
          595 .                \" NH - numbered heading
          596 .de NH
          597 .RT
          598 .nr X 1v
          599 .nr Y 3v
          600 .if \\n(1T .NP
          601 .if \\n(1T .X "NE \\nY NH"        \" should these be reversed, change Y to 4v
          602 .if \\n(1T .X "SP \\nX NH
          603 .ft 3
          604 .nr NS \\$1
          605 .if !\\n(.$ .nr NS 1
          606 .if !\\n(NS .nr NS 1
          607 .nr H\\n(NS +1
          608 .if !\\n(NS-4 .nr H5 0
          609 .if !\\n(NS-3 .nr H4 0
          610 .if !\\n(NS-2 .nr H3 0
          611 .if !\\n(NS-1 .nr H2 0
          612 .if !\\$1 .if \\n(.$ .nr H1 1
          613 .ds SN \\n(H1.
          614 .if \\n(NS-1 .as SN \\n(H2.
          615 .if \\n(NS-2 .as SN \\n(H3.
          616 .if \\n(NS-3 .as SN \\n(H4.
          617 .if \\n(NS-4 .as SN \\n(H5.
          618 \\*(SN
          619 ..
          620 .                \" RT - reset at beginning of each PP, LP, etc.
          621 .de RT
          622 .if !\\n(AB .if !\\n(1T .BG
          623 .ce 0
          624 .if !\\n(AB .if !\\n(KF .if !\\n(IF .if !\\n(IX .if !\\n(BE .di
          625 .if \\n(QP \{\
          626 .        ll +\\n(QIu
          627 .        in -\\n(QIu
          628 .        nr QP -1\}
          629 .if !\\n(AB \{\
          630 .        ll \\n(LLu\}
          631 .if !\\n(IF .if !\\n(AB \{\
          632 .        ps \\n(PS
          633 .        ie \\n(VS>=41 .vs \\n(VSu
          634 .        el .vs \\n(VSp\}
          635 .ie \\n(IP \{\
          636 .        in \\n(I\\n(IRu
          637 .        nr IP -1\}
          638 .el .if !\\n(IR \{\
          639 .        nr I1 \\n(PIu
          640 .        nr I2 0
          641 .        nr I3 0
          642 .        nr I4 0
          643 .        nr I5 0\}
          644 .if !\\n(AB .ft 1
          645 .ta 5n 10n 15n 20n 25n 30n 35n 40n 45n 50n 55n 60n 65n 70n 75n 80n
          646 .fi
          647 ..
          648 .                \" BG - begin, execute at first TL, AB, NH, SH, PP, etc.
          649 .de BG                \"        IZ has been called, so registers have some value
          650 .br
          651 .if \\n(CW>0 .if \\n(LL=0 .nr LL \\n(CW+\\n(CW+\\n(GW
          652 .ll \\n(LLu
          653 .lt \\n(LLu
          654 .po \\n(POu
          655 .nr YE 1                \" ok to cause break in .EQ (earlier ones won't)
          656 .ev 0
          657 .hy 14
          658 .ev
          659 .ev 1
          660 .hy 14
          661 .ev
          662 .ev 2
          663 .hy 14
          664 .ev
          665 .nr 1T 1
          666 .X "PARM NP \\n(HM
          667 .X "PARM FO \\n(FO
          668 .if !\\n(%# .nr %# 1
          669 ..
          670 .                \" PP - paragraph
          671 .de PP
          672 .RT
          673 .if \\n(1T .NP
          674 .if \\n(1T .X "SP \\n(PD PP"
          675 .if \\n(1T .X "BS 2 PP"
          676 .ti +\\n(PIu
          677 ..
          678 .                \" LP - left aligned paragraph
          679 .de LP
          680 .RT
          681 .if \\n(1T .NP
          682 .if \\n(1T .X "SP \\n(PD LP"
          683 .if \\n(1T .X "BS 2 LP"
          684 ..
          685 .                \" IP - indented paragraph
          686 .de IP
          687 .RT
          688 .if !\\n(IP .nr IP +1
          689 .if \\n(1T .NP
          690 .if \\n(1T .X "SP \\n(PD PP"
          691 .if \\n(1T .X "BS 2 IP"
          692 .nr IU \\n(IR+1
          693 .if \\n(.$>1 .nr I\\n(IU \\$2n+\\n(I\\n(IRu
          694 .if \\n(I\\n(IU=0 .nr I\\n(IU \\n(PIu+\\n(I\\n(IRu
          695 .in \\n(I\\n(IUu
          696 .nr TY \\n(TZ-\\n(.i
          697 .nr JQ \\n(I\\n(IU-\\n(I\\n(IR
          698 .ta \\n(JQu \\n(TYuR
          699 .if \\n(.$ \{\
          700 .ti \\n(I\\n(IRu
          701 \&\\$1\t\c\}
          702 ..
          703 .                \" QP - quoted paragraph (within IP)
          704 .de QP
          705 .RT
          706 .if \\n(1T .NP
          707 .if \\n(1T .X "SP \\n(PD QP"
          708 .if \\n(1T .X "BS 2 QP"
          709 .nr QP 1
          710 .in +\\n(QIu
          711 .ll -\\n(QIu
          712 .ti \\n(.iu
          713 ..
          714 .                \" RS - prepare for double indenting
          715 .de RS
          716 .nr IS \\n(IP
          717 .RT
          718 .nr IP \\n(IS
          719 .nr IU \\n(IR
          720 .nr IR +1
          721 .if !\\n(I\\n(IR .nr I\\n(IR \\n(I\\n(IU+\\n(PIu
          722 .in \\n(I\\n(IRu
          723 .nr TY \\n(TZ-\\n(.i
          724 .ta \\n(TYuR
          725 ..
          726 .                \" RE - retreat to the left
          727 .de RE
          728 .nr IS \\n(IP
          729 .RT
          730 .nr IP \\n(IS
          731 .if \\n(IR>0 .nr IR -1
          732 .in \\n(I\\n(IRu
          733 ..
          734 .                \" B - bold font
          735 .de B
          736 .nr PQ \\n(.f
          737 .ft 3
          738 .if \\n(.$ \&\\$1\\f\\n(PQ\\$2
          739 ..
          740 .                \" BI - bold italic
          741 .de BI
          742 .nr PQ \\n(.f
          743 .ft 4
          744 .if \\n(.$ \&\\$1\\f\\n(PQ\\$2
          745 ..
          746 .                \" R - Roman font
          747 .de R
          748 .nr PQ \\n(.f
          749 .ft 1
          750 .if \\n(.$ \&\\$1\f\\n(PQ\\$2
          751 ..
          752 .                \" I - italic font
          753 .de I
          754 .nr PQ \\n(.f
          755 .ft 2
          756 .if \\n(.$ \&\\$1\^\f\\n(PQ\\$2
          757 ..
          758 .                \" CW - constant width font from -ms
          759 .de CW
          760 .nr PQ \\n(.f
          761 .if \\n(.$=0 .ft CW
          762 .if \\n(.$>0 \%\&\\$3\f(CW\\$1\\f\\n(PQ\\$2
          763 ..
          764 .de IT                \" ditto to italicize argument
          765 .nr Sf \\n(.f
          766 \%\&\\$3\f2\\$1\f\\n(Sf\&\\$2
          767 ..
          768 .                \" TA - tabs set in ens or chars
          769 .de TA
          770 .ta \\$1n \\$2n \\$3n \\$4n \\$5n \\$6n \\$7n \\$8n \\$9n
          771 ..
          772 .                \" SM - make smaller size
          773 .de SM
          774 .ie \\n(.$ \&\\$3\s-2\\$1\s0\\$2
          775 .el .ps -2
          776 ..
          777 .                \" LG - make larger size
          778 .de LG
          779 .ie \\n(.$ \&\\$3\s+2\\$1\s0\\$2
          780 .el .ps +2
          781 ..
          782 .                \" NL - return to normal size
          783 .de NL
          784 .ps \\n(PS
          785 ..
          786 .                \" FS - begin footnote
          787 .de FS
          788 .if \\n(IF>0 .tm .FS within .FS/.FE, line \\n(.c, file \\n(.F
          789 .if \\n(KF>0 .tm .FS won't work inside .KF, line \\n(.c, file \\n(.F
          790 .if \\n(KS>0 .tm .FS won't work inside .KS, line \\n(.c, file \\n(.F
          791 .nr IF 1
          792 .ev 1
          793 .ps \\n(PS-2
          794 .ie \\n(VS>=41 .vs \\n(VSu-2p
          795 .el .vs \\n(VSp-2p
          796 .ll \\n(LLu
          797 .br
          798 .nr X \\n(FOu
          799 .X "BF \\nX FS
          800 .SP .3v
          801 ....FA        \" deleted by authority of cvw, 10/17/88
          802 ..
          803 .                \" FE - end footnote
          804 .de FE
          805 .if !\\n(IF .tm .FE without .FS, line \\n(.c, file \\n(.F
          806 .br
          807 .X "END BF FE
          808 .bp
          809 .ev
          810 .nr IF 0
          811 ..
          812 .                \" FA - the line for a footnote
          813 .de FA
          814 \l'1i'
          815 .br
          816 ..
          817 .                \" Tm - message to be passed on
          818 .de Tm
          819 .ev 2
          820 .if \\n(.$=1 .X "TM \\$1
          821 .if \\n(.$=2 .X "TM \\$1 \\$2
          822 .if \\n(.$=3 .X "TM \\$1 \\$2 \\$3
          823 .if \\n(.$=4 .X "TM \\$1 \\$2 \\$3 \\$4
          824 .if \\n(.$=5 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5
          825 .if \\n(.$=6 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5 \\$6
          826 .if \\n(.$=7 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7
          827 .if \\n(.$=8 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
          828 .if \\n(.$=9 .X "TM \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
          829 .br
          830 .ev
          831 ..
          832 .de MH
          833 AT&T Bell Laboratories
          834 Murray Hill, New Jersey 07974
          835 ..
          836 .de HO
          837 AT&T Bell Laboratories
          838 Holmdel, New Jersey 07733
          839 ..
          840 .de WH
          841 AT&T Bell Laboratories
          842 Whippany, New Jersey 07981
          843 ..
          844 .de IH
          845 AT&T Bell Laboratories
          846 Naperville, Illinois 60540
          847 ..
          848 .                \" UL - underline argument, don't italicize
          849 .de UL
          850 \\$1\l'|0\(ul'\\$2
          851 ..
          852 .                \" UX - print $2 UNIX $1
          853 .de UX
          854 .ie \\n(UX \\$2\s-1UNIX\s0\\$1
          855 .el \{\
          856 \\$2\s-1UNIX\\s0\\$1\(rg
          857 .nr UX 1\}
          858 ..
          859 .                \" QS - start quote
          860 .de QS
          861 .br
          862 .LP
          863 .in +\\n(QIu
          864 .ll -\\n(QIu
          865 ..
          866 .                \" QE - end quote
          867 .de QE
          868 .br
          869 .ll +\\n(QIu
          870 .in -\\n(QIu
          871 .LP
          872 ..
          873 .                \"  B1 - begin boxed stuff
          874 .de B1
          875 .br
          876 .di BB
          877 .nr BC 0
          878 .if "\\$1"C" .nr BC 1
          879 .nr BE 1
          880 ..
          881 .                \" B2 - end boxed stuff
          882 .de B2 
          883 .br
          884 .nr BI 1n
          885 .if \\n(.$>0 .nr BI \\$1n
          886 .di
          887 .nr BE 0
          888 .nr BW \\n(dl
          889 .nr BH \\n(dn
          890 .ne \\n(BHu+\\n(.Vu
          891 .nr BQ \\n(.j
          892 .nf
          893 .ti 0
          894 .if \\n(BC>0 .in +(\\n(.lu-\\n(BWu)/2u
          895 .in +\\n(BIu
          896 .ls 1
          897 .BB
          898 .ls
          899 .in -\\n(BIu
          900 .nr BW +2*\\n(BI
          901 .sp -1
          902 \l'\\n(BWu\(ul'\L'-\\n(BHu'\l'|0\(ul'\h'|0'\L'\\n(BHu'
          903 .if \\n(BC>0 .in -(\\n(.lu-\\n(BWu)/2u
          904 .if \\n(BQ .fi
          905 .br
          906 ..
          907 .                \" BX - boxed stuff
          908 .de BX
          909 \(br\|\\$1\|\(br\l'|0\(rn'\l'|0\(ul'
          910 ..
          911 .
          912 .        \" macros for programs, etc.
          913 .
          914 .ig
          915         programs are displayed between .P1/.P2 pairs
          916         default is to indent by 1/2 inch, nofill, dP smaller
          917         .P1 x causes an indent of x instead.
          918 
          919         .P3 can be used to specify optional page-break points
          920         inside .P1/.P2
          921 ..
          922 .
          923 .                \" P1 - start of program
          924 .de P1
          925 .nr $1 \\n(P1
          926 .if \\n(.$ .nr $1 \\$1n
          927 .br
          928 .X "SP \\n(DV P1"
          929 .X "US P1"
          930 .in \\n($1u
          931 .nf
          932 .nr v \\n(.v
          933 .ps -\\n(dP
          934 .vs -\\n(dVu
          935 .ft CW
          936 .nr t \\n(dT*\\w'x'u
          937 .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
          938 ..
          939 .                \" P2 - end of program
          940 .de P2
          941 .br
          942 .ps \\n(PS
          943 .vs \\nvu
          944 .ft 1
          945 .in
          946 .X "END US P1
          947 .X "SP \\n(DV P2"
          948 .fi
          949 ..
          950 .                \" P3 - provides optional unpadded break in P1/P2
          951 .de P3
          952 .nr x \\n(DV
          953 .nr DV 0
          954 .P2
          955 .P1 \\n($1u
          956 .nr DV \\nx
          957 ..
          958 .de [
          959 [
          960 ..
          961 .de ]
          962 ]
          963 ..
          964 .IZ
          965 .rm IZ
          966 .so /usr/local/plan9/tmac/tmac.srefs