]> granicus.if.org Git - nethack/commitdiff
change revision
authornethack.allison <nethack.allison>
Sat, 19 Jan 2002 12:59:18 +0000 (12:59 +0000)
committernethack.allison <nethack.allison>
Sat, 19 Jan 2002 12:59:18 +0000 (12:59 +0000)
doc/tmac.n [new file with mode: 0644]

diff --git a/doc/tmac.n b/doc/tmac.n
new file mode 100644 (file)
index 0000000..a181d50
--- /dev/null
@@ -0,0 +1,764 @@
+\" @(#)$Id: tmac.n,v 1.3 2002/01/19 12:59:18 michael.allison Exp $
+.\" The News macro package
+.\"
+.\" This  is  the macro package that is used to format news documents.  It
+.\" was written because many sites do not have one of the -mm or -ms pack-
+.\" ages that the documents use.   This is NOT compatible with EITHER, but
+.\" (I hope) will become the standard for all news  documents  (man  pages
+.\" excepted, since everyone seems to have -man.)
+.\"
+.\" This package was written using  only  the  "NROFF/TROFF Users' Guide",
+.\" and  therefore  if  you  can run NROFF/TROFF, you can legitimately use
+.\" this package.  However, because NROFF/TROFF are proprietary  programs,
+.\" I  cannot  place  this  package in the public domain.  This should not
+.\" matter, because if you legitimately have  NROFF/TROFF,  you  have  the
+.\" documentation; if not, you can't run off the documentation anyway.
+.\"
+.\" This  package may be circulated freely with the news documentation; it
+.\" may not be sold, but is to be distributed with  the  unformatted  news
+.\" documents.  However,  the name of the author and the place at which it
+.\" was written (in the author's own  time,  of  course)  are  not  to  be
+.\" removed  from the package regardless of how it is modified or altered.
+.\" Further, please do not distribute this package if you make any changes
+.\" because  I  don't want to get bug reports of macros I haven't written;
+.\" if you have a goodie you want me to add, send it to me and we'll talk.
+.\" (I really do like feedback!)  I'd really appreciate your cooperation.
+.\"
+.\" Author:    Matt Bishop
+.\"            Research Institute for Advanced Computer Science
+.\"            Mail Stop 230-5
+.\"            NASA Ames Research Center
+.\"            Moffett Field, CA  94035
+.\"
+.\" version 1.0                September 28, 1985      mab@riacs.arpa
+.\"    initial version
+.\" version 1.1                October 25, 1985        mab@riacs.arpa
+.\"    fixed an incredibly obscure footnote bug (that occurred twice in
+.\"    the news documentation!) which put footnoted words on  one  page
+.\"    and the footnote on the next if the word was in the next-to-last
+.\"    or last line; commented it, and generally cleaned up
+.\" Version 1.2                October 27, 1985        mab@riacs.arpa
+.\"    Added a few more comments and a check to keep footnotes lined up
+.\"    with the bottom margin.
+.\" Version 1.3                February 12, 1986       mab@riacs.arpa
+.\"    Added an error check to catch unmatched ef's and ed's
+.\" Version 1.4                December 29, 1986       mab@riacs.edu
+.\"    Changed footnote for ux, pd, and vx macros and  added  a  string
+.\"    for rg ("Registered Trademark")
+.\" Version 1.5                January 2, 1989         Matt.Bishop@dartmouth.edu
+.\"    Minor modifications for nroff compatibility
+.\" Version 1.6                March 15, 1989          Matt.Bishop@dartmouth.edu
+.\"                                            ..!bear.dartmouth.edu!bishop
+.\"    Fixed a bug in footnote handling (again, sigh ...)  This one
+.\"    occurred when the the "fo" trap position was reset just beneath
+.\"    the current line; the footnote overflow trap would kick in and
+.\"    never be closed.
+.\"
+.\"
+.\" **********
+.\" these preserve and restore various things
+.\" they are used to shorten other macros
+.de yf                                 \" restore fonts
+.ft \\n(f2                             \" previous font
+.ft \\n(f1                             \" current font
+..
+.de yi                                 \" restore indents
+'in \\n(i2u                            \" previous indent
+'in \\n(i1u                            \" current indent
+..
+.de ys                                 \" restore point sizes
+.ps \\n(s2                             \" previous point size
+.ps \\n(s1                             \" current point size
+..
+.de yv                                 \" restore vertical spacings
+.vs \\n(v2u                            \" previous vertical spacing
+.vs \\n(v1u                            \" current vertical spacing
+..
+.de ya                                 \" restore everything
+.yf                                    \" restore fonts
+.yi                                    \" restore indents
+.ys                                    \" restore point sizes
+.yv                                    \" restore vertical spacing
+..
+.de zf                                 \" preserve fonts
+.nr f1 \\n(.f                          \" current font
+.ft                                    \" switch to previous font
+.nr f2 \\n(.f                          \" previous font
+.ft                                    \" back to current font
+..
+.de zi                                 \" preserve indents
+.nr i1 \\n(.iu                         \" current indent
+'in                                    \" switch to previous indent
+.nr i2 \\n(.iu                         \" previous indent
+'in                                    \" back to current indent
+..
+.de zs                                 \" preserve point sizes
+.nr s1 \\n(.su                         \" current point size
+.ps                                    \" switch to previous point size
+.nr s2 \\n(.su                         \" previous point size
+.ps                                    \" back to current point size
+..
+.de zv                                 \" preserve vertical spacings
+.nr v1 \\n(.vu                         \" current vertical spacing
+.vs                                    \" switch to previous vertical spacing
+.nr v2 \\n(.vu                         \" previous vertical spacing
+.vs                                    \" back to current vertical spacing
+..
+.de za                                 \" save everything
+.zf                                    \" save fonts
+.zi                                    \" save indents
+.zs                                    \" save point sizes
+.zv                                    \" save vertical spacings
+..
+.\" **********
+.\" these actually print the header and footer titles
+.\" they are defined separately from the "hd" and "fo" macros
+.\" to make user redefinition easy
+.de pt                                 \" print header title
+.                                      \" omit header on first page
+.if \\n%>1 \{\
+'      sp |\\$1u                       \" move to proper position
+.      ft 1                            \" change to default font
+.      ps \\n(ps                       \" change to default point size
+.      vs \\n(vs                       \" change to default spacing
+.      tl '\\*(h0'\\*(h1'\\*(h2'       \" center title
+.      vs                              \" restore current vertical spacing
+.      ps                              \" restore current point size
+.      ft                              \" restore current font
+.\}
+..
+.de pf                                 \" print footer title
+.ft 1                                  \" change to default font
+.ps \\n(ps                             \" change to default point size
+.vs \\n(vs                             \" change to default spacing
+.ie \\n%=1 .tl '\\*(h0'\\*(h1'\\*(h2'  \" on first page, print the header here
+.el        .tl '\\*(f0'\\*(f1'\\*(f2'  \" on other pages, print the footer
+.vs                                    \" restore current vertical spacing
+.ps                                    \" restore current point size
+.ft                                    \" restore current font
+..
+.\" **********
+.\" these are the top of page (header) and bottom of page (footer) macros
+.\" they don't actually print anything, just call the right macros
+.de hd                                 \" header -- do top of page processing
+.if t .if \\n(cm .tl '\(rn'''          \" drop cut mark if needed
+.pt \\n(ttu                            \" print header
+.nr fc 0 1                             \" init footnote count
+.nr fs \\n(.pu-\\n(bmu-1u              \" if any footnotes, start print here
+.nr fp 0-\\n(bmu                       \" reset current footer place
+.ch fo -\\n(bmu                                \" reset footer trap
+.if \\n(dn .fz                         \" put leftover footnotes st bottom
+.ya                                    \" restore font, etc.
+'sp |\\n(tmu                           \" move to top of body
+.ns                                    \" don't allow any more space
+..
+.de fo                                 \" footer -- do bottom of page processing
+.za                                    \" save font, etc.
+.rs                                    \" you want motions here
+.nr dn 0                               \" clobber diversion size register
+.if \\n(fc .fd                         \" now print the footnotes, if any
+'bp                                    \" force out page
+..
+.\" **********
+.\" these are the footnote macros
+.\" here's an overview:
+.\"    Footnotes are processed in environment #1, which is  initialized
+.\"    at the bottom of this package.  When "fn" is called, nroff/troff
+.\"    switches to this environment.  The body of the footnote is saved
+.\"    in  the  diversion  "tf" (for "temporary footnote"), so you will
+.\"    NEVER spring a trap during the first reading of a footnote. When
+.\"    "ef" ("end footnote") is called,  the diversion  is  closed.  If
+.\"    this  is the first footnote on the page (ie, the number register
+.\"    "fc" is 1), and the footnote height (plus the height of 1  line)
+.\"    crosses  the  bottom  margin,  you get the footnoted word on one
+.\"    page and the footnote on the other.  In this case we  just  call
+.\"    "fo"  manually  (taking case it cannot be re-invoked on the same
+.\"    page!)  If this situation does not occur,  we  just  adjust  the
+.\"    footer  trap's  position upwards (we'll get to how far in a min-
+.\"    ute); if this puts the trap above the current line,  we  reposi-
+.\"    tion  the trap just beneath the current line to be sure of trig-
+.\"    triggering it once the current line is forced out.
+.\"     To reposition the footer trap, we proceed as  follows.  Because
+.\"    the  trap  may be sprung in the middle of a line, it is possible
+.\"    that the footnote will not fit on the page (regardless of  where
+.\"    on the page the footnoted word occurs -- really!) if we move the
+.\"    trap up by the size of  the  footnote  diversion  "tf".  So,  we
+.\"    fudge things a little bit -- for the first footnote on each page
+.\"    we move the footer trap up 1 extra line ("line" being 1v in env-
+.\"    ironment  #0).   Unless  the point size and vertical spacing are
+.\"    increased between the first footnote and the footer trap's being
+.\"    sprung,  this  will  keep  the footnotes on the same page as the
+.\"    footnoted word.  But as there may be now as much as 1v of  space
+.\"    between the footnote and the bottom margin, which looks HIDEOUS,
+.\"    we use the number register "fs" to mark where  the  footer  trap
+.\"    would  REALLY go, and just space to it when it comes time to put
+.\"    out the footnotes.
+.de fd                                 \" dump footnotes
+.nr gs 1v                              \" get a measure of 1 line in env #0
+.ev 1                                  \" switch to footnote environment
+.nr gs +2v                             \" min of 2 lines of footnotes
+.                                      \" if the number register ns > 0,
+.                                      \" the last text line may contain a
+.                                      \" footnote that is too big to fit;
+.                                      \" this checks for such a note and
+.                                      \" if so, forces the footnote into
+.                                      \" the "fy" diversion that carries
+.                                      \" it onto the next text page
+.ie (\\n(nsu>0)&(\\n(gsu>=\\n(.tu) 'sp \\n(gsu \" be sure you can get it down
+.el .if \\n(fsu>\\n(nlu 'sp \\n(fsu-\\n(nlu    \" move to footnote start position
+'nf                                    \" don't reprocess footnotes
+'in 0                                  \" don't indent them any more either
+.tf                                    \" drop text of footnotes
+.rm tf
+.if '\\n(.z'fy' .di                    \" end overflow diversion, if any
+.nr fc 0                               \" re-init footnote count
+.ev                                    \" return to usual environment
+..
+.de fn                                 \" start footnote
+.                                      \" look for nested footnotes -- ILLEGAL
+.ie \\n(if>0 .er "footnote within footnote"
+.el .da tf                             \" append footnote to footnote diversion
+.nr if +1                              \" increment level of footnoting
+.nr fc +1                              \" one more footnote on this page
+.if \\n(fc=1 .nr fp -1v                        \" The reason for this "fudge factor"
+.                                      \" is that there is no way to force
+.                                      \" NROFF/TROFF to invoke a macro at
+.                                      \" the end of each line.  At times,
+.                                      \" the trap boundary will not match up
+.                                      \" with the bottom of a line, so the
+.                                      \" "fo" trap which is set at 2320 may
+.                                      \" not be triggered until 2340 -- and
+.                                      \" then the footnote won't fit.  This
+.                                      \" gives some slack so the footnote is
+.                                      \" more likely to fit. *sigh*
+.ev 1                                  \" enter footnote environment
+.if \\n(fc=1 .fs                       \" drop separator if first footnote
+.br                                    \" flush out any previous line in footnote
+.fi                                    \" process footnote in fill mode
+..
+.de ef                                 \" end footnote
+.br                                    \" flush out the line in footnote
+.ie \\n(if<=0 .er "end footnote has no corresponding begin footnote"
+.el \{\
+.      nr if -1                        \" decrement level of footnoting
+.      nr fg 2v                        \" remember this for repositioning fo
+.      ev                              \" back to usual environment
+.      if \\n(if=0 \{\
+.              di                      \" end of footnote proper
+.              nr fp -\\n(dnu          \" "fo" will be moved at least up this far
+.              nr fs -\\n(dnu          \" increase size of footnote
+.              ch fo \\n(fpu           \" reposition "fo" trap (first guess)
+.                                      \" the first part of the "ie" clause
+.                                      \" is taken in the special case
+.                                      \" described above
+.              ie (\\n(fc=1)&((\\n(nlu+1v+\\n(fgu)>=(\\n(.pu-\\n(bmu)) \{\
+.                      nr ns \\n(dnu   \" suppress footnote separator
+.                                      \" since this footnote contains it
+.                                      \" keep "fo" from being invoked twice
+.                      ch fo \\n(.pu+1i
+.                      fo              \" force the page out AT ONCE
+.                      nr ns 0         \" re-enable footnote separator
+.              \}
+.                                      \" footnote won't fit completely
+.                                      \" invoke the footer trap but
+.                                      \" don't worry about the footnote
+.                                      \" separator (it's already there)
+.              el .if (\\n(nlu+1v)>=(\\n(.pu+\\n(fpu) \{\
+.                                      \" as before we must reposition the
+.                                      \" "fo" trap to prevent "fo" from
+.                                      \" being invoked twice
+.                      ch fo \\n(.pu+1i
+.                      fo              \" force the page out AT ONCE
+.              \}
+.      \}
+.\}
+..
+.de fs                                 \" drop footnote separator
+.                                      \" only if not already dropped
+.if \\n(ns=0 \l'1i'
+.nr ns 0                               \" in case footnotes are over 1 page long
+..
+.de fx                                 \" process footnote overflow
+.if \\n(fc .di fy                      \" stuff them in the right place
+..
+.de fz                                 \" deposit footnote overflow
+.fn                                    \" treat it as a footnote
+.nf                                    \" it's already been processed
+.in 0                                  \"   and indented
+.fy                                    \" "fx" put it here
+.ef                                    \" end the footnote
+..
+.\" **********
+.\" the ones after here are user-invoked (like "fn" and "ef" above)
+.\" title, author, etc.
+.de mt                                 \" main title
+\&
+.sp |\\n(mtu                           \" space
+.ft 3                                  \" in bold
+.ps \\n(ps+2p                          \" large point size and
+.vs \\n(vs+2p                          \" vertical spacing
+.ce 1000                               \" center the title
+.nr t2 1                               \" space it
+..
+.de au                                 \" author
+.nr t2 0                               \" spacing here
+.sp 2v                                 \" space
+.ft 2                                  \" in italics
+.ps \\n(ps                             \" usual point size and
+.vs \\n(vs                             \" vertical spacing
+.ce 1000                               \" center the name(s)
+..
+.de ai                                 \" author's institution
+.if \\n(t2 .sp 2v                      \" space after a title
+.nr t2 0                               \" institution
+.ft 2                                  \" in italics
+.ps \\n(ps                             \" usual point size and
+.vs \\n(vs                             \" vertical spacing
+.ce 1000                               \" center the name(s)
+..
+.de bt                                 \" begin text macro
+.nr t2 0                               \" hold it here
+.nr it +1                              \" mark as called
+.ce 0                                  \" end any centering
+.sn 3v                                 \" a little bit of space
+..
+.\" paragraph
+.de si                                 \" start indented section
+.nr lo \\n(lm                          \" remember the current level
+.nr lm +1                              \" go to the next level
+.ie '\\$1'' .nr l\\n(lm \\n(l\\n(lo+5n \" if no arg, indent 5n
+.el         .nr l\\n(lm \\$1n          \" otherwise, indent that much
+..
+.de ei                                 \" end indent
+.nr lm -1                              \" down one level
+.if \\n(lm<0 .nr lm 0                  \" make sure you don't go too far
+..
+.de pg                                 \" plain old paragraph
+.if !\\n(it .bt                                \" end the title and such
+.sn \\n(pdu                            \" inter-paragraph spacing
+.ft 1                                  \" reset a few things (paranoia)
+.                                      \" these ONLY if not in footnote
+.ie \\n(if=0 \{\
+.      ps \\n(ps                       \" reset point size
+.      vs \\n(vs                       \" reset vertical spacing
+.      ne 1v+\\n(.Vu                   \" slightly more than 1 line
+.\}
+.el \{\
+.      ps \\n(ps-2p                    \" reset point size
+.      vs \\n(vs-2p                    \" reset vertical spacing
+.\}
+.in \\n(l\\n(lmu                       \" stop any indenting
+.ce 0                                  \" stop any centering
+.if !'\\$1'L' .if !'\\$1'l' .ti +\\n(piu       \" indent the sucker
+..
+.de lp                                 \" labelled paragraph
+.pg l                                  \" reset paragraph
+.if \\n(.$>1 .nr li \\$2n              \" if indent given use it
+.in +\\n(liu                           \" indent for paragraph
+.ti -\\n(liu                           \" force first line NOT to indent
+.ta +\\n(liu                           \" for the label
+\&\\$1\t\c
+.if \\w'\\$1'u>=(\\n(l\\n(lmu+\\n(liu) .br     \" don't overwrite
+..
+.\" The following two macros (hu & hn) have been modified for ELM usage.
+.\" If the macros have text as part of the macro call, the text will be
+.\" increased in size by two points.  After printing the text, the font
+.\" will be returned to normal, otherwise the font will be left bold.
+.\"
+.\" section
+.de hu                                 \" header, unnumbered
+.                                      \" format: .hu [text]
+.if !\\n(it .bt                                \" end the title and such
+.br                                    \" force out previous line
+.b
+.ie \\n(hP .ps \\n(hP
+.el        .ps \\n(ps
+.ie \\n(hv .vs \\n(hv
+.el        .vs \\n(vs
+.in \\n(l\\n(lmu                       \" stop any indenting
+.sn \\n(hsu                            \" inter-section spacing
+.ne 3v+\\n(.Vu                         \" slightly more than 3 lines
+.fi                                    \" process the text, too
+.if \\n(.$>=1 \{\
+.ps +2
+\\$1
+.\}
+.if \\n(.$>=2 \\$2
+.if \\n(.$>=3 \\$3
+.if \\n(.$>=4 \\$4
+.if \\n(.$>=5 \\$5
+.if \\n(.$>=6 \\$6
+.if \\n(.$>=7 \\$7
+.if \\n(.$>=8 \\$8
+.if \\n(.$=9 \\$9
+.if \\n(.$>=1 \{\
+.ps -2
+.br
+.ft 1
+.\}
+..
+.de hn                                 \" header, numbered
+.                                      \" format: .hn [level] [text]
+.if !\\n(it .bt                                \" end the title and such
+.br                                    \" force out previous line
+.b
+.ie \\n(hP .ps \\n(hP
+.el        .ps \\n(ps
+.ie \\n(hv .vs \\n(hv
+.el        .vs \\n(vs
+.in \\n(l\\n(lmu                       \" stop any indenting
+.sn \\n(hsu                            \" inter-section spacing
+.ne 3v+\\n(.Vu                         \" slightly more than 3 lines
+.fi                                    \" process the text, too
+.ie !'\\$1'' .nr hn \\$1
+.el          .nr hn 1
+.ie \\n(hn>0 .nr hn -1
+.el          .nr hn 0
+.ie \\n(hn=0 \{\
+.      nr h0 +1                        \" add 1 to main section header
+.      nr h1 0                         \" zap remaining section numbers
+.      nr h2 0                         \" zap remaining section numbers
+.      nr h3 0                         \" zap remaining section numbers
+.ie \\n(.$>=2 \{\
+.ps +2
+\\n(h0.
+.ps -2
+.\}
+.el \\n(h0.
+.\}
+.el .ie \\n(hn=1 \{\
+.      nr h1 +1                        \" add 1 to the section header
+.      nr h2 0                         \" zap remaining section numbers
+.      nr h3 0                         \" zap remaining section numbers
+.ie \\n(.$>=2 \{\
+.ps +2
+\\n(h0.\\n(h1.
+.ps -2
+.\}
+.el \\n(h0.\\n(h1.
+.\}
+.el .ie \\n(hn=2 \{\
+.      nr h2 +1                        \" add 1 to the section header
+.      nr h3 0                         \" zap remaining section numbers
+.ie \\n(.$>=2 \{\
+.ps +2
+\\n(h0.\\n(h1.\\n(h2.
+.ps -2
+.\}
+.el \\n(h0.\\n(h1.\\n(h2.
+.\}
+.el \{\
+.      nr h3 +1                        \" add 1 to the section number
+.ie \\n(.$>=2 \{\
+.ps +2
+\\n(h0.\\n(h1.\\n(h2.\\n(h3.
+.ps -2
+.\}
+.el \\n(h0.\\n(h1.\\n(h2.\\n(h3.
+.\}
+.if \\n(.$>=2 \{\
+.ps +2
+\\$2
+.\}
+.if \\n(.$>=3 \\$3
+.if \\n(.$>=4 \\$4
+.if \\n(.$>=5 \\$5
+.if \\n(.$>=6 \\$6
+.if \\n(.$>=7 \\$7
+.if \\n(.$>=8 \\$8
+.if \\n(.$>=9 \\$9
+.if \\n(.$>=2 \{\
+.br
+.ft 1
+.ps -2
+.\}
+..
+.\" displays (no floats, thank God!)
+.de sd                                 \" start display
+.                                      \" look for nested displays -- ILLEGAL
+.ie \\n(id>0 .er "display within display"
+.el \{\
+.      ie '\\$1'c' .nr sf 1            \" center the sucker
+.      el          .nr sf 0            \" don't center it
+.\}
+.sn \\n(pdu                            \" a little bit of space
+.ev 2                                  \" switch to display environment
+.nf                                    \" what you type is what you get
+.if \\n(id=0 .di dd                    \" start saving text
+.rs                                    \" don't eat leading space
+.nr id +1                              \" increment level of display
+..
+.de ed                                 \" end display
+.br                                    \" flush line
+.ie \\n(id<=0 .er "end display has no corresponding begin display"
+.el \{\
+.      nr id -1                        \" decrement level of display
+.      if \\n(id=0 \{\
+.              di                      \" end diversion
+.              fi                      \" resume filling
+.              in -\\n(piu             \" dedent
+.              ev                      \" pop environment
+.              ne \\n(dnu              \" be sure you have room
+.              nf                      \" don't reprocess display
+.              rs                      \" don't eat leading space
+.              zi                      \" save indents
+.              ie \\n(sf .in (\\n(llu-\\n(dlu)/2u      \" center on the line length
+.              el .in +\\n(piu         \" indent the sucker
+.              dd                      \" drop display
+.              yi                      \" restore indents
+.      \}
+.\}
+.fi                                    \" resume filling
+.sn \\n(pdu                            \" a little bit of space
+..
+.\" **********
+.\" fonts -- if argument(s), apply only to first
+.de b                                  \" bold (font 3)
+.ie \\n(.$>0 \\&\\$3\\f3\\$1\\fP\\$2
+.el .ft 3
+..
+.de i                                  \" italics (font 2)
+.ie \\n(.$>0 \\&\\$3\\f2\\$1\\fP\\$2
+.el .ft 2
+..
+.de r                                  \" roman (font 1)
+.ft 1                                  \" just restore it
+..
+.de bi                                 \" bold italics (embolden font 2)
+\\&\\$3\c
+\\kb\\f2\\$1\\fP\\h'|\\nbu+2u'\\f2\\$1\\fP\\$2
+..
+.\" **********
+.\" point sizes -- if argument(s), apply only to first
+.de sm                                 \" reduce point size by 2
+.ie \\n(.$>0 \\&\\$3\\s-2\\$1\\s0\\$2
+.el .ps -2
+..
+.de is                                 \" increase point size by 2
+.ie \\n(.$>0 \\&\\$3\\s+2\\$1\\s0\\$2
+.el .ps +2
+..
+.de nl                                 \" return to normal size
+.ps \\n(ps                             \" just reset the point size
+..
+.\" **********
+.\" handy force space/inhibit more space macros
+.de sn                                 \" space, then turn on nospace mode
+.sp \\$1                               \" space
+.ns                                    \" ignore any more space requests
+..
+.de sr                                 \" force out space
+.rs                                    \" turn on spacing mode
+.sp \\$1                               \" space
+..
+.\" **********
+.\" end of text and error macros
+.de et                                 \" end of text macro
+.                                      \" this: (1) flushes rest of line
+.                                      \" (2) trips the footer, taking
+.                                      \" care of footnotes
+.sp \\n(.pu
+.                                      \" check for open displays or footnotes
+.if \\n(id>0 .er "unfinished display"
+.if \\n(if>0 .er "unfinished footnote"
+.                                      \" this one means an -mn bug (*sigh*)
+.if !'\\n(.z'' .er "diversion \\n(.z not closed"
+..
+.de er                                 \" print error message
+.                                      \" flag it as an error
+.ds ws "** ERROR **
+.                                      \" if you have it, give the file name
+.if !'\\*(.f'' .as ws " file \\*(.f,
+.                                      \" put out the line number
+.as ws " line \\n(.c
+.                                      \" and finally the error message
+.tm \\*(ws: \\$1
+..
+.\" **********
+.\" macros in this section are VERY specific to the news documentation
+.de pa                                 \" protocol appellation (darn names!)
+\\&\\$3\\f2\\$1\\fP\\$2
+..
+.de ng                                 \" news group name
+\\&\\$3\\f3\\$1\\fP\\$2
+..
+.de cn                                 \" computer name
+\\&\\$3\\f2\\$1\\fP\\$2
+..
+.de hf                                 \" header field
+\\&\\$3\\*(lq\\$1\\*(rq\\$2
+..
+.de cf                                 \" contents of field
+\\&\\$3\\*(lq\\$1\\*(rq\\$2
+..
+.de qc                                 \" quote control char (command)
+\\&\\$3\\f3<\\s-2\\$1\\s0>\\fP\\$2
+..
+.de qp                                 \" quote printing char (command)
+\\&\\$3\\f3\\$1\\fP\\$2
+..
+.de op                                 \" option
+\\&\\$3\\f3\\$1\\fP\\$2
+..
+.\" **********
+.\" trademarked names
+.de pd                                 \" print "PDP-11"
+.ie \\n(p1 \\&\\$2\\s-1PDP\\s0-11\\$1
+.el \{\
+.      nr p1 +1                        \" mark footnote as dropped
+\\&\\$2\\s-1PDP\\s0-11\\*(rg\\$1
+.      fn                              \" put out the footnote
+\\&\\*(rgPDP-11 is a registered trademark of Digital Equipment Corporation.
+.      ef                              \" short and sweet ...
+.\}
+..
+.de ux                                 \" print "UNIX"
+.ie \\n(ux \\&\\$2\\s-1UNIX\\s0\\$1
+.el \{\
+.      nr ux +1                        \" mark footnote as dropped
+\\&\\$2\\s-1UNIX\\s0\\*(rg\\$1
+.      fn                              \" put out the footnote
+\\&\\*(rgUNIX is a registered trademark of AT&T.
+.      ef                              \" short and sweet ...
+.\}
+..
+.de vx                                 \" print "VAX"
+.ie \\n(vx \\&\\$2\\s-1VAX\\s0\\$1
+.el \{\
+.      nr vx +1                        \" mark footnote as dropped
+\\&\\$2\\s-1VAX\\s0\\*(rg\\$1
+.      fn                              \" put out the footnote
+\\&\\*(rgVAX is a trademark of Digital Equipment Corporation.
+.      ef                              \" short and sweet ...
+.\}
+..
+.\" **********
+.\" set up string and number registers
+.                                      \" set up for the date
+.if \n(mo=1  .ds mo January
+.if \n(mo=2  .ds mo February
+.if \n(mo=3  .ds mo March
+.if \n(mo=4  .ds mo April
+.if \n(mo=5  .ds mo May
+.if \n(mo=6  .ds mo June
+.if \n(mo=7  .ds mo July
+.if \n(mo=8  .ds mo August
+.if \n(mo=9  .ds mo September
+.if \n(mo=10 .ds mo October
+.if \n(mo=11 .ds mo November
+.if \n(mo=12 .ds mo December
+.nr Yr \n(yr+1900
+.ds dy "\*(mo \n(dy, \n(Yr
+.if \n(dw=1  .ds dw Sunday
+.if \n(dw=2  .ds dw Monday
+.if \n(dw=3  .ds dw Tuesday
+.if \n(dw=4  .ds dw Wednesday
+.if \n(dw=5  .ds dw Thursday
+.if \n(dw=6  .ds dw Friday
+.if \n(dw=7  .ds dw Saturday
+.                                      \" NROFF dependencies
+.if n \{\
+.                                      \" string registers
+.      ds rg (R)
+.      ds lq ""
+.      ds rq ""
+.      ds f1 "\*(dy
+.                                      \" number registers
+.      nr hs 1v                        \" space before section header
+.      nr pd 1v                        \" inter-paragraph spacing
+.      nr bm 1.0i                      \" height of bottom margin
+.\}
+.                                      \" NROFF dependencies
+.if t \{\
+.                                      \" string registers
+.      ds rg \\u\\s-2\\(rg\\s0\\d
+.      ds lq ``
+.      ds rq ''
+.                                      \" number registers
+.      nr hs 1v                        \" space before section header
+.      nr pd 0.3v                      \" inter-paragraph spacing
+.      nr bm 1.0i+1v                   \" height of bottom margin (wacky laser)
+.\}
+.                                      \" these are the same for [NT]ROFF
+.ds dg \(dg
+.ds vr "News Version B2.11
+.ds pv "News macros 1.5
+.ds h1 - % -
+.nr bt 0.5i+1v                         \" bottom of page to footer
+.nr cm 0                               \" no cut marks
+.nr fc 0 1                             \" init footnote count
+.nr fl 5.5i                            \" footnote line length
+.nr fp 0-\n(bmu                                \" fo macro trap location
+.nr h0 0                               \" init section header level 0
+.nr h1 0                               \" init section header level 1
+.nr h2 0                               \" init section header level 2
+.nr h3 0                               \" init section header level 3
+.nr id 0                               \" 1 in display
+.nr if 0                               \" 1 in keep
+.nr it 0                               \" 1 when beyond title, etc.
+.nr li 5n                              \" indent for labelled paragraph
+.nr ll 6.5i                            \" line length
+.nr lm 0                               \" left margin
+.nr l0 0                               \" first indent level
+.nr mt 1.5i+1v                         \" title goes down this far
+.nr pi 5n                              \" regular paragraph indent
+.nr po 1.0i                            \" page offset
+.nr ps 10                              \" point size
+.nr tm 1.0i                            \" height of top margin
+.nr tt 0.5i-0.5v                       \" top of page to header
+.nr p1 0                               \" no PDP-TM message yet
+.nr ux 0                               \" no UNIX-TM message yet
+.nr vx 0                               \" no VAX-TM message yet
+.nr vs 12                              \" vertical spacing
+.\" set things up
+.\" DSINC changes for XROFF
+.nr f1 1
+.nr f2 1
+.nr s1 10
+.nr s2 10
+.nr v1 12
+.nr v2 12
+.ps 10
+.vs 12
+.\" DSINC end changes for XROFF
+.po \n(pou                             \" set page offset
+.ps \n(ps                              \" set previous, current
+.ps \n(ps                              \"   point sizes
+.vs \n(vs                              \" set previous, current
+.vs \n(vs                              \"   vertical spacings
+.ll \n(llu                             \" set line length
+.lt \n(llu                             \" set title line length
+.ev 1                                  \" *** footnote environment
+.ps \n(ps-2p                           \" set previous, current
+.ps \n(ps-2p                           \"   point sizes
+.vs \n(vs-2p                           \" set previous, current
+.vs \n(vs-2p                           \"   vertical spacings
+.ll \n(flu                             \" set line length
+.lt \n(flu                             \" set title line length
+.ev                                    \" *** pop environment
+.ev 2                                  \" *** footnote environment
+.ps \n(ps                              \" set previous, current
+.ps \n(ps                              \"   point sizes
+.vs \n(vs                              \" set previous, current
+.vs \n(vs                              \"   vertical spacings
+.ll \n(llu                             \" set line length
+.lt \n(llu                             \" set title line length
+.ev                                    \" *** pop environment
+.\" now set internal registers (for the first header section)
+.nr f1 \n(.f                           \" saved font #1
+.nr f2 \n(.f                           \" saved font #2
+.nr s1 \n(.s                           \" saved point size #1
+.nr s2 \n(.s                           \" saved point size #2
+.nr v1 \n(.v                           \" saved vertical spacing #1
+.nr v2 \n(.v                           \" saved vertical spacing #2
+.\" install traps
+.wh 0i hd                              \" position header trap
+.wh -\n(bmu fo                         \" position footer trap
+.wh \n(.pu+1i fx                       \" put footnote overflow trap here
+.ch fx -\n(bmu                         \" move it over fo
+.wh -\n(btu pf                         \" print the bottom margin here
+.em et                                 \" at end of file, call et
+.\" couple of miscellaneous requests
+.bd S 3 3                              \" embolden special font chars if B
+.hy 2                                  \" don't hyphenate last lines
+