BSD 4_3 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 28 Feb 1986 08:06:31 +0000 (00:06 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 28 Feb 1986 08:06:31 +0000 (00:06 -0800)
Work on file usr/contrib/news/doc/Makefile
Work on file usr/contrib/news/doc/copyright.mn
Work on file usr/contrib/news/doc/howto.mn
Work on file usr/contrib/news/doc/install.mn
Work on file usr/contrib/news/doc/manner.mn
Work on file usr/contrib/news/doc/standard.mn
Work on file usr/contrib/news/doc/mn.7
Work on file usr/contrib/news/doc/tmac.n

Synthesized-from: CSRG/cd1/4.3

usr/contrib/news/doc/Makefile [new file with mode: 0644]
usr/contrib/news/doc/copyright.mn [new file with mode: 0644]
usr/contrib/news/doc/howto.mn [new file with mode: 0644]
usr/contrib/news/doc/install.mn [new file with mode: 0644]
usr/contrib/news/doc/manner.mn [new file with mode: 0644]
usr/contrib/news/doc/mn.7 [new file with mode: 0644]
usr/contrib/news/doc/standard.mn [new file with mode: 0644]
usr/contrib/news/doc/tmac.n [new file with mode: 0644]

diff --git a/usr/contrib/news/doc/Makefile b/usr/contrib/news/doc/Makefile
new file mode 100644 (file)
index 0000000..3ee6375
--- /dev/null
@@ -0,0 +1,18 @@
+# make the various documents
+
+ROFF=nroff
+
+install: install.mn tmac.n
+       $(ROFF) tmac.n install.mn
+
+howto: howto.mn tmac.n
+       $(ROFF) tmac.n howto.mn
+
+manner: manner.mn tmac.n
+       $(ROFF) tmac.n manner.mn
+
+standard: standard.mn tmac.n
+       $(ROFF) tmac.n standard.mn
+
+copyright: copyright.mn tmac.n
+       $(ROFF) tmac.n copyright.mn
diff --git a/usr/contrib/news/doc/copyright.mn b/usr/contrib/news/doc/copyright.mn
new file mode 100644 (file)
index 0000000..3fff73a
--- /dev/null
@@ -0,0 +1,606 @@
+.ds .f copyright.mn
+.ds h0 "Copyright Law
+.ds h1
+.ds h2 %
+.ds f0 "\*(vr
+.ds f1
+.ds f2 "February 26, 1986
+.mt
+Copyright Law
+.au
+Jordan J. Breslow
+.ai
+1225 Alpine Road, Suite 200
+Walnut Creek, CA 94596
++1 415 932 4828
+.bt
+.fn
+\(co Copyright 1986 Breslow, Redistributed by permission
+.ef
+.pg
+I am an attorney practicing copyright law and computer
+law.  I read a series of queries in net.legal about
+copyright law and was dismayed to find that people who
+had no idea what they were talking about were spreading
+misinformation over the network.  Considering that the
+penalties for copyright infringement can include
+$50,000.00 damages per infringed work, attorneys fees,
+court costs, criminal fines and imprisonment, and
+considering that ignorance is no excuse and innocent
+intent is not even a recognized defense, I cringe to see
+the network used as a soapbox for the ill-informed.  For
+that reason, this article will discuss copyright law and
+license law as they pertain to computer software.
+.pg
+My goal is to enable readers to determine when they
+should be concerned about infringing and when they can
+relax about it.  I also want to let programmers know how
+to obtain copyright for their work.  I'll explain the
+purpose of software licenses, and discuss the effect
+that the license has on copyright.  For those of you who
+are programmers, I'll help you decide whether you own
+the programs you write on the job or your boss owns
+them.  I will also mention trademark law and patent law
+briefly, in order to clarify some confusion about which
+is which.  Incidentally, if you read this entire essay,
+you will be able to determine whether or not the essay
+is copyrighted and whether or not you can make a
+printout of it.
+.pg
+This is a long article, and you may not want to
+read all of it.  Here is an outline to help you decide
+what to read and what to ignore:
+.nf
+.si 10
+1.     The Meaning of Copyright from the Viewpoint of the Software User
+1.1    A bit of history
+1.2    The meaning of \f2copyright\fP
+1.3    The meaning of \f2public domain\fP
+1.4    A hypothetical software purchase
+1.5    Can you use copyrighted software?
+1.6    Can you make a backup copy?
+1.7    Licenses may change the rules
+1.8    Can you modify the program?
+1.9    Can you break the copy protection scheme?
+1.10   Summary
+.sp
+2.     Copyright Sounds Neat -- How Do I Get One? Or, How Do I Know If
+       this Program is Copyrighted?
+2.1    How do you get a copyright?
+2.2    How do you lose a copyright?
+2.3    How do you waste a stamp?
+2.4    Do you have to register?
+2.5    How copyright comes into existence
+2.6    The copyright notice
+2.7    Advantages of registration
+2.8    A test to see if you understand this article
+.sp
+3.     Who Owns The Program You Wrote?
+3.1    Introduction
+3.2    Programs written as an employee
+3.3    Programs written as a contractor
+.sp
+4.     A Brief Word about Licenses
+4.1    Why a license?
+4.2    Is it valid?
+.sp
+.5     I Have a Neat Idea.  Can I Trademark it? What about a Patent?
+5.1    Trademark law explained
+5.2    Patent law
+.sp
+6.     Conclusion
+.ei
+.fi
+.sp 2
+.hn 1
+The Meaning of Copyright from the Viewpoint of the Software User
+.hn 2
+A bit of history
+.pg
+If you're not interested in history, you can
+skip this paragraph.
+.i Modern
+copyright law first came
+into existence in 1570,  by an act of Parliament called
+the Statute of Anne.  Like most laws, it hasn't changed
+much since.  It was written with books and pictures in
+mind.  Parliament, lacking the foresight to predict the
+success of the Intel and IBM corporations, failed to
+consider the issue of copyrighting computer programs. 
+.pg
+At first, courts questioned whether programs could be
+copyrighted at all.  The problem was that judges
+couldn't read the programs and they figured the
+Copyright Law was only meant to apply to things humans
+(which arguably includes judges) could read without the
+aid of a machine.  I saw some mythical discussion about
+that in some of the net.legal drivel.  Let's lay that to
+rest:  programs are copyrightable as long as there is
+even a minimal amount of creativity.  The issue was laid
+to rest with the Software Act of 1980.  That Act
+modified the Copyright Act (which is a Federal law by
+the way), in such a way as to make it clear that
+programs are copyrightable.  The few exceptions to this
+rule will rarely concern anyone.  The next question to
+arise was whether a program was copyrightable if it was
+stored in ROM rather than on paper.   The decision in
+the Apple v. Franklin case laid that to rest:  it is.
+.hn 2
+The meaning of \f2copyright\fP
+.pg
+Now, what is copyright?  As it is commonly
+understood, it is the right to make copies of something
+-- or to put it the other way around, it is the right to
+prohibit other people from making copies.  This is known
+as an exclusive right -- the exclusive right to
+.i reproduce ,
+in the biological language of the Copyright
+Act -- and what most people don't know is that copyright
+involves not one, not two, but five exclusive rights.   
+These are (1) the exclusive right to make copies, (2)
+the exclusive right to distribute copies to the public,
+(3) the exclusive right to prepare 
+.i "derivative works"
+(I'll explain, just keep reading), (4) the exclusive
+right to perform the work in public (this mainly applies
+to plays, dances and the like, but it could apply to
+software), and (5) the exclusive right to display the
+work in public (such as showing a film).
+.hn 2
+The meaning of \f2public domain\fP
+.pg
+Before we go any further, what is public
+domain?  I saw some discussion on the net about public
+domain software being copyrighted.  Nonsense.  The
+phrase 
+.i "public domain,"
+when used correctly, means the
+absence of copyright protection.  It means you can copy
+public domain software to your heart's content.  It
+means that the author has none of the exclusive rights
+listed above.  If someone uses the phrase
+.i "public domain"
+to refer to
+.i freeware
+(software which is copyrighted but is distributed without advance payment
+but with a request for a donation), he or she is using
+the term incorrectly.  Public domain means no copyright
+-- no exclusive rights.
+.hn 2
+A hypothetical software purchase
+.pg
+Let's look at those exclusive rights from the
+viewpoint of someone who has legitimately purchased a
+single copy of a copyrighted computer program.  For the
+moment, we'll have to ignore the fact that the program
+is supposedly licensed, because the license changes
+things.  I'll explain that later.  For now, assume you
+went to Fred's Diner and Software Mart and bought a
+dozen eggs, cat food and a word processing program.  And
+for now, assume the program is copyrighted.
+.hn 2
+Can you use copyrighted software?
+.pg
+What can you do with this copyrighted
+software?  Let's start with the obvious:  can you use it
+on your powerful Timex PC?  Is this a joke?  No.  Prior
+to 1980, my answer might have been No, you can't use it!
+.pg
+People actually pay me for advice like that!  Well
+think:  you take the floppy disk out of the zip lock
+baggy, insert it in drive A and load the program into
+RAM.  What have you just done?  You've made a copy in
+RAM -- in legalese, you've reproduced the work, in
+violation of the copyright owner's exclusive right to
+reproduce.  (I better clarify something here:  the
+copyright owner is the person or company whose name
+appears in the copyright notice on the box, or the disk
+or the first screen or wherever.  It may be the person
+who wrote the program, or it may be his boss, or it may
+be a publishing company that bought the rights to the
+program.  But in any case, it's not you. When you buy a
+copy of the program, you do not become the copyright
+owner.  You just own one copy.)
+.pg
+Anyway, loading the program into RAM means
+making a copy.  The Software Act of 1980 addressed this
+absurdity by allowing you to make a copy if the copy \*(lqis
+created as an essential step in the utilization of the
+computer program in conjunction with a machine and ...
+is used in no other manner ....\*(rq  By the way,
+somebody tell me what 
+.i "a machine"
+means.  If you connect
+5 PC's on a network is that 
+.i "a machine"
+or
+.i "several machines" ?
+A related question is whether or not running
+software on a network constitutes a performance.  The
+copyright owner has the exclusive right to do that,
+remember?
+.hn 2
+Can you make a backup copy?
+.pg
+OK, so you bought this copyrighted program
+and you loaded it into RAM or onto a hard disk without
+the FBI knocking on your door.  Now can you make a
+backup copy? 
+.b YES .
+The Software Act also provided that
+you can make a backup copy, provided that it \*(lqis for
+archival purposes only ....\*(rq  What you cannot do,
+however, is give the archive copy to your friend so that
+you and your pal both got the program for the price of
+one.  That violates the copyright owner's exclusive
+right to distribute copies to the public.  Get it?  You
+can, on the other hand, give both your original and
+backup to your friend -- or sell it to him, or lend it
+to him, as long as you don't retain a copy of the
+program you are selling.  Although the copyright owner
+has the exclusive right to distribute (sell) copies of
+the program, that right only applies to the first sale
+of any particular copy.  By analogy, if you buy a
+copyrighted book, you are free to sell your book to a
+friend.  The copyright owner does not have the right to
+control resales.  
+.hn 2
+Licenses may change the rules
+.pg
+At this point, let me remind you that we have
+assumed that the program you got at the store was sold
+to you, not licensed to you.  Licenses may change the
+rules.
+.hn 2
+Can you modify the program?
+.pg
+Now, you're a clever programmer, and you know
+the program could run faster with some modifications. 
+You could also add graphics and an interactive mode and
+lots of other stuff.  What does copyright law say about
+your plans?  Well ... several different things,
+actually.  First, recall that the copyright owner has
+the exclusive right to make derivative works.  A
+derivative work is a work based on one or more
+preexisting works.  It's easy to recognize derivative
+works when you think about music or books.  If a book is
+copyrighted, derivative works could include a
+screenplay, an abridged edition, or a translation into
+another language.  Derivative works of songs might be
+new arrangements (like the jazz version of Love Potion
+Number 9), a movie soundtrack, or a written
+transcription, or a 
+.i "long version" , (such as the fifteen
+minute version of \*(lqWipe Out\*(rq with an extended drum solo
+for dance parties).  In my opinion, you are making a
+derivative work when you take the store-bought word
+processor and modify it to perform differently.  The
+same would be true if you 
+.i translated
+a COBOL program
+into BASIC.  Those are copyright infringements -- you've
+horned in on the copyright owner's exclusive right to
+make derivative works.  There is, however, some
+breathing room.  The Software Act generously allows you
+to 
+.i adapt
+the code  if the adaptation \*(lqis created as an
+essential step in the utilization of the computer
+program in conjunction with a machine ....\*(rq  For
+example, you might have to modify the code to make it
+compatible with your machine.  
+.hn 2
+Can you break the copy protection scheme?
+.pg
+Moving right along, let's assume your store
+bought program is copy protected, and you'd really like
+to make a backup copy.  You know this nine-year-old whiz
+who can crack any copy-protection scheme faster than you
+can rearrange a Rubix cube.  Is there a copyright
+violation if he succeeds?  There's room to argue here. 
+When you try to figure out if something is an
+infringement, ask yourself, what exclusive right am I
+violating?  In this case, not the right to make copies,
+and not the right to distribute copies.  Public
+performance and display have no relevance.  So the key
+question is whether you are making a 
+.i "derivative work" .
+My answer to that question is, \*(lqI doubt it.\*(rq  On the
+other hand, I also doubt that breaking the protection
+scheme was \*(lqan essential step\*(rq in using the program in
+conjunction with a machine.  It might be a \*(lqfair use,\*(rq
+but that will have to wait for another article.  Anyone
+interested in stretching the limits of the \*(lqfair use\*(rq
+defense should read the Sony 
+.i Betamax
+case.
+.hn 2
+Summary
+.pg
+Let me summarize. Copyright means the
+copyright owner has the exclusive right to do certain
+things. Copyright infringement means you did one of
+those exclusive things (unless you did it within the
+limits of the Software Act, i.e., as an essential step ....).
+.hn 1
+Copyright Sounds Neat -- How Do I Get One?  Or, How Do I Know if this Program is Copyrighted?
+.hn 2
+How do you get a copyright?
+.pg
+If you've written an original program, what do you have to do to get a
+copyright? Nothing. You already have one.
+.hn 2
+How do you lose a copyright?
+.pg
+If you've written an original
+program, what do you have to do to lose your copyright
+protection?  Give copies away without the copyright
+notice.
+.hn 2
+How do you waste a stamp?
+.pg
+If you mail the program to yourself
+in a sealed envelope, what have you accomplished? 
+You've wasted a stamp and an envelope and burdened the
+postal system unnecessarily.  
+.hn 2
+Do you have to register?
+.pg
+Do you have to register your program
+with the U.S. Copyright Office?  No, but it's a damn
+good idea.
+.hn 2
+How copyright comes into existence
+.pg
+Copyright protection (meaning the five
+exclusive rights) comes into existence the moment you
+.i fix
+your program in a 
+.i "tangible medium" .
+That means
+write it down, or store it on a floppy disk, or do
+something similar.  Registration is optional.  The one
+thing you must do, however, is protect your copyright by
+including a copyright notice on every copy of every
+program you sell, give away, lend out, etc.  If you
+don't, someone who happens across your program with no
+notice on it can safely assume that it is in the public
+domain (unless he actually knows that it is not).  
+.hn 2
+The copyright notice
+.pg
+The copyright notice has three parts.  The
+first can be either a c with a circle around it (\(co), or the
+word 
+.b Copyright
+or the abbreviation 
+.b Copr.
+The c
+with a circle around it is preferable, because it is
+recognized around the world; the others are not.  That's
+incredibly important.  Countries around the world have
+agreed to recognize and uphold each others' copyrights,
+but this world-wide protection requires the use of the c
+in a circle.  On disk labels and program packaging, use
+the encircled c.  Unfortunately, computers don't draw
+small circles well, so programmers have resorted to a c
+in parentheses: (c).  Too bad.  That has no legal
+meaning.  When you put your notice in the code and on
+the screen, use 
+.b Copyright
+or 
+.b Copr.
+if you can't make a circle.
+.pg
+The second part of the notice is the \*(lqyear
+of first publication of the work.\*(rq  
+.i Publication
+doesn't mean distribution by Osborne Publishing Co.  It
+means distribution of copies of the program to the
+public \*(lqby sale or other transfer of ownership, or by
+rental, lease, or lending.\*(rq  So when you start handing
+out or selling copies of your precious code, you are
+publishing.  Publication also takes place when you
+merely OFFER to distribute copies to a group for further
+distribution.  Your notice must include the year that
+you first did so.
+.pg
+The third part of the notice is the name of
+the owner of the copyright.  Hopefully, that's you, in
+which case your last name will do.  If your company owns
+the program -- a legal issue which I will address later
+in this article -- the company name is appropriate.
+.pg
+Where do you put the notice?  The general
+idea is to put it where people are likely to see it. 
+Specifically, if you're distributing a human-readable
+code listing, put it on the first page in the first few
+lines of code, and hard code it so that it appears on
+the title screen, or at sign-off, or continuously.  If
+you're distributing machine-readable versions only, hard
+code it.  As an extra precaution, you should also place
+the notice on the gummed disk label or in some other
+fashion permanently attached to the storage medium.
+.hn 2
+Advantages of registration
+.pg
+Now, why register the program?  If no one
+ever rips off your program, you won't care much about
+registration.  If someone does rip it off, you'll kick
+yourself for not having registered it.  The reason is
+that if the program is registered before the
+infringement takes place, you can recover some big bucks
+from the infringer, called statutory damages, and the
+court can order the infringer to pay your attorneys
+fees.  Registration only costs $10.00, and it's easy to
+do yourself.  The only potential disadvantage is the
+requirement that you deposit the first and last 25 pages
+of your source code, which can be inspected (but not
+copied) by members of the public.  
+.hn 2
+A test to see if you understand this article
+.pg
+Now, someone tell me this:  is this article copyrighted?  Can you print it?
+.hn 1
+Who Owns The Program You Wrote?
+.hn 2
+Introduction
+.pg
+The starting point of this analysis is that if you wrote
+the program, you are the author, and copyright belongs
+to the author.  HOWEVER, that can change instantly. 
+There are two common ways for your ownership to shift to
+someone else:  first, your program might be a \*(lqwork for
+hire.\*(rq  Second, you might sell or assign your 
+.i rights
+in the program, which for our purposes means the
+copyright.  
+.hn 2
+Programs written as an employee
+.pg
+Most of the programs which you write at
+work, if not all of them, belong to your employer. 
+That's because a program prepared by an employee within
+the scope of his or her employment is a \*(lqwork for hire,\*(rq
+and the employer is considered the 
+.i author .
+This is more or less automatic if you are an employee -- no
+written agreement is necessary to make your employer the
+copyright owner.  By contrast, if you can convince your
+employer to let you be the copyright owner, you must
+have that agreement in writing.
+.pg
+By the way, before you give up hope of
+owning the copyright to the program you wrote at work,
+figure out if you are really an employee.  That is
+actually a complex legal question, but I can tell you
+now that just because your boss says you are an employee
+doesn't mean that it's so.  And remember that if you
+created the program outside the 
+.i scope
+of your job, the
+program is not a \*(lqwork for hire.\*(rq  Finally, in
+California and probably elsewhere, the state labor law
+provides that employees own products they create on
+their own time, using their own tools and materials. 
+Employment contracts which attempt to make the employer
+the owner of those off-the-job 
+.i inventions
+are void, at least in sunny California.
+.hn 2
+Programs written as a contractor
+.pg
+Wait a minute:  I'm an independent
+contractor to Company X, not an employee.  I come and go
+as I please, get paid by the hour with no tax withheld,
+and was retained to complete a specific project.  I
+frequently work at home with my own equipment.  Is the
+program I'm writing a \*(lqwork for hire,\*(rq owned by the
+Company?  Maybe, maybe not.  In California, this area is
+full of landmines for employers, and gold for
+contractors.
+.pg
+A contractor's program is not a \*(lqwork for
+hire,\*(rq and is not owned by the company, unless (1) there
+is a written agreement between the company and the
+contractor which says that it is, and (2) the work is a
+.i" commissioned work" .
+A
+.i "commissioned work"
+is one of
+the following:  (a)  a contribution to a 
+.i "collective work" ,
+(b) an audiovisual work (like a movie, and maybe like a video game),
+(c) a translation, (d) a compilation, (e) an instructional text,
+(f) a test or answer to a test, or (g) an atlas.  I know you must be
+tired of definitions, but this is what the real legal
+world is made of.  An example of a  collective work is a
+book of poetry, with poems contributed by various
+authors.  A piece of code which is incorporated into a
+large program isn't a contribution to a collective work,
+but a stand-alone program which is packaged and sold
+with other stand-alone programs could be.   
+.pg
+So where are we?  If you are a contract
+programmer, not an employee, and your program is a
+.i "commissioned work" ,
+and you have a written agreement
+that says that the program is a \*(lqwork for hire\*(rq owned by
+the greedy company, who owns the program?  That's right,
+the company.  But guess what?  In California and
+elsewhere the company just became your employer!  This
+means that the company must now provide worker's
+compensation benefits for you
+.b "AND UNEMPLOYMENT INSURANCE" .
+.hn 1
+A Brief Word About Licenses. 
+.hn 2
+Why a license?
+.pg
+When you get software at the local five and dime, the
+manufacturer claims that you have a license to use that
+copy of the program.  The reason for this is that the
+manufacturer wants to place more restrictions on your
+use of the program than copyright law places.  For
+example, licenses typically say you can only use the
+program on a single designated CPU.  Nothing in the
+copyright law says that.  Some licenses say you cannot
+make an archive copy.  The copyright law says you can,
+remember?  But if the license is a valid license, now
+you can't.  You can sell or give away your copy of a
+program if you purchased it, right?  That's permitted by
+copyright law, but the license may prohibit it.  The
+more restrictive terms of the license will apply instead
+of the more liberal copyright rules.
+.hn 2
+Is it valid?
+.pg
+Is the license valid?  This is hotly debated
+among lawyers.  (What isn't?  We'll argue about the time
+of day.)  A few states have passed or will soon pass
+laws declaring that they are valid.  A few will go the
+other way.  Federal legislation is unlikely.  My
+argument is that at the consumer level, the license is
+not binding because there is no true negotiation (unless
+a state law says it is binding), but hey that's just an
+argument and I'm not saying that that's the law.  In any
+case, I think businesses which buy software will be
+treated differently in court than consumers.  Businesses
+should read those licenses and negotiate with the
+manufacturer if the terms are unacceptable.  
+.hn 1
+I Have A Neat Idea. Can I Trademark It?  What About patent?
+.hn 2
+Trademark law explained
+.pg
+Sorry, no luck.  Trademark law protects names:  names of
+products and names of services.  (Note that I did not
+say names of companies.  Company names are not
+trademarkable.)  If you buy a program that has a
+trademarked name, all that means is that you can't sell
+your own similar program under the same name.  It has
+nothing to do with copying the program.  
+.hn 2
+Patent Law
+.pg
+Patent law can apply to computer programs,
+but it seldom does.  The main reasons it seldom applies
+are practical:  the patent process is too slow and too
+expensive to do much good in the software world.  There
+are also considerable legal hurdles to overcome in order
+to obtain a patent.  If, by chance, a program is
+patented, the patent owner has the exclusive right to
+make, use or sell it for 17 years.
+.hn 1
+CONCLUSION
+.pg
+I know this is a long article,
+but believe it or not I just scratched the surface. 
+Hopefully, you'll find this information useful, and
+you'll stop passing along myths about copyright law.  If
+anyone needs more information, I can be reached at the
+address on the first page.
+Sorry, but I do not usually have
+access to the network, so you can't reach me there. 
+.sp
+Thank you.  JORDAN J. BRESLOW
diff --git a/usr/contrib/news/doc/howto.mn b/usr/contrib/news/doc/howto.mn
new file mode 100644 (file)
index 0000000..eec3923
--- /dev/null
@@ -0,0 +1,1340 @@
+.\" Modified 9/29/85 by Matt Bishop (mab@riacs.arpa)
+.\" to work with the TROFF news document macros.
+.ds h0 "How to Read the Network News
+.ds h1
+.ds h2 %
+.ds f0 "\*(vr
+.ds f1
+.ds f2 "Februrary 26, 1986
+.de Qp                                 \" quoted command as hanging char
+.lp "\\f3\\$1\\f1" \\$2
+..
+.de Qc                                 \" quoted command as hanging string
+.lp "\\f3<\\s-2\\$1\\s0>\\f1" \\$2
+..
+.de Op                                 \" option as hanging string
+.lp "\\f3\\$1\\f1" \\$2
+..
+.mt
+How to Read the Network News
+.au
+Mark R. Horton
+.ai
+AT&T Bell Laboratories
+Columbus, OH  43213
+.au
+Revised by Rick Adams for 2.10.3
+.bt
+.hu
+What is the Network News?
+.pg
+USENET (Users' Network)
+is a bulletin board shared among many
+computer systems around the world.
+USENET is a logical network,
+sitting on top of several physical networks,
+among them
+.i UUCP ,
+.i BLICN ,
+.i BERKNET ,
+.i X.25 ,
+and the
+.i ARPANET .
+Sites on USENET include many universities,
+private companies and research organizations.
+Most of the members of USENET are either
+university computer science departments
+or part of AT&T.
+Currently, there are over 2000 USENET sites in the USA, Canada, Europe, Japan 
+and Korea with more joining every day. Most are running the
+.ux
+operating system.
+.pg
+The network news,
+or simply
+.i netnews ,
+is the set of programs that provide access to the news
+and transfer it from one machine to the next.
+Netnews was originally written at Duke University
+and has been modified extensively by the University
+of California at Berkeley and others.
+Netnews allows articles to be posted for limited or very wide distribution.
+This document contains a list of newsgroups
+that were active at the time the document was written.
+It exists
+to assist you in determining which newsgroups you may
+want to subscribe to.
+When creating a new article,
+the level of distribution can be controlled
+by use of the
+.cf Distribution
+field.
+This will prevent notices of apartments for rent in New Jersey
+being broadcast to California
+(or even Europe).
+.pg
+Any user can post an article,
+which will be sent out to the network
+to be read by persons interested in that topic.
+You can specify which topics are of interest to you by putting them in a
+.i "subscription list" .
+Then,
+whenever you ask to read news,
+the news reading program will present all unread articles of interest.
+There are also facilities for browsing through old news,
+posting follow-up articles,
+and sending direct electronic mail replies to the author of an article.
+.pg
+This paper is a tutorial,
+aimed at the user who wants to read and possibly post news.
+The system administrator who must install the software
+should see the companion document
+.i "USENET Version B Installation" .
+.hu
+Why USENET?
+.pg
+USENET is useful in a number of ways.
+Someone wishing to announce a new program or product can reach a wide audience.
+A user can ask \*(lqDoes anyone have an
+.i x ?\*(rq
+and will usually get several responses within a day or two.
+Bug reports and their fixes can be made quickly available
+without the usual overhead of sending out mass mailings.
+Discussions involving many people at different locations
+can take place without having to get everyone together.
+.pg
+Another facility with similar capabilities to
+.i netnews
+is the
+.i "electronic mailing list" .
+A mailing list is a collection of electronic mailing addresses of users
+who are interested in a particular topic.
+By sending electronic mail to the list,
+all users on the list receive a copy of the article.
+While the mailing list facility is quite useful,
+USENET offers a number of advantages not present in mailing lists.
+Getting yourself on a mailing list is not always easy.
+You have to figure out who maintains the list and ask them to put you on it.
+Often these people are out of town or busy,
+and don't put you on the list for several days.
+Sometimes you have to send mail to the entire mailing list,
+hoping that one of the readers will tell you who maintains the list.
+Once you are on the list,
+you often find yourself in the middle of a discussion.
+Netnews keeps old articles around until they expire (usually about two weeks)
+so you can browse through old news to catch up on what you missed.
+Similarly,
+referring to an old article is easy,
+without having to keep a personal file of all old mail to the list.
+.pg
+Another advantage is appreciated by the other users of the system.
+There is less overhead in having only one copy of each message
+sent to each machine,
+rather than having separate copies sent
+to each of several users on the same machine.
+This cuts down on computer time to process the messages,
+and on-line costs for telephone calls to transfer messages
+from one machine to another (when phone lines are used).
+Another advantage is in the disk space consumed.
+When only one message is sent to each system,
+only one copy of the message is kept on disk.
+In a mailing list environment,
+each user has a copy in a mailbox.
+.hu
+How do I Read News?
+.pg
+In the USENET jargon,
+interest topics are called
+.i newsgroups .
+A newsgroup list appears in a later section,
+current as this paper was written.
+You have your own
+.i "subscription list"
+of newsgroups to which you are said to
+.i subscribe .
+.pg
+The simplest way to read news is to type the command:
+.sd c
+readnews
+.ed
+Other possibilities include: a full-screen-oriented news reading program,
+.i vnews (1),
+(described in the Appendix) and the
+.i notesfile
+system, which can also be used for news (described in a separate paper.)
+Each newsgroup to which you subscribe will be presented,
+one article at a time.
+As each article is presented,
+you will be shown the
+.i header
+(containing the name of the author,
+the subject,
+and the length of the article)
+and you will be asked if you want more.
+There are a number of possible choices you can make at this point.
+The three most common
+.qp y , (
+.qp n ,
+and
+.qp q )
+are suggested by the program.
+(To see a complete list of possible responses,
+type
+.qp ?
+for help.)
+You can type
+.qp y
+for \*(lqyes\*(rq
+(or simply hit
+.qc RETURN )
+and the rest of the message will be displayed.
+(If the message is long,
+it may stop before it runs off the top of the screen.
+Type
+.qc SPACE
+or
+.qc RETURN
+to see more of the message.
+Another choice you can make is
+.qp n
+for \*(lqno\*(rq.
+This means you are not interested in the message \-
+it will not be offered to you again.
+A third option is
+.qp q
+for \*(lqquit\*(rq.
+This causes a record to be made of which articles you read
+(or refused)
+and you will exit netnews.
+When you have read all the news,
+this happens automatically.
+The
+.qp q
+command is mainly useful if you are in a hurry
+and don't have time to read all the news right now.
+(Many users put a
+.i readnews (1)
+or
+.i checknews (1)
+command in their
+.i .profile
+or
+.i .login
+files so that they will see new news each time they log in.)
+.pg
+If you are reading news for the first time,
+you may find yourself swamped by the volume of unread news,
+especially if the default subscription is
+.ng all .
+Don't let this bother you.
+If you are getting newsgroups in which you have no interest,
+you can change your subscription list
+(see below).
+Also,
+bear in mind that what you see
+is probably at least two weeks' accumulation of news.
+If you want to just get rid of all old news and start anew,
+type
+.sd c
+readnews \-p \-n all > /dev/null &
+.ed
+which will throw away all old news,
+recording that you have seen it all.
+(The
+.qp &
+puts it in the background;
+chances are that there is so much old news on your machine
+that you won't want to wait for it all.)
+Or,
+you can use the
+.qp K
+command to mark all articles in the current newsgroup as read.
+.pg
+Once you catch up with (or ignore) all the old news,
+the news will come in daily at a more manageable rate.
+(If the daily rate is still too much
+you may wish to unsubscribe to some of the higher volume, less useful newsgroups.)
+Finally,
+note that while an article is printing,
+you can hit
+your interrupt character
+(usually
+.qc CONTROL-C
+or
+.qc DELETE ),
+which will throw away the rest of the article.
+.pg
+Among the other commands you can type after seeing the header
+of an article are:
+.Qp x 13
+Exit
+.i readnews .
+This is different from
+.qp q
+in that the
+.qp q
+command
+will update the record of which articles you have read,
+but
+.qp x
+will pretend you never started
+.i readnews .
+.Qp N 13
+Go on to the next newsgroup.
+The remaining articles in the current newsgroup are considered
+.i unread ,
+and will be offered to you again the next time you read news.
+.Qp "s \f2file\fP" 13
+The article is saved in a disk file with the given name.
+In practice,
+what usually happens is that an article is printed,
+and then
+.i readnews
+goes on to print the header of the next article
+before you get a chance to type anything.
+So you usually want to write out the
+.i previous
+message
+(the last one you have read in full);
+in this case,
+use the form
+.qp s\-
+.i filename .
+.Qp e 13
+Erase the memory of having seen this article.
+It will be offered to you again next time,
+as though you had never seen it.
+The
+.qp e\-
+case variation (erase  memory of the previously read article instead of
+the current article)
+is useful for checking follow-ups to see
+if anyone has already said what you wanted to say.
+.Qp r 13
+Reply to the author of the message.
+You will be placed in the editor,
+with a set of headers derived from the message you are replying to.
+Type in your message after the blank line.
+If you wish to edit the header list
+to add more recipients or send carbon copies,
+for instance,
+you can edit the header lines.
+Anyone listed on a line beginning with
+.hf To
+or
+.hf Cc
+will receive a copy of your reply.
+Note that the path used to receive a piece of news may not be the fastest
+way to reply by mail. If speed is important and you know a faster way,
+edit it in place of what the reply command supplied.
+A mail command will then be started up,
+addressed to the persons listed in the header.
+You are then returned to
+.i readnews .
+The case
+.qp r\-
+is also useful to reply to the previous message.
+Another variation on this is
+.qp rd\-
+which puts you in
+.b $MAILER
+(or
+.i mail (1)
+by default)
+to type in your reply directly.
+.Qp f 13
+Post a follow-up message to the same newsgroup.
+This posts an article on this newsgroup
+with the same title as the original article.
+Use common sense when posting follow-ups. (Read Matt Bishop's paper
+\*(lqHow to use USENET Effectively\*(rq for extended discussion of when
+and when not to post -- many follow-up articles should have just been replies.)
+You will be placed in the editor. Enter your message and exit.
+The case
+.qp f\-
+is also useful to follow up the previous message.
+In each case,
+the editor you are placed in will be
+.i vi (1)
+unless you set
+.b EDITOR
+(in your environment) to some other editor.
+You should enter the text of the follow-up after the blank line.
+.Qp + 13
+The article is skipped for now.
+The next time you read news,
+you will be offered this article again.
+.Qp \- 13
+Go back to the previous article.
+This toggles,
+so that two
+.qp \- 's
+get you the current article.
+.Qp b 13
+Back up one article in the current group.
+This is not necessarily the previous article.
+.Qp U 13
+Unsubscribe from this newsgroup.
+Your
+.i \&.newsrc (5)
+file will be edited to change the
+.qp :
+for that newsgroup to an
+.qp !
+preventing you from being shown that newsgroup again.
+.Qp ? 13
+If you type any unrecognized command,
+a summary of valid commands will be printed.
+.hu
+Changing your Subscription List
+.pg
+If you take no special action you will subscribe to a default subscription list.
+This default varies locally.
+To find out your local default,
+type
+.sd c
+readnews \-s
+.ed
+Typically this list will include all newsgroups ending in \*(lqgeneral\*(rq,
+such as
+.ng general ,
+and
+.ng net.general .
+(As distributed,
+the default is
+.ng general\f1,\fPall.general .
+Another popular default is
+.ng all .)
+You can change this by creating a file in your home directory named
+.i .newsrc
+which contains as its first line a line of the form:
+.sd c
+options \-n newsgroup,newsgroup,newsgroup ...
+.ed
+If your lines get too long,
+you can continue them on subsequent lines
+by beginning those lines with a space.
+(The netnews system will put extra lines in this file
+to record which articles you have read.
+You should ignore these lines unless you want to edit them.)
+For example,
+if you are creating a subscription list for the first time,
+and have already read news,
+you will find some text already in your
+.i .newsrc
+file,
+recording which articles you have read.
+You should put your
+.b options
+line before the first line of the file.)
+Thus,
+.sd c
+options \-n general,net.general,mod.human-nets
+.ed
+will subscribe to those three newsgroups.
+.pg
+An
+.qp !
+can be used to exclude certain newsgroups and the word
+.ng all
+can be used as a wild card,
+representing any newsgroup.
+You can also use
+.ng all
+as a prefix or suffix to match a class of newsgroups.
+For example,
+.sd c
+options \-n all,!mod.all,!net.jokes,!all.unix-all
+.ed
+will result in a subscription to all newsgroups except for ARPANET news,
+jokes,
+and any
+.ux
+information.
+The metacharacter
+.qp .
+is like
+.qp /
+to the shell,
+and
+.ng all
+is like
+.qp * .
+.pg
+A simpler way to subscribe to news is to subscribe to
+.ng all ,
+and then use the
+.qp U
+.i readnews
+command to unsubscribe to newsgroups you don't want to read.
+This way you will see new newsgroups that are created,
+get a chance to evaluate them,
+and then unsubscribe to those that don't interest you.
+.pg
+The order of the newsgroups in your
+.i .newsrc
+(after the options line)
+is the order in which newsgroups will be shown.
+If you want something other than the default,
+move the lines around until you are satisfied with the order.
+Be careful to keep the options line as the first line in the file.
+.hu
+Submitting Articles
+.pg
+To submit a new news article type
+.sd c
+postnews
+.ed
+First,
+it will ask you if this is a follow-up to an article.
+Answer
+.b yes
+or
+.b no .
+If
+.b yes ,
+you really should have done an
+.qp f
+from
+.i readnews ,
+but it will try and figure out which article you are following up to.
+It will ask for the newsgroup in which you read the article
+and the article number.
+If you can't remember,
+go back to
+.i readnews
+and find out.
+It is important that discussions are kept together.
+It is very frustrating for someone to read a follow-up that says:
+\&\*(lqI agree.
+It's very dangerous to leave that program as distributed.\*(rq
+and not have any idea what the poster was referring to.
+.pg
+If you answer
+.b no ,
+.i postnews (1)
+will ask you for the subject of the new article.
+This should be as informative as possible.
+For example,
+.cf "'67 Porsche for sale in New Jersey"
+is much better than
+.cf "Car for sale"
+or even
+.cf "For sale" .
+It will then ask which newsgroups you want the article posted in.
+If you are unsure,
+type
+.qp ?
+instead of a specific newsgroup
+and it will show you the list of currently available groups.
+Then,
+you will be asked how far your article should be distributed.
+It is important to keep this as small as possible
+to accomplish the purpose of your article.
+Remember that many newsgroups are read in Europe,
+Australia,
+and Asia in addition to the United States and Canada.
+It does no good
+(to use the previous example)
+to post a
+.cf "Car for sale in New Jersey"
+article with a distribution of 
+.ng world .
+There is almost no chance that a person in Sweden or Korea
+would be interested in buying your car (even if it is a Porsche).
+It is a waste of money and computer resources
+to transmit the article that far.
+For this specific case,
+the appropriate distribution would be
+.ng nj
+or only in New Jersey.
+If there were no local distribution available,
+at least it should be confined to
+.ng usa .
+If you are unsure of the distributions available at your site,
+type
+.qp ?
+instead of a distribution
+and you will receive a list of distributions valid for your site.
+If the distribution is
+.ng world ,
+your article will be read (perhaps with disgust)
+by thousands of people around the world.
+.pg
+Then you will be placed in the editor.
+Enter the text of your article,
+after the blank line,
+and exit the editor.
+The article will be posted to the newsgroups specified.
+If you change your mind about the headers while you are still in the editor,
+you can edit them as well.
+Extra headers can also be added before the blank line.
+.hu
+Browsing through Old News
+.pg
+There are a number of command line options to the
+.i readnews
+command to help you find an old article you want to see again.
+The
+.op \-n
+.i newsgroups
+option restricts your search to certain newsgroups.
+The
+.op \-x
+option arranges to ignore the record of articles read,
+which is kept in your
+.i \&.newsrc
+file.
+This will cause all articles in all newsgroups to which you
+subscribe to be displayed,
+even those which you have already seen.
+It also causes
+.i readnews
+to not update the
+.i \&.newsrc
+file.
+The
+.op \-a
+.i date
+option asks for news received after the given
+.i date .
+Note that even with the
+.op \-a
+option, only articles you have not already seen will be printed,
+unless you combine it with the
+.op \-x
+option.
+(Articles are kept on file until they expire,
+typically after two weeks.)
+The
+.op \-t
+.i keywords
+option restricts the query to articles mentioning one of the
+.i keywords
+in the title of the article.
+Thus,
+the command
+.sd c
+readnews \-n net.unix \-x \-a last thursday \-t setuid
+.ed
+asks for all articles in newsgroup
+.ng net.unix
+since last Thursday about the setuid feature.
+(Be careful with the
+.op \-t
+option.
+The above example will not find articles about
+.cf suid ,
+nor will it find articles with no title or
+whose author did not use the word
+.cf setuid
+in the title.)
+.pg
+Other useful options include the
+.op \-l
+option (which lists only the headers of articles \-
+a useful form for browsing through lots of messages.)
+The
+.op \-p
+option prints the messages without asking for any input;
+this is similar to some older news programs on many
+.ux
+systems and is useful for directing output to a printer.
+The
+.op \-r
+option produces articles in reverse order,
+from newest to oldest.
+.hu
+User Interfaces
+.pg
+The
+.i "user interface"
+of a program is the view it presents to the user,
+that is,
+what it prints and what it allows you to type.
+.i Readnews
+has options allowing you to use different user interfaces.
+The interface described above is called the \*(lqmsgs\*(rq interface
+because it mimics the style of the Berkeley
+.i msgs (1)
+program.
+(This program,
+in turn,
+mimics a program at MIT of the same name.)
+The key element of the msgs interface is that after printing the header,
+you are asked if you want the rest of the message.
+.pg
+Another interface is available with the
+.op \-c
+option.
+In this case,
+the entire message is printed,
+header and body,
+and you are prompted at the end of the message.
+The command options are the same as the msgs interface,
+but it is usually not necessary to use the
+.qp \-
+suffix on the
+.qp r ,
+.qp s ,
+or
+.qp f
+commands.
+This interface is called the \*(lq/bin/mail\*(rq
+(pronounced \*(lqbin mail\*(lq)
+interface,
+because it mimics the
+.ux
+program of that name.
+.pg
+A third interface is the
+.i Mail (1)
+(pronounced \*(lqcap mail\*(rq) interface,
+available with the
+.op \-M
+option.
+This invokes the
+.i Mail
+program directly,
+and allows you to read news with the same commands as you read mail.
+(This interface may not work on your system \-
+it requires a special version of
+.i Mail
+with a
+.qp \-T
+option.)
+.pg
+A fourth interface, is the MH news/mail program from Rand.
+That program can be used directly to read network news.
+.pg
+A fifth interface,
+.i vnews ,
+which works well on display terminals, is described in the Appendix.
+.pg
+A sixth possibility is the 
+.i notesfile
+system, described in a separate paper.  It is also display-oriented.
+.pg
+A seventh possibility is to use your favorite mail system as an interface.
+There are a number of different mail reading programs, including
+.i /bin/mail (1),
+.i Mail ,
+.i msg (1),
+and MH.
+Any mail system with an option to specify an alternative mailbox
+can be used to read news.
+For example,
+to use
+.i Mail
+without the
+.qp \-M
+option,
+type
+.sd c
+readnews \-c "Mail \-f %"
+.ed
+The shell command in quotes is invoked as a child of
+.i readnews.
+The
+.qp \-f
+option to
+.i Mail
+names the alternative mailbox.
+.i Readnews
+will put the news in a temporary file,
+and give the name of this file to the mailer in place of the
+.qp % .
+There is an important difference when using this kind of interface.
+The mailers do not give any indication of which articles you read
+and which ones you skipped.
+.i Readnews
+will assume you read
+.i all
+the articles,
+even if you didn't,
+and mark them all read.
+By contrast,
+the
+.op \-M
+option uses the
+.op \-T
+option to
+.i Mail ,
+asking
+.i Mail
+to tell
+.i readnews
+which articles you read.
+.hu
+Getting News when you Log In
+.pg
+Most users like to be told when they first log in if there is any news.
+This way they are reminded of news,
+but are not interrupted by it during the day.
+If you log in once in the morning,
+you can think of getting the news as reading the morning newspaper.
+It is common to put a
+.i checknews
+or
+.i readnews
+command in your
+.i .profile
+or
+.i .login
+file of commands that are executed when you log in.
+.pg
+Since there might not be any news,
+and since the
+.i readnews
+command goes to a considerable amount of work to find all unread news
+(assuming you are going to read it),
+there is another command,
+called
+.i checknews ,
+which tells you if there is any news.
+The
+.i checknews
+command is smaller and faster than
+.i readnews ,
+and was designed especially for a login file.
+There are also options to be silent if there is (or is not) news,
+and to start up
+.i readnews
+automatically if there is news.
+.pg
+The options to
+.i checknews
+are:
+.Op \-y 10
+Print \*(lqThere is news\*(rq if there is any unread news.
+.Op \-v 10
+If
+.op \-y
+is also given,
+instead of printing \*(lqThere is news\*(rq,
+prints \*(lqNews: \fInewsgroup\fP ...\*(rq
+giving the name of the first newsgroup containing unread news.
+If
+.ng general
+is the first newsgroup presented,
+this can be used to tell users whether the unread news is important.
+.Op \-n 10
+Print \*(lqNo news\*(rq if there is no unread news.
+.Op \-e 10
+If there is any unread news,
+start up
+.i readnews.
+Any additional arguments after the
+.op \-e
+will be passed to readnews.
+.pg
+Thus,
+.sd c
+checknews \-yn
+.ed
+tells you whether there is any unread news.
+.sd c
+checknews \-e \-M
+.ed
+starts up
+.i readnews
+with the
+.i Mail
+interface if there is news,
+and otherwise does nothing.
+.sd c
+checknews \-y
+.ed
+tells you if there is news,
+and is silent if there is no news.
+.hu
+Creating New Newsgroups
+.pg
+New newsgroups are proposed by the users and created by site administrators.
+To create a newsgroup,
+first make sure this is the right thing to do.
+Normally a suggestion is first posted to
+.ng net.news.group\f1,\fPnet.relatedgroup
+for a net newsgroup
+.ng net.relatedgroup "" (
+should be the group which you are proposing to subdivide.)
+For example,
+to propose creating
+.ng net.tv.soaps ,
+post
+the original article to
+.ng net.tv\f1,\fPnet.news.group ).
+Followups are made to
+.ng net.news.group
+.i only .
+(You can force this by putting the line:
+.sd c
+Followup-To: net.news.group
+.ed
+in the headers of your original posting).
+If it is established that there is general interest in such a group,
+and a name is agreed on,
+then ask your local netnews administrator to create the newsgroup.
+(It can actually be created by any netnews administrator anywhere on the net,
+within the scope of the newsgroup.)
+Once the newsgroup is created and the first article has been posted,
+the newsgroup is available for all interested persons to post to.
+.hu
+List of Newsgroups
+.pg
+This section lists the newsgroups that are currently active.
+It is intended to help you decide what you want to subscribe to.
+Note that the list is constantly changing.
+Note also that this list only describes those groups available
+on a network-wide basis. Since not all installations choose to receive all
+newsgroups, it is recommended that each installation edit the list of local
+newsgroups to be correct before distributing this document to their users.
+If this is not possible,
+a local appendix can be created.
+.hu 2
+Local
+.pg
+Local groups are kept on the current machine only.
+Local names can be identified by the lack of a prefix,
+that is, there are no periods in local newsgroup names.
+.lp general 10
+News to be read by everyone on the local machine.
+For example:
+\&\*(lqThe system will be down Monday morning for PM.\*(rq
+Or,
+\&\*(lqA new version of program
+.i x
+has been installed.\*(rq
+This newsgroup is usually mandatory \-
+you are required to subscribe to this newsgroup.
+(The list of mandatory newsgroups varies locally.)
+This requirement assures that important announcements reach all users.
+(Formerly
+.i msgs .)
+.hu 2
+Network Wide
+.pg
+These are the groups as of the last editing of this manual.
+The list is undoubtably already out of date.
+A current list can be obtained by typing
+.qp ?
+to the \*(lqNewsgroups? \*(rq prompt in postnews.
+.nf
+.ta 2.5i
+net.abortion   All sorts of discussions on abortion.
+net.ai Artificial intelligence discussions.
+net.analog     Analog design developments, ideas, and components.
+net.announce   Moderated, general announcements of interest to all.
+net.announce.newusers  Moderated, explanatory postings for new users.
+net.announce.arpa-internet     Announcements from the Arpa world.
+net.arch       Computer architecture.
+net.astro      Astronomy discussions and information.
+net.astro.expert       Discussion by experts in astronomy.
+net.audio      High fidelity audio.
+net.auto       Automobiles, automotive products and laws.
+net.auto.tech  Technical aspects of automobiles, et. al.
+net.aviation   Aviation rules, means, and methods.
+net.bicycle    Bicycles, related products and laws.
+net.bio        Biology and related sciences.
+net.books      Books of all \fIgenres\fP, shapes, and sizes.
+net.bugs       General bug reports and fixes.
+net.bugs.2bsd  Reports of UNIX* version 2BSD related bugs.
+net.bugs.4bsd  Reports of UNIX version 4BSD related bugs.
+net.bugs.usg   Reports of USG (System III, V, etc.) bugs.
+net.bugs.uucp  Reports of UUCP related bugs.
+net.bugs.v7    Reports of UNIX V7 related bugs.
+net.cog-eng    Cognitive engineering.
+net.college    College, college activities, campus life, etc.
+net.columbia   The space shuttle and the STS program.
+net.comics     The funnies, old and new.
+net.consumers  Consumer interests, product reviews, etc.
+net.cooks      Food, cooking, cookbooks, and recipes.
+net.crypt      Different methods of data en/decryption.
+net.cse        Computer science education.
+net.cycle      Motorcycles and related products and laws.
+net.database   Database and data management issues and theory.
+net.dcom       Data communications hardware and software.
+net.decus      DEC* Users' Society newsgroup.
+net.emacs      EMACS editors of different flavors.
+net.eunice     The SRI Eunice system.
+net.followup   Followups to articles in net.general.
+net.games      Games and computer games.
+net.games.board        Discussion and hints on board games.
+net.games.chess        Chess & computer chess.
+net.games.emp  Discussion and hints about Empire.
+net.games.frp  Discussion about Fantasy Role Playing games.
+net.games.go   Discussion about Go.
+net.games.hack Discussion, hints, etc. about the Hack game.
+net.games.pbm  Discussion about Play by Mail games.
+net.games.rogue        Discussion and hints about Rogue.
+net.games.trivia       Discussion about trivia.
+net.games.video        Discussion about video games.
+net.garden     Gardening, methods and results.
+net.general    *Important* and timely announcements of interest to all.
+net.graphics   Computer graphics, art, animation, image processing.
+net.ham-radio  Amateur Radio practices, contests, events, rules, etc.
+net.ham-radio.packet   Discussion about packet radio setups.
+net.info-terms All sorts of terminals.
+net.internat   Discussion about international standards
+net.invest     Investments and the handling of money.
+net.jobs       Job announcements, requests, etc.
+net.jokes      Jokes and the like.  May be somewhat offensive.
+net.jokes.d    Discussions on the content of net.jokes articles
+net.kids       Children, their behavior and activities.
+net.lan        Local area network hardware and software.
+net.lang       Different computer languages.
+net.lang.ada   Discussion about Ada*.
+net.lang.apl   Discussion about APL.
+net.lang.c     Discussion about C.
+net.lang.f77   Discussion about FORTRAN.
+net.lang.forth Discussion about Forth.
+net.lang.lisp  Discussion about LISP.
+net.lang.mod2  Discussion about Modula-2.
+net.lang.pascal        Discussion about Pascal.
+net.lang.prolog        Discussion about PROLOG.
+net.lang.st80  Discussion about Smalltalk 80.
+net.legal      Legalities and the ethics of law.
+net.lsi        Large scale integrated circuits.
+net.mag        Magazine summaries, tables of contents, etc.
+net.mail       Proposed new mail/network standards.
+net.mail.headers       Gatewayed from the ARPA header-people list.
+net.math       Mathematical discussions and puzzles.
+net.math.stat  Statistics discussion.
+net.math.symbolic      Symbolic algebra discussion.
+net.med        Medicine and its related products and regulations.
+net.micro      Micro computers of all kinds.
+net.micro.16k  National Semiconductor 32000 series chips
+net.micro.6809 Discussion about 6809's.
+net.micro.68k  Discussion about 68k's.
+net.micro.apple        Discussion about Apple micros.
+net.micro.amiga        Talk about the new Amiga micro.
+net.micro.atari        Discussion about Atari micros.
+net.micro.att  Discussions about AT&T microcomputers .
+net.micro.cbm  Discussion about Commodore micros.
+net.micro.cpm  Discussion about the CP/M operating system.
+net.micro.hp   Discussion about Hewlett/Packard's.
+net.micro.mac  Material about the Apple Macintosh & Lisa.
+net.micro.pc   Discussion about IBM personal computers.
+net.micro.ti   Discussion about Texas Instruments.
+net.micro.trs-80       Discussion about TRS-80's.
+net.misc       Various discussions too short-lived for other groups.
+net.motss      Issues pertaining to homosexuality.
+net.movies     Reviews and discussions of movies.
+net.music      Music lovers' group.
+net.music.classical    Discussion about classical music.
+net.music.folk Folks discussing folk music of various sorts.
+net.music.gdead        A group for (Grateful) Dead-heads.
+net.music.synth        Synthesizers and computer music.
+net.net-people Announcements, requests, etc. about people on the net.
+net.news       Discussions of USENET itself.
+net.news.adm   Comments directed to news administrators.
+net.news.b     Discussion about B news software.
+net.news.config        Postings of system down times and interruptions.
+net.news.group Discussions and lists of newsgroups
+net.news.newsite       Postings of new site announcements.
+net.news.notes Notesfile software from the Univ. of Illinois.
+net.news.sa    Comments directed to system administrators.
+net.news.stargate      Discussion about satellite transmission of news.
+net.nlang      Natural languages, cultures, heritages, etc.
+net.nlang.africa       Discussions about Africa & things African.
+net.nlang.celts        Group about Celtics.
+net.nlang.greek        Group about Greeks.
+net.nlang.india        Group for discussion about India & things Indian
+net.origins    Evolution versus creationism (sometimes hot!).
+net.periphs    Peripheral devices.
+net.pets       Pets, pet care, and household animals in general.
+net.philosophy Philosophical discussions.
+net.physics    Physical laws, properties, etc.
+net.poems      For the posting of poems.
+net.politics   Political discussions.  Could get hot.
+net.politics.theory    Theory of politics and political systems.
+net.puzzle     Puzzles, problems, and quizzes.
+net.railroad   Real and model train fans' newsgroup.
+net.rec        Recreational/participant sports.
+net.rec.birds  Hobbyists interested in bird watching.
+net.rec.boat   Hobbyists interested in boating.
+net.rec.bridge Hobbyists interested in bridge.
+net.rec.nude   Hobbyists interested in naturist/nudist activities.
+net.rec.photo  Hobbyists interested in photography.
+net.rec.scuba  Hobbyists interested in SCUBA diving.
+net.rec.ski    Hobbyists interested in skiing.
+net.rec.skydive        Hobbyists interested in skydiving.
+net.rec.wood   Hobbyists interested in woodworking.
+net.religion   Religious, ethical, and moral implications of actions.
+net.religion.christian Discussion about form and nature of Christianity
+net.religion.jewish    Information and discussion about Judaism.
+net.research   Research and computer research.
+net.roots      Genealogical matters.
+net.rumor      For the posting of rumors.
+net.sci        General purpose scientific discussions.
+net.sf-lovers  Science fiction lovers' newsgroup.
+net.singles    Newsgroup for single people, their activities, etc.
+net.social     Like net.singles, but for everyone.
+net.sources    For the posting of software packages & documentation.
+net.sources.bugs       For bug fixes and features discussion.
+net.sources.games      Postings of recreational software.
+net.sources.mac        Software for the Apple Macintosh.
+net.space      Space, space programs, space related research, etc.
+net.sport      Spectator sports.
+net.sport.baseball     Discussion about baseball.
+net.sport.football     Discussion about football.
+net.sport.hockey       Discussion about hockey.
+net.sport.hoops        Discussion about basketball.
+net.startrek   Star Trek, the TV show and the movies.
+net.suicide    Suicide, laws, ethics, and its causes and effects (!).
+net.taxes      Tax laws and advice.
+net.test       For testing of network software.  Very boring.
+net.text       Text processing.
+net.travel     Traveling all over the world.
+net.tv The boob tube, its history, and past and current shows.
+net.tv.drwho   Discussion about Dr. Who.
+net.tv.soaps   Postings about soap operas.
+net.unix       UNIX neophytes group.
+net.unix-wizards       Discussions, bug reports, and fixes on and for UNIX.
+net.usenix     USENIX Association events and announcements.
+net.veg        Vegetarians.
+net.video      Video and video components.
+net.wanted     Requests for things that are needed.
+net.wanted.sources     Requests for software, termcap entries, etc.
+net.wines      Wines and spirits.
+net.wobegon    "A Prairie Home Companion" radio show discussion.
+net.women      Women's rights, discrimination, etc.
+net.works      Assorted workstations.
+mod.ai Discussions about Artificial Intelligence
+mod.compilers  Discussion about compiler construction, theory, etc.
+mod.computers  Discussion about various computers and related.
+mod.computers.apollo   Apollo computer systems.
+mod.computers.ibm-pc   The IBM PC, PC-XT, and PC-AT.
+mod.computers.laser-printers   Laser printers, hardware and software.
+mod.computers.macintosh        Apple Macintosh micros.
+mod.computers.pyramid  Pyramid 90x computers.
+mod.computers.ridge    Ridge 32 computers and ROS.
+mod.computers.sequent  Sequent systems, (esp. Balance 8000).
+mod.computers.sun      Sun "workstation" computers
+mod.computers.vax      DEC's VAX* line of computers & VMS.
+mod.computers.workstations     Various workstation-type computers.
+mod.graphics   Graphics software, hardware, theory, etc.
+mod.human-nets Computer aided communications digest.
+mod.legal      Discussions of computers and the law.
+mod.map        Various maps, including UUCP maps.
+mod.motss      Moderated newsgroup on gay issues and topics.
+mod.movies     Moderated reviews and discussion of movies.
+mod.music      Moderated reviews and discussion of things musical.
+mod.newprod    Announcements of new products of interest to readers.
+mod.newslists  Postings of news-related statistics and lists.
+mod.os Disussions about operating systems and related areas.
+mod.os.os9     Discussions about the os9 operating system.
+mod.os.unix    Moderated discussion of Unix* features and bugs.
+mod.politics   Discussions on political problems, systems, solutions.
+mod.politics.arms-d    Arms discussion digest.
+mod.protocols  Various forms and types of FTP protocol discussions.
+mod.protocols.appletalk        Applebus hardware & software discussion.
+mod.protocols.kermit   Information about the Kermit package.
+mod.protocols.tcp-ip   TCP and IP network protocols.
+mod.rec        Discussions on pastimes (not currently active).
+mod.rec.guns   Discussions about firearms.
+mod.recipes    A "distributed cookbook" of screened recipes.
+mod.risks      Risks to the public from computers & users.
+mod.sources    Moderated postings of public-domain sources.
+mod.sources.doc        Archived public-domain documentation.
+mod.std        Moderated discussion about various standards.
+mod.std.c      Discussion about C language standards.
+mod.std.mumps  Discussion for the X11.1 committee on Mumps.
+mod.std.unix   Discussion for the P1003 committee on Unix.
+mod.techreports        Announcements and lists of technical reports.
+mod.telecom    Telecommunications digest.
+mod.test       Testing of moderated newsgroups -- no moderator.
+mod.vlsi       Very large scale integrated circuits.
+.fi
+.bp
+.hu
+Appendix \- How to use vnews
+.hu 2 
+Overview
+.pg
+.i Vnews
+is a program for reading USENET news.
+It is based on
+.i readnews
+but has a CRT-oriented (full screen) user interface.
+The command line options are identical.
+The list of available commands is quite similar,
+although since
+.i vnews
+is a
+.i visual
+interface,
+most
+.i vnews
+commands do not have to be terminated by a newline.
+.pg
+.i Vnews
+uses all but the last two lines of the screen to display the current article.
+The next to the last line is the secondary prompt line,
+and is used to input string arguments to commands.
+The last line contains several fields.
+The first field is the prompt field.
+If
+.i vnews
+is at the end of an article,
+the prompt is
+.cf next? ;
+otherwise the prompt is
+.cf more? .
+The second field is the newsgroup field,
+which displays the current newsgroup,
+the number of the current article,
+and the number of the last article in the newsgroup.
+The third field contains the current time,
+and the last field contains the word
+.cf mail
+if you have mail.
+When you receive new mail,
+the bell on the terminal is rung and the word
+.cf MAIL
+appears in capital letters for 30 seconds.
+.hu 2
+Commands
+.pg
+Most of the
+.i readnews
+commands have
+.i vnews
+counterparts and vice versa.
+Some differences are:
+.si
+.lp \(bu 5
+It lacks a \*(lqdigest\*(rq command (to deal specially with collections
+of articles bundled together).
+This would be nice to have,
+but it does not seem to be a major deficiency
+since you can move around in the digest with
+.i vnews
+commands.
+.lp \(bu 5
+To get to the previous group,
+use the
+.qp N
+command with a
+.qp \-
+argument.
+.lp \(bu 5
+.i Vnews
+has commands for moving around in the article which
+.i readnews
+does not have since they aren't applicable.
+.lp \(bu 5
+It has a \*(lqparent\*(rq command which will go to the article
+that the current article is a follow-up to,
+and a \*(lqwrite\*(rq
+command that writes out the body of an article without the header.
+.lp \(bu 5
+You can refer to the current article from the shell or
+while writing a follow-up as
+.b $A .
+.lp \(bu 5
+The \*(lqdecrypt\*(rq command (for decoding possibly offensive
+material) always does
+.i rot13
+which seems to be the default standard but the
+.i readnews
+version of it occasionally gets confused.
+.ei
+.hu 2
+Commands that differ from
+.bi readnews
+.pg
+Each
+.i vnews
+command may be preceded by a
+.i count .
+Some commands use the count; others ignore it.
+If
+.i count
+is omitted,
+it defaults to one.
+Some commands prompt for an argument
+on the second line from the bottom of the screen.
+Standard
+.ux
+erase and kill processing is done on this argument.
+The argument is terminated by a return.
+An interrupt
+.qc DELETE "" (
+or
+.qc BREAK )
+gets you out of any partially entered command. 
+.Qc CR
+A carriage return prints more of the current article,
+or goes on to the next article if you are at the end of the current article.
+A
+.qc SPACE
+is equivalent to
+.qc CR .
+.Qc CONTROL-B
+Go backwards
+.i count
+pages.
+.Qc CONTROL-F
+Go forward
+.i count
+pages.
+.Qc CONTROL-D
+Go forwards half a page.
+.Qc CONTROL-U
+Go backwards half a page.
+.Qc CONTROL-N
+Go forwards
+.i count
+lines.
+.Qc CONTROL-Z
+Go backwards
+.i count
+lines.
+.Qc CONTROL-L
+Redraw the screen.
+.qc CONTROL-L
+may be typed at any time.
+.Qp b
+Back up one article in the current group.
+.Qp l
+Redisplay the article after you have sent a follow-up or reply.
+.Qp n
+Move on to the next item in a digest.
+.qp \*(lq\&.\*(rq
+is equivalent to
+.qp n .
+This is convenient if your terminal has a keypad.
+.Qp p
+Show the parent article
+(the article that the current article is a follow-up to).
+This doesn't work if the current article was posted by A-news or notesfiles.
+To switch between the current and parent articles,
+use the
+.qp \-
+command.
+Unfortunately,
+if you use several
+.qp p
+commands
+to trace the discussion back further,
+there is no command to return to the original level.
+.Qp ug
+Unsubscribe to the current group.
+This is a two character command to ensure that it is not typed accidentally
+and to leave room for other types of unsubscribes
+.i e\f1.\fPg ., (
+unsubscribe to discussion).
+.Qp v
+Print the current version of the news software.
+.Qp D
+Decrypts a joke.
+It only handles
+.pa rot13
+jokes.
+The
+.qp D
+command is a toggle;
+typing another
+.qp D
+re-encrypts the joke.
diff --git a/usr/contrib/news/doc/install.mn b/usr/contrib/news/doc/install.mn
new file mode 100644 (file)
index 0000000..0f487e8
--- /dev/null
@@ -0,0 +1,3139 @@
+.ds h0 "USENET Version B Installation
+.ds h1
+.ds h2 %
+.ds f0 "\*(vr
+.ds f1
+.ds f2 "February 24, 1986
+.mt
+USENET Version B Installation
+.au
+Matt Glickman
+.ai
+Computer Science Division
+Department of Electrical Engineering and Computer Sciences
+University of California
+Berkeley, California 94720
+.au
+Revised by Mark Horton for version 2.10
+Revised by Rick Adams for version 2.10.3
+.hn
+Introduction
+.pg
+This document is intended to help
+a USENET site install and maintain the network news software.
+Please ask questions of Rick Adams\*(dg;
+.fn
+\*(dg ARPANET: rick@seismo.CSS.GOV, UUCP: seismo!rick
+.ef
+such questions will help to point out areas that need
+to be addressed here.
+.pg
+The overall order of things to do is:
+.lp (a)
+Find somebody to link up with.
+You need a network connection of some kind,
+for example,
+ARPANET or UUCP.
+If you must use UUCP and have no connections,
+you must have at least a dialup and preferably a dialer,
+and find someone willing to call your machine.
+The USENET directory may be helpful in finding some other site geographically
+near yours to hook up to.
+.lp (b)
+Create a
+.i localize.sh
+script to make local changes to the makefile and
+.i defs.h
+files. (Section 2 gives more details about creating
+.i localize.sh \&.)
+Once you're finished editing
+.i localize.sh ,
+create a
+.i defs.h
+and
+.i Makefile
+tailored
+for your site with the command
+.ce
+sh localize.sh
+Inspect
+.i defs.h
+and
+.i Makefile
+to ensure that all your local customizations
+got into your final versions. If you saw a \*(lq?\*(rq when you ran
+.i localize.sh ,
+one or both of the files is certainly wrong. It's a good idea to
+anchor the patterns in
+.i localize.sh \&'s
+.i ed (1)
+scripts, especially in its
+.i Makefile -editing
+lines. For instance, use
+.b /^UUXFLAGS/
+instead of
+.b /UUXFLAGS/ .
+.lp (c)
+Compile the software using the
+.i make (1)
+command.
+.lp (d)
+.i Su (1)
+and type \*(lqmake install\*(rq.
+This will copy the files out to the right place and
+make directories containing most of the important files.
+It will configure you in with a connection to
+.cn oopsvax
+via UUCP links.
+This is undoubtedly wrong,
+so you will have to configure links as needed.
+If you are upgrading from a version older than 2.10.3, do \*(lqmake update\*(rq.
+This will cause various checks to be performed on important
+files in
+.b LIBDIR .
+The results will be reported to you.
+If you are not sure if you should do \*(lqmake update\*(rq, do it.
+It will not hurt anything if you have already done it.
+.lp (e)
+After editing the configuration table,
+get your contact at the other end of the link to add you to their netnews
+.i sys
+file.
+.lp (f)
+Post a message to the
+.bi sysname "" \f3to.\fP
+newsgroup which should be set up to go only to the site you are linked to,
+as a test.
+Have the other person send a message to your system using the same mechanism.
+If this doesn't work,
+find the problem and fix it.
+(Please don't use
+.ng net.test
+unless there is no alternative.
+It is almost always possible to use
+.ng test ,
+or
+.bi sysname "" \f3to.\fP
+or some
+.bi local \f3.test\fP
+group,
+instead of
+.ng net.test .)
+.lp (g)
+Fill out a USENET directory form (the file
+.i dirform
+in the
+.i misc
+directory).
+Post a copy to the USENET newsgroup
+.ng net.news.newsite
+and mail a copy to
+.i cbosgd!uucpmap .
+.lp (h)
+Format the document
+.i "\*(lqHow to Read the Network News\*(rq"
+(the file
+.i howto.mn
+in the
+.i doc
+directory),
+the document
+.i "\*(lqHow to Use USENET Effectively\*(rq"
+(the file
+.i manner.mn
+in the
+.i doc
+directory)
+and the document
+.i "\*(lqCopyright Law\*(rq"
+(the file
+.i copyright.mn
+in the
+.i doc
+directory)
+and post them to your
+.ng general
+newsgroup with a long expiration date.
+You can use
+.i inews (1)
+or
+.i postnews (1)
+to do this.
+.lp (i)
+It will probably be necessary to fix your uucp commands
+to allow
+.i rnews
+and to support the
+.op \-z
+and
+.op \-n
+options (if you are lucky enought to have the source).
+.hn
+Installation
+.hn 2
+Configuration
+.pg
+Local configuration of the USENET
+version B software requires you to edit a few files.
+Most importantly,
+the
+.i defs.h
+and
+.i Makefile
+files must be created from their templates
+.i defs.dist
+and
+.i Makefile.dst .
+You should create a shell script called
+.i localize.sh
+which copies the files and makes local changes to the copies.
+Even for a completely vanilla site,
+some changes will be necessary.
+For example,
+your script should start with
+.i localize.v7
+or
+.i localize.usg .
+You should include the name of the local organization
+.b MYORG ) (
+and the uid of the local news super user
+.b ROOTID ). (
+You should also choose how your hostname will be determined.
+If you are a USG site,
+define
+.b UNAME
+in
+.i defs.h .
+If you are
+running 4.[23] BSD,
+define
+.b GHNAME
+in
+.i defs.h .
+If you have your UUCP name in 
+.i /etc/uucpname ,
+define
+.b UUNAME
+in
+.i defs.h .
+Otherwise,
+news will look in the file
+.i /usr/include/whoami.h
+for a line of the form
+.sd c
+#define sysname your-sysname
+.ed
+.pg
+If you are running System 3 or System 5,
+you are a USG site.
+Otherwise,
+unless you are in AT&T,
+you are probably a V7 site.
+The previously mentioned defines are the only modifications that are
+.i necessary
+to install news at your site.
+However,
+you will probably want to change some of the ones listed below.
+If your compiler does not accept \*(lq(void)\*(rq,
+the simplest thing to do is add \*(lq\-Dvoid=int\*(rq to the
+.b CFLAGS
+line in the
+.i Makefile .
+.pg
+A sample localize shell script can be found in
+.i localize.sample .
+The most important parameters are:
+.hn 3
+ROOTID
+.pg
+The numerical uid of the person who is the news super user.
+This should not be set to 0.
+Normally it is set to the uid of the news contact person for the site.
+If it is not defined,
+the uid of
+.b NOTIFY
+will be looked up in
+.i /etc/passwd
+and used instead.
+.hn 3
+N_UMASK
+.pg
+Mask for
+.i umask (2)
+system call.
+Set it to something like 022 for a secure system.
+Unsecure systems might want 002 or 000.
+This mask controls the mode of news files created by the software.
+Insecure modes would allow people to edit the files directly.
+.hn 3
+DFLTEXP
+.pg
+The default number of seconds after which an article will expire.
+Two weeks (1,209,600 seconds) is the default choice.
+If you wish to expire articles faster than two weeks,
+it is recommended that you use the
+.op \-e
+flag to expire instead of decreasing
+.b DFLTEXP .
+.hn 3
+HISTEXP
+.pg
+Articles which were posted more than
+.b HISTEXP
+ago are considered too old and are moved into the junk directory.
+This is because they are too old to be in the history file,
+so it is impossible to tell if they really should be accepted
+or are endlessly looping around the network.
+(This was theoretically possible before this feature was added.)
+The articles are removed after
+.b DFLTEXP
+seconds,
+but a copy of their
+.hf Message-ID
+is kept in the history file for
+.b HISTEXP
+seconds (the default is 4 weeks).
+.hn 3
+DFLTSUB
+.pg
+The default subscription list.
+If a user does not specify any list of newsgroups,
+this will be used.
+Popular choices are
+.ng all
+and
+.ng general\f1,\fPall.general .
+.hn 3
+TMAIL
+.pg
+This is the version of the Berkeley
+.i Mail (1)
+program that has the
+.op \-T
+option.
+If left undefined,
+the
+.op \-M
+option to
+.i readnews (1)
+will be disabled.
+.hn 3
+ADMSUB
+.pg
+This newsgroup (or newsgroup list) will always be selected
+unless the user specifies a newsgroup list that doesn't include
+.b ADMSUB
+on the command line.
+That is,
+as long as the user doesn't use the
+.op \-n
+flag to
+.i readnews
+on the command line,
+.b ADMSUB
+will always be selected.
+This is usually set to
+.ng general .
+(The intent of this parameter is to have certain newsgroups
+which users are required to subscribe to.
+A typical site might require
+.op general .)
+.hn 3
+PAGE
+.pg
+The default program to which articles should be piped for paging.
+This can be disabled or changed by the environment variable
+.b PAGER .
+If you have it,
+the Berkeley
+.i more (1)
+command should be used,
+since the
+.op +
+option allows the headers to be skipped.
+.hn 3
+NOTIFY
+.pg
+If defined,
+this character string will be used as a user name to send mail
+to in the event of certain control messages of interest.
+(Currently these are
+.b newgroup ,
+.b rmgroup ,
+.b sendsys ,
+.b checkgroups ,
+and
+.b senduuname .)
+As distributed,
+mail will be sent to user
+.i usenet .
+It is recommended you create such a mailbox
+(have it forwarded to yourself) if possible,
+since this makes it easier for another site
+to contact the site administrator for your site.
+If you are unable to do this
+.i e\f1.\fPg ., (
+you are not the super user)
+you should change this name to yourself.
+Also,
+messages about missing or extra newsgroups are mailed to this user
+by the
+.b checkgroups
+control message.
+.hn 3
+DFTXMIT
+.pg
+This is the default command to use to transmit news
+if no explicit command is given in the fourth field of the
+.i sys
+file.
+It normally includes
+.i uux (1)
+with the
+.op \-z
+option.
+You should install this modification to UUCP at once;
+otherwise your users will start being bombarded with annoying
+.i uux
+completion messages.
+However,
+you can turn this off to get news installed.
+.hn 3
+UXMIT
+.pg
+This is the default command used if the
+.b U
+flag is present in the flags portion of a
+.i sys
+file line.
+In this case,
+the second \*(lq%s\*(rq refers to the name of a file in the news spool area,
+not a temporary file.
+It can usually only be used
+when local modifications are made to the uucp system,
+such as the
+.op \-c
+option to
+.i uux .
+.hn 3
+DFTEDITOR
+.pg
+This is the full path name of the default editor to use
+during followups and replies.
+It should be set to the most popular text editor on your system.
+As distributed,
+.i vi (1)
+is used.
+.hn 3
+UUPROG
+.pg
+If this is defined,
+it will be used as a command to run when the
+.b senduuname
+control message is sent around.
+Otherwise the command
+.i uuname (1)
+will be run.
+Normally,
+this program should be placed in
+.b LIBDIR .
+.hn 3
+MANUALLY
+.pg
+If this is defined,
+incoming
+.b rmgroup
+messages will not automatically remove the group.
+News will instead mail a message to
+.b NOTIFY
+advising that the group should be removed.
+If you define
+.b MANUALLY ,
+you should have
+.b NOTIFY
+defined.
+.b MANUALLY
+is defined by default to protect you against
+accidental or malicious removal of an important newsgroup.
+.hn 3
+NONEWGROUPS
+.pg
+If this is defined, incoming
+.b newgroup
+messages will not automatically create the group.
+News will instead mail a message to
+.b NOTIFY
+advising that the group should be created.
+If you define
+.b NONEWGROUPS ,
+you should have
+.b NOTIFY
+defined.
+.b NONEWGROUPS
+is undefined by default to make it easier to automatically maintain the
+news system.
+.hn 3
+BATCH
+.pg
+If set,
+this is the name of a program that will be used to unpack
+batched articles (those beginning with the character \*(lq#\*(rq.)
+Batched articles normally are files reading
+.sd c
+#! rnews 1234
+article containing 1234 characters
+#! rnews 4321
+article containing 4321 characters
+\\&. . .
+.ed
+Batching is
+.i strongly
+recommended for increased efficiency on both sides.
+.hn 3
+LOCALNAME
+.pg
+Most systems have a full name database on line somewhere,
+showing for each user what their full name is.
+Most often this is in the gecos field of
+.i /etc/passwd .
+If your system has such a database,
+.b LOCALNAME
+should be left undefined.
+If not,
+define
+.b LOCALNAME ,
+and articles posted will only receive full names from local user information
+specified in
+.i NAME
+or
+.bi $HOME \f2/.name\fP
+by the user.
+If you have a nonstandard gcos format
+(not
+.i finger (1)
+or RJE)
+it will be necessary to make local changes to
+.i fullname.c
+as appropriate on your system.
+.hn 3
+INTERNET
+.pg
+If your system has a mailer that understands ARPA Internet syntax addresses
+.cf user@site.domain ) (
+turn this on,
+and replies will use the
+.hf "From"
+or
+.hf "Reply-To"
+headers.
+Otherwise,
+leave it disabled and replies will use the
+.hf "Path"
+header.
+.hn 3
+MYDOMAIN
+.pg
+When generating internet addresses,
+this domain will be appended to the local site name
+to form mailing address domains.
+For example,
+on system
+.cn ucbvax
+with user
+.i root ,
+if
+.b MYDOMAIN
+is set to
+.cf .UUCP ,
+addresses generated will read
+.cf root@ucbvax.UUCP .
+If
+.b MYDOMAIN
+is
+.cf .Berkeley.EDU ,
+the address would be
+.cf root@ucbvax.Berkeley.EDU .
+If your site is in more than one domain,
+use your primary domain.
+The domain always begins with a period,
+unless the local site name contains the domain;
+in this case
+.b MYDOMAIN
+should be the null string.
+.hn 3
+CHEAP
+.pg
+Do not
+.i chown (1)
+spool files to
+.i news .
+This will cause the owner of the file to be the person that started
+the
+.i inews
+process.
+This is used for obscure accounting reasons on some systems.
+.hn 3
+OLD
+.pg
+Define this if any of your USENET neighbors run
+2.9 or earlier versions of B news.
+It will cause all headers written to contain two extra lines,
+.hf Article-I.D.
+and
+.hf Posted ,
+for downward compatibility.
+Once all your neighbors have converted,
+you can save disk space and transmission costs by turning this off.
+It is strongly encouraged that they convert.
+2.10.3 is
+.i much
+faster than 2.9.
+The performance difference is dramatic.
+.hn 3
+UNAME
+.pg
+Define this if the
+.i uname (2)
+system call is available locally,
+even though you are not a USG system.
+USG systems always have
+.i uname (2)
+available and ignore this setting.
+.hn 3
+GHNAME
+.pg
+Define this if the 4.[23] BSD
+.i gethostname (2)
+system call is available.
+If neither
+.b UNAME
+or
+.b GHNAME
+is defined,
+.i inews
+will determine the name of the local system by reading
+.i /usr/include/whoami.h .
+.hn 3
+UUNAME
+.pg
+Define this if you keep your UUCP name in
+.i /etc/uucpname .
+.hn 3
+V7MAIL
+.pg
+Define this if your system uses V7 mail conventions.
+The V7 mail convention is that
+a mailbox contains several messages concatenated,
+each message beginning with a line reading
+.hf "From \f2user date\fP"
+and ending in a blank line.
+If this is defined,
+articles saved will have these lines added
+so that mail can be used to look at saved news.
+.hn 3
+SORTACTIVE
+.pg
+Define this if you want the news groups presented in the order of each person's
+.i .newsrc (5)
+instead of the active file.
+.hn 3
+ZAPNOTES
+.pg
+Define this if you want old style notesfile id's in the body of the article
+to be converted into
+.hf Nf-Id
+fields in the header.
+.hn 3
+DIGPAGE
+.pg
+If this is defined,
+.i vnews (1)
+will attempt to process the subarticles
+of a digest instead of treating the article as one big file.
+.hn 3
+DOXREFS
+.pg
+Define this if you are using
+.i rn (1).
+.i Rn
+uses this option to keep from showing the same article twice.
+.hn 3
+MULTICAST
+.pg
+If your transport mechanism supports multi-casting of messages,
+define this.
+Currently ACSNET is the only network that can handle this.
+.hn 3
+BSD4_2
+.pg
+Define this if you are running 4.2 or 4.3 BSD
+.ux .
+.hn 3
+BSD4_1C
+.pg
+Define this if you are running 4.1C BSD
+.ux .
+.hn 3
+SENDMAIL
+.pg
+Use this program instead of
+.i recmail (8)
+for sending mail.
+.hn 3
+MMDF
+.pg
+Use MMDF instead of
+.i recmail
+for sending mail.
+.hn 3
+MYORG
+.pg
+This should be set to the name of your organization.
+Please keep the name short,
+because it will be printed,
+along with the electronic address and full name of the author of each message.
+Forty characters is probably a good upper bound on the length.
+If the city and state or country of your organization are not obvious,
+please try to include them.
+If the organization name begins with a \*(lq/\*(rq,
+it will be taken as the name of a file.
+The first line in that file will be used as the organization.
+This permits the same binary to be used on many different machines.
+A good file name would be
+.i /usr/lib/news/organization .
+For example,
+an organization might read
+.cf "AT&T Bell Labs, Murray Hill" ,
+.cf "U.C. Berkeley" ,
+.cf MIT ,
+or
+.cf "Computer Corp. of America, Cambridge, Mass" .
+.pg
+.hn 3
+HIDDENNET
+.pg
+If you want all your news to look like it came from a single machine
+instead of from every machine on your local network,
+define
+.b HIDDENNET
+to be the name of the machine you wish to pretend to be.
+Make sure that you have you own machine defined as
+.cn ME
+in the sysfile
+or you may get some unnecessary article retransmission.
+.hn 3
+NICENESS
+.pg
+If
+.b NICENESS
+is defined,
+.i rnews
+does a
+.i nice (2)
+to priority
+.b NICENESS
+before processing news.
+.hn 3
+FASCIST
+.pg
+If this is defined,
+.i inews
+checks to see if the posting user is allowed to
+post to the given newsgroup.  If the username is not in the file
+.b LIBDIR \f2/authorized\fP
+then the default newsgroup pattern in the symbol
+.b FASCIST
+is used.
+.pg
+The format of the file
+.i authorized
+is:
+.br
+.si 
+user:allowed groups  
+.ei
+.pg
+For example:
+.si
+.sd
+root:net.all,mod.all
+naughty_person:junk,net.politics
+operator:!net.all,general,test,mod.unix
+.ed
+.ei
+.pg
+An open environment could have
+.b FASCIST
+set to
+.ng all
+and then individual entries could be made in the authorized file
+to prevent certain individuals from posting to such a wide
+area.
+.pg
+Note that a distribution of
+.ng all
+does
+.i not
+mean to allow postings
+only to local groups \-
+.ng all
+includes
+.ng all.all .  
+Use
+.ng all\f1,!\fPall.all
+to get that behavior
+.hn 3
+SMALL_ADDRESS_SPACE
+.pg
+Define this if your machine has 16 bit (or smaller) pointers.
+If you are on a
+.pd ,
+this is automatically defined.
+.hn 2
+Makefile
+.pg
+There are also a few parameters in the
+.i Makefile
+as well.
+These are:
+.hn 3
+OSTYPE
+.pg
+This is the type of
+.ux
+system you are using.
+It should be either
+.b v7
+or
+.b USG .
+Any BSD system is v7. Any System 3 or System 5 system is USG.
+This is normally set by
+.i localize.sh .
+.hn 3
+NEWSUSR
+.pg
+This is the owner (user name) of
+.i inews .
+If you are a superuser,
+you should probably create a new user id (traditionally
+.i news )
+and use this id.
+If you are not a superuser,
+you can use your own user id.
+If you are able to,
+you should create a mail alias
+.i usenet
+and have mail to this alias forwarded to you.
+This will make it easier for other sites to find the right person
+in the presence of changing jobs and out of date or nonexistent directory pages.
+.b NEWSUSR
+and
+.b ROOTID
+do not need to represent the same user.
+.hn 3
+NEWSGRP
+.pg
+This is the group (name) to which
+.i inews
+belongs.
+The same considerations as
+.b NEWSUSR
+apply.
+.hn 3
+SPOOLDIR
+.pg
+This directory contains subdirectories in which news articles will be stored.
+It is normally
+.i /usr/spool/news .
+.pg
+Briefly,
+for each newsgroup (say
+.ng net.general )
+there will be a subdirectory
+.i /usr/spool/news/net/general
+containing articles,
+whose file names are sequential numbers,
+.i e\f1.\fPg .,
+.i /usr/spool/news/net/general/1 ,
+etc.
+.pg
+Each article file is in a mail-compatible format.
+It begins with a number of header lines,
+followed by a blank line,
+followed by the body of the article.
+The format has deliberately been chosen to be compatible
+with the ARPANET standard for mail documented in RFC 822.
+.pg
+You should place news in an area of the disk with enough free space
+to hold the news you intend to keep on line.
+The total volume of news in
+.ng net.all
+currently runs about 1 Mbyte per day.
+If you expire news after the default 2 weeks,
+you will need about 14 Mbytes of disk space
+(plus some extra as a safety margin and
+to allow for increased traffic in the future.)
+If you only receive some of the newsgroups,
+or expire news after a different interval,
+these figures can be adjusted accordingly.
+.hn 3
+BATCHDIR
+.pg
+This directory will contain the list of articles to send to each system.
+It is normally
+.i /usr/spool/batch .
+.hn 3
+LIBDIR
+.pg
+This directory will contain various system files.
+It is normally
+.i /usr/lib/news .
+.hn 3
+BINDIR
+.pg
+This is the directory in which
+.i readnews ,
+.i postnews ,
+.i vnews ,
+and
+.i checknews (1)
+are to be installed.
+This is normally
+.i /usr/bin .
+If you decide to set
+.b BINDIR
+to a local binary directory,
+you should consider that the
+.i rnews
+and
+.i cunbatch
+commands must be in a directory that can be found by
+.i uuxqt ,
+which normally only searches
+.i /bin
+and
+.i /usr/bin .
+.hn 3
+UUXFLAGS
+.pg
+These are the flags
+.i uux
+will be called with.
+.hn 3
+LNRNEWS
+.pg
+This is the program used to link
+.i rnews
+and
+.i inews .
+If you have symbolic links,
+you can replace the \*(lqln\*(rq with \*(lqln \-s\*(rq.
+.hn 3
+SCCSID
+.pg
+If this is defined, sccs ids will be included in each file. If you
+are short on address space, don't define this.
+.hn
+FILES
+.pg
+This section lists the files in
+.b LIBDIR
+and comments briefly what they do.
+.hn 2
+active
+.pg
+A list of active newsgroups.
+It is automatically updated as new newsgroups come in.
+The order here is the order news is initially presented by
+.i readnews ,
+so you can edit this file to put important newsgroups first.
+If you have
+.b SORTACTIVE
+defined,
+after the first time the user invokes
+.i readnews ,
+it will be presented in the order of his
+.i .newsrc .
+Each line of the active file contains four fields,
+separated by a space:
+the newsgroup name,
+the highest local article number
+(for the most recently received article),
+the lowest local article number that has not yet expired,
+and a single character used to determine if the user can post to that newsgroup.
+If the character is
+\&\*(lqy\*(rq
+the user is permitted to post articles to that group.
+If the character is
+\&\*(lqn\*(rq
+the user is not permitted to post articles to that groups.
+(This field takes the place of the
+.i ngfile
+in earlier versions of news.
+Local article numbers begin at 1 and count sequentially
+within the newsgroup as articles are received.
+They do not usually correspond to local article numbers on other sites.
+The article numbers are always stored as a five digit number
+(with leading zeros) to allow updating of the file in place.
+.pg
+The active file should contain
+.ng all
+active net-wide active newsgroups
+.ng net.all and (
+.ng mod.all ).
+It is important that they all be present,
+as they are used as a check for valid newsgroup names
+and invalid newsgroup names are removed from any articles processed by
+.i inews .
+You should use the
+.i sys
+file to keep out unwanted newsgroups.
+.hn 2
+aliases
+.pg
+This file is used to map bad newsgroup names to the correct ones.
+(For example,
+.ng net.unix.wizards
+is mapped into
+.ng net.unix-wizards ).
+Each line consists of two fields separated by a space.
+If the first field is found in the newsgroup list of the incoming article,
+it is changed to the second field.
+This change takes place in the article
+before it is passed on to other systems,
+not just locally.
+.hn 2
+batch
+.pg
+This program reads a list of filenames of articles
+and outputs the articles themselves.
+It is typically used by the shell script 
+.i sendbatch .
+.hn 2
+c7unbatch
+.pg
+This is used to decompress news that has been
+.b encoded
+for transmission over a network that only supports 7-bit transfers (e.g X.25.)
+.hn 2
+caesar
+.pg
+This is a program to do Caesar decoding of rotated text,
+on a line by line basis.
+The standard input is copied to the standard output,
+rotating each line according to a static single letter frequency table.
+If an integer argument is given
+.i e\f1.\fPg ., (
+13),
+every line is rotated by that argument,
+without regard to letter frequencies.
+This program is invoked by the
+.qp D
+.i readnews
+command.
+It is also used by
+.i postnews
+with the \*(lq13\*(rq argument to encode selected material for posting.
+.hn 2
+checkgroups
+.pg
+.i Checkgroups
+is a shell file to aid in automatically checking
+the accuracy of your active file.
+It is executed by the
+.b checkgroups
+control message and mails a list of out of date newsgroups
+to the person defined by
+.b NOTIFY
+It also updates the
+.i newsgroups
+file that is used by
+.i postnews
+as a helpfile for newsgroup selection.
+.hn 2
+compress
+.pg
+This program does a modified Lempel-Ziv data compression. It is used by the
+compressed batching scheme.
+It averages 50% compression on a typical batch of news.
+.hn 2
+distributions
+.pg
+This is a list of distributions that are valid for your site.
+Each line has two fields separated by the first space on the line.
+The first field is the name of the distribution
+.i e\f1.\fPg ., (
+.ng usa ,
+.ng na ,
+etc.).
+The second field is text describing the distribution.
+As distributed,
+this file is only correct for sites in the USA.
+You should examine this file and add or delete the appropriate distributions.
+.hn 2
+encode
+.pg
+This program transforms an 8-bit binary file into a file suitable for
+sending over a link that only allows 7-bit characters. It is used
+by
+.b "sendbatch -c7."
+.hn 2
+errlog
+.pg
+This file contains the \*(lqimportant\*(rq error messages found in the log file.
+These errors usually indicate that something was wrong with an article.
+This file should be watched closely.
+The
+.i log
+file contains much more verbose information
+and it is often difficult to detect errors in it.
+.hn 2
+expire
+.pg
+This program expires old articles and archives them if archiving is selected.
+It is typically run once a day from
+.i cron (8).
+.hn 2
+help
+.pg
+This contains a list of commands printed when an illegal command is typed to
+.i readnews .
+.hn 2
+history
+.pg
+A list of every article that has come in to your system.
+It is used to reject articles that come in for the second time
+(presumably via a different path).
+This file will grow but is cleaned out by the
+.i expire (8)
+command.
+.hn 2
+history.d
+.pg
+On USG systems, this directory contains 10 files (history.[0-9]) which are
+used as part of a simple hashing algorithm to speed up history searches.
+Since V7 systems have DBM, this is not used on V7 systems.
+.hn 2
+history.dir,history.pag
+.pg
+These two files are used on V7 systems as a hashed version of
+.i history ,
+containing the message id's of all articles in history.
+They are only used if
+.b \-DDBM
+and
+.b \-ldbm
+appear in
+.i Makefile .
+.hn 2
+inews
+.pg
+This is the program that actually sends and receives news.
+All other programs interface eventually with it.
+It is not intended to be used directly by a human,
+so it is no longer in
+.i /usr/bin .
+.hn 2
+log
+.pg
+If present,
+a log of articles processed and error conditions is kept here.
+This file grows without limit unless cleaned out periodically.
+The
+.i trimlib
+script in
+.i misc
+can be invoked from
+.i cron
+daily or weekly to keep the log short.
+.hn 2
+moderators
+.pg
+This file contains a list of the moderators and their mailing addresses
+for each moderated newsgroup.
+Each line consists of two fields.
+the first is the name of the moderated group.
+The second is the mailing address of the group's moderator.
+As distributed,
+they are almost certainly wrong.
+You will need to modify the paths so they work from your site.
+.hn 2
+newsgroups
+.pg
+This file is displayed by
+.i postnews
+when a user hits
+.qp ?
+in response to its request for newsgroups.
+It is also used by
+.i vnews
+when it displays the newsgroup name.
+It is updated automatically by the
+.b checkgroups
+control message.
+.hn 2
+notify
+.pg
+If this file is present,
+its contents will be taken as the name of the user
+to notify in case of a problem.
+If the file is empty,
+nobody will be notified.
+(This overrides the
+.b NOTIFY
+option in
+.i defs.h ).
+Having a null file is useful if one person administers several systems
+and does not want multiple copies of control message notifications.
+.hn 2
+oactive, ohistory, ohistory.dir, ohistory.pag
+.pg
+These are copies of the corresponding
+.i active ,
+.i history ,
+.i history.dir ,
+and
+.i history.pag
+files before
+.i expire
+ran.
+They are kept in case something happens to the originals.
+.hn 2
+recmail
+.pg
+This program can serve as a link between news and your local mailer.
+If you have
+.i sendmail (8),
+don't use
+.i recmail .
+.i Sendmail
+is much more useful.
+.hn 2
+recnews
+.pg
+A program which allows you to send mail to get news posted.
+You usually need to run
+.i sendmail
+or
+.i delivermail (8)
+to be able to use this.
+.hn 2
+recording
+.pg
+A list of newsgroup classes and filenames to display recordings for.
+The recording feature is analogous to the recordings played in some areas
+when you dial directory assistance,
+trying to be annoying and make you think twice.
+Recordings on certain newsgroups are intended to remind the user
+of the rules for the newsgroup,
+or,
+in the case of a company worried about letting proprietary information out,
+reminding authors that anything they say is seen outside the company
+and so proprietary information should not be included.
+.pg
+The file contains one line per recording.
+The line contains two fields,
+separated by a space.
+The first field is the newsgroup class
+.i e\f1.\fPg ., (
+.ng net.all ),
+the second field is the name of the file containing the recorded message.
+If the file name does not begin with a slash,
+it will be searched for in
+.b LIBDIR .
+Sample recording files can be found in the
+.i misc
+directory.
+.hn 2
+rmgroup
+.pg
+This shell file should be used to remove any groups that are no longer used.
+.hn 2
+sendbatch
+.pg
+This shell file is used to send batched articles to other systems.
+It is typically run from
+.i cron .
+See the manual page for more details.
+.hn 2
+sendnews
+.pg
+A program to send news internally from one computer to another.
+It is useful if you must use mail links to transmit articles.
+.hn 2
+seq
+.pg
+This file contains the current sequence number for your system.
+It is used to generate unique article id's.
+.hn 2
+sys
+.pg
+This file contains a list of all your neighbors,
+which newsgroups they get,
+and how to send news to them.
+The format is documented below.
+.hn 2
+unbatch
+.pg
+This program is used to unbatch the incoming batched news
+and feed each article to
+.i inews .
+It's horrible and will go away in the future.
+.hn 2
+users
+.pg
+A list of users that have read news on your system.
+.hn 2
+uurec
+.pg
+A program to receive news sent by
+.i sendnews (8).
+.hn 2
+vnews.help
+.pg
+This is the helpfile used by
+.i vnews .
+.hn 1
+Setting Up Links
+.pg
+There are two basic types of links for exchanging news:
+those that use mail and those that don't.
+The ones that use mail are more indirect,
+yet more versatile, while the ones that don't are simpler.
+The default method does not use mail, so that is discussed first.
+.hn 2
+Non-mail Links
+.pg
+The basic theory behind a non-mail link is that the
+.i rnews
+program is invoked on the remote system
+with the article being transmitted as the standard input.
+This is possible on several networks,
+but the most common implementation is via the UUCP network.
+Using the
+.i uux
+command,
+the command which is forked to the shell looks like:
+.sd c
+uux \- \-r \-z remotesys!rnews < article
+.ed
+This is the default transmission method.
+In order to set up such a link,
+obviously a UUCP link with the remote system must be in effect.
+In addition,
+.i rnews
+must be available and executable by
+.i uuxqt
+on the remote machine.
+In most cases,
+this means that
+.i rnews
+must be in
+.i /usr/bin
+so
+.i uux
+can find it.
+Also,
+the list of allowed UUCP commands (in
+.i /usr/src/usr.bin/uucp/uuxqt.c
+or
+.i /usr/lib/uucp/L.cmds ,
+depending on the version of UUCP)
+should be checked to make sure
+that
+.i rnews
+is an allowed command.
+.pg
+Other networks that allow remote execution include the BERKNET,
+BLICN
+.i usend (1)), (
+many Ethernets,
+and the NSC hyperchannel
+.i nusend (1)). (
+It is important,
+however,
+that a spooling mechanism be available.
+Otherwise,
+if system
+.cn A
+tries to send an article to system
+.cn B
+via a remote execution command,
+and
+.cn B
+is down,
+the article could be lost.
+Spooling arranges that the system will try again when
+.cn B
+comes back up.
+.hn 2
+Mail Links
+.pg
+When using mail to transmit articles,
+two intermediary programs are necessary.
+These are
+.i sendnews
+and
+.i uurec (8).
+The idea is that when system
+.cn A
+wants to send an article to system
+.cn B ,
+the
+.i sys
+file on system
+.cn A
+has an entry for system
+.cn B
+such as:
+.sd c
+/usr/lib/news/sendnews \-a rnews@B
+.ed
+which runs
+.i sendnews
+on the article.
+The
+.op \-a
+option specifies that the mail should be formatted for the ARPANET.
+.i Sendnews
+packages the article and mails it to
+.cf rnews@B .
+Somehow,
+the B system is expected to make sure that all mail to user
+.cf rnews
+is fed as input to the program
+.i uurec .
+This program unpackages it and invokes
+.i rnews .
+.pg
+The best way to get mail to
+.cf rnews
+fed into
+.i uurec
+is to use
+.i sendmail
+or
+.i delivermail ,
+if you are on a system running them.
+Create an alias in
+.i /usr/lib/aliases
+as follows:
+.sd c
+rnews: "|/usr/lib/news/uurec"
+.ed
+and
+.i sendmail
+will handle it.
+If you do not have a facility for forwarding mail to a program,
+you can gimmick your mailer to watch for it
+(using
+.i popen (3S),
+this is easy)
+or,
+if you don't want to do any programming,
+you can have
+.i cron
+invoke
+.i uurec
+every hour with
+.i /usr/spool/mail/rnews
+as standard input.
+This solution is messier because
+.i uurec
+must potentially deal with multiple messages,
+something that has never been tested.
+.hn 1
+Format of the
+.bi sys
+file
+.pg
+To set up a link to another site,
+edit the
+.i sys
+file in
+.b LIBDIR .
+This file is similar to the
+.i L.sys
+file of UUCP.
+Each line contains four fields,
+separated by colons:
+.lp (1)
+The system name of a site to which you forward news.
+Normally all systems you have links to will be
+included.
+You should also have a line for your own system.
+If this field is
+.cn ME,
+it will be used as if it were your local system name.
+If the system name is followed by a \*(lq/\*(rq, the article will not be
+forwarded to this system if it has already passwd through any of the
+(comma separated) list of sites immediately following the \*(lq/\*(rq.
+For example, if the sysline was:
+.sd c
+yoursite/sitea,siteb,sitec:net,mod,na,usa,to.yoursite::
+.ed
+the incoming article would only be forwarded to
+.i yoursite
+if it had not already been to any of
+.i sitea ,
+.i siteb ,
+or
+.i sitec .
+This is normally used to reduce the number of duplicate articles received
+at a site that has multiple main newsfeeds.
+.lp (2)
+The newsgroups to be forwarded to them.
+This is a pattern of the same kind as a subscription list.
+Generally,
+you will list classes of newsgroups,
+that is,
+using
+.ng all
+for everything.
+A typical forwarding list for a new site would be
+.sd c
+net,mod,na,usa,to.\f2sysname\fP
+.ed
+where
+.i sysname
+is the name of the remote system.
+(Of course, if you are not in the USA or North America,
+you would remove those distributions
+and replace them with the ones appropriate for you).
+In particular,
+you don't want to forward
+.ng all
+since local newsgroups
+(those without dots)
+should not be sent.
+For the line describing your own system,
+this field describes the newsgroups your site will accept from remote sites.
+Thus,
+if another site insists on sending you a newsgroup you don't want,
+for example
+.ng net.jokes ,
+include
+.ng !net.jokes
+here.
+.lp (3)
+This field contains flags describing the connection.
+An
+.b A
+will indicate that the other site is running an A version of netnews.
+A
+.b B
+indicates a B version.
+Leaving it empty defaults to
+.b B .
+If you are reading this document,
+you have a B version.
+Some existing sites run A versions.
+If you aren't sure,
+ask your contact at the other site,
+with whom you should be talking to set this up anyway.
+The
+.b F
+flag indicates that the fourth field is the name of a file.
+The full path name of a file containing the article in
+.b SPOOL
+will be appended to this file.
+The
+.b L
+flag prevents transmission unless the article was created on this site.
+If a number follows the
+.b L
+.i e\f1.\fPg ., (
+.b L3 ),
+sites less than that number of hops away will be considered local.
+(It is recommended that you feed an
+.b L
+link to a backbone site,
+to ensure that your submissions will be more likely
+to get to the entire network,
+even in the event of a local problem.
+Please make sure that a mail link exists too,
+so you can get replies.)
+The
+.b N
+flag can also be included here,
+indicating that mail should
+be sent using the
+.pa ihave/sendme
+protocol described below.
+The
+.b H
+flag can be used to interpolate the history file into the command.
+The
+.b S
+flags says to execute the transmission command directly
+instead of forking a shell.
+The
+.b U
+field arranges that the parameter to the optional \*(lq%s\*(rq
+in the command field to be filled in with a permanent file name from
+.b SPOOL
+instead of a temporary customized file name.
+The
+.b M
+flag says to use multi-casting. Multi-casting is described in an appendix.
+.lp (4)
+This field is the command to be run to send news to the remote site.
+The article will be on the standard input.
+Leaving this field blank means an ordinary UUCP link is being used,
+that is,
+the command defaults to
+.sd c
+uux \- \-r \-z sysname!rnews
+.ed
+The
+.op \-
+option tells
+.i uux
+to expect input from the standard input.
+The
+.op \-z
+option is nonstandard \- you should add it
+(see the
+.i minus.z*
+files in the uucp source directory.)
+It shuts off the annoying message you would otherwise get mailed to you
+telling you that your article was broadcast successfully.
+To avoid using the
+.op \-z
+option,
+change the source or put the
+.i uux
+command in the fourth field.
+The
+.op \-r
+option tells
+.i uux
+not to call the other system once the job is queued.
+This turns out to ease the load on the system,
+at the expense of making news be transmitted a bit slower.
+The news will be sent when the next call is made;
+usually this means the next time mail is sent to or from your system.
+If this turns out to be unreasonably long,
+put a line in
+.i crontab
+to run
+.sd c
+/usr/lib/uucp/uucico \-r1 \-s\f1system\fP
+.ed
+every hour or so.
+.pg
+Here is a sample
+.i sys
+file for a site
+.cn myvax
+with connections to
+.cn yourvax
+where
+.cn myvax
+also passes news on to
+.cn downstream .
+We assume that
+.cn myvax
+and
+.cn downstream
+exchange a local newsgroup class
+.ng lng.all
+as well as the network wide newsgroups.
+News to
+.cn downstream
+is batched.
+We also assume that
+.cn myvax
+and
+.cn yourvax
+are in the USA,
+while
+.cn downstream
+is in Canada.
+.sd
+myvax:net,mod,na,usa,lng,to::
+yourvax:net,mod,na,usa,to.yourvax::
+downstream:net,mod,na,lng,to.downstream:F:/usr/spool/batch/downstream
+.ed
+.hn
+Posting Methods
+.pg
+The basic method is
+.i postnews .
+This program will prompt you for the title,
+newsgroups,
+and distribution,
+then place you in the editor.
+(The system default
+.b EDITOR
+is used unless the environment variable
+.b EDITOR
+is set,
+overriding the system default.)
+The text should be typed after the blank line.
+The title and newsgroups are available for editing at the top of the buffer.
+Other header lines can be added,
+such as an expiration date or a distribution.
+When you write out the file and exit from the editor,
+you will be prompted for what to do next. Your choices are:
+.b w rite
+the message to a file,
+.b s end
+the message,
+.b l ist
+the message or
+.b e dit
+it again.
+.pg
+Another method is to use mail.
+This can only be done on systems that allow mail to a given name
+to be fed into an arbitrary program as input.
+This is easily done with the Berkeley
+.i delivermail
+or
+.i sendmail
+program,
+and not with any other mailer the author is familiar with.
+(It may be possible to painfully set this up with MMDF,
+provided the newsgroup name is no more than 8 characters long.)
+To use mail,
+set up an alias such as the following:
+.sd c
+net.general: "|/usr/lib/news/recnews net.general"
+.ed
+Whenever a user sends mail to
+.ng net.general ,
+this starts up the given shell command which calls
+.ng recnews
+with one argument,
+the name of the newsgroup.
+You need to create one alias for each newsgroup,
+and to keep the list up to date as new newsgroups are created.
+.i Recnews (8)
+will in turn invoke
+.i inews .
+.pg
+Note that there are problems with
+.i recnews .
+There is no way to use it to post to multiple newsgroups
+without creating separate articles
+(something frowned upon because it forces people
+to read the same thing more than once.)
+Also,
+there is no way to make the recording feature
+(to remind people to not accidently divulge proprietary information)
+work when recnews is used.
+.hn
+Various considerations
+.hn 2
+Setuid bits
+.pg
+The current intended state of affairs is that
+.i inews
+runs setuid to
+.b NEWSUSR .
+The
+.i readnews
+program does not need to be setuid.
+This makes it possible to write your own interface to read news instead of using
+.i readnews .
+(As distributed,
+.i inews
+is also setgid.
+I know of no good reason for this.)
+.hn 2
+Modes of Spool Directories
+.pg
+All the files should be writable by
+.b NEWSUSR .
+However,
+due to a glitch,
+you will probably have to make the
+.b SPOOLDIR
+and its subdirectories mode 777.
+It could be 755 except for one problem.
+When a new newsgroup comes in,
+.i inews
+will attempt to
+.i mkdir (1)
+a new subdirectory of
+.b SPOOLDIR
+for the newsgroup.
+Since both
+.i inews
+and
+.i mkdir
+are setuid,
+.i mkdir
+will use the uid of the person who ran 
+.i inews
+instead of
+.b NEWSUSR
+when checking for permissions.
+If the directory mode isn't 777 the check will fail.
+Here are several alternatives if you don't want a 777 directory around:
+.hn 3
+Fix Real Uid
+.pg
+If
+.i inews
+is always run by
+.i cron
+or as
+.i root ,
+the real uid can be arranged to be
+.i root
+or
+.b NEWSUSR .
+This is a poor solution
+since it makes the local creation of new newsgroups
+require super user permissions,
+and is a potential security hole.
+If this approach is taken,
+care must be taken to insure that the owner of the created directory is
+.b NEWSUSR .
+.hn 3
+Change the Kernel
+.pg
+.i Inews
+will do:
+.b setuid(geteuid())
+(see
+.i setuid (2)
+and
+.i geteuid (2))
+before it forks the
+.i mkdir .
+If your system permits this call,
+there will be no problem.
+In particular,
+Berkeley 4.0
+.ux
+and later systems allow this.
+An alternative change to the kernel is to automatically stack uids:
+when a setuid program is run,
+set the new real uid to the old effective uid.
+.hn 3
+Groups
+.pg
+You could have
+.i inews
+be setgid to
+.b NEWSGRP
+and all files writable by the group.
+This approach has been tested and the problem turns out to be that the
+.i mkdir
+command uses the
+.i access (2)
+system call to check permissions.
+Since
+.i access
+uses the real gid,
+you run into the same problem.
+.hn 3
+Another
+.bi Mkdir
+.pg
+You could create a version of
+.i mkdir
+that does less checking and put it in a directory that can only be accessed by
+.b NEWSUSR
+(mode 700,
+owned by
+.b NEWSUSR ).
+Have
+.i inews
+fork this
+.i mkdir .
+.hn 2
+Expiration dates
+.pg
+To get articles to expire automatically, put a line in
+.i crontab
+to run
+.sd c
+/usr/lib/news/expire
+.ed
+every night.
+This command deletes all expired news.
+The
+.op \-a
+.i newsgroups
+option causes all expired news to be archived under
+.i /usr/spool/oldnews
+depending on which newsgroups are selected.
+(See
+.i expire (8)
+for details.)
+.pg
+Sometimes news is not expired when it should be.
+Be sure to check that
+.i expire
+has permissions to unlink files,
+and that it is properly setuid to 
+.b NEWSUSR .
+You can manually invoke
+.i expire
+with the
+.op \-v
+(verbose) option to find out what it's doing.
+Adding levels of verbosity
+.i e\f1.\fPg ., (
+.op \-v6 )
+will get more and more output.
+.hn 2
+Version to Version
+.pg
+Version B will understand incoming news in either version A or B format,
+automatically (presuming 
+.b OLD
+is defined in defs.h.)
+Version B
+will generate either format,
+depending on the flag in the third field of the
+.i sys
+line.
+Version A will not understand version B format.
+Thus,
+it is possible for two version B
+sites to communicate using version A
+format.
+This will work but is not a good idea,
+since the translation from B to A loses information
+(such as the expiration date)
+which will not be there when translated back to version B.
+.pg
+News from versions A and 2.9 B
+do not conform to the USENET interchange standard.
+2.10 B supports the standard and will communicate with either A or 2.9 B news.
+A news is written (losing other header information) if
+A is in the flags for the system.
+If
+.b OLD
+is defined,
+2.10 will write out headers with both standard
+.hf Date "" (
+.hf Message-ID )
+and 2.9
+.hf Posted "" (
+.hf Article-I.D. )
+lines so that either B system will properly handle the article.
+Incoming news is recognized by the first letter
+.qp A "" (
+for A news),
+or the lack of an
+.cf @
+in the
+.hf From
+line (2.9).
+Missing fields are constructed as well as possible
+from the available information.
+.hn 2
+Presentation Order
+.pg
+The order of the newsgroups listed in
+.bi LIBDIR \f2/active\fP
+is the order the newsgroups will be presented in initially.
+If
+.b SORTACTIVE
+is defined in
+.i defs.h ,
+after the first time news will be presented in the order of the person's
+.i .newsrc .
+Initially this will be directory order,
+but you can edit important newsgroups like
+.ng general
+to the top.
+.pg
+A recommended order to maintain your active file in is this:
+.sd
+net.announce.newusers
+general
+local.general
+net.announce
+local \fInewsgroups in alphabetical order\fP
+mod.all \fInewsgroups in alphabetical order\fP
+net.all \fInewsgroups in alphabetical order\fP
+test
+all.test
+to.all
+control
+junk
+.ed
+.hn
+Control Messages
+.pg
+Some news systems will send you articles that are not for human consumption.
+They are messages to your news system called
+.i "control messages" .
+Such messages contain the
+.hf Control
+header.
+Older systems use newsgroups matching
+.ng all.all.ctl ,
+and this will still work,
+although the
+.hf Control
+header is preferred.
+Since the newsgroup name is used for distribution only,
+and is not checked to ensure it's in the active file,
+such newsgroup names can still be used.
+This makes it possible to post network wide control messages with
+.ng net.msg.ctl
+(or restricted broadcast such as
+.ng btl.msg.ctl )
+or messages for a particular system:
+.ng to.ucbvax.ctl .
+Messages are canceled,
+however,
+with a
+.hf Control
+line in a message to the same newsgroup(s)
+as the original message.
+.pg
+A control message contains a command and zero or more arguments
+(much like a
+.ux
+program).
+The subject of the article contains the command and arguments.
+The body of the article is usually ignored,
+although some messages can use it for additional text information.
+Control messages are not stored in
+.b SPOOL ;
+rather,
+they are acted on and discarded at once.
+.hn 2
+ihave/sendme
+.pg
+Two control messages are
+.b ihave
+and
+.b sendme .
+These messages allow two participating sites to set up a link
+so that one site will tell the other site it has a given article
+and wait for a request before it actually sends it.
+The normal case is to send an entire article to a system,
+which consults the history file to see if the article has already been seen,
+and then throws it away if it has been seen before.
+.pg
+Note that,
+since most messages are short anyway,
+experience has indicated that for ordinary UUCP unbatched communication,
+all
+.pa ihave/sendme
+does is triple the load and slow down forwarding.
+We hope future code will allow
+.b ihave 's
+with multiple message id's in the body,
+and existing code in 2.10 understands such messages,
+but does not generate them.
+So we advise that you don't use
+.pa ihave/sendme
+for now.
+.pg
+Use of these control messages can cut down on this wasted transmission,
+but if you have a polled UUCP connection,
+they can slow down receipt of news due to polling delays.
+It is up to each connected pair of sites whether they want to use this protocol.
+The choice is controlled by the
+.b N
+flag in the
+.i sys
+file.
+In the case of a leaf node
+(one with only one neighbor)
+there is no advantage to this protocol.
+Even if both sites are able to initiate a connection
+(have dialers or the link is hardwired)
+the
+.op \-r
+option on the
+.i uux
+can cause 2 hour or more delays in propagating news.
+Since this protocol can triple the number of messages generated,
+you should carefully evaluate your situation when deciding whether to use it.
+If transmission time and phone bills dominate your costs,
+and you are sending news to several sites,
+and large article bodies dominate the costs
+(rather than the headers and the time spent by UUCP negotiating transmission)
+it is probably worthwhile to use
+.pa ihave/sendme .
+If your costs are dominated by CPU load from UUCP,
+or if you send news to a site that cannot get it from anywhere else,
+you probably do not want to use this protocol.
+The decision can be made independently for each site in your
+.i sys
+file.
+.pg
+This pair works as follows:
+Site
+.cn mysite
+receives article
+.cf <123@abc.UUCP> .
+It enters it locally and then broadcasts it to its neighbors.
+One of its neighbors is site
+.cn yoursite
+which has the
+.b N
+flag in the
+.i sys
+file.
+So
+.cn mysite
+sends an article on newsgroup
+.bi yoursite \f3.ctl\fP \f3to.\fP
+with title
+.cf "ihave <123@abc.UUCP> mysite" .
+This control message has two arguments \-
+the first
+.cf <123@abc.UUCP> ) (
+is the article id of the article in question,
+the second
+.cf mysite ) (
+is the name of the site sending the article.
+The name of the newsgroup and the
+.i sys
+file control transmission of the article.
+Normally the
+.i sys
+file will read something like
+.sd c
+yoursite:net.all,fa.all,to.yoursite:BN:
+.ed
+which will cause an article on
+.b to.yoursite.ctl
+to be transmitted.
+.pg
+.cn Yoursite
+receives the message and looks to see if it has seen it before.
+If it has,
+it throws the message away and stops.
+If it hasn't,
+it sends a message on
+.bi mysite \f3.ctl\fP \f3to.\fP
+with title
+.cf "sendme <123@abc.UUCP> yoursite"
+which is transmitted to
+.cn mysite .
+(The two arguments to
+.i sendme
+are the article id requested and the site to send it to.)
+Then
+.cn mysite
+gets this message
+and actually transmits the article to
+.cn yoursite .
+.hn 2
+newgroup
+.pg
+This message has one argument,
+the name of a newsgroup to be created.
+This allows special action to be taken locally when a new newsgroup is created.
+It is generated by the
+.op \-C
+option to
+.i inews .
+By default,
+the newsgroup is added to the active file,
+and mail is sent to the local contact advising that this has happened.
+The directory will be created when a message for that newsgroup arrives.
+See the routine \*(lqc_newgroup\*(rq in
+.i control.c
+if you want something different to happen.
+(Note that,
+although the body of the message contains a brief description
+of the purpose of the group,
+this body is usually thrown away by existing software.)
+.hn 2
+rmgroup
+.pg
+This message has one argument,
+the name of a newsgroup to be removed.
+It is used for network-wide cancellation of a newsgroup.
+If
+.b MANUALLY
+is not defined,
+it will remove the articles,
+directory,
+and active file line for the group.
+There is a shell script
+.i rmgroup
+that does essentially the same thing as this message,
+but the shell script only removes the group locally.
+We recommend that you leave
+.b MANUALLY
+defined,
+and when you receive mail advising you of the demise of the newsgroup,
+you run
+.i rmgroup
+by hand.
+This will prevent accidental or malicious removal of a good newsgroup.
+.hn 2
+cancel
+.pg
+This message cancels a given article.
+It takes one argument,
+the message id of the article to cancel.
+It should be broadcast to the same newsgroup as the original article.
+If the article to be canceled is not present, the control message
+will not be propagated to downstream sites.
+.hn 2
+sendsys
+.pg
+The
+.i sys
+file is mailed to the originator of the message.
+There are no arguments.
+This is used for making maps.
+Since your
+.i sys
+file is public information,
+you should not remove or change this control message.
+.hn 2
+senduuname
+.pg
+The
+.i uuname
+program is run and the output is mailed to the originator of the message.
+There are no arguments.
+This is used for making UUCP maps.
+If you do not run UUCP or have sites in your
+.i L.sys
+which are a secret,
+you may wish to edit this.
+Note that only the output of
+.i uuname
+is mailed,
+not the contents of
+.i L.sys
+(which news does not have access to anyway).
+If you do make a change,
+you should arrange that some mail still is sent out
+to the originator of the message, so he will know your site received it.
+See the code in routine \*(lqc_senduuname\*(rq in
+.i control.c .
+.hn 2
+version
+.pg
+The local version name/number of the netnews software
+is mailed back to the author of the control message.
+.hn 2
+checkgroups
+.pg
+This control message is an attempt at semi-automatic maintenance
+of the list of active news groups.
+This control messages takes the body of the article and pipes it into
+.bi LIB \f2/checkgroups\fP.
+As mentioned previously,
+.bi LIB \f2/checkgroups\fP
+will update the newsgroups file,
+add any missing newsgroups, and mail a message to
+.b NOTIFY
+about any old newsgroups that should be removed.
+It is expected that the person who maintains the list of active newsgroups
+will broadcast this control message on a regular basis.
+.hn 2
+Other Messages
+.pg
+Any unrecognized message will cause an error message to be mailed
+to the local site administrator.
+Additional messages may be defined as time goes on,
+such as messages to automatically update directories or maps.
+You should be willing to go into the code
+.i control.c ) (
+and add messages as they become standardized.
+.hn
+Maintenance
+.pg
+There are some things you should do periodically
+to keep your news system running smoothly.
+We hope to eventually automate all or most of this,
+but right now some of it must be done by hand.
+.pg
+The
+.i history
+and
+.i log
+files in your
+.b LIB
+directory will grow.
+You should make sure that they are cleaned up periodically.
+The
+.bi LIB \f2/expire\fP
+program will remove lines from history corresponding to deleted articles,
+but it is a good idea to check the file every few months
+to make sure it is not going wild.
+Be sure not to completely lose your history file when you clean it up,
+in case another neighbor tries to send you an article you recently got.
+(If you only get news from one site it is safe to clean it out completely.)
+.pg
+The log file is not automatically cleaned out by any netnews software,
+and will grow quickly.
+The
+.i misc/trimlib
+script can be installed in
+.bi LIB \f2/trimlib\fP,
+and invoked weekly by
+.i cron .
+.pg
+You should also clean out old newsgroups that are no longer active.
+To remove a newsgroup
+.ng net.foo ,
+you should run the shell script
+.i rmgroup
+with
+.b net.foo
+as the argument.
+That is,
+.sd c
+/usr/lib/news/rmgroup net.foo
+.ed
+.pg
+Note that clearing up UUCP constipation is another thing you'll have to do
+if you have flaky hardware or phone lines.
+If you have more than one connection,
+chances are that UUCP will get clogged up when one of your neighbors goes down
+for more than a few hours.
+Various spooling schemes are being worked on
+to help make the news/uucp system more robust,
+but one thing you can and should do,
+if you find your
+.i /usr/spool/uucp
+directory getting too big,
+is to install a subdirectory fix to UUCP.
+A quick and dirty version of this is available from Duke,
+which traps the file-oriented system calls
+at the assembly language level and maps,
+for example,
+D.fooA1234 into D.foo/D.fooA1234.
+Since the C. and
+.i local "" D.
+directories still get big,
+in practice this can still create some big directories,
+but the directories tend to be a factor of 5 smaller,
+resulting in a factor of 25 improvement to speed
+(since a directory traversal for all files is quadratic on
+.ux ).
+Right now,
+UUCP is the weak link in netnews distribution,
+and you should certainly keep an eye on it.
+.hn
+Creating New Newsgroups
+.pg
+As system news administrator,
+you are able to create newsgroups.
+To create a newsgroup,
+first make sure this is the right thing to do.
+Normally a suggestion is first posted to
+.ng net.news.group\f1,\fPnet.relatedgroup
+for a net newsgroup
+.b net.relatedgroup (
+should be the group which you are proposing to sub-divide.
+For instance,
+to propose creating
+.ng net.tv.soaps ,
+post the original article to
+.ng net.tv\f1,\fPnet.news.group ).
+Followups are made to
+.ng net.news.group
+.i only .
+(You can force this by putting the line:
+.sd c
+Followup-To: net.news.group
+.ed
+in the headers of your original posting).
+If it is established that there is general interest in such a group,
+and a name is agreed on,
+then someone creates it by typing the command
+.sd c
+inews \-C \fInewsgroup\fP
+.ed
+This will create the active entry locally. The directory will be
+created automatically when the first article for that newsgroup is
+received.
+It will also prompt you for a paragraph describing the group and start up an
+.i inews
+to post a newgroup control message announcing the group.
+This control message will be sent out on
+.ng net.msg.ctl
+and other sites may have configured their systems to do something
+with these messages.
+A human readable announcement is not made \-
+you can post this to
+.ng net.news.group
+if necessary.
+.pg
+You must be the super user to use the
+.op \-C
+option to
+.i inews .
+(That is,
+your uid must match
+.b ROOTID .
+It is recommended that you change
+.b ROOTID
+to your own uid so you don't have to
+.i su
+to create newsgroups.)
+.hn
+Conversion from A to B
+.pg
+If you are currently running version A on your system,
+note that B is incompatible with A.
+The files are stored in a different format
+(headers have mail like field names now).
+The directory organization is different
+(each newsgroup has a subdirectory of its own,
+and the file names are numbers rather than
+.i site\f1.\fPid
+pairs).
+There are no
+.i bitmap ,
+.i uindex ,
+or
+.i nindex
+files to be trashed
+(which articles have been read is stored in each users
+.i .newsrc
+file).
+The user interface is slightly different
+.i netnews (1) (news/
+is now called
+.i readnews ,
+news is posted using
+.i inews ,
+subscription is done by editing
+.i .newsrc ,
+the sense of the
+.op \-c
+option is reversed,
+news is presented in newsgroup order,
+the
+.op \-a
+and
+.op \-t
+options now probably need
+.op \-x
+as well,
+and there are many minor changes).
+.pg
+We decided not to provide a program to convert from version A to version B.
+Rather,
+the following strategy was adopted for conversion:
+.lp (1)
+Install the new news in a different spool directory from the old one.
+For example,
+you can use
+.i /usr/spool/newnews .
+You can change to the standard name later if you want.
+Get it to work for local messages.
+.lp (2)
+Post an article to newsgroup
+.b general
+with the old news announcing the change.
+Make available documentation such as the accompanying paper
+.i "How to Read the Network News"
+to the users.
+This article will be the last one in the old news.
+.lp (3)
+.i Chmod
+the old news directory to 555 to prevent any more news from being posted.
+(Actually,
+this will prevent the bitfile from being updated,
+so it may not be a good idea.)
+.lp (4)
+Replace the old
+.i rnews
+program with the new
+.i rnews
+program.
+.lp (5)
+Test it by having your neighbor send you a message.
+.lp (6)
+Wait a reasonable period for everyone to have read the final article
+with the old news.
+Perhaps a few weeks is right.
+.lp (7)
+Uninstall the old news.
+.pg
+Users will have to invoke
+.i readnews
+instead of
+.i netnews
+to read news.
+Depending on your old method of posting,
+this could be changed too.
+(If you were using mail,
+it does not need to be changed.)
+They will also have to fix their subscriptions.
+In general,
+they can type
+.sd c
+netnews \-s
+.ed
+to see what they subscribe to on the old system,
+and then create a file in their home directory called
+.i .newsrc
+containing
+.sd c
+options \-n \f2their subscription\fP
+.ed
+The format of the subscription pattern matching is the same as in A
+except that
+.ng ALL
+is replaced by
+.ng all
+(change to lower case).
+Something along the lines of this could be used to automate this:
+.sd c
+(echo \-n "options \-s" ; netnews \-s | sed s/ALL/all/) > .newsrc
+.ed
+.hn
+Conversion from 2.9 to 2.10
+.pg
+Conversion from 2.9 to 2.10 is not nearly as involved as an A to B conversion.
+The user interface does not change much,
+and the user
+.i .newsrc
+files are not affected.
+However,
+it is recommended that you do the conversion during a time
+when no news is received,
+so that incoming news will not get lost.
+One way to ensure this is to make
+.i /usr/bin/rnews
+be a shell script which saves the article in
+.bi $$ "" /usr/spool/innews/
+.bi $$ "" (
+is the process id of the particular shell and will be unique for each article).
+.pg
+The first step to conversion is to customize the sources.
+In the past,
+you had to take a fresh distribution and edit the
+.i defs.h
+file and
+.i Makefile
+to suit local preferences.
+If you had many local changes,
+or didn't record the local changes,
+upgrading could be annoying.
+2.10 provides a mechanism to automate these changes.
+Create a shell script in the src directory called
+.i localize.sh .
+(You can use
+.i localize.sample
+as a template.)
+This shell script should copy
+.i defs.dist
+to
+.i defs.h ,
+and copy either
+.i Makefile.v7
+or
+.i Makefile.usg
+to
+.i Makefile .
+It should
+.i chmod
+any files that need to be changed
+(often
+.i Makefile
+and
+.i defs.h )
+to a writable mode.
+Then it should invoke
+.i ed (1)
+on the files,
+making any necessary local changes.
+.pg
+The next step is to compile the software,
+with
+.i make (1).
+It may be necessary to update the
+.i localize.sh
+file until you are satisfied with the compilation.
+Note that after any change to the
+.i Makefile
+in
+.i localize.sh ,
+you should run
+.i localize.sh
+by hand.
+Otherwise,
+although make will run it for you,
+it will then continue to do the make with the old
+.i Makefile .
+.pg
+When the software is compiled,
+you should run the
+.i cvt.active.sh
+shell script,
+with the
+.i lib
+and
+.i spool
+directories as parameters.
+This will create a new active file in
+.bi LIB \f2/active\fP.
+Then run
+.i cvt.links.sh
+with the
+.i lib
+and
+.i spool
+directories as parameters.
+Then run
+.i cvt.names.sh
+with the
+.i lib
+and
+.i spool
+directories as parameters.
+Old news will be linked into the new hierarchy
+while leaving links in the old hierarchy.
+If you were using the default library and spool directories,
+you would do the following:
+.sd
+sh cvt.active.sh /usr/lib/news /usr/spool/news
+sh cvt.links.sh /usr/lib/news /usr/spool/news
+sh cvt.names.sh /usr/lib/news /usr/spool/news
+.ed
+.pg
+The next step is to back up the old binaries:
+.sd
+mv /usr/bin/rnews /usr/bin/ornews
+\&...
+.ed
+and to install 2.10 with
+.sd c
+make install
+.ed
+Once it is installed,
+any incoming news will be placed into the new hierarchy but not the old one.
+The critical time window is between running the three shell files and
+installing the new software \-
+any incoming news between these two points will appear
+in only the old hierarchy and be lost to the new software.
+If any significant time elapses here,
+you should divert
+.i rnews
+into a separate spool directory as described above.
+.pg
+It is crucial that you run
+.i expire
+before any new news arrives.
+.i Expire
+will update several key files automatically.
+.pg
+Finally,
+test things by posting articles to
+.bi neighbor "" \f3to.\fP
+newsgroups and watching some incoming news,
+and announce the change to your users.
+.pg
+When you are satisfied that the conversion was successful,
+run the shell file
+.i cvt.clean.sh
+which will remove the old 2.9 news hierarchy.
+.bp
+.hu
+Appendix A: Setting up a Compressed, Batched Newsfeed
+.pg
+First,
+.b BATCH 
+must have been
+.i #define 'd
+when you built the news system.
+To check,
+look in the file
+.i defs.h
+in the news source directory.
+.b BATCH 
+should be defined as a program name (by default,
+.i unbatch ).
+If it's undefined or commented out,
+define it,
+re-make the news system,
+and install the new software.
+.pg
+You'll also need a working
+.i compress
+program.
+Use the one shipped with this news distribution,
+which is based on version 4.0.
+Your news neighbors should be running a compatible version of compress.
+Versions 3.0 and 4.0 are compatible with each other,
+but both are incompatible with versions 2.0 and before.
+.pg
+Update your
+.i sys
+file.
+First,
+add the
+.b F
+flag to the other news system's line.
+For instance,
+if your compressed-and-batched news feed is named
+.cn frobozz ,
+and its
+.i sys
+file entry looks like:
+.si
+frobozz:net,mod,na,usa,ca,to.frobozz::
+.ei
+then add the
+.b F
+flag as the third (colon-separated) field:
+.si
+frobozz:net,mod,na,usa,ca,to.frobozz:F:
+.ei
+Now the pathnames of articles to be sent will be stashed in a file.
+This file is named in the fourth field of the
+.i sys
+entry;
+add it now.
+Use an entry of the form
+.bi BATCHDIR \f2/system\fP,
+where
+.bi BATCHDIR
+is usually
+.i /usr/spool/batch
+(the actual value is defined in the news
+.i Makefile ),
+and
+.i system
+is the name of the remote system,
+in this example
+.cn frobozz .
+A name of that form is necessary:
+the
+.i sendbatch
+script,
+which sends the batched news,
+looks for a file name of this form
+to decide if there's news for the remote system.
+.pg
+Your completed
+.i sys
+file line should look something like:
+.si
+.sd
+frobozz:net,mod,na,usa,ca,to.frobozz:F:/usr/spool/batch/frobozz
+.ed
+.ei
+.pg
+In
+.i /usr/lib/crontab ,
+find or create at least two news lines:
+one that runs nightly,
+and one that runs every hour or so.
+The nightly-run script should run
+.i expire ,
+trim log files,
+and perhaps compile weekly statistics
+that you post to a local-area newsgroup one day a week.
+The hourly-run script should complete the transmitting task
+with a line like:
+.sd c
+sendbatch -c frobozz
+.ed
+Make sure the script knows how to get to the directory in which
+.i sendbatch
+lives.
+You can either mention the directory in the script's
+.b PATH -setting
+line,
+or replace
+.i sendbatch
+with its full pathname.
+.i Sendbatch
+reads the files mentioned in
+.i /usr/spool/batch/frobozz ,
+batches them,
+optionally compresses them,
+sends them to the remote system,
+and arranges for remote processing.
+.pg
+This remote processing is directed by another file in
+.b BATCHDIR .
+Make a file with a name of the form
+.bi BATCHDIR \f2/system\fP.cmd
+(for this example,
+.i /usr/spool/batch/frobozz.cmd ).
+Put a line in it specifying the command that the remote system
+should execute to unpack the news batches that your system will send.
+An example
+.i frobozz.cmd
+would be:
+.sd c
+uux - -r -z -n -gd frobozz!rnews
+.ed
+.pg
+Now your system will transmit compressed batches.
+The receiving side of the business is handled largely by a program called
+.i rnews ,
+which will call other programs in
+.b LIBDIR
+to do additional processing on the incoming batches.
+.pg
+Make sure there is an executable file called
+.i rnews
+in the
+.b BINDIR
+directory
+(check the
+.i Makefile
+for its actual location).
+It must be reachable by UUCP
+or by whatever transport you'll use to transfer the netnews.
+If you defined
+.b BINDIR
+as
+.i /usr/bin ,
+you should have no problems because
+.i uuxqt
+can already get there.
+If you defined it as a different directory,
+you may have to teach
+.i uuxqt
+to look in that directory;
+accomplishing this varies from system to system.
+On 4.2BSD, add the directory to the
+.b PATH=
+line of your UUCP
+.i L.cmds
+file.
+On System V,
+on the
+.i rnews
+line of your
+.i L.cmds
+file,
+add a comma followed by
+the remote system's name on that line.
+If yours is in
+.i /usr/bin/news/rnews ,
+your
+.i L.cmds
+file will look like:
+.si
+.sd
+[For 4.2BSD]
+PATH=/bin:/usr/bin:/usr/bin/news
+rnews
+.ed
+.sd
+[For System V]
+/usr/bin/news/rnews,frobozz
+.ed
+.ei
+Other systems have a similar file in the
+.i /usr/lib/uucp
+directory by which you can specify added programs
+and paths different from the defaults.
+HP-UX,
+for example,
+has a
+.i /usr/lib/uucp/COMMANDS
+file which expands
+.i uuxqt 's
+horizons.
+In more restrictive cases,
+paths are compiled into
+.i uuxqt .
+If you can't modify any UUCP files,
+just put
+.i rnews
+in
+.i /usr/bin.
+.pg
+You must also have a
+.i cunbatch
+in
+.b LIBDIR
+(wherever your
+.i Makefile
+defines it),
+because
+.i rnews
+will eventually try to exec that copy.
+.pg
+Tell the person at the other end of your newsfeed to use
+.i "sendbatch \-c"
+to send you news.
+Once that's in place,
+watch your UUCP
+.i LOGFILE
+and your news
+.i log
+and
+.i errlog
+files to ensure that news is being correctly received and unpacked
+on your system.
+.pg
+Older compressed batching systems will try to exec
+.i cunbatch
+instead of
+.i rnews .
+If you are still communicating with these, leave 
+.i cunbatch
+in 
+.b BINDIR
+until they have upgraded their software.
+.bp
+.hu
+Appendix B: MULTICAST
+.pg
+If this is defined (in
+.i defs.h )
+then two new flag characters
+become defined in the
+.i sys
+file.
+The first,
+and most important,
+of these is the
+.b M
+flag.
+.pg
+If the
+.b M
+flag is set on some line in the
+.i sys
+file,
+then the fourth field (transfer command) is redefined to become a
+.i multicast
+name.
+That is simply another system name,
+expected to be found in the first field of some line in the
+.i sys
+file (textually following the line containing the
+.b M
+flag).
+.pg
+When a news item is being retransmitted,
+if it should (according to the subscription list) be sent to a system
+that has the
+.b M
+flag set,
+then instead of a command being run immediately to transmit the news,
+the news system remembers the system name,
+along with the multicast name (fourth field).
+.pg
+Eventually the multicast system name is found in first field of a sys file line.
+If its subscription list allows transmission of this news item,
+then its command will be executed.
+This command may have up to two \*(lq%s\*(rq substitutions in it.
+The second of those is replaced by the name of a file
+containing the news item (used with the
+.b U
+flag).
+The first is subjected to rather special treatment.
+The whole \*(lqword\*(rq (delimited by white space)
+containing that \*(lq%s\*(rq is duplicated as many times
+as there were systems with the
+.b M
+flag set that referenced this multicast name
+(which might be 0 times,
+causing that \*(lqword\*(rq to be omitted).
+In each of these duplicates,
+the \*(lq%s\*(rq is replaced by the name of a system.
+Note the multicast system name itself is not included in this process.
+Then the command is executed as usual.
+.pg
+The second flag available if the news system is built with
+.b MULTICAST
+defined is
+.b O .
+If this flag is set,
+then the sys file line will be ignored unless the system name is
+a multicast name from some earlier line with the
+.b M
+flag,
+and the news item is to be sent to that (earlier) system.
+This allows the subscription list for the multicast system name
+(which is likely to be a fake system name,
+invented just for this purpose)
+to be given a very wide subscription list
+(like
+.ng all )
+without any unusual effects.
+.pg
+Here is an example.
+Assume that you wish to forward
+.ng net.unix
+to four people by mail.
+You could do this as ...
+.si
+.sd
+fred:net.unix::mail fred
+harry:net.unix::mail harry
+jane:net.unix::mail jane
+tony:net.unix::mail tony
+.ed
+.ei
+however this causes the mail program to be started 4 times,
+once for each recipient.
+On some systems starting the mail program is a very expensive operation.
+If
+.b MULTICAST 
+is defined,
+an alternative method is
+.si
+.sd
+fred:net.unix:M:tony
+harry:net.unix:M:tony
+jane:net.unix:M:tony
+tony:net.unix::mail tony %s
+.ed
+.ei
+This would cause just one command to be run:
+\*(lqmail tony fred harry jane\*(rq.
+Note that \*(lqtony\*(rq must still be explicitly included in the argument
+list to the mail command;
+the \*(lq%s\*(rq does not expand to include
+the multicast \*(lqsystem name\*(rq itself.
+.pg
+A more useful way of doing this,
+which does not assume that all the mail readers
+will want to read the same newsgroups is as follows.
+.si
+.sd
+fred:net.unix:M:Mail
+harry:net.physics,net.astro:M:Mail
+jane:net.unix-wizards,net.women:M:Mail
+tony:net.unix,net.unix-wizards,net.jokes:M:Mail
+Mail:all:O:mail %s
+.ed
+.ei
+.pg
+Now,
+if a news item in group
+.ng net.unix
+was received,
+the command
+.sd c
+mail fred tony
+.ed
+would be executed.
+If the news were in both
+.ng net.unix
+and
+.ng net.unix-wizards
+then the command would be
+.sd c
+mail fred jane tony
+.ed
+.pg
+If a newsitem in
+.ng net.med
+(which no-one gets by mail) arrives,
+then the \*(lqMail\*(rq line will be ignored,
+because of the
+.b O
+flag.
+\*(lqMail\*(rq is a fake system invented just so its \*(lqtransfer command\*(rq
+can be used to send news to the other recipients.
+.pg
+The same kind of technique can be used for normal transfer
+of news to other systems if your transport network supports
+a facility to send to many other systems in one command.
+(That is,
+if it has a multicast facility.)
+SunIII (the network used in Australia) has this ability,
+so a typical Australian
+.i sys
+file looks like
+.sd
+emuvax:aus,net,mod,fa:M:FakeName
+kremlin:aus,net,mod:M:FakeName
+kanga:aus,net,!net.all,net.unix:M:FakeName
+FakeName:all:OUS:/bin/sendfile -NRSareporter -d%s -x%s
+.ed
+.pg
+A news item in
+.ng aus.general
+causes the following command
+.sd c
+/bin/sendfile -NRSareporter -demuvax -dkremlin -dkanga -x/usr/spool/...
+.ed
+to be executed.
+Just one command is run to send the news to three remote systems.
+.pg
+If a multicast system has the
+.b F
+flag set,
+then the name of a file containing the news is appended to the file
+whose name is in the fourth field,
+as usual.
+But on the same line,
+separated by spaces,
+will be appended the names of all the systems
+that referenced this multicast system.
+.pg
+For example,
+if the Australian site wanted to batch news,
+instead of sending it directly,
+it would simply change the last line of its
+.i sys
+file to
+.sd c
+FakeName:all:F:/usr/spool/batched/allsites
+.ed
+.pg
+Then a news item in
+.ng net.jobs
+would cause the following line to be appended to
+.i /usr/spool/batched/allsites
+.sd c
+/usr/spool/news/net/jobs/5542 emuvax kremlin
+.ed
+.pg
+This can then be processed later, in something like the normal manner.
+(Unfortunately no commands to do this processing are yet available).
+.pg
+Caution: when
+.b MULTICAST
+is defined,
+the first \*(lq%s\*(rq in all transfer commands is used for multicast,
+regardless of whether or not the system name is ever used as the last field
+of some line with the
+.b M
+flag set.
+To use the
+.b U
+flag in such a case,
+a dummy \*(lq%s\*(rq should be used,
+it will simply be omitted from the command that is executed.
+.pg
+As an example,
+if a
+.i sys
+file line were
+.sd c
+foovax:net,na,usa:U:uux - foovax!foonews <%s
+.ed
+without
+.b MULTICAST ,
+it would need to be changed to
+.sd c
+foovax:net,na,usa:U:uux - foovax!foonews %s <%s
+.ed
+if
+.b MULTICAST
+were defined.
+.pg
+Additional caution:
+The numbers of system names that may be used
+in this way are quite severly restricted.
+Typically there may only be about 10 multicast system names,
+and each of those is restricted to sending to no more than about 20 systems.
+These limits are dynamic
+(that is,
+the numbers counted are the number of multicast systems
+receiving any single news item,
+and the number of systems that each of those
+will actually cause this particular news item to be sent to).
+These limits should easily suffice for real news sending to remote systems;
+however they are not likely to suffice if you want to mail news to everyone
+on your host.
diff --git a/usr/contrib/news/doc/manner.mn b/usr/contrib/news/doc/manner.mn
new file mode 100644 (file)
index 0000000..4cfd64c
--- /dev/null
@@ -0,0 +1,1340 @@
+.ds .f manner.mn
+.ds h0 "How to Use USENET Effectively
+.ds h1
+.ds h2 %
+.ds f0 "\*(vr
+.ds f1
+.ds f2 "February 24, 1986
+.mt
+How to Use USENET Effectively
+.au
+Matt Bishop
+.ai
+Research Institute for Advanced Computer Science
+Mail Stop 230-5
+NASA Ames Research Center
+Moffett Field, CA  94035
+.bt
+.hn
+Introduction
+.pg
+USENET is a worldwide bulletin board system
+in which thousands of computers pass articles back and forth.
+Of necessity,
+customs have sprung up enabling very diverse people and groups
+to communicate peaceably and effectively using USENET.
+These customs are for the most part written,
+but are scattered over several documents
+that can be difficult to find;
+in any case,
+even if a new user can find all the documents,
+he most likely will have neither the time nor the inclination
+to read them all.
+This document is intended to collect all these conventions into one place,
+thereby making it easy for new users
+to learn about the world of USENET.
+(Old-timers,
+too,
+will benefit from reading this.)
+.pg
+You should read this document and understand it thoroughly
+before you even think about posting anything.
+If you have questions,
+please ask your USENET administrator (who
+can usually be reached by sending mail to
+.i usenet )
+or a more knowledgeable USENET user.
+Believe me,
+you will save yourself a lot of grief.
+.pg
+The mechanics of posting an article to USENET are explained in
+Mark Horton's excellent paper
+.i "How to Read the Network News" ;
+if you have not read that yet,
+stop here and do so.
+A lot of what follows depends on your knowing (at least vaguely)
+the mechanics of posting news.
+.pg
+Before we discuss these customs,
+we ought to look at the history of USENET,
+what it is today,
+and why we need these conventions.
+.hn
+All About USENET
+.pg
+USENET began on a set of computers in North Carolina's Research Triangle.
+The programs involved
+(known as \*(lqnetnews\*(rq then,
+and \*(lqA news\*(rq now)
+exchanged messages;
+it was a small, multi-computer bulletin board system.
+As time passed,
+administrators of other systems began to connect their computers
+to this bulletin board system.
+The network grew.
+Then,
+at Berkeley, the news programs were rewritten
+(this version became known as \*(lqB news\*(rq)
+and the format changed to conform to ARPA standards
+(again,
+this became the \*(lqB protocol for news\*(rq.\*(dg)
+.fn
+.lp \*(dg \w'\*(dg\ 'u
+See
+.i
+Standard for Interchange of USENET Messages
+.r
+for a description of the two formats.
+.ef
+This version of news was very widely distributed,
+and at this point USENET began to take on its current shape.
+.pg
+USENET is a
+.i logical
+network
+(as opposed to a
+.i physical
+network.)
+It is also a very amorphous network,
+in that there is no central administration or controlling site.
+There is not even an official list of members,
+although there is a very complete unofficial one.
+A site gets access to USENET by finding some other site already on USENET
+that it can connect to and exchange news articles.
+So long as this second site (called a
+.i neighbor
+of the first site)
+remains willing and able to pass articles to and from the first site,
+the first site is on USENET.
+A site leaves the USENET only when no one is willing or able
+to pass articles to,
+or accept articles from,
+it.
+.pg
+As a result,
+USENET has no equivalent of a \*(lqsysop\*(rq
+or central authority controlling the bulletin board.
+What little control is exercised is wielded by the person at each site
+who is responsible for maintaining the USENET connecions
+(this person is called the \*(lqUSENET administrator.\*(rq)
+Because most USENET administrators are (relatively) new to USENET,
+and because administering USENET locally involves a great deal of work,
+most USENET administrators tend to follow the lead of other,
+more experienced,
+administrators
+(often known somewhat irreverently as \*(lqnet gurus.\*(rq)
+This is not an abdication of responsibility,
+but a means of keeping the amount of work little enough
+so it can be done without interfering with the local USENET administrator's job.
+An example of this is the list of currently active newsgroups
+circulated every month or so.
+It is not \*(lqofficial\*(rq \-
+no one has that authority \-
+but as the maintainer is doing the work that every other USENET administrator
+would have to do otherwise,
+it is accepted as a valid list.
+If the maintainer changes the list in a way
+another USENET administrator finds unacceptable,
+that administrator can simply ignore the list.
+(Incidentally, the \*(lqnet gurus\*(rq became known as such
+because of the work they have contributed to USENET.
+Their experience is a valuable resource for each USENET administrator.)
+.pg
+Because the USENET has grown so wildly,
+a number of problems have appeared.
+One of these problems is technical,
+and a number of the conventions this document describes
+spring from attempts to keep this problem under control.
+.pg
+The technical problem arises due to the transport mechanism used by most USENET sites.
+Most computers on USENET do not have access to large-area networks like
+ARPANET.
+As a result the only viable transport mechanism these sites can use
+is a set of programs collectively known as UUCP
+and which communicate over dialup telephone lines.
+Initially,
+news programs generated one UUCP command per article.
+With the explosion of the USENET,
+the number of articles simply swamped many sites;
+phone lines would be tied up all day transmitting news,
+and many articles would be processed at the same time,
+slowing down the computers noticeably.
+.pg
+The solution was to batch messages.
+This way,
+many articles are sent via UUCP with one command,
+and the command on the receiving machine would split the file
+into separate articles,
+which could then be processed individually.
+While this increased the size of the files being sent,
+it cut down on the number of UUCP commands sent,
+and since sending a command involves quite a bit of overhead,
+this decreased the duration of phone calls,
+and to a lesser degree the load on the computer.
+At some sites,
+such as Purdue,
+this was not quite enough,
+so a simple spooler was implemented to process the individual articles
+one at a time.
+This reduced the system load to a very acceptable amount.
+.pg
+However,
+the problem has not gone away by any means.
+In one sense it has become worse;
+as more articles are posted to the network,
+phone costs and system loads averages increase,
+and system administrators require USENET administrators to cut back
+or eliminate newsgroups and
+to transmit news only at night
+(which means long propagation delays).
+In short,
+everyone who has anything to do with administering any USENET site
+is very concerned about the future of USENET,
+both in general
+and at his own site.
+.pg
+Many of the rules you will read address this concern.
+The fear that USENET may collapse is not a bogeyman,
+but very real.
+We hope it will not collapse,
+and the rules below outline some ways to prevent problems
+and increase the likelihood
+that enough sites will remain on USENET to keep it alive.
+There is no central authority that can force you to follow them,
+but by doing so you will help keep USENET a valuable resource
+to the computer community.
+.hn
+Deciding to Post
+.pg
+Before you decide to post an article,
+you should consider a few things.
+.hn 2
+Do not repeat postings
+.pg
+This applies even if you did not post the information the first time around.
+If you know the answer to a question someone asked,
+first read the followups, and if you have something more to contribute,
+mail it to the questioner;
+if you think it should be seen by others,
+ask the questioner to summarize the answers he receives in a subsequent article.
+One of the biggest problems on USENET is that
+many copies of the same answer to a simple question are posted.
+.pg
+If you want to repost something because you believe
+it did not get to other USENET sites due to transmission problems
+(this happens sometimes,
+but a lot less often than commonly believed),
+do some checking before you repost.
+If you have a friend at another USENET site,
+call him and ask if the article made it to his site.
+Ask your USENET administrator if he knows of any problems in the USENET;
+there are special newsgroups to which USENET administrators subscribe
+in which problems are reported,
+or he can contact his counterparts at other sites for information.
+Finally,
+if you decide you must repost it,
+indicate in the article subject that it is a reposting,
+and say why you are reposting it
+(if you don't,
+you'll undoubtedly get some very nasty mail.)
+.pg
+Reposting announcements of products or services is flatly forbidden.
+Doing so may convince other sites to turn off your USENET access.
+.pg
+When school starts,
+hoards of new users descend upon the USENET
+asking questions.
+Many of these questions have been asked,
+and answered,
+literally thousands of times since USENET began.
+The most common of these questions,
+and their answers,
+have been collected in the hope that
+the new users will read them and not re-post the same questions.
+So,
+if you want to ask a question,
+check Appendix I
+.b "Answers to Frequently Asked Questions" ) (
+to be sure it isn't one that has been asked and answered
+literally hundreds of times before you started reading the USENET.
+.hn 2
+Do not post anything when upset, angry, or intoxicated
+.pg
+Posting an article is a lot like driving a car \-
+you have to be in control of yourself.
+Postings which begin \*(lqJane,
+you ignorant slut, ...\*(rq
+are very definitely considered in poor taste\*(dg.
+.fn
+\*(dg Unless you are critiquing
+.i "Saturday Night Live" .
+.ef
+Unfortunately,
+they are also far too common.
+.pg
+The psychology of this is interesting.
+One popular belief is that since we interact with USENET via computers,
+we all often forget that a computer did not do the posting;
+a human did.
+A contributing factor is that you don't have to look the target of abuse
+in the eye when you post an abusive message;
+eye-to-eye contact has an amazing effect on inhibiting obnoxious behavior.
+As a result,
+discussions on the USENET often degenerate into a catfight
+far more readily than would a face-to-face discussion.
+.pg
+Before you post an article,
+think a minute;
+decide whether or not you are upset,
+angry,
+or high.
+If you are,
+wait until you calm down (or come down) before deciding to post something.
+Then think about whether or not you really want to post it.
+You will be amazed what waiting a day or even a few hours can do
+for your perspective.
+.pg
+Bear in mind that
+shouting hasn't convinced anyone of anything
+since the days of Charlemagne,
+and being abusive makes people hold even more tenaciously
+to their ideas or opinions.
+Gentleness,
+courtesy,
+and eloquence are far more persuasive;
+not only do they indicate you have enough confidence in your words
+to allow them to speak for you,
+but also they indicate a respect for your audience.
+This in turn makes it easier for your audience to like or respect you \-
+and people tend to be far more interested in,
+and receptive to,
+arguments advanced by those they like or respect
+than by writers who are abusive.
+Finally,
+remember that some discussions or situations simply cannot be resolved.
+Because people are different,
+agreed-upon facts often lead to wildly different feelings and conclusions.
+These differences are what makes life so wonderful;
+were we all alike,
+the world would be a very boring place.
+So,
+don't get frantic;
+relax and enjoy the discussion.
+Who knows,
+you might even learn something!
+.hn 2
+Be sure your posting is appropriate to USENET
+.pg
+Some things are inappropriate to post to USENET.
+Discussing whether or not some other discussion is appropriate,
+or if it is in the right newsgroup,
+is an example.
+Invariably,
+the \*(lqmeta-discussion\*(rq generates so many articles
+that the discussion is simply overwhelmed and vanishes;
+but the meta-discussion lingers on for several weeks,
+driving most of the readers of that newsgroup
+out of their collective minds.
+Help preserve the sanity of your fellow USENET readers
+by mailing such comments to the people involved,
+rather than posting them.
+.pg
+Another example of inappropriate postings is the infamous
+\*(lqspelling flame.\*(rq
+Every few months someone takes another poster to task
+for poor spelling or grammar.
+Soon,
+everyone jumps on the bandwagon,
+tearing apart one another's postings for such errors.
+To put it mildly,
+this angers almost everyone involved
+for no real reason.
+Please remember that we all make mistakes,
+and there are a lot of people for whom English is a second language.
+So,
+try to keep your spelling and grammar comments to yourself \-
+but if you find you simply cannot,
+mail them to the poster rather than posting them.
+.pg
+Far more insidious are requests similar to
+\*(lqHow can I splice into the local cable TV transmission line?\*(rq
+Posting to USENET is akin to publishing,
+so don't ask for or post instructions on how to do something illegal.
+And please don't quote the First Amendment,
+or the laws allowing freedom of speech in your country;
+while the posting programs will not stop you,
+the aftermath could be very unpleasant \-
+lawsuits and court trials usually are,
+and the USENET would certainly collapse as sites dropped from it
+to protect themselves from legal liability.
+You wouldn't want that on your conscience,
+would you?
+Of course not.
+.pg
+Related to this is the next rule.
+.hn 2
+Do not post other people's work without permission
+.pg
+Posting something to USENET puts it in the public domain
+for all practical purposes.
+So,
+be careful about posting things like
+.ux -related
+material (specifically source code) or company documents;
+consider licensing and nondisclosure agreements first. Some people regard
+the posting of  \*(lqdiffs\*(rq based on licensed code to be a suitable
+compromise, as they are only useful to those who have the base code already.
+.pg
+Copyrighted works are a separate problem.
+Both United States and international law provide protection
+for copyrighted works;
+other than short extracts for purposes of criticism,
+you cannot copy a copyrighted work in whole or in part
+without permission of the copyright holder
+(who may,
+or may not,
+be the author.)
+Without this protection,
+artists could not make any money and hence would have limited incentive
+to make the fruits of their art available at all.
+Posting a copyrighted work without permission is theft,
+even though the property stolen is not tangible in most cases.
+Hence,
+posting movie and book reviews,
+song lyrics,
+or anything else which is copyrighted
+without the permission of the copyright holder,
+could cause you personally,
+your company,
+or the USENET itself
+to be held liable for damages.
+Please be very careful that you obey the law
+when posting such material!
+.hn 2
+Don't forget that opinions are those of the poster and not his employer.
+.pg
+Every so often,
+someone will post a particularly disgusting article,
+and a number of responses will ask
+if all employees of the original poster's company
+share his (revolting) opinion,
+or suggest that action be taken against that company.
+Please remember that all opinions or statements in articles
+are to be attributed to the poster
+.i only ,
+and in particular, do not necessarily represent the opinions
+of the poster's employer,
+the owner of the computer on which the article originated,
+or anyone involved with any aspect of USENET \-
+and consequently the responsibility for any USENET message
+rests with the poster and with no one else.
+The appropriate response is not to attack the company
+or its other employees;
+let the poster know what you think of his posting via mail.
+If the postings continue,
+take advantage of the news software's presenting you
+with the author's name and the subject line
+and then asking if you want to see the article;
+start looking for the poster's name or the offensive subject
+in the articles presented to you
+and skip them. If you really get offended, you can unsubscribe from a newsgroup.
+.pg
+Part of the price of freedom is allowing others to make fools of themselves.
+You wouldn't like to be censored,
+so don't advocate censorship of others.
+No one is forcing you to read the postings.
+.pg
+In some countries,
+posting or receiving certain types of articles may be a criminal offense.
+As a result,
+certain newsgroups which circulate freely within the United States
+may not be circulated in other nations
+without risking civil or criminal liabilities.
+In this case,
+the appropriate action for sites in that country
+is neither to accept nor to transmit the newsgroup.
+No site is
+.i ever
+forced to accept or pass on
+.i any
+newsgroup.
+.hn 1
+Where to Post
+.pg
+The various newsgroups and distributions
+have various rules associated with their use.
+This section will describe these rules
+and offer suggestions on which newsgroups to post your message.
+.hn 2
+Keep the distribution as limited as possible
+.pg
+A basic principle of posting is to keep the distribution of your article
+as limited as possible.
+Like our modern society,
+USENET is suffering from both an information glut and information pollution.
+It is widely believed that the USENET will cease to function
+unless we are able to cut down the quantity of articles.
+One step in this direction is not to post something to places
+where it will be worthless.
+For example,
+if you live in Hackensack,
+New Jersey,
+the probability of anyone in Korea wanting to buy your
+1972 Toyota is about as close to zero as you can get.
+So confine your posting to the New Jersey area.
+.pg
+To do this,
+you can either post to a local group, 
+or post to a net-wide group and use the
+.i distribution
+feature to limit how widely your article will go.
+When you give your posting program
+(usually
+.i postnews (1))
+a distribution,
+you are (in essence) saying that
+machines which do not recognize that distribution
+should not get the article.
+(Think of it as a subgroup based on locality and you'll get the idea.)
+For example,
+if you are posting in the San Francisco Bay Area,
+and you post your article to
+.ng net.auto
+but give
+.ng ba
+as the distribution,
+the article will not be sent beyond the San Francisco Bay Area
+(to which the
+.ng ba
+distribution is local)
+even though you put it in a net-wide newsgroup.
+Had you given the distribution as
+.ng ca
+(the California distribution),
+your article would have been sent to all Californian sites on USENET.
+Had you given the distribution as
+.ng net ,
+your article would have been sent to all sites on USENET.
+.hn 2
+Do not post the same article twice to different groups
+.pg
+If you have an article that you want to post to more than one group,
+post to both at the same time.
+Newer versions of the news software will show an article only once
+regardless of how many newsgroups it appears in.
+But if you post it once to each different group,
+all versions of news software will show it once for each newsgroup.
+This angers a lot of people
+and wastes everybody's time.
+.hn 2
+Do not post to \*(lqmod.\*(rq
+or \*(lqnet.announce\*(rq newsgroups
+.pg
+You may not post directly to certain newsgroups;
+you cannot post to some at all.
+Newer versions of the news software will inform you
+when either of these restrictions apply,
+but older versions of news software will not.
+.pg
+The
+.ng mod.
+newsgroups are
+.i "bona fide"
+moderated newsgroups.
+If you want to have the appropriate moderator post something,
+mail it to him.
+(If you do not know his address,
+ask your USENET administrator.
+In some cases,
+the software will automatically mail,
+rather than post,
+your article to the moderator.)
+.pg
+The newsgroup
+.ng net.announce
+and its subgroups are moderated newsgroups
+designed for important announcements.
+It is used to post important announcements that everyone on USENET can read.
+.ng Net.general "" (
+was meant to provide such a place,
+but so many inappropriate messages have been posted there
+that a lot of people began to unsubscribe;
+hence,
+this moderated newsgroup was set up.
+Very few messages are posted to it,
+so don't be afraid to subscribe;
+you will not be overwhelmed.)
+To post to this group,
+mail your announcement to the moderator,
+and he will either post it or suggest an alternative
+(such as a more appropriate newsgroup.)
+Messages for
+.ng net.announce
+should be short,
+important enough so that everyone on USENET should see the headers,
+not cross-posted to any other newsgroup,
+and signed;
+messages which are political,
+commercial,
+or religious in nature will be rejected.
+.hn 2
+Do not post to \*(lqnet.general\*(rq
+.pg
+Of course,
+there are exceptions to this rule,
+but almost all articles posted to
+.ng net.general
+do not belong there.
+Only articles of general interest and importance to
+.i everyone
+on USENET should be posted there.
+\*(lqEveryone\*(rq includes the USENET readers in Europe,
+Asia,
+Australia,
+Canada,
+the United States,
+and possibly other places.
+.pg
+This means that announcements of services or products,
+test messages,
+seminar announcements,
+program sources and bug reports,
+requests for addresses,
+and so forth do
+.i not
+go to
+.ng net.general .
+If you wish to post a follow-up to an article you saw in
+.ng net.general ,
+put the followup posting in
+.ng net.followup .
+(Again,
+newer versions of news software will do this automatically,
+but do not rely on this feature as your software
+may be old.)
+.pg
+Similarly,
+never post to
+.ng net.general
+and another newsgroup.
+If your article belongs in any other newsgroup,
+put it there,
+and not in
+.ng net.general .
+(There is one exception to this rule \-
+articles may be cross-posted to
+.ng net.general
+and
+.ng net.announce .
+Since
+.ng net.announce
+is moderated,
+though,
+the exception does not matter to you.)
+.hn 2
+Ask someone if you can't figure out where to post your article
+.pg
+If you cannot figure out where to post something,
+look in
+.ng net.announce.newusers
+for the list of active newsgroups.
+(This is posted biweekly.
+If you can't find it,
+look at the list in
+.i "How to Read the Network News" ;
+but be aware that list is undoubtedly out of date already.)
+If your article does not seem to fit in any of the listed groups,
+post it to
+.ng net.misc
+or don't post it.
+.pg
+If you still are not sure which newsgroup to post your article to,
+ask an old-timer.
+If your site doesn't have any old-timers
+(or none of the old-timers will admit to being old-timers),
+contact any of the following people:
+.sd
+Gene Spafford (spaf@gatech.CSNET, spaf@gatech.UUCP)
+Mark Horton (mark@cbosgd.UUCP)
+Rick Adams (rick@seismo.CSS.GOV, rick@seismo.UUCP)
+Chuq Von Rospach (chuq@sun.UUCP)
+Matt Bishop (mab@riacs.ARPA, mab@riacs.UUCP)
+.ed
+We will be happy to help you.
+But,
+please,
+do not post the article to the net before you ask us!
+.hn 2
+Be sure there is a consensus before creating a new newsgroup
+.pg
+Creating a new newsgroup is,
+in general,
+a very bad idea.
+Currently,
+there are so many articles being posted that the USENET is in dange of collapse
+as site after site decides to cease to accept and retransmit certain newsgroups.
+Moreover,
+there is no established procedure for deleting a newsgroup,
+so once created,
+newsgroups tend to stay around.
+They also tend to encourage people to think up new newsgroups,
+and the cycle repeats.
+Try to avoid thinking up new newsgroups.
+.pg
+If,
+however,
+you believe a new group should be created,
+be sure you have a consensus that the group is needed
+(either a mailing list has enough traffic and readers
+to justify turning it into a newsgroup,
+or a discussion in a current newsgroup
+becomes so large for a period of time long enough
+to warrant splitting it into a newsgroup.)
+Then post an article to
+.ng net.news.group
+as well as any other groups related to your proposed new group,
+and discuss the topics you are proposing be covered in your new group,
+what it should be called,
+whether it is
+.i really
+needed,
+and so forth.
+Try to resolve all objections,
+and take into account all suggestions and comments;
+finally,
+have everyone mail you a \*(lqyes\*(rq or \*(lqno\*(rq vote
+on whether the group should be created.
+Try to get at least 40 or 50 \*(lqyes\*(rq votes before creating the group;
+if you want to be safe,
+get around 100.
+.hn 2
+Watch out for newsgroups which have special rules about posting
+.pg
+Some newsgroups have special rules.
+This section summarizes them.
+.lp net.books 20
+Do not post anything revealing a plot or a plot twist
+without putting the word
+.cf spoiler
+somewhere in the
+.hf Subject
+field.
+This will let those who do not wish to have a surprise spoiled
+skip the article.
+.lp net.followup 20
+This group is for followups to articles posted in
+.ng net.general
+or for results of surveys.
+No discussions are allowed.
+.lp net.jokes 20
+If you want to post an offensive joke
+(this includes racial,
+religious,
+sexual,
+and scatalogical humor,
+among other kinds)
+rotate it.
+(If you do not know what this means,
+look in the section
+.b "Writing Your Posting" .)
+.lp net.movies 20
+Do not post anything revealing a plot or a plot twist
+without putting the word
+.cf spoiler
+in the
+.hf Subject
+field.
+This will let those who do not wish to have a surprise spoiled
+skip the article.
+.lp net.news.group 20
+Discussions about whether or not to create new groups,
+and what to name them,
+go here.
+Please mail your votes to the proposer;
+don't post them.
+.lp net.sources 20
+Source code postings go here.
+Discussions are not allowed.
+Do not post bug fixes here.
+.lp net.sources.bugs 20
+Bug reports and bug fixes to sources posted in
+.ng net.sources
+go here.
+.lp net.test 20
+Use the smallest distribution possible.
+In the body of the message,
+say what you are testing.
+.lp net.wanted 20
+Requests for things other than source code go here.
+Please use the smallest distribution possible.
+Post offers here,
+too.
+.lp net.wanted.sources 20
+Requests for sources go here.
+.hn 1
+Writing the Article
+.pg
+Here are some suggestions to help you communicate effectively
+with others on the USENET.
+Perhaps the best advice is not to be afraid to consult a book on
+writing style;
+two of the best are
+.i "How to Write for the World of Work"
+by Cunningham and Pearsall,
+and
+.i "Elements of Style"
+by Strunk and White.
+.hn 2
+Write for your audience
+.pg
+USENET is an international network,
+and any article you post will be
+.i very
+widely read.
+Even more importantly,
+your future employers may be among the readers!
+So,
+try to make a good impression.
+.pg
+A basic principle of all writing is to write at your readers' reading level.
+It is better to go below than above.
+Aiming where \*(lqtheir heads ought to be\*(rq may be fine
+if you are a college professor (and a lot of us would dispute even that),
+but it is guaranteed to cause people to ignore your article.
+Studies have shown that the average American reads at the fifth grade level
+and the average professional reads at the twelfth grade level.
+.hn 2
+Be clear and concise
+.pg
+Remember that you are writing for a very busy audience;
+your readers will not puzzle over your article.
+So be very clear and very concise.
+Be precise as well;
+choose the least ambiguous word you can,
+taking into account the context in which you are using the word.
+Split your posting into sections and paragraphs as appropriate.
+Use a descriptive title in the
+.hf Subject
+field,
+and be sure that the title is related to the body of the article.
+If the title is not related,
+feel free to change it to a title that is.
+.hn 2
+Proofread your article
+.pg
+This is a matter of courtesy;
+since you want others to read your article,
+the least you can do is check that it says what you mean in a clear,
+concise manner.
+Check for typographical errors,
+silly grammar errors,
+and misspellings;
+if you have a spelling checking program,
+use it.
+Also be sure the article is easy to read.
+Use white space \- blanks, tabs, and newlines \-
+and both upper and lower case letters.
+Do not omit the definite and indefinite articles,
+either;
+not only do \*(lqa\*(rq,
+\*(lqan\*(rq,
+and \*(lqthe\*(rq make a posting much easier to read,
+their omission can make a posting ambiguous.
+.hn 2
+Be extra careful with announcements of products or services
+.pg
+When writing a product or service announcement,
+bear in mind that others will be paying most of the telephone bills.
+So,
+if you are announcing several things,
+combine all the announcements into one article.
+Mark the posting as a product or service announcement
+in the title in the
+.hf Subject
+field.
+Advertising hyperbole is not appropriate here;
+remember that your audience is to a large degree technically literate,
+and your product will stand or fall on its technical merits.
+Be aware that posting obnoxious or inappropriate advertisements
+is very serious and if you do it,
+you may find your neighbors yanking your USENET access.
+.hn 2
+Indicate sarcasm and humor
+.pg
+Remember that people cannot see you when they read your posting;
+hence,
+all the subtle nuances of body and facial motion are hidden.
+It can be quite difficult to tell when you are being sarcastic or humorous.
+To deal with this problem,
+the USENET readers and posters have developed a special sign.
+Mark passages you intend to be taken as humorous with the
+\*(lqsmiley face\*(rq,
+while looks like this: \*(lq:\-)\*(rq.
+(Think of a head facing you lying on its right side and look again
+if you don't understand why that symbol was chosen.)
+As for sarcasm,
+there is no universal symbol for that
+(unless the sarcasm is meant humorously,
+in which case use the smiley face again.)
+But mark your passage so everyone will realize you are being sarcastic.
+.hn 2
+Mark postings which spoil surprises
+.pg
+High on the list of obnoxious messages
+are those that spoil the plot of a book or movie
+by giving away an unexpected detail.
+If you post such an article,
+please put the word
+.cf spoiler
+in the
+.hf Subject
+field of your posting,
+so people who do not wish to have a surprise ruined can skip the article.
+.hn 2
+Rotate offensive postings
+.pg
+If you feel you must post a message that may offend people,
+you can do one of two things.
+You can post it to the newsgroup
+.ng net.flame
+or you can take steps to be sure the message will only be read
+by those who explicitly ask for it to be shown to them.
+In the latter case,
+the USENET convention is to encrypt these messages
+by shifting each letter 13 characters,
+so that
+(for example)
+\*(lqa\*(rq becomes \*(lqn\*(rq.
+(In more precise terms,
+this is a Caesar cipher of shift 13;
+on the USENET,
+it is called
+.i rot13 .)
+When you do this,
+put the word
+.cf rot13
+in the
+.hf Subject
+field.
+The news reader you are using almost certainly has a command
+to encrypt and decrypt such messages;
+if not,
+use the
+.ux
+command
+.sd c
+tr a\-zA\-Z n\-za\-mN\-ZA\-M
+.ed
+.hn 2
+The shorter your signature, the better
+.pg
+Keep signatures concise;
+2 or 3 lines are usually plenty.
+Include your name and addresses on any major networks
+(such as ARPANET,
+BITNET,
+or CSNET).
+This helps people contact you quickly and easily,
+usually more so than by following the return path of the article.
+Do not include pictures, graphics or clever quotations that make the
+signature longer; this is not the appropriate place for them,
+and many sites resent paying the phone bills for such signatures.
+.hn 1
+Conclusion and Summary
+.pg
+Here is a list of the rules given above:
+.si
+.lp \(rh \w'\(rh\ 'u
+Deciding to post
+.si
+.lp \(bu \w'\(bu\ 'u
+Do not repeat postings
+.lp \(bu \w'\(bu\ 'u
+Do not post anything when upset, angry, or intoxicated
+.lp \(bu \w'\(bu\ 'u
+Be sure your posting is appropriate to USENET
+.lp \(bu \w'\(bu\ 'u
+Do not post other people's work without permission
+.lp \(bu \w'\(bu\ 'u
+Don't forget that opinions are those of the poster and not his company
+.ei
+.lp \(rh \w'\(rh\ 'u
+Where to Post
+.si
+.lp \(bu \w'\(bu\ 'u
+Keep the distribution as limited as possible
+.lp \(bu \w'\(bu\ 'u
+Do not post the same article twice to different groups
+.lp \(bu \w'\(bu\ 'u
+Do not post to
+.ng mod. ,
+or
+.ng net.announce
+newsgroups
+.lp \(bu \w'\(bu\ 'u
+Do not post to
+.ng net.general
+.lp \(bu \w'\(bu\ 'u
+Ask someone if you can't figure out where to post your article
+.lp \(bu \w'\(bu\ 'u
+Be sure there is a consensus before creating a new newsgroup
+.lp \(bu \w'\(bu\ 'u
+Watch out for newsgroups which have special rules about posting
+.ei
+.lp \(rh \w'\(rh\ 'u
+Writing the Article
+.si
+.lp \(bu \w'\(bu\ 'u
+Write for your audience
+.lp \(bu \w'\(bu\ 'u
+Be clear and concise
+.lp \(bu \w'\(bu\ 'u
+Proofread your article
+.lp \(bu \w'\(bu\ 'u
+Be extra careful with announcements of products or services
+.lp \(bu \w'\(bu\ 'u
+Indicate sarcasm and humor
+.lp \(bu \w'\(bu\ 'u
+Mark postings which spoil surprises
+.lp \(bu \w'\(bu\ 'u
+Rotate offensive postings
+.lp \(bu \w'\(bu\ 'u
+The shorter your signature, the better
+.ei
+.ei
+.pg
+The USENET can be a great place for us all.
+Sadly,
+not enough people are following the customs that have been established
+to keep the USENET civilized.
+This document was written to educate all users of the USENET
+on their responsibilities.
+Let's clean up the USENET,
+and turn it into a friendly,
+helpful community again!
+.sp
+.bi Acknowledgements:
+The writing of this document was inspired by Chuq von Rospach's posting
+on USENET etiquette,
+and it draws on previous work by Mark Horton,
+A. Jeff Offutt,
+Gene Spafford,
+and
+Chuq von Rospach.
+.bp
+.hu 1
+Appendix I.  Answers to Frequently Asked Questions
+.pg l
+.i
+originally from Jerry Schwarz (jerry@eagle.UUCP)
+.br
+modified by Gene Spafford (spaf@gatech.UUCP)
+.br
+modified by Matt Bishop (mab@riacs.ARPA)
+.r
+.sp
+.pg
+This document discusses some items that occur repeatedly on USENET.
+They frequently are submitted by new users,
+and result in many followups,
+sometimes swamping groups for weeks.
+The purpose of this note is to head off these annoying events
+by answering some questions
+and warning about the inevitable consequence of asking others.
+If you don't like my answers,
+let me know and I may include revisions in future versions of this note.
+.nr Qs \w'\0\0.\ 'u
+.de Lp
+.lp "\\$1" \\n(Qsu
+..
+.Lp \01.
+What does
+.ux
+stand for?
+.Lp
+It is not an acronym,
+but is a pun on \*(lqMULTICS.\*(rq
+MULTICS is a large operating system that was being developed shortly before
+.ux
+was created.
+.Lp \02.
+What is the derivation of \*(lqfoo\*(rq as a filler word?
+.Lp ""
+The favorite story is that it comes from \*(lqfubar\*(rq
+which is an acronym for \*(lqfouled up beyond all recognition,\*(rq
+which is supposed to be a military term.
+(Various forms of this exist,
+\*(lqfouled\*(rq usually being replaced by a stronger word.)
+\*(lqFoo\*(rq and \*(lqBar\*(rq have the same derivation.
+.Lp \03.
+Is a machine at \*(lqfoo\*(rq on the net?
+.Lp
+These questions belong in
+.ng net.news.config
+if anywhere,
+but in fact your best bet is usually to phone somebody
+at \*(lqfoo\*(rq to find out.
+If you don't know anybody at \*(lqfoo\*(rq you can always try calling
+and asking for the \*(lqcomputer center.\*(rq
+Also,
+see the newsgroup
+.ng mod.map ,
+where maps of USENET and the UUCP network are posted regularly.
+.Lp \04.
+What does \*(lqrc\*(rq at the end of files like
+.i .newsrc
+mean?
+.Lp
+According to Dennis Ritchie,
+\*(lqThe name
+.i rc
+comes from RUNCOM, which was the rough equivalent
+on the MIT CTSS system of what
+.ux
+calls shell scripts.  Of course
+RUNCOM derives from 
+.i "run commands.\*(rq"
+.Lp \05.
+What do \*(lq- (nf)\*(rq and \*(lqOrphaned Response\*(rq in an item's title mean?
+.Lp
+It means that the item was created by \*(lqnotefiles,\*(rq
+an alternative news handling interface that many people prefer.
+If you want to find out more you can read the
+.i \*(lqNotesfile
+System Reference Manual\*(rq or contact
+.cn uiucdcs!essick .
+.Lp \06.
+What does \*(lq:\-)\*(rq mean?
+.Lp
+This is the net convention for a \*(lqsmiley face.\*(rq
+It means that something is being said in jest.
+If it doesn't look like a smiley face to you,
+flop your head over to the left and look again.
+.Lp \07.
+How do I decrypt jokes in
+.ng net.jokes ?
+.Lp
+The standard cipher used in
+.ng net.jokes
+in called \*(lqrot13.\*(rq
+Each letter is replaced by the letter 13 further along in the alphabet
+(cycling around at the end).
+Most systems have a built in command to decrypt such articles;
+.i readnews (1)
+and
+.i vnews (1)
+have the
+.qp D
+command,
+.i rn (1)
+(another popular public-domain full screen news reader) has the
+.qp X
+or
+.qc CONTROL-X
+commands,
+.i notes (1)
+has
+.qp %
+or
+.qp R .
+If your system doesn't have a program to encrypt and decrypt these,
+you can quickly create a shell script using
+.i tr (1):
+.sd c
+tr A\-Za\-z N\-ZA\-Mn\-za\-m
+.ed
+On some versions of
+.ux ,
+the
+.i tr
+command should be written as:
+.sd c
+tr \*(lq[a\-m][n\-z][A\-M][N\-Z]\*(rq \*(lq[n\-z][a\-m][N\-Z][A\-M]\*(rq
+.ed
+.Lp \08.
+.ng net.general :
+Is John Doe out there anywhere?
+.Lp
+I suspect that these items are people looking for freshman roommates
+that they haven't seen in ten years.
+If you have some idea where the person is
+you are usually better off calling the organization.
+For example,
+if you call any Bell Labs location and request John Doe's number.
+They can give it to you even if he works at a different location.
+If you must try the net,
+use newsgroup
+.ng net.net-people ,
+.i not
+.ng net.general .
+.Lp \09.
+.ng net.math :
+Proofs that 1 \(eq 0.
+.Lp
+Almost everyone has seen one or more of these in high school.
+They are almost always based on either division by 0
+or taking the square root of a negative number.
+.Lp 10.
+.ng net.games :
+Where can I get the source for
+.i empire (6)
+or
+.i rogue (6)?
+.Lp
+You can't.
+The authors of these games,
+as is their right,
+have chosen not to make the sources available.
+.Lp 11.
+.ng net.unix-wizards :
+How do I remove files with
+.sm ASCII "" non-
+characters in their names?
+.Lp
+You can try to find a pattern that uniquely identifies the file.
+This sometimes fails because a peculiarity of some shells is that
+they strip off the high-order bit of characters in command lines.
+Next,
+you can try an \*(lqrm \-i\*(rq, or \*(lqrm \-r\*(rq
+(see
+.i rm (1).)
+Finally,
+you can mess around with i-node numbers and
+.i find (1).
+.Lp 12.
+.ng net.unix-wizards :
+There is a bug in the way
+.ux
+handles protection for programs that run setuid.
+.Lp
+There are indeed problems with the treatment of protection in setuid programs.
+When this is brought up,
+suggestions for changes range from implementing a full capability list
+arrangement to new kernel calls for allowing more control over when
+the effective id is used and when the real id is used to control accesses.
+Sooner or later you can expect this to be improved.
+For now you just have to live with it.
+.Lp 13.
+.ng net.women :
+What do you think about abortion?
+.Lp
+Although abortion might appear to be an appropriate topic for
+.ng net.women ,
+more heat than light is generated when it is brought up.
+Since the newsgroup
+.ng net.abortion
+has been created,
+all abortion-related discussion should take place there.
+.Lp 14.
+.ng net.singles :
+What do \*(lqMOTOS,\*(rq
+\*(lqMOTSS,\*(rq, \*(lqMOTAS\*(rq,
+and \*(lqSO\*(rq stand for?
+.Lp
+Member of the opposite sex,
+member of the same sex,
+member of the appropriate sex,
+and significant other,
+respectively.
+.Lp 15
+.ng net.columbia :
+Shouldn't this name be changed?
+.Lp
+The name was devised to honor the first space shuttle.
+It was realized at the time the group began that
+the name would quickly become out of date.
+The intent was to create a bit of instant nostalgia.
+.Lp 16.
+.ng net.columbia :
+Shouldn't this group be merged with
+.ng net.space ?
+No.
+.ng Net.columbia
+is for timely news bulletins.
+.ng Net.space
+is for discussions.
+.Lp 17.
+How do I use the
+.hf Distribution
+feature?
+.Lp
+When
+.i postnews (1)
+prompts you for a distribution,
+it's asking how widely distributed you want your article.
+The set of possible replies is different,
+depending on where you are,
+but at Bell Labs in Murray Hill,
+New Jersey,
+possibilities include:
+.sd c
+\!.ta 8n
+mh3bc1\tlocal to this machine
+mh\tBell Labs, Murray Hill Branch
+nj\tall sites in New Jersey
+btl\tAll Bell Labs machines
+att\tAll AT&T machines
+usa\tEverywhere in the USA
+na\tEverywhere in North America
+net\tEverywhere on USENET in the world (same as "world")
+.ed
+If you hit
+.qc RETURN ,
+you'll get the default,
+which is the first part of the newsgroup name.
+This default is often not appropriate \-
+.i please
+take a moment to think about how far away people are likely
+to be interested in what you have to say.
+Used car ads,
+housing wanted ads,
+and things for sale other than specialized equipment like computers
+certainly shouldn't be distributed to Europe and Korea,
+or even to the next state.
+.Lp
+The newsgroup
+.ng na.forsale
+exists for postings of sale announcements.
+Its distribution is limited to North America;
+posters should restrict this distribution even further,
+if possible and appropriate.
+.Lp 18.
+Why do some people put funny lines
+(\*(lqbug killers\*(rq)
+at the beginning of their articles?
+.Lp
+Some earlier versions of news had a bug which would drop
+the first 512 or 1024 bytes of text of certain articles.
+The bug was triggered whenever the article started with whitespace
+(a blank or a tab).
+A fix many people adopted was to begin their articles
+with a line containing a character other than white space.
+This gradually evolved into the habit of including amusing first lines.
+.Lp
+The original bug has since been fixed in newer version of news,
+and sites running older versions of news have applied a patch
+to prevent articles from losing text.
+The \*(lqbug-killer\*(rq lines are therefore probably no longer needed,
+but they linger on.
+.Lp 19.
+What is the address or phone number of the \*(lqfoo\*(rq company?
+.Lp
+Try the white and yellow pages of your phone directory,
+first;
+a sales representative will surely know,
+and if you're a potential customer they will be who you're looking for.
+Phone books for other cities are usually available in libraries of any size.
+Whoever buys or recommends things for your company
+will probably have some buyer's guides or national company directories.
+Call or visit the reference desk of your library;
+they have several company and organization directories
+and many will answer questions like this over the phone.
+Remember if you only know the city where the company is,
+you can telephone to find out their full address or a dealer.
+The network is
+.i not
+a free resource,
+although it may look like that to some people.
+It is far better to spend a few minutes of your own time
+researching an answer rather than broadcast
+your laziness and/or ineptitude to the net.
diff --git a/usr/contrib/news/doc/mn.7 b/usr/contrib/news/doc/mn.7
new file mode 100644 (file)
index 0000000..b3230b1
--- /dev/null
@@ -0,0 +1,268 @@
+.TH MN 7 "News Version B2.10.3"
+.SH NAME
+mn \- text formatting macros for the news documentation
+.SH SYNOPSIS
+.B "nroff  \-mn"
+[ options ]  file  ...
+.br
+.B "troff  \-mn"
+[ options ]  file  ...
+.SH DESCRIPTION
+.PP
+This package of
+.IR nroff (1)
+and
+.IR troff (1)
+macro definitions provides a formatting facility
+which may be used to run off the formatted news documents.
+When reverse line motions are needed,
+filter the output through
+.IR col (1).
+.PP
+All \-mn macros,
+diversions,
+string registers,
+and number registers are defined below.
+Many
+.I nroff
+and
+.I troff
+requests are unsafe in conjunction with this package.
+However,
+the requests below may be used with impunity:
+.LP
+.ta 5n 12n
+.nf
+       .bp     begin new page
+       .br     break output line
+       .sp \f2n\fP     insert \f2n\fP spacing lines
+       .ce \f2n\fP     center next \f2n\fP lines
+       .ls \f2n\fP     line spacing: \f2n\fP=1 single, \f2n\fP=2 double space
+       .na     no alignment of right margin
+.fi
+.PP
+Font and point size changes with \ef and \es are also allowed;
+for example,
+\&``\ef2word\efR'' will italicize \f2word.\fP
+Output of the
+.IR tbl (1),
+.IR eqn (1),
+and
+.IR refer (1)
+preprocessors for equations,
+tables,
+and references is acceptable as input.
+.SH FILES
+/usr/lib/tmac/tmac.n
+.SH "SEE ALSO"
+eqn(1), refer(1), tbl(1), troff(1)
+.SH WARNINGS
+.PP
+If you do not set the string register ``.f'' to the file name,
+you will only be told the line number on which any errors occur.
+If you define this string to be the file name,
+you will get the file name,
+too.
+This is useful when dealing with a document
+split up into many files.
+.PP
+This package is not now intended for uses
+other than with the news documentation.
+.PP
+Bug reports are always welcome;
+please send them to the author.
+(Include a sample of the input;
+this helps track down the bug.)
+.SH AUTHOR
+Matt Bishop
+.RI ( mab@riacs.arpa ,
+.IR ihnp4!ames!riacs!mab ,
+.IR decvax!decwrl!riacs!mab )
+.SH REQUESTS
+.PP
+In the
+.I Note
+column,
+.I b
+means the request causes a break,
+and
+.I i
+means the macro,
+number register,
+string register,
+or diversion is internal and should not be used for anything.
+In the
+.I "What It Is"
+column,
+.IR div " means " diversion ,
+.IR mac " means " macro ,
+.IR num " means " "number register" ,
+and
+.IR str " means " "string register" .
+In the
+.I "Initial Value"
+column,
+a hyphen means no initial value is used,
+anything else is the initial value,
+and if two values are given,
+the first is for
+.I nroff
+and the second for
+.IR troff .
+.PP
+.if n .in 0
+.ds x \f2x\fP\|
+.ds y \f2y\fP\|
+.ds z \f2z\fP\|
+.ds X "\*x
+.ds Y "\*x \*y
+.ds Z "\*x \*y \*z
+.tr _.
+.ta \w'MacroNames'u +\w'WhatItIs'u +\w'InitialVal'u +\w'Note 'u
+.sp .3
+.nf
+Macro  What    Initial Note    \0 Explanation
+Name   It Is   Value
+.sp .3
+_f     num     \-      \-      file name, used in error messages if set
+_ai    mac     \-      \-      author's institution
+_au    mac     \-      b       author's name
+_b \*Z mac     \-      \-      print \*x in font 3, \*y after, \*z before;
+                               if no arguments, switch to font 3
+b      num     \-      i       used to embolden italics
+_bi \*Z        mac     \-      \-      print \*x in emboldened font 2, \*y after,
+                               \*z before
+bm     num     1i,1i+1v        \-      height of bottom margin
+_bt    mac     \-      \-      print pottom title
+bt     num     .5i+1v  \-      bottom of footer to bottom of page
+_cf \*Z        mac     \-      \-      print contents of header line (double
+                               quotes around \*x, \*y before, \*z after)
+cm     num     0       \-      0 if no cut marks, nonzero if cut marks
+_cn \*Z        mac     \-      \-      print computer/site name; same as _i
+_dd    div     \-      i       text of display
+dg     str     \(**,\(dg       \-      footnote mark
+dw     str     \f2current\fP   \-      name of current day of week
+dy     str     \f2current\fP   \-      full date
+_ed    mac     \-      b       end display
+_ef    mac     \-      b       end footnote
+_ei    mac     \-      b       move left margin to the right
+_er    mac     \-      \-      print error message
+_et    mac     \-      b,i     macro called at end of text
+f0     str     \-      \-      left bottom title
+f1     num     \-      i       current font number
+f1     str     \f2date\fP,\-   \-      center bottom title
+f2     num     \-      i       previous font number
+f2     str     \-      \-      right bottom title
+fc     num     \-      i       per-page footnote count
+_fd    mac     \-      b,i     drop footnotes
+fg     num     \-      i       gets fudge factor for footnote
+fl     num     5.5i    \-      default footnote line length
+_fn    mac     \-      \-      begin footnote
+_fo    mac     \-      \-      bottom of page (footer) macro
+fp     num     \-      i       current location of trap for _fo macro
+_fs    mac     \-      i       print text/footnote separator
+fs     num     \-      i       position where footnote printing should begin
+_fx    mac     \-      i       collect overflow footnotes
+_fy    div     \-      i       text of footnote overflow
+_fz    mac     \-      i       move overflow footnotes from _fy to _tf
+gs     num     \-      i       used to be sure footnotes fit
+h0     num     0       i       current level 1 section number
+h0     str     \-      \-      left header title
+h1     num     0       i       current level 2 section number
+h1     str     \f2\- page \-\fP        \-      center header title
+h2     num     0       i       current level 3 section number
+h2     str     \-      \-      right header title
+h3     num     0       i       current level 4 section number
+_hd    mac     \-      i       top of page (header) macro
+_hf    mac     \-      \-      print header field name; same as _cf
+_hn \*x        mac     \-      b       numbered section; if present, \*x is level
+hn     num     0       i       current level of numbering (temporary)
+hs     num     1v      \-      default intra-section spacing
+_hu    mac     \-      b       unnumbered section header
+_i \*Z mac     \-      \-      print \*x in font 2, \*y after, \*z before;
+                               if no arguments, switch to font 2
+i1     num     \-      i       current indent
+i2     num     \-      i       previous indent
+id     num     0       i       1 if in display, 0 otherwise
+if     num     0       i       1 if in footnote, 0 otherwise
+_is \*Z        mac     \-      \-      print \*x 2p bigger, \*y after, \*z before;
+                               if no arguments, increase point size by 2p
+it     num     0       i       0 before _bt called, 1 after
+l0     num     0       i       leftmost position for left margin
+l1     num     \-      i       first level of indent for left margin
+l2     num     \-      i       second level of indent for left margin
+l3     num     \-      i       third level of indent for left margin
+l4     num     \-      i       fourth level of indent for left margin
+l5     num     \-      i       fifth level of indent for left margin
+l6     num     \-      i       sixth level of indent for left margin
+l7     num     \-      i       seventh level of indent for left margin
+l8     num     \-      i       eighth level of indent for left margin
+l9     num     \-      i       ninth level of indent for left margin
+li     num     5n      \-      paragraph indent
+ll     num     6i      \-      default line length
+lm     num     0       i       current level of indent for left margin
+lo     num     \-      i       previous level for left margin
+_lp \*Y        mac     \-      b       labelled paragraph; \*x is label, \*y indent
+lq     str     ",``    \-      left double quotation marks
+mo     str     \f2current\fP   \-      name of current month
+_mt    mac     \-      b       title
+mt     num     1.5i+1v \-      distance of title from top of page
+_ng \*Z        mac     \-      \-      newsgroup name; same as _b
+_nl    mac     \-      b       reset point size to default
+ns     num     0       i       if nonzero, _fn does not call _fs
+_op \*Z        mac     \-      \-      command option; same as _b
+p1     num     0       i       1 after PDP-11(tm) footnote printed,
+                               0 before
+_pa \*Z        mac     \-      \-      print protocol appellation; same as _i
+_pd \*Y        mac     \-      \-      print PDP-11(tm), footnote; \*x after,
+                               \*y before
+pd     num     1v,.3v  \-      intra-paragraph spacing
+_pf    mac     \-      \-      print footer title
+_pg \*x        mac     \-      b       paragraph; if \*x is l, left justify
+pi     num     5n      \-      default paragraph indent
+po     num     1.25i   \-      default page offset
+ps     num     12p     \-      default point size
+_pt \*x        mac     \-      \-      print header; \*x is distance from top of
+                               page
+_qc \*Z        mac     \-      \-      print name of control char; \*x is name,
+                               in font 3, between <>, \*y after, \*z before
+_qp \*Z        mac     \-      \-      print char; same as _b
+_r     mac     \-      \-      switch to font 1
+rq     str     ",''    \-      right double quotation marks
+s1     num     \-      i       current point size
+s2     num     \-      i       previous point size
+_sd \*X        mac     \-      \-      start display; if \*x is c, center display
+sf     num     \-      i       1 if center display, 0 otherwise
+_si \*x        num     \-      \-      indent left margin by \*x (5n default)
+_sm \*Z        mac     \-      \-      print \*x 2p smaller, \*y after, \*z before;
+                               if no arguments, decrease point size by 2p
+_sn \*x        mac     \-      b       space by \*x (1v default), enter nospace mode
+_sr \*x        mac     \-      \-      enter spacemode, space by \*x (1v default)
+t2     num     0       i       0 if little/no space, nonzero otherwise
+_tf    div     \-      i       text of footnotes
+tm     num     1i-.5v  \-      height of top margin
+tt     num     .5i-.5v \-      distance from top of page to header
+_ux \*Y        mac     \-      \-      print UNIX(tm), footnote; \*x after,
+                               \*y before
+ux     num     0       i       1 after UNIX(tm) footnote printed,
+                               0 before
+v1     num     \-      i       current vertical spacing
+v2     num     \-      i       previous vertical spacing
+vr     str     \-      \-      current version of news
+vs     num     16p     \-      default vertical spacing
+vx     num     0       i       1 after VAX(tm) footnote printed,
+                               0 before
+_vx \*Y        mac     \-      \-      print VAX(tm), footnote; \*x after,
+                               \*y before
+ws     str     \-      \-      used to construct error message
+_ya    mac     \-      \-      same as calling _yf, _yi, _ys, _yv
+_yf    mac     \-      \-      restore fonts saved by _zf
+_yi    mac     \-      \-      restore indents saved by _zi
+_ys    mac     \-      \-      restore point sizes saved by _zs
+_yv    mac     \-      \-      restore vertical spacings saved by _zv
+_za    mac     \-      \-      same as calling _zf, _zi, _zs, _zv
+_zf    mac     \-      \-      save previous, current fonts
+_zi    mac     \-      \-      save previous, current indents
+_zs    mac     \-      \-      save previous, current point sizes
+_zv    mac     \-      \-      save previous, current vertical spacings
+.fi
diff --git a/usr/contrib/news/doc/standard.mn b/usr/contrib/news/doc/standard.mn
new file mode 100644 (file)
index 0000000..0d06b3a
--- /dev/null
@@ -0,0 +1,1423 @@
+.ds h0 "Standard for Interchange of USENET Messages
+.ds h1
+.ds h2 %
+.ds f0 "\*(vr
+.ds f1
+.ds f2 "January 17, 1986
+.mt
+Standard for Interchange of USENET Messages
+.au
+Mark R. Horton
+.ai
+Bell Laboratories
+Columbus, OH  43213
+.au
+Revised for 2.10.3 by Rick Adams
+.hn
+Introduction
+.pg
+This document defines the standard format for the interchange
+of network Nnws articles among USENET sites.
+It describes the format for articles themselves,
+and gives partial standards for transmission of news.
+The news transmission is not entirely standardized
+in order to give a good deal of flexibility
+to the individual hosts to choose transmission hardware and software,
+whether to batch news,
+and so on.
+.pg
+There are five sections to this document.
+Section two section defines the format.
+Section three defines the valid control messages.
+Section four specifies some valid transmission methods.
+Section five describes the overall news propagation algorithm.
+.hn
+Article Format
+.pg
+The primary consideration in choosing an article format is
+that it fit in with existing tools as well as possible.
+Existing tools include both implementations of mail and news.
+(The
+.i notesfiles
+system from the University of Illinois
+is considered a news implementation.)
+A standard format for mail messages has existed for many years on the ARPANET,
+and this format meets most of the needs of USENET.
+Since the ARPANET format is extensible,
+extensions to meet the additional needs of USENET
+are easily made within the ARPANET standard.
+Therefore,
+the rule is adopted that all USENET news articles
+must be formatted as valid ARPANET mail messages,
+according to the ARPANET standard RFC 822.
+This standard is more restrictive than the ARPANET standard,
+placing additional requirements on each article
+and forbidding use of certain ARPANET features.
+However,
+it should always be possible to use a tool
+expecting an ARPANET message to process a news article.
+In any situation where this standard conflicts with the ARPANET standard,
+RFC 822 should be considered correct and this standard in error.
+.pg
+An example message is included to illustrate the fields.
+.sd
+From: jerry@eagle.uucp (Jerry Schwarz)
+Path: cbosgd!mhuxj!mhuxt!eagle!jerry
+Newsgroups: net.general
+Subject: Usenet Etiquette -- Please Read
+Message-ID: <642@eagle.UUCP>
+Date: Friday, 19 Nov 82 16:14:55 EST
+Followup-To: net.news
+Expires: Saturday, 1 Jan 83 00:00:00 EST
+Organization: Bell Labs, Murray Hill
+
+The body of the article comes here, after a blank line.
+.ed
+Here is an example of a message in the old format
+(before the existence of this standard).
+It is recommended that implementations also accept articles
+in this format to ease upward conversion.
+.sd
+From: cbosgd!mhuxj!mhuxt!eagle!jerry (Jerry Schwarz)
+Newsgroups: net.general
+Title: Usenet Etiquette -- Please Read
+Article-I.D.: eagle.642
+Posted: Fri Nov 19 16:14:55 1982
+Received: Fri Nov 19 16:59:30 1982
+Expires: Mon Jan  1 00:00:00 1990
+
+The body of the article comes here, after a blank line.
+.ed
+Some news systems transmit news in the
+.pa A
+format,
+which looks like this:
+.sd
+Aeagle.642
+net.general
+cbosgd!mhuxj!mhuxt!eagle!jerry
+Fri Nov 19 16:14:55 1982
+Usenet Etiquette - Please Read
+The body of the article comes here, with no blank line.
+.ed
+.pg
+An article consists of several header lines,
+followed by a blank line,
+followed by the body of the message.
+The header lines consist of a keyword,
+a colon,
+a blank,
+and some additional information.
+This is a subset of the ARPANET standard,
+simplified to allow simpler software to handle it.
+The
+.hf From
+line may optionally include a full name,
+in the format above,
+or use the ARPANET angle bracket syntax.
+To keep the implementations simple,
+other formats
+(for example,
+with part of the machine address after the close parenthesis)
+are not allowed.
+The ARPANET convention of continuation header lines
+(beginning with a blank or tab)
+is allowed.
+.pg
+Certain headers are required,
+and certain other headers are optional.
+Any unrecognized headers are allowed,
+and will be passed through unchanged.
+The required headers are
+.hf From ,
+.hf Date ,
+.hf Newsgroups ,
+.hf Subject ,
+.hf Message-ID ,
+and
+.hf Path .
+The optional headers are
+.hf Followup-To ,
+.hf Expires ,
+.hf Reply-To ,
+.hf Sender ,
+.hf References ,
+.hf Control ,
+.hf Distribution ,
+.hf Keywords ,
+.hf Summary ,
+and
+.hf Organization .
+.hn 2
+Required Headers
+.hn 3
+From
+.pg
+The
+.hf From
+line contains the electronic mailing address of the person who sent the message,
+in the ARPA internet syntax.
+It may optionally also contain the full name of the person,
+in parentheses,
+after the electronic address.
+The electronic address is the same as the entity responsible
+for originating the article,
+unless the
+.hf Sender
+header is present,
+in which case the
+.hf From
+header might not be verified.
+Note that in all site and domain names,
+upper and lower case are considered the same,
+thus
+.cf mark@cbosgd.UUCP ,
+.cf mark@cbosgd.uucp ,
+and
+.cf mark@CBosgD.UUcp
+are all equivalent.
+User names may or may not be case sensitive, for example,
+.cf Billy@cbosgd.UUCP
+might be different from
+.cf BillY@cbosgd.UUCP .
+Programs should avoid changing the case of electronic addresses
+when forwarding news or mail.
+.pg
+RFC 822 specifies that all text in parentheses is to be interpreted as a comment.
+It is common in ARPANET mail to place the full name of the user
+in a comment at the end of the
+.hf From
+line.
+This standard specifies a more rigid syntax.
+The full name is not considered a comment,
+but an optional part of the header line.
+Either the full name is omitted, 
+or it appears in parentheses after the electronic address
+of the person posting the article,
+or it appears before an electronic address enclosed in angle brackets.
+Thus,
+the three permissible forms are:
+.sd
+From: mark@cbosgd.UUCP
+From: mark@cbosgd.UUCP (Mark Horton)
+From: Mark Horton <mark@cbosgd.UUCP>
+.ed
+Full names may contain any printing ASCII characters from space through tilde,
+with the exceptions that they may not contain
+\&\*(lq(\*(rq (left parenthesis),
+\&\*(lq)\*(rq (right parenthesis),
+\&\*(lq<\*(rq (left angle bracket),
+or \*(lq>\*(rq (right angle bracket).
+Additional restrictions may be placed on full names by the mail standard,
+in particular,
+the characters
+\&\*(lq,\*(rq (comma),
+\&\*(lq:\*(rq (colon),
+and \*(lq;\*(rq (semicolon) are inadvisable in full names.
+.hn 3
+Date
+.pg
+The
+.hf Date
+line (formerly
+.hf Posted )
+is the date,
+in a format that must be acceptable both to the ARPANET
+and to the
+.i getdate (3)
+routine,
+that the article was originally posted to the network.
+This date remains unchanged as the article is propagated
+throughout the network.
+One format that is acceptable to both is
+.sd c
+\f2Wdy\fP, \f2DD\fP\ \f2Mon\fP\ \f2YY\fP \f2HH\fP:\f2MM\fP:\f2SS\fP \f2TIMEZONE\fP
+.ed
+Several examples of valid dates appear in the sample
+article above.
+Note in particular that
+.i ctime (3)
+format:
+.sd c
+\f2Wdy\fP \f2Mon\fP \f2DD\fP \f2HH\fP:\f2MM\fP:\f2SS\fP \f2YYYY\fP
+.ed
+is
+.i not
+acceptable because it is not a valid ARPANET date.
+However,
+since older software still generates this format,
+news implementations are encouraged to accept this format
+and translate it into an acceptable format.
+.pg
+The contents of the
+.i TIMEZONE
+field is currently subject to revision.
+Eventually,
+we hope to accept all possible worldwide time zone abbreviations,
+including the usual American zones
+(PST,
+PDT,
+MST,
+MDT,
+CST,
+CDT,
+EST,
+EDT),
+the other North American zones
+(Bering through Newfoundland),
+European zones,
+Australian zones,
+and so on.
+Lacking a complete list at present
+(and unsure if an unambiguous list exists),
+authors of software are encouraged to keep this code flexible,
+and in particular not to assume
+that time zone names are exactly three letters long.
+Implementations are free to edit this field,
+keeping the time the same,
+but changing the time zone
+(with an appropriate adjustment to the local time shown)
+to a known time zone.
+It is recommended that times in message headers be transmitted in GMT
+and displayed in the local time zone.
+.hn 3
+Newsgroups
+.pg
+The
+.hf Newsgroups
+line specifies which newsgroup or newsgroups the article belongs in.
+Multiple newsgroups may be specified, separated by a comma.
+Newsgroups specified must all be the names of existing newsgroups,
+as no new newsgroups will be created by simply posting to them.
+.pg
+Wildcards
+.i e\f1.\fPg ., (
+the word
+.ng all
+are never allowed in a
+.hf Newsgroups
+line.
+For example,
+a newsgroup
+.ng net.all
+is illegal,
+although a newsgroup name
+.ng net.sport.football
+is permitted.)
+.pg
+If an article is received with a
+.hf Newsgroups
+line listing some valid newsgroups and some invalid newsgroups,
+a site should not remove invalid newsgroups from the list.
+Instead,
+the invalid newsgroups should be ignored.
+For example,
+suppose site
+.cn A
+subscribes to the classes
+.ng btl.all
+and 
+.ng net.all ,
+and exchanges news articles with site
+.cn B ,
+which subscribes to
+.ng net.all
+but not
+.ng btl.all .
+Suppose
+.cn A
+receives an article with
+.sd c
+Newsgroups: net.micro,btl.general
+.ed
+This article is passed on to
+.cn B
+because
+.cn B
+receives
+.ng net.micro ,
+but
+.cn B
+does not receive
+.ng btl.general .
+.cn A
+must leave the
+.hf Newsgroups
+line unchanged.
+If it were to remove
+.ng btl.general ,
+the edited header could eventually reenter the
+.ng btl.all
+class,
+resulting in an article that is not shown to users subscribing to
+.ng btl.general .
+Also,
+followups from outside
+.ng btl.all
+would not be shown to such users.
+.hn 3
+Subject
+.pg
+The
+.hf Subject
+line
+(formerly
+.hf Title )
+tells what the article is about.
+It should be suggestive enough of the contents of the article
+to enable a reader to make a decision whether to read the article
+based on the subject alone.
+If the article is submitted in response to another article
+.i e\f1.\fPg ., (
+is a
+.i followup )
+the default subject should begin with the four characters \*(lqRe: \*(rq
+and the
+.hf Reference
+line is required.
+(The user might wish to edit the subject of the followup,
+but the default should begin with \*(lqRe: \*(rq.)
+.hn 3
+Message-ID
+.pg
+The
+.hf Message-ID
+line gives the article a unique identifier.
+The same message ID may not be reused during the lifetime of any article
+with the same message ID.
+(It is recommended that no message ID be reused for at least two years.)
+Message ID's have the syntax
+.sd c
+<\f2string not containing blank or \*(lq>\*(rq\fP>
+.ed
+In order to conform to RFC 822,
+the message ID must have the format
+.sd c
+<\f2unique\fP@\f2full_domain_name\fP>
+.ed
+where
+.i "full_domain_name"
+is the full name of the host at which the article entered the network,
+including a domain that host is in,
+and
+.i unique
+is any string of printing ASCII characters,
+not including
+\*(lq<\*(rq (left angle bracket),
+\*(lq>\*(rq (right angle bracket),
+or \*(lq@\*(rq (at sign).
+For example,
+the
+.i unique
+part could be an integer representing a sequence number
+for articles submitted to the network,
+or a short string derived from the date and time the article was created.
+For example,
+a valid message ID for an article submitted from site
+.cn ucbvax
+in domain
+.cf Berkeley.EDU
+would be
+.cf <4123@ucbvax.Berkeley.EDU> .
+Programmers are urged not to make assumptions
+about the content of message ID fields from other hosts,
+but to treat them as unknown character strings.
+It is not safe,
+for example,
+to assume that a message ID will be under 14 characters,
+nor that it is unique in the first 14 characters.
+.pg
+The angle brackets are considered part of the message ID.
+Thus,
+in references to the message ID,
+such as the
+.pa ihave/sendme
+and
+.b cancel
+control messages,
+the angle brackets are included.
+White space characters
+.i e\f1.\fPg ., (
+blank and tab)
+are not allowed in a message ID.
+All characters between the angle brackets must be printing ASCII characters.
+.hn 3
+Path
+.pg
+This line shows the path the article took to reach the current system.
+When a system forwards the message,
+it should add its own name to the list of systems in the
+.hf Path
+line.
+The names may be separated by any punctuation character or characters,
+thus
+.cf cbosgd!mhuxj!mhuxt ,
+.cf "cbosgd, mhuxj, mhuxt" ,
+and
+.cf "@cbosgd.uucp,@mhuxj.uucp,@mhuxt.uucp"
+and even
+.cf "teklabs, zehntel, sri-unix@cca!decvax"
+are valid entries.
+(The latter path indicates a message that passed through
+.cn decvax ,
+.cn cca ,
+.cn sri-unix ,
+.cn zehntel ,
+and
+.cn teklabs ,
+in that order.)
+Additional names should be added from the left,
+for example,
+the most recently added name in the third example was
+.cn teklabs .
+Letters,
+digits,
+periods and hyphens are considered part of site names;
+other punctuation,
+including blanks,
+are considered separators.
+.pg
+Normally,
+the rightmost name will be the name of the originating system.
+However,
+it is also permissible to include an extra entry on the right,
+which is the name of the sender.
+This is for upward compatibility with older system.
+.pg
+The
+.hf Path
+line is not used for replies,
+and should not be taken as a mailing address.
+It is intended to show the route
+the message travelled to reach the local site.
+There are several uses for this information.
+One is to monitor USENET routing for performance reasons.
+Another is to establish a path to reach new sites.
+Perhaps the most important is to cut down on redundant USENET traffic
+by failing to forward a message to a site that is
+known to have already received it.
+In particular,
+when site
+.cn A
+sends an article to site
+.cn B ,
+the
+.hf Path
+line includes
+.cn A ,
+so that site
+.cn B
+will not immediately send the article back to site
+.cn A .
+The site name each site uses to identify itself should be
+the same as the name by which its neighbors know it,
+in order to make this optimization possible.
+.pg
+A site adds its own name to the front of a path
+when it receives a message from another site.
+Thus, if a message with path
+.cf A!X!Y!Z
+is passed from site
+.cn A
+to site
+.cn B ,
+.cn B
+will add its own name to the path when it receives the message from
+.cn A ,
+.i e\f1.\fPg .,
+.cf \*(lqB!A!X!Y!Z\*(rq .
+If
+.cn B
+then passes the message on to
+.cn C ,
+the message sent to
+.cn C
+will contain the path
+.cf B!A!X!Y!Z ,
+and when
+.cn C
+receives it,
+.cn C
+will change it to
+.cf C!B!A!X!Y!Z .
+.pg
+Special upward compatibility note:
+Since the
+.hf From ,
+.hf Sender ,
+and
+.hf Reply-To
+lines are in internet format,
+and since many USENET sites do not yet have mailers
+capable of understanding internet format,
+it would break the reply capability to completely sever the connection
+between the
+.hf Path
+header and the reply function.
+It is recognized that the path is not always a valid reply string
+in older implementations,
+and no requirement to fix this problem is placed on implementations.
+However,
+the existing convention of placing the site name and an
+.cf !
+at the front of the path,
+and of starting the path with the site name,
+an
+.cf ! ,
+and the user name,
+should be maintained when possible.
+.hn 2
+Optional Headers
+.hn 3
+Reply-To
+.pg
+This line has the same format as
+.hf From .
+If present,
+mailed replies to the author should be sent to the name given here.
+Otherwise,
+replies are mailed to the name on the
+.hf From
+line.
+(This does not prevent additional copies from being sent to recipients
+named by the replier,
+or on
+.hf To
+or
+.hf Cc
+lines.)
+The full name may be optionally given,
+in parentheses,
+as in the
+.hf From
+line.
+.hn 3
+Sender
+.pg
+This field is present only if the submitter manually enters a
+.hf From
+line.
+It is intended to record the entity responsible
+for submitting the article to the network,
+and should be verified by the software at the submitting site.
+.pg
+For example,
+if John Smith is visiting CCA and wishes to post an article to the network,
+using friend Sarah Jones account,
+the message might read
+.sd
+From: smith@ucbvax.uucp (John Smith)
+Sender: jones@cca.arpa (Sarah Jones)
+.ed
+If a gateway program enters a mail message into the network at site
+.cn sri-unix ,
+the lines might read
+.sd
+From: John.Doe@CMU-CS-A.ARPA
+Sender: network@sri-unix.ARPA
+.ed
+The primary purpose of this field is to be able to track down articles
+to determine how they were entered into the network.
+The full name may be optionally given,
+in parentheses,
+as in the
+.hf From
+line.
+.hn 3
+Followup-To
+.pg
+This line has the same format as
+.hf Newsgroups .
+If present,
+follow-up articles are to be posted
+to the newsgroup or newsgroups listed here.
+If this line is not present,
+followups are posted to the newsgroup or newsgroups listed in the
+.hf Newsgroups
+line,
+except that followups to
+.ng net.general
+should instead go to
+.ng net.followup .
+.hn 3
+Expires
+.pg
+This line,
+if present,
+is in a legal USENET date format.
+It specifies a suggested expiration date for the article.
+If not present,
+the local default expiration date is used.
+.P
+This field is intended to be used to clean up
+articles with a limited usefulness,
+or to keep important articles around for longer than usual.
+For example,
+a message announcing an upcoming seminar
+could have an expiration date the day after the seminar,
+since the message is not useful after the seminar is over.
+Since local sites have local policies for expiration of news
+(depending on available disk space,
+for instance),
+users are discouraged from providing expiration dates for articles
+unless there is a natural expiration date associated with the topic.
+System software should almost never provide a default
+.hf Expires
+line.
+Leave it out and allow local policies to be used
+unless there is a good reason not to.
+.hn 3
+References
+.pg
+This field lists the message ID's of any articles prompting
+the submission of this article.
+It is required for all follow-up articles,
+and forbidden when a new subject is raised.
+Implementations should provide a follow-up command,
+which allows a user to post a follow-up article.
+This command should generate a
+.hf Subject
+line which is the same as the original article,
+except that if the original subject does not begin
+with \*(lqRe: \*(rq or \*(lqre: \*(rq,
+the four characters \*(lqRe: \*(rq are inserted before the subject.
+If there is no
+.hf References
+line on the original header,
+the
+.hf References
+line should contain the message ID of the original article
+(including the angle brackets).
+If the original article does have a
+.hf References
+line,
+the followup article should have a
+.hf References
+line containing the text of the original
+.hf References
+line,
+a blank,
+and the message ID of the original article.
+.pg
+The purpose of the
+.hf References
+header is to allow articles to be grouped into conversations
+by the user interface program.
+This allows conversations within a newsgroup to be kept together,
+and potentially users might shut off entire conversations
+without unsubscribing to a newsgroup.
+User interfaces may not make use of this header,
+but all automatically generated followups should generate the
+.hf References
+line for the benefit of systems that do use it,
+and manually generated followups
+.i e\f1.\fPg ., (
+typed in well after the original article has been printed by the machine)
+should be encouraged to include them as well.
+.hn 3
+Control
+.pg
+If an article contains a
+.hf Control
+line,
+the article is a control message.
+Control messages are used for communication among USENET host machines,
+not to be read by users.
+Control messages are distributed by the same newsgroup mechanism
+as ordinary messages.
+The body of the
+.hf Control
+header line is the message to the host.
+.pg
+For upward compatibility,
+messages that match the newsgroup pattern
+.ng all.all.ctl
+should also be interpreted as control messages.
+If no
+.hf Control
+header is present on such messages,
+the subject is used as the control message.
+However,
+messages on newsgroups matching this pattern do not conform to this standard.
+.hn 3
+Distribution
+.pg
+This line is used to alter the distribution scope of the message.
+It has the same format as the
+.hf Newsgroups
+line.
+User subscriptions are still controlled by
+.hf Newsgroups ,
+but the message is sent to all systems subscribing to the newsgroups
+on the
+.hf Distribution
+line instead of the
+.hf Newsgroups
+line.
+Thus, 
+a car for sale in New Jersey might have headers including
+.sd
+Newsgroups: net.auto,net.wanted
+Distribution: nj.all
+.ed
+so that it would only go to persons subscribing to
+.ng net.auto
+or
+.ng net.wanted
+within New Jersey.
+The intent of this header is to restrict
+the distribution of a newsgroup further,
+not to increase it.
+A local newsgroup,
+such as
+.ng nj.crazy-eddie ,
+will probably not be propagated by sites outside New Jersey
+that do not show such a newsgroup as valid.
+Wildcards in newsgroup names in the
+.hf Distribution
+line are allowed.
+Followup articles should default to the same
+.hf Distribution
+line as the original article,
+but the user can change it to a more limited one,
+or escalate the distribution
+if it was originally restricted
+and a more widely distributed reply is appropriate.
+.hn 3
+Organization
+.pg
+The text of this line is a short phrase describing the organization
+to which the sender belongs,
+or to which the machine belongs.
+The intent of this line is to help identify the person posting the message,
+since site names are often cryptic enough to make it hard
+to recognize the organization by the electronic address.
+.hn 3
+Keywords
+.pg
+A few, well selected keywords identifying this article should be on
+this line. This is used as an aid in determining if this article is
+interesting to the reader.
+.hn 3
+Summary
+.pg
+This line (lines) should contain a brief summary of the article. It is
+usually used as part of a followup to another article. Again, it is
+very useful to the reader in determining whether to read the article.
+.hn 1
+Control Messages
+.pg
+This section lists the control messages currently defined.
+The body of the
+.hf Control
+header is the control message.
+Messages are a sequence of zero or more words,
+separated by white space (blanks or tabs).
+The first word is the name of the control message,
+remaining words are parameters to the message.
+The remainder of the header and the body of the message
+are also potential parameters;
+for example,
+the
+.hf From
+line might suggest an address to which a response is to be mailed.
+.pg
+Implementors and administrators may choose to allow control messages
+to be carried out automatically,
+or to queue them for manual processing.
+However,
+manually processed messages should be dealt with promptly.
+.hn 2
+Cancel
+.pg l
+.sd
+cancel <message ID>
+.ed
+If an article with the given message ID is present on the local system,
+the article is cancelled.
+This mechanism allows a user to cancel an article
+after the article has been distributed over the network.
+.pg
+If the system is unable to cancel the article as requested, it should not
+forward the cancellation request to its neighbor systems.
+.pg
+Only the author of the article or the local super user
+is allowed to use this message.
+The verified sender of a message is the
+.hf Sender
+line,
+or if no
+.hf Sender
+line is present,
+the
+.hf From
+line.
+The verified sender of the cancel message must be the same
+as either the
+.hf Sender
+or
+.hf From
+field of the original message.
+A verified sender in the cancel message is allowed to match an unverified
+.hf From
+in the original message.
+.hn 2
+Ihave/Sendme
+.pg l
+.sd
+ihave <message ID list> <remotesys>
+sendme <message ID list> <remotesys>
+.ed
+This message is part of the
+.pa ihave/sendme
+protocol,
+which allows one site
+(say
+.cn A )
+to tell another site
+.cn B ) (
+that a particular message has been received on
+.cn A .
+Suppose that site
+.cn A
+receives article
+.cf ucbvax.1234 ,
+and wishes to transmit the article to site
+.cn B .
+.cn A
+sends the control message
+.cf "ihave ucbvax.1234 A"
+to site
+.cn B
+(by posting it to newsgroup
+.bi B ). \f3to.\fP
+.cn B
+responds with the control message
+.cf "sendme ucbvax.1234 B"
+(on newsgroup
+.bi A ) \f3to.\fP
+if it has not already received the article.
+Upon receiving the
+.pa sendme
+message,
+.cn A
+sends the article to
+.cn B .
+.pg
+This protocol can be used to cut down on redundant traffic between sites.
+It is optional and should be used
+only if the particular situation makes it worthwhile.
+Frequently,
+the outcome is that,
+since most original messages are short,
+and since there is a high overhead to start sending a new message with UUCP,
+it costs as much to send the
+.pa ihave
+as it would cost to send the article itself.
+.pg
+One possible solution to this overhead problem is to batch requests.
+Several message ID's may be announced or requested in one message.
+If no message ID's are listed in the control message,
+the body of the message should be scanned for message ID's,
+one per line.
+.hn 2
+Newgroup
+.sd
+newgroup <groupname>
+.ed
+.pg
+This control message creates a new newsgroup with the name given.
+Since no articles may be posted or forwarded until a newsgroup is created,
+this message is required before a newsgroup can be used.
+The body of the message is expected to be a short paragraph
+describing the intended use of the newsgroup.
+.hn 2
+Rmgroup
+.sd
+rmgroup <groupname>
+.ed
+.pg
+This message removes a newsgroup with the given name.
+Since the newsgroup is removed from every site on the network,
+this command should be used carefully by a responsible administrator.
+.hn 2
+Sendsys
+.sd
+sendsys        (no arguments)
+.ed
+.pg
+The
+.i sys
+file,
+listing all neighbors and which newsgroups are sent to each neighbor,
+will be mailed to the author of the control message
+.hf Reply-to , (
+if present,
+otherwise
+.hf From ).
+This information is considered public information,
+and it is a requirement of membership in USENET
+that this information be provided on request,
+either automatically in response to this control message,
+or manually,
+by mailing the requested information to the author of the message.
+This information is used to keep the map of USENET up to date,
+and to determine where netnews is sent.
+.pg
+The format of the file mailed back to the author
+should be the same as that of the
+.i sys
+file.
+This format has one line per neighboring site
+(plus one line for the local site),
+containing four colon separated fields.
+The first field has the site name of the neighbor,
+the second field has a newsgroup pattern
+describing the newsgroups sent to the neighbor.
+The third and fourth fields are not defined by this standard.
+A sample response:
+.sd
+From cbosgd!mark  Sun Mar 27 20:39:37 1983
+Subject: response to your sendsys request
+To: mark@cbosgd.UUCP
+
+Responding-System: cbosgd.UUCP
+cbosgd:osg,cb,btl,bell,net,to,test
+ucbvax:net,to.ucbvax:L:
+cbosg:net,bell,btl,cb,osg,to.cbosg:F:/usr/spool/outnews/cbosg
+cbosgb:osg,to.cbosgb:F:/usr/spool/outnews/cbosgb
+sescent:net,bell,btl,cb,to.sescent:F:/usr/spool/outnews/sescent
+npois:net,bell,btl,ug,to.npois:F:/usr/spool/outnews/npois
+mhuxi:net,bell,btl,ug,to.mhuxi:F:/usr/spool/outnews/mhuxi
+.ed
+.hn 2
+Senduuname
+.pg l
+.sd
+senduuname     (no arguments)
+.ed
+The
+.i uuname (1)
+program is run,
+and the output is mailed to the author of the control message
+.hf Reply-to , (
+if present,
+otherwise
+.hf From ).
+This program lists all UUCP neighbors of the local site.
+This information is used to make maps of the UUCP network.
+The
+.i sys
+file is
+.b not
+the same as the UUCP
+.i L.sys
+file.
+The
+.i L.sys
+file should
+.b never
+be transmitted to another party
+without the consent of the sites whose passwords are listed therein.
+.pg
+It is optional for a site to provide this information.
+Some reply should be made to the author of the control message,
+so that a transmission error won't be blamed.
+It is also permissible for a site to run the
+.i uuname
+program
+(or in some other way determine the UUCP neighbors)
+and edit the output,
+either automatically or manually,
+before mailing the reply back to the author.
+The file should contain one site per line,
+beginning with the UUCP site name.
+Additional information may be included,
+separated from the site name by a blank or tab.
+The phone number or password for the site should
+.ng not
+be included,
+as the reply is considered to be in the public domain.
+(The
+.i uuname
+program will send only the site name and not the entire contents of the
+.i L.sys
+file,
+thus,
+phone numbers and passwords are not transmitted.)
+.pg
+The purpose of this message is to generate and maintain UUCP mail routing maps.
+Thus, connections over which mail can be sent using the
+.cf site!user
+syntax should be included,
+regardless of whether the link is actually a UUCP link at the physical level.
+If a mail router should use it,
+it should be included.
+Since all information sent in response to this message is optional,
+sites are free to edit the list,
+deleting secret or private links they do not wish to publicize.
+.hn 2
+Version
+.pg l
+.sd
+version        (no arguments)
+.ed
+The name and version of the software running on the local system
+is to be mailed back to the author of the article
+.hf Reply-to "" (
+if present,
+otherwise
+.hf From ).
+.hn 1
+Transmission Methods
+.pg
+USENET is not a physical network,
+but rather a logical network
+resting on top of several existing physical networks.
+These networks include,
+but are not limited to,
+UUCP,
+the ARPANET,
+an Ethernet,
+the BLICN network,
+an NSC Hyperchannel,
+and a BERKNET.
+What is important is that two neighboring systems on USENET
+have some method to get a new article,
+in the format listed here,
+from one system to the other,
+and once on the receiving system,
+processed by the netnews software on that system.
+(On
+.ux
+systems,
+this usually means the
+.i rnews
+program being run with the article on the standard input.)
+.pg
+It is not a requirement that USENET sites have mail systems
+capable of understanding the ARPA Internet mail syntax,
+but it is strongly recommended.
+Since
+.hf From ,
+.hf Reply-To ,
+and
+.hf Sender
+lines use the Internet syntax, 
+replies will be difficult or impossible without an internet mailer.
+A site without an internet mailer can attempt to use the
+.hf Path
+header line for replies,
+but this field is not guaranteed to be a working path for replies.
+In any event,
+any site generating or forwarding news messages
+must have an internet address that allows them
+to receive mail from sites with internet mailers,
+and they must include their internet address on their From line.
+.hn 2
+Remote Execution
+.pg
+Some networks permit direct remote command execution.
+On these networks,
+news may be forwarded by spooling the
+.i rnews
+command with the article on the standard input.
+For example,
+if the remote system is called
+.cn remote ,
+news would be sent over a UUCP link with the command
+.sd c
+uux \- remote!rnews
+.ed
+and on a Berknet,
+.sd c
+net \-mremote rnews
+.ed
+It is important that the article be sent via a reliable mechanism,
+normally involving the possibility of spooling,
+rather than direct real-time remote execution.
+This is because,
+if the remote system is down,
+a direct execution command will fail,
+and the article will never be delivered.
+If the article is spooled,
+it will eventually be delivered when both systems are up.
+.hn 2
+Transfer by Mail
+.pg
+On some systems,
+direct remote spooled execution is not possible.
+However,
+most systems support electronic mail,
+and a news article can be sent as mail.
+One approach is to send a mail message
+which is identical to the news message:
+the mail headers are the news headers,
+and the mail body is the news body.
+By convention,
+this mail is sent to the user
+.i newsmail
+on the remote machine.
+.pg
+One problem with this method is that it may not be possible to convince
+the mail system that the
+.hf From
+line of the message is valid,
+since the mail message was generated by a program
+on a system different from the source of the news article.
+Another problem is that error messages caused by the mail transmission
+would be sent to the originator of the news article,
+who has no control over news transmission between two cooperating hosts
+and does not know who to contact.
+Transmission error messages should be directed to a responsible
+contact person on the sending machine.
+.pg
+A solution to this problem is to encapsulate the news article
+into a mail message,
+such that the entire article
+(headers and body)
+are part of the body of the mail message.
+The convention here is that such mail is sent to user
+.i rnews
+on the remote system.
+A mail message body is generated by prepending the letter
+.qp N
+to each line of the news article,
+and then attaching whatever mail headers are convenient to generate.
+The
+.qp N 's
+are attached to prevent any special lines in the news article
+from interfering with mail transmission,
+and to prevent any extra lines inserted by the mailer
+(headers,
+blank lines,
+etc.)
+from becoming part of the news article.
+A program on the receiving machine receives mail to
+.i rnews ,
+extracting the article itself and invoking the
+.i rnews
+program.
+An example in this format might look like this:
+.sd
+Date: Monday, 3-Jan-83 08:33:47 MST
+From: news@cbosgd.UUCP
+Subject: network news article
+To: rnews@npois.UUCP
+
+NPath: cbosgd!mhuxj!harpo!utah-cs!sask!derek
+NFrom: derek@sask.UUCP (Derek Andrew)
+NNewsgroups: net.test
+NSubject: necessary test
+NMessage-ID: <176@sask.UUCP>
+NDate: Monday, 3 Jan 83 00:59:15 MST
+N
+NThis really is a test.  If anyone out there more than 6 
+Nhops away would kindly confirm this note I would
+Nappreciate it.  We suspect that our news postings
+Nare not getting out into the world.
+N
+
+.ed
+.pg
+Using mail solves the spooling problem,
+since mail must always be spooled if the destination host is down.
+However,
+it adds more overhead to the transmission process
+(to encapsulate and extract the article)
+and makes it harder for software to give different priorities
+to news and mail.
+.hn 2
+Batching
+.pg
+Since news articles are usually short,
+and since a large number of messages
+are often sent between two sites in a day,
+it may make sense to batch news articles.
+Several articles can be combined into one large article,
+using conventions agreed upon in advance by the two sites.
+One such batching scheme is described here;
+its use is still considered experimental.
+.pg
+News articles are combined into a script, separated by a header of the form:
+.sd
+#! rnews 1234
+.ed
+where
+.i 1234
+is the length,
+in bytes,
+of the article.
+Each such line is followed by an article containing the given number of bytes.
+(The newline at the end of each line of the article is counted as one byte,
+for purposes of this count, even if it is stored as
+.qc "CARRIAGE RETURN\s+2><\s-2LINE FEED" \&.)
+For example,
+a batch of articles might look like this:
+.sd
+#! rnews 207
+From: jerry@eagle.uucp (Jerry Schwarz)
+Path: cbosgd!mhuxj!mhuxt!eagle!jerry
+Newsgroups: net.general
+Subject: Usenet Etiquette -- Please Read
+Message-ID: <642@eagle.UUCP>
+Date: Friday, 19 Nov 82 16:14:55 EST
+
+Here is an important message about USENET Etiquette.
+#! rnews 203
+From: jerry@eagle.uucp (Jerry Schwarz)
+Path: cbosgd!mhuxj!mhuxt!eagle!jerry
+Newsgroups: net.followup
+Subject: Notes on Etiquette article
+Message-ID: <643@eagle.UUCP>
+Date: Friday, 19 Nov 82 17:24:12 EST
+
+There was something I forgot to mention in the last message.
+.ed
+Batched news is recognized because the first character in the message is
+.qp # .
+The message is then passed to the unbatcher for interpretation.
+.hn 1
+The News Propagation Algorithm
+.pg
+This section describes the overall scheme of USENET and the algorithm
+followed by sites in propagating news to the entire network.
+Since all sites are affected by incorrectly formatted articles
+and by propagation errors,
+it is important for the method to be standardized.
+.pg
+USENET is a directed graph.
+Each node in the graph is a host computer,
+and each arc in the graph is a transmission path
+from one host to another host.
+Each arc is labelled with a newsgroup pattern,
+specifying which newsgroup classes are forwarded along that link.
+Most arcs are bidirectional,
+that is,
+if site
+.cn A
+sends a class of newsgroups to site
+.cn B ,
+then site
+.cn B
+usually sends the same class of newsgroups to site
+.cn A .
+This bidirectionality is not,
+however,
+required.
+.pg
+USENET is made up of many subnetworks.
+Each subnet has a name,
+such as
+.ng net
+or
+.ng btl .
+The special subnet
+.ng net
+is defined to be USENET,
+although the union of all subnets may be a superset of USENET
+(because of sites that get local newsgroup classes but do not get
+.ng net.all ).
+Each subnet is a connected graph,
+that is,
+a path exists from every node to every other node in the subnet.
+In addition,
+the entire graph is
+(theoretically)
+connected.
+(In practice,
+some political considerations have caused some sites
+to be unable to post articles reaching the rest of the network.)
+.pg
+An article is posted on one machine to a list of newsgroups.
+That machine accepts it locally,
+then forwards it to all its neighbors that are interested
+in at least one of the newsgroups of the message.
+(Site
+.cn A
+deems site
+.cn B
+to be \*(lqinterested\*(rq in a newsgroup
+if the newsgroup matches the pattern on the arc from
+.cn A
+to
+.cn B .
+This pattern is stored in a file on the
+.cn A
+machine.)
+The sites receiving the incoming article examine it
+to make sure they really want the article,
+accept it locally,
+and then in turn forward the article to all
+.i their
+interested neighbors.
+This process continues until the entire network has seen the article.
+.pg
+An important part of the algorithm is the prevention of loops.
+The above process would cause a message to loop along a cycle forever.
+In particular,
+when site
+.cn A
+sends an article to site
+.cn B ,
+site
+.cn B
+will send it back to site
+.cn A ,
+which will send it to site
+.cn B ,
+and so on.
+One solution to this is the history mechanism.
+Each site keeps track of all articles it has seen
+(by their message ID)
+and whenever an article comes in that it has already seen,
+the incoming article is discarded immediately.
+This solution is sufficient to prevent loops,
+but additional optimizations can be made to avoid sending articles to sites
+that will simply throw them away.
+.pg
+One optimization is that an article should never be sent to a machine
+listed in the
+.hf Path
+line of the header.
+When a machine name is in the
+.hf Path
+line,
+the message is known to have passed through the machine.
+Another optimization is that,
+if the article originated on site
+.cn A ,
+then site
+.cn A
+has already seen the article.
+(Origination can be determined by the
+.hf Posting-Version
+line.)
+.P
+Thus,
+if an article is posted to newsgroup
+.ng net.misc ,
+it will match the pattern
+.ng net.all
+(where
+.ng all
+is a metasymbol that matches any string),
+and will be forwarded to all sites that subscribe to
+.ng net.all
+(as determined by what their neighbors send them).
+These sites make up the
+.ng net
+subnetwork.
+An article posted to
+.ng btl.general
+will reach all sites receiving
+.ng btl.all ,
+but will not reach sites that do not get
+.ng btl.all .
+In effect,
+the articles reaches the
+.ng btl
+subnetwork.
+An article posted to newsgroups
+.ng net.micro,btl.general
+will reach all sites subscribing to either of the two classes.
diff --git a/usr/contrib/news/doc/tmac.n b/usr/contrib/news/doc/tmac.n
new file mode 100644 (file)
index 0000000..d0e82c2
--- /dev/null
@@ -0,0 +1,647 @@
+.\" 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
+.\"
+.\" **********
+.\" 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
+.              el .if (\\n(nlu+1v)>=(\\n(.pu+\\n(fpu) .ch fo \\n(nlu+1u
+.      \}
+.\}
+..
+.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
+..
+.\" section
+.de hu                                 \" header, unnumbered
+.if !\\n(it .bt                                \" end the title and such
+.br                                    \" force out previous line
+.b
+.ps \\n(ps
+.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
+..
+.de hn                                 \" header, numbered
+.hu
+.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
+\\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
+\\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
+\\n(h0.\\n(h1.\\n(h2.
+.\}
+.el \{\
+.      nr h3 +1                        \" add 1 to the section number
+\\n(h0.\\n(h1.\\n(h2.\\n(h3.
+.\}
+.if \\n(.$=2 \\$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
+.br                                    \" flush out remaining line
+.tf                                    \" dump any footnotes
+.                                      \" 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\\*(dg\\$1
+.      fn                              \" put out the footnote
+\\&\\*(dgPDP-11 is a 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\\*(dg\\$1
+.      fn                              \" put out the footnote
+\\&\\*(dgUNIX is a trademark of AT&T Bell Laboratories.
+.      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\\*(dg\\$1
+.      fn                              \" put out the footnote
+\\&\\*(dgVAX 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
+.ds dy "\*(mo \n(dy, 19\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 dg *
+.      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
+.\}
+.if t \{\
+.                                      \" string registers
+.      ds dg \(dg
+.      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 vr "News Version B2.10.3
+.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
+.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
+.\" 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