Annotation of 43BSDReno/share/doc/usd/09.newsread/tmac.n, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.