pm 18 KB

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