home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / me / tmac.e < prev   
Text File  |  1980-02-17  |  19KB  |  1,024 lines

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