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