Annotation of 43BSD/contrib/news/doc/tmac.n, revision 1.1

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

unix.superglobalmegacorp.com

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