1\" @(#)$Id: tmac.n,v 1.3 2000/02/02 18:49:05 dean Exp $ 2.\" The News macro package 3.\" 4.\" This is the macro package that is used to format news documents. It 5.\" was written because many sites do not have one of the -mm or -ms pack- 6.\" ages that the documents use. This is NOT compatible with EITHER, but 7.\" (I hope) will become the standard for all news documents (man pages 8.\" excepted, since everyone seems to have -man.) 9.\" 10.\" This package was written using only the "NROFF/TROFF Users' Guide", 11.\" and therefore if you can run NROFF/TROFF, you can legitimately use 12.\" this package. However, because NROFF/TROFF are proprietary programs, 13.\" I cannot place this package in the public domain. This should not 14.\" matter, because if you legitimately have NROFF/TROFF, you have the 15.\" documentation; if not, you can't run off the documentation anyway. 16.\" 17.\" This package may be circulated freely with the news documentation; it 18.\" may not be sold, but is to be distributed with the unformatted news 19.\" documents. However, the name of the author and the place at which it 20.\" was written (in the author's own time, of course) are not to be 21.\" removed from the package regardless of how it is modified or altered. 22.\" Further, please do not distribute this package if you make any changes 23.\" because I don't want to get bug reports of macros I haven't written; 24.\" if you have a goodie you want me to add, send it to me and we'll talk. 25.\" (I really do like feedback!) I'd really appreciate your cooperation. 26.\" 27.\" Author: Matt Bishop 28.\" Research Institute for Advanced Computer Science 29.\" Mail Stop 230-5 30.\" NASA Ames Research Center 31.\" Moffett Field, CA 94035 32.\" 33.\" version 1.0 September 28, 1985 mab@riacs.arpa 34.\" initial version 35.\" version 1.1 October 25, 1985 mab@riacs.arpa 36.\" fixed an incredibly obscure footnote bug (that occurred twice in 37.\" the news documentation!) which put footnoted words on one page 38.\" and the footnote on the next if the word was in the next-to-last 39.\" or last line; commented it, and generally cleaned up 40.\" Version 1.2 October 27, 1985 mab@riacs.arpa 41.\" Added a few more comments and a check to keep footnotes lined up 42.\" with the bottom margin. 43.\" Version 1.3 February 12, 1986 mab@riacs.arpa 44.\" Added an error check to catch unmatched ef's and ed's 45.\" Version 1.4 December 29, 1986 mab@riacs.edu 46.\" Changed footnote for ux, pd, and vx macros and added a string 47.\" for rg ("Registered Trademark") 48.\" Version 1.5 January 2, 1989 Matt.Bishop@dartmouth.edu 49.\" Minor modifications for nroff compatibility 50.\" Version 1.6 March 15, 1989 Matt.Bishop@dartmouth.edu 51.\" ..!bear.dartmouth.edu!bishop 52.\" Fixed a bug in footnote handling (again, sigh ...) This one 53.\" occurred when the the "fo" trap position was reset just beneath 54.\" the current line; the footnote overflow trap would kick in and 55.\" never be closed. 56.\" 57.\" 58.\" ********** 59.\" these preserve and restore various things 60.\" they are used to shorten other macros 61.de yf \" restore fonts 62.ft \\n(f2 \" previous font 63.ft \\n(f1 \" current font 64.. 65.de yi \" restore indents 66'in \\n(i2u \" previous indent 67'in \\n(i1u \" current indent 68.. 69.de ys \" restore point sizes 70.ps \\n(s2 \" previous point size 71.ps \\n(s1 \" current point size 72.. 73.de yv \" restore vertical spacings 74.vs \\n(v2u \" previous vertical spacing 75.vs \\n(v1u \" current vertical spacing 76.. 77.de ya \" restore everything 78.yf \" restore fonts 79.yi \" restore indents 80.ys \" restore point sizes 81.yv \" restore vertical spacing 82.. 83.de zf \" preserve fonts 84.nr f1 \\n(.f \" current font 85.ft \" switch to previous font 86.nr f2 \\n(.f \" previous font 87.ft \" back to current font 88.. 89.de zi \" preserve indents 90.nr i1 \\n(.iu \" current indent 91'in \" switch to previous indent 92.nr i2 \\n(.iu \" previous indent 93'in \" back to current indent 94.. 95.de zs \" preserve point sizes 96.nr s1 \\n(.su \" current point size 97.ps \" switch to previous point size 98.nr s2 \\n(.su \" previous point size 99.ps \" back to current point size 100.. 101.de zv \" preserve vertical spacings 102.nr v1 \\n(.vu \" current vertical spacing 103.vs \" switch to previous vertical spacing 104.nr v2 \\n(.vu \" previous vertical spacing 105.vs \" back to current vertical spacing 106.. 107.de za \" save everything 108.zf \" save fonts 109.zi \" save indents 110.zs \" save point sizes 111.zv \" save vertical spacings 112.. 113.\" ********** 114.\" these actually print the header and footer titles 115.\" they are defined separately from the "hd" and "fo" macros 116.\" to make user redefinition easy 117.de pt \" print header title 118. \" omit header on first page 119.if \\n%>1 \{\ 120' sp |\\$1u \" move to proper position 121. ft 1 \" change to default font 122. ps \\n(ps \" change to default point size 123. vs \\n(vs \" change to default spacing 124. tl '\\*(h0'\\*(h1'\\*(h2' \" center title 125. vs \" restore current vertical spacing 126. ps \" restore current point size 127. ft \" restore current font 128.\} 129.. 130.de pf \" print footer title 131.ft 1 \" change to default font 132.ps \\n(ps \" change to default point size 133.vs \\n(vs \" change to default spacing 134.ie \\n%=1 .tl '\\*(h0'\\*(h1'\\*(h2' \" on first page, print the header here 135.el .tl '\\*(f0'\\*(f1'\\*(f2' \" on other pages, print the footer 136.vs \" restore current vertical spacing 137.ps \" restore current point size 138.ft \" restore current font 139.. 140.\" ********** 141.\" these are the top of page (header) and bottom of page (footer) macros 142.\" they don't actually print anything, just call the right macros 143.de hd \" header -- do top of page processing 144.if t .if \\n(cm .tl '\(rn''' \" drop cut mark if needed 145.pt \\n(ttu \" print header 146.nr fc 0 1 \" init footnote count 147.nr fs \\n(.pu-\\n(bmu-1u \" if any footnotes, start print here 148.nr fp 0-\\n(bmu \" reset current footer place 149.ch fo -\\n(bmu \" reset footer trap 150.if \\n(dn .fz \" put leftover footnotes st bottom 151.ya \" restore font, etc. 152'sp |\\n(tmu \" move to top of body 153.ns \" don't allow any more space 154.. 155.de fo \" footer -- do bottom of page processing 156.za \" save font, etc. 157.rs \" you want motions here 158.nr dn 0 \" clobber diversion size register 159.if \\n(fc .fd \" now print the footnotes, if any 160'bp \" force out page 161.. 162.\" ********** 163.\" these are the footnote macros 164.\" here's an overview: 165.\" Footnotes are processed in environment #1, which is initialized 166.\" at the bottom of this package. When "fn" is called, nroff/troff 167.\" switches to this environment. The body of the footnote is saved 168.\" in the diversion "tf" (for "temporary footnote"), so you will 169.\" NEVER spring a trap during the first reading of a footnote. When 170.\" "ef" ("end footnote") is called, the diversion is closed. If 171.\" this is the first footnote on the page (ie, the number register 172.\" "fc" is 1), and the footnote height (plus the height of 1 line) 173.\" crosses the bottom margin, you get the footnoted word on one 174.\" page and the footnote on the other. In this case we just call 175.\" "fo" manually (taking case it cannot be re-invoked on the same 176.\" page!) If this situation does not occur, we just adjust the 177.\" footer trap's position upwards (we'll get to how far in a min- 178.\" ute); if this puts the trap above the current line, we reposi- 179.\" tion the trap just beneath the current line to be sure of trig- 180.\" triggering it once the current line is forced out. 181.\" To reposition the footer trap, we proceed as follows. Because 182.\" the trap may be sprung in the middle of a line, it is possible 183.\" that the footnote will not fit on the page (regardless of where 184.\" on the page the footnoted word occurs -- really!) if we move the 185.\" trap up by the size of the footnote diversion "tf". So, we 186.\" fudge things a little bit -- for the first footnote on each page 187.\" we move the footer trap up 1 extra line ("line" being 1v in env- 188.\" ironment #0). Unless the point size and vertical spacing are 189.\" increased between the first footnote and the footer trap's being 190.\" sprung, this will keep the footnotes on the same page as the 191.\" footnoted word. But as there may be now as much as 1v of space 192.\" between the footnote and the bottom margin, which looks HIDEOUS, 193.\" we use the number register "fs" to mark where the footer trap 194.\" would REALLY go, and just space to it when it comes time to put 195.\" out the footnotes. 196.de fd \" dump footnotes 197.nr gs 1v \" get a measure of 1 line in env #0 198.ev 1 \" switch to footnote environment 199.nr gs +2v \" min of 2 lines of footnotes 200. \" if the number register ns > 0, 201. \" the last text line may contain a 202. \" footnote that is too big to fit; 203. \" this checks for such a note and 204. \" if so, forces the footnote into 205. \" the "fy" diversion that carries 206. \" it onto the next text page 207.ie (\\n(nsu>0)&(\\n(gsu>=\\n(.tu) 'sp \\n(gsu \" be sure you can get it down 208.el .if \\n(fsu>\\n(nlu 'sp \\n(fsu-\\n(nlu \" move to footnote start position 209'nf \" don't reprocess footnotes 210'in 0 \" don't indent them any more either 211.tf \" drop text of footnotes 212.rm tf 213.if '\\n(.z'fy' .di \" end overflow diversion, if any 214.nr fc 0 \" re-init footnote count 215.ev \" return to usual environment 216.. 217.de fn \" start footnote 218. \" look for nested footnotes -- ILLEGAL 219.ie \\n(if>0 .er "footnote within footnote" 220.el .da tf \" append footnote to footnote diversion 221.nr if +1 \" increment level of footnoting 222.nr fc +1 \" one more footnote on this page 223.if \\n(fc=1 .nr fp -1v \" The reason for this "fudge factor" 224. \" is that there is no way to force 225. \" NROFF/TROFF to invoke a macro at 226. \" the end of each line. At times, 227. \" the trap boundary will not match up 228. \" with the bottom of a line, so the 229. \" "fo" trap which is set at 2320 may 230. \" not be triggered until 2340 -- and 231. \" then the footnote won't fit. This 232. \" gives some slack so the footnote is 233. \" more likely to fit. *sigh* 234.ev 1 \" enter footnote environment 235.if \\n(fc=1 .fs \" drop separator if first footnote 236.br \" flush out any previous line in footnote 237.fi \" process footnote in fill mode 238.. 239.de ef \" end footnote 240.br \" flush out the line in footnote 241.ie \\n(if<=0 .er "end footnote has no corresponding begin footnote" 242.el \{\ 243. nr if -1 \" decrement level of footnoting 244. nr fg 2v \" remember this for repositioning fo 245. ev \" back to usual environment 246. if \\n(if=0 \{\ 247. di \" end of footnote proper 248. nr fp -\\n(dnu \" "fo" will be moved at least up this far 249. nr fs -\\n(dnu \" increase size of footnote 250. ch fo \\n(fpu \" reposition "fo" trap (first guess) 251. \" the first part of the "ie" clause 252. \" is taken in the special case 253. \" described above 254. ie (\\n(fc=1)&((\\n(nlu+1v+\\n(fgu)>=(\\n(.pu-\\n(bmu)) \{\ 255. nr ns \\n(dnu \" suppress footnote separator 256. \" since this footnote contains it 257. \" keep "fo" from being invoked twice 258. ch fo \\n(.pu+1i 259. fo \" force the page out AT ONCE 260. nr ns 0 \" re-enable footnote separator 261. \} 262. \" footnote won't fit completely 263. \" invoke the footer trap but 264. \" don't worry about the footnote 265. \" separator (it's already there) 266. el .if (\\n(nlu+1v)>=(\\n(.pu+\\n(fpu) \{\ 267. \" as before we must reposition the 268. \" "fo" trap to prevent "fo" from 269. \" being invoked twice 270. ch fo \\n(.pu+1i 271. fo \" force the page out AT ONCE 272. \} 273. \} 274.\} 275.. 276.de fs \" drop footnote separator 277. \" only if not already dropped 278.if \\n(ns=0 \l'1i' 279.nr ns 0 \" in case footnotes are over 1 page long 280.. 281.de fx \" process footnote overflow 282.if \\n(fc .di fy \" stuff them in the right place 283.. 284.de fz \" deposit footnote overflow 285.fn \" treat it as a footnote 286.nf \" it's already been processed 287.in 0 \" and indented 288.fy \" "fx" put it here 289.ef \" end the footnote 290.. 291.\" ********** 292.\" the ones after here are user-invoked (like "fn" and "ef" above) 293.\" title, author, etc. 294.de mt \" main title 295\& 296.sp |\\n(mtu \" space 297.ft 3 \" in bold 298.ps \\n(ps+2p \" large point size and 299.vs \\n(vs+2p \" vertical spacing 300.ce 1000 \" center the title 301.nr t2 1 \" space it 302.. 303.de au \" author 304.nr t2 0 \" spacing here 305.sp 2v \" space 306.ft 2 \" in italics 307.ps \\n(ps \" usual point size and 308.vs \\n(vs \" vertical spacing 309.ce 1000 \" center the name(s) 310.. 311.de ai \" author's institution 312.if \\n(t2 .sp 2v \" space after a title 313.nr t2 0 \" institution 314.ft 2 \" in italics 315.ps \\n(ps \" usual point size and 316.vs \\n(vs \" vertical spacing 317.ce 1000 \" center the name(s) 318.. 319.de bt \" begin text macro 320.nr t2 0 \" hold it here 321.nr it +1 \" mark as called 322.ce 0 \" end any centering 323.sn 3v \" a little bit of space 324.. 325.\" paragraph 326.de si \" start indented section 327.nr lo \\n(lm \" remember the current level 328.nr lm +1 \" go to the next level 329.ie '\\$1'' .nr l\\n(lm \\n(l\\n(lo+5n \" if no arg, indent 5n 330.el .nr l\\n(lm \\$1n \" otherwise, indent that much 331.. 332.de ei \" end indent 333.nr lm -1 \" down one level 334.if \\n(lm<0 .nr lm 0 \" make sure you don't go too far 335.. 336.de pg \" plain old paragraph 337.if !\\n(it .bt \" end the title and such 338.sn \\n(pdu \" inter-paragraph spacing 339.ft 1 \" reset a few things (paranoia) 340. \" these ONLY if not in footnote 341.ie \\n(if=0 \{\ 342. ps \\n(ps \" reset point size 343. vs \\n(vs \" reset vertical spacing 344. ne 1v+\\n(.Vu \" slightly more than 1 line 345.\} 346.el \{\ 347. ps \\n(ps-2p \" reset point size 348. vs \\n(vs-2p \" reset vertical spacing 349.\} 350.in \\n(l\\n(lmu \" stop any indenting 351.ce 0 \" stop any centering 352.if !'\\$1'L' .if !'\\$1'l' .ti +\\n(piu \" indent the sucker 353.. 354.de lp \" labelled paragraph 355.pg l \" reset paragraph 356.if \\n(.$>1 .nr li \\$2n \" if indent given use it 357.in +\\n(liu \" indent for paragraph 358.ti -\\n(liu \" force first line NOT to indent 359.ta +\\n(liu \" for the label 360\&\\$1\t\c 361.if \\w'\\$1'u>=(\\n(l\\n(lmu+\\n(liu) .br \" don't overwrite 362.. 363.\" The following two macros (hu & hn) have been modified for ELM usage. 364.\" If the macros have text as part of the macro call, the text will be 365.\" increased in size by two points. After printing the text, the font 366.\" will be returned to normal, otherwise the font will be left bold. 367.\" 368.\" section 369.de hu \" header, unnumbered 370. \" format: .hu [text] 371.if !\\n(it .bt \" end the title and such 372.br \" force out previous line 373.b 374.ie \\n(hP .ps \\n(hP 375.el .ps \\n(ps 376.ie \\n(hv .vs \\n(hv 377.el .vs \\n(vs 378.in \\n(l\\n(lmu \" stop any indenting 379.sn \\n(hsu \" inter-section spacing 380.ne 3v+\\n(.Vu \" slightly more than 3 lines 381.fi \" process the text, too 382.if \\n(.$>=1 \{\ 383.ps +2 384\\$1 385.\} 386.if \\n(.$>=2 \\$2 387.if \\n(.$>=3 \\$3 388.if \\n(.$>=4 \\$4 389.if \\n(.$>=5 \\$5 390.if \\n(.$>=6 \\$6 391.if \\n(.$>=7 \\$7 392.if \\n(.$>=8 \\$8 393.if \\n(.$=9 \\$9 394.if \\n(.$>=1 \{\ 395.ps -2 396.br 397.ft 1 398.\} 399.. 400.de hn \" header, numbered 401. \" format: .hn [level] [text] 402.if !\\n(it .bt \" end the title and such 403.br \" force out previous line 404.b 405.ie \\n(hP .ps \\n(hP 406.el .ps \\n(ps 407.ie \\n(hv .vs \\n(hv 408.el .vs \\n(vs 409.in \\n(l\\n(lmu \" stop any indenting 410.sn \\n(hsu \" inter-section spacing 411.ne 3v+\\n(.Vu \" slightly more than 3 lines 412.fi \" process the text, too 413.ie !'\\$1'' .nr hn \\$1 414.el .nr hn 1 415.ie \\n(hn>0 .nr hn -1 416.el .nr hn 0 417.ie \\n(hn=0 \{\ 418. nr h0 +1 \" add 1 to main section header 419. nr h1 0 \" zap remaining section numbers 420. nr h2 0 \" zap remaining section numbers 421. nr h3 0 \" zap remaining section numbers 422.ie \\n(.$>=2 \{\ 423.ps +2 424\\n(h0. 425.ps -2 426.\} 427.el \\n(h0. 428.\} 429.el .ie \\n(hn=1 \{\ 430. nr h1 +1 \" add 1 to the section header 431. nr h2 0 \" zap remaining section numbers 432. nr h3 0 \" zap remaining section numbers 433.ie \\n(.$>=2 \{\ 434.ps +2 435\\n(h0.\\n(h1. 436.ps -2 437.\} 438.el \\n(h0.\\n(h1. 439.\} 440.el .ie \\n(hn=2 \{\ 441. nr h2 +1 \" add 1 to the section header 442. nr h3 0 \" zap remaining section numbers 443.ie \\n(.$>=2 \{\ 444.ps +2 445\\n(h0.\\n(h1.\\n(h2. 446.ps -2 447.\} 448.el \\n(h0.\\n(h1.\\n(h2. 449.\} 450.el \{\ 451. nr h3 +1 \" add 1 to the section number 452.ie \\n(.$>=2 \{\ 453.ps +2 454\\n(h0.\\n(h1.\\n(h2.\\n(h3. 455.ps -2 456.\} 457.el \\n(h0.\\n(h1.\\n(h2.\\n(h3. 458.\} 459.if \\n(.$>=2 \{\ 460.ps +2 461\\$2 462.\} 463.if \\n(.$>=3 \\$3 464.if \\n(.$>=4 \\$4 465.if \\n(.$>=5 \\$5 466.if \\n(.$>=6 \\$6 467.if \\n(.$>=7 \\$7 468.if \\n(.$>=8 \\$8 469.if \\n(.$>=9 \\$9 470.if \\n(.$>=2 \{\ 471.br 472.ft 1 473.ps -2 474.\} 475.. 476.\" displays (no floats, thank God!) 477.de sd \" start display 478. \" look for nested displays -- ILLEGAL 479.ie \\n(id>0 .er "display within display" 480.el \{\ 481. ie '\\$1'c' .nr sf 1 \" center the sucker 482. el .nr sf 0 \" don't center it 483.\} 484.sn \\n(pdu \" a little bit of space 485.ev 2 \" switch to display environment 486.nf \" what you type is what you get 487.if \\n(id=0 .di dd \" start saving text 488.rs \" don't eat leading space 489.nr id +1 \" increment level of display 490.. 491.de ed \" end display 492.br \" flush line 493.ie \\n(id<=0 .er "end display has no corresponding begin display" 494.el \{\ 495. nr id -1 \" decrement level of display 496. if \\n(id=0 \{\ 497. di \" end diversion 498. fi \" resume filling 499. in -\\n(piu \" dedent 500. ev \" pop environment 501. ne \\n(dnu \" be sure you have room 502. nf \" don't reprocess display 503. rs \" don't eat leading space 504. zi \" save indents 505. ie \\n(sf .in (\\n(llu-\\n(dlu)/2u \" center on the line length 506. el .in +\\n(piu \" indent the sucker 507. dd \" drop display 508. yi \" restore indents 509. \} 510.\} 511.fi \" resume filling 512.sn \\n(pdu \" a little bit of space 513.. 514.\" ********** 515.\" fonts -- if argument(s), apply only to first 516.de b \" bold (font 3) 517.ie \\n(.$>0 \\&\\$3\\f3\\$1\\fP\\$2 518.el .ft 3 519.. 520.de i \" italics (font 2) 521.ie \\n(.$>0 \\&\\$3\\f2\\$1\\fP\\$2 522.el .ft 2 523.. 524.de r \" roman (font 1) 525.ft 1 \" just restore it 526.. 527.de bi \" bold italics (embolden font 2) 528\\&\\$3\c 529\\kb\\f2\\$1\\fP\\h'|\\nbu+2u'\\f2\\$1\\fP\\$2 530.. 531.\" ********** 532.\" point sizes -- if argument(s), apply only to first 533.de sm \" reduce point size by 2 534.ie \\n(.$>0 \\&\\$3\\s-2\\$1\\s0\\$2 535.el .ps -2 536.. 537.de is \" increase point size by 2 538.ie \\n(.$>0 \\&\\$3\\s+2\\$1\\s0\\$2 539.el .ps +2 540.. 541.de nl \" return to normal size 542.ps \\n(ps \" just reset the point size 543.. 544.\" ********** 545.\" handy force space/inhibit more space macros 546.de sn \" space, then turn on nospace mode 547.sp \\$1 \" space 548.ns \" ignore any more space requests 549.. 550.de sr \" force out space 551.rs \" turn on spacing mode 552.sp \\$1 \" space 553.. 554.\" ********** 555.\" end of text and error macros 556.de et \" end of text macro 557. \" this: (1) flushes rest of line 558. \" (2) trips the footer, taking 559. \" care of footnotes 560.sp \\n(.pu 561. \" check for open displays or footnotes 562.if \\n(id>0 .er "unfinished display" 563.if \\n(if>0 .er "unfinished footnote" 564. \" this one means an -mn bug (*sigh*) 565.if !'\\n(.z'' .er "diversion \\n(.z not closed" 566.. 567.de er \" print error message 568. \" flag it as an error 569.ds ws "** ERROR ** 570. \" if you have it, give the file name 571.if !'\\*(.f'' .as ws " file \\*(.f, 572. \" put out the line number 573.as ws " line \\n(.c 574. \" and finally the error message 575.tm \\*(ws: \\$1 576.. 577.\" ********** 578.\" macros in this section are VERY specific to the news documentation 579.de pa \" protocol appellation (darn names!) 580\\&\\$3\\f2\\$1\\fP\\$2 581.. 582.de ng \" news group name 583\\&\\$3\\f3\\$1\\fP\\$2 584.. 585.de cn \" computer name 586\\&\\$3\\f2\\$1\\fP\\$2 587.. 588.de hf \" header field 589\\&\\$3\\*(lq\\$1\\*(rq\\$2 590.. 591.de cf \" contents of field 592\\&\\$3\\*(lq\\$1\\*(rq\\$2 593.. 594.de qc \" quote control char (command) 595\\&\\$3\\f3<\\s-2\\$1\\s0>\\fP\\$2 596.. 597.de qp \" quote printing char (command) 598\\&\\$3\\f3\\$1\\fP\\$2 599.. 600.de op \" option 601\\&\\$3\\f3\\$1\\fP\\$2 602.. 603.\" ********** 604.\" trademarked names 605.de pd \" print "PDP-11" 606.ie \\n(p1 \\&\\$2\\s-1PDP\\s0-11\\$1 607.el \{\ 608. nr p1 +1 \" mark footnote as dropped 609\\&\\$2\\s-1PDP\\s0-11\\*(rg\\$1 610. fn \" put out the footnote 611\\&\\*(rgPDP-11 is a registered trademark of Digital Equipment Corporation. 612. ef \" short and sweet ... 613.\} 614.. 615.de ux \" print "UNIX" 616.ie \\n(ux \\&\\$2\\s-1UNIX\\s0\\$1 617.el \{\ 618. nr ux +1 \" mark footnote as dropped 619\\&\\$2\\s-1UNIX\\s0\\*(rg\\$1 620. fn \" put out the footnote 621\\&\\*(rgUNIX is a registered trademark of AT&T. 622. ef \" short and sweet ... 623.\} 624.. 625.de vx \" print "VAX" 626.ie \\n(vx \\&\\$2\\s-1VAX\\s0\\$1 627.el \{\ 628. nr vx +1 \" mark footnote as dropped 629\\&\\$2\\s-1VAX\\s0\\*(rg\\$1 630. fn \" put out the footnote 631\\&\\*(rgVAX is a trademark of Digital Equipment Corporation. 632. ef \" short and sweet ... 633.\} 634.. 635.\" ********** 636.\" set up string and number registers 637. \" set up for the date 638.if \n(mo=1 .ds mo January 639.if \n(mo=2 .ds mo February 640.if \n(mo=3 .ds mo March 641.if \n(mo=4 .ds mo April 642.if \n(mo=5 .ds mo May 643.if \n(mo=6 .ds mo June 644.if \n(mo=7 .ds mo July 645.if \n(mo=8 .ds mo August 646.if \n(mo=9 .ds mo September 647.if \n(mo=10 .ds mo October 648.if \n(mo=11 .ds mo November 649.if \n(mo=12 .ds mo December 650.nr Yr \n(yr+1900 651.ds dy "\*(mo \n(dy, \n(Yr 652.if \n(dw=1 .ds dw Sunday 653.if \n(dw=2 .ds dw Monday 654.if \n(dw=3 .ds dw Tuesday 655.if \n(dw=4 .ds dw Wednesday 656.if \n(dw=5 .ds dw Thursday 657.if \n(dw=6 .ds dw Friday 658.if \n(dw=7 .ds dw Saturday 659. \" NROFF dependencies 660.if n \{\ 661. \" string registers 662. ds rg (R) 663. ds lq "" 664. ds rq "" 665. ds f1 "\*(dy 666. \" number registers 667. nr hs 1v \" space before section header 668. nr pd 1v \" inter-paragraph spacing 669. nr bm 1.0i \" height of bottom margin 670.\} 671. \" NROFF dependencies 672.if t \{\ 673. \" string registers 674. ds rg \\u\\s-2\\(rg\\s0\\d 675. ds lq `` 676. ds rq '' 677. \" number registers 678. nr hs 1v \" space before section header 679. nr pd 0.3v \" inter-paragraph spacing 680. nr bm 1.0i+1v \" height of bottom margin (wacky laser) 681.\} 682. \" these are the same for [NT]ROFF 683.ds dg \(dg 684.ds vr "News Version B2.11 685.ds pv "News macros 1.5 686.ds h1 - % - 687.nr bt 0.5i+1v \" bottom of page to footer 688.nr cm 0 \" no cut marks 689.nr fc 0 1 \" init footnote count 690.nr fl 5.5i \" footnote line length 691.nr fp 0-\n(bmu \" fo macro trap location 692.nr h0 0 \" init section header level 0 693.nr h1 0 \" init section header level 1 694.nr h2 0 \" init section header level 2 695.nr h3 0 \" init section header level 3 696.nr id 0 \" 1 in display 697.nr if 0 \" 1 in keep 698.nr it 0 \" 1 when beyond title, etc. 699.nr li 5n \" indent for labelled paragraph 700.nr ll 6.5i \" line length 701.nr lm 0 \" left margin 702.nr l0 0 \" first indent level 703.nr mt 1.5i+1v \" title goes down this far 704.nr pi 5n \" regular paragraph indent 705.nr po 1.0i \" page offset 706.nr ps 10 \" point size 707.nr tm 1.0i \" height of top margin 708.nr tt 0.5i-0.5v \" top of page to header 709.nr p1 0 \" no PDP-TM message yet 710.nr ux 0 \" no UNIX-TM message yet 711.nr vx 0 \" no VAX-TM message yet 712.nr vs 12 \" vertical spacing 713.\" set things up 714.\" DSINC changes for XROFF 715.nr f1 1 716.nr f2 1 717.nr s1 10 718.nr s2 10 719.nr v1 12 720.nr v2 12 721.ps 10 722.vs 12 723.\" DSINC end changes for XROFF 724.po \n(pou \" set page offset 725.ps \n(ps \" set previous, current 726.ps \n(ps \" point sizes 727.vs \n(vs \" set previous, current 728.vs \n(vs \" vertical spacings 729.ll \n(llu \" set line length 730.lt \n(llu \" set title line length 731.ev 1 \" *** footnote environment 732.ps \n(ps-2p \" set previous, current 733.ps \n(ps-2p \" point sizes 734.vs \n(vs-2p \" set previous, current 735.vs \n(vs-2p \" vertical spacings 736.ll \n(flu \" set line length 737.lt \n(flu \" set title line length 738.ev \" *** pop environment 739.ev 2 \" *** footnote environment 740.ps \n(ps \" set previous, current 741.ps \n(ps \" point sizes 742.vs \n(vs \" set previous, current 743.vs \n(vs \" vertical spacings 744.ll \n(llu \" set line length 745.lt \n(llu \" set title line length 746.ev \" *** pop environment 747.\" now set internal registers (for the first header section) 748.nr f1 \n(.f \" saved font #1 749.nr f2 \n(.f \" saved font #2 750.nr s1 \n(.s \" saved point size #1 751.nr s2 \n(.s \" saved point size #2 752.nr v1 \n(.v \" saved vertical spacing #1 753.nr v2 \n(.v \" saved vertical spacing #2 754.\" install traps 755.wh 0i hd \" position header trap 756.wh -\n(bmu fo \" position footer trap 757.wh \n(.pu+1i fx \" put footnote overflow trap here 758.ch fx -\n(bmu \" move it over fo 759.wh -\n(btu pf \" print the bottom margin here 760.em et \" at end of file, call et 761.\" couple of miscellaneous requests 762.bd S 3 3 \" embolden special font chars if B 763.hy 2 \" don't hyphenate last lines 764 765