From: Bill Wohler <wohler@sap-ag.de>
Subject: NN Frequently Asked Questions (FAQ) with Answers
X-Last-Updated: 1992/07/01
Followup-To: poster
Summary: This document answers Frequently Asked Questions about NN, a
	 menu-based, point and shoot, USENET news reader.  It should
	 be read by anyone who wishes to post to news.software.nn.
Keywords: FAQ nn news question answer newsrc digest article nntp
          newsgroup cancel mail signature header netnews usenet kill
Supersedes: <nn-faq_712645215@athena.mit.edu>
Reply-To: Bill Wohler <wohler@sap-ag.de>
Organization: SAP AG, Walldorf, Germany
Date: Mon, 31 Aug 1992 05:01:27 GMT
Expires: Wed, 14 Oct 1992 05:00:12 GMT

Archive-name: nn-faq
Last-modified: $Date: 1992/07/01 07:49:31 $
Version: $Revision: 92.7 $
  
  This is a living list of frequently asked questions on the Usenet
  news reader NN (No News is Good News).  The point of this is to
  circulate existing information, and avoid rehashing old answers.
  Better to build on top than start again.  Please read this document
  before ever posting to this newsgroup.
  
  This article is posted monthly.  If it has already expired and
  you're not reading this, you can hope that you saved the last bit of
  question 3 so that you can get a copy yourself.
  
  When someone posts a frequently-asked question, I will point out to
  them that the answer is here to ensure that everybody gets their
  question answered fully and to eliminate unnecessary traffic in this
  newsgroup.  Please note that posted answers that are in the FAQ are
  just as annoying as posted questions that are in the FAQ!
  
  Your comments, additions and fixes to this list are welcome: please
  send them to Bill Wohler <wohler@sap-ag.de>.  Complete, accurate and
  grammatically correct answers are appreciated to reduce the time I
  have to take to test or edit your answers.
  
  
Subject: Table of Contents
From: Preface

Legend: + new, - deleted, ! changed

Introductory

 1.  Why should I use nn?
!2.  Where can I get nn?
 3.  What references exist for nn?
 4.  How should I report bugs?
 5.  How can I convert from rn to nn?
 6.  How can I make life simpler when starting nn for the first time?
 7.  Is there an X interface to nn?
 8.  Is Kim male or female?
!9.  What is the status of nn?

Building nn

 10. What machines does nn run on?
 11. Is it possible to restrict the groups that users have access to?
 12. Unofficial patches for various bugs

Using nn

 20. How do I save files that I can read later with MH, elm, Mail, ...?
 21. How come nn doesn't show the Lines count?
 22. How can I find all articles having to do with a certain topic?
 23. How can I set a different Organization name?
 24. Can all non-selected subjects be automatically placed in my kill file?
 25. Can I automatically kill articles based on the Newsgroups header?
 26. How can I select one article in a thread with auto-select-subject set?
 27. Is there a library of macros and other nn features?
 28. Can one search for patterns in the entire article from the menu?
 29. How can I remove old articles from folders?
 30. What's the best way to save multi-part articles?
 31. When saving in +a/b/c keeps you from saving in +a/b.
!32. Can I use my mailer to send mail?
 33. How can I see the original article with the current subject?
 34. Can I choose newsgroups as I do articles, ie. with a menu?
 35. How can I post prewritten articles with nn?
 36. How do I eliminate double signatures?
!37. Can the signature come from a different file or program?
 38. How can I make mail replies go to a different machine?
 39. How come more articles get selected than I expect?  
 40. Any plans for trn-ish thread following?  
 41. Setting new-group-action to "ask before adding" doesn't work.
 42. Why does nn crash when a letter one past the highest letter is selected?
 43. Why do articles without a Lines header appear empty?

nnmaster

!50. Why does nnmaster stop collecting articles at the "junk" group?
!51. How do I cope with "Incomplete MASTER file"?
!52. Why isn't nnmaster working?  

  
Subject: ! Viewing This Article
From: Preface
  
  To skip to a particular question numbered xx, use "/^F.*xx" with most
  pagers.  In GNU Emacs type "M-C-s ^F.*xx", (or C-r to search backwards),
  followed by ESC to end the search.  "-xx" is often sufficient.
  
  To skip to new or changed questions, use "/^S.*[!+]" with most pagers and
  "M-C-s ^S.*[!+]" in GNU Emacs.
  
  This article is in digest format.  Nn may have already broken this
  message into separate articles; if not, then type "G %".  In rn, use
  ^G to skip sections.
  
  This article is treated as an outline when edited by GNU Emacs.
  Run "M-x describe-mode" to see available outline-mode commands.
  Useful commands are "C-c C-s" (show-subtree) and "M-x show-all"
  
  Contributer's E-Mail addresses can be found at the bottom of this article.
  
  
Subject: Why should I use nn?
From: Intro-1
  
  nn is a menu based (point and shoot) netnews reader with a complete
  set of features to satisfy both the expert and the novice user.  Since
  its first release in Denmark in 1984 (!), in Europe in 1988, and the
  global release in June 1989, it has replaced rn and other well-known
  news readers at many sites.
  
  Some of the key features of nn are:
  
  * Menu-based article selection prior to reading the articles with the
    articles sorted according to subject and posting time.
  
    This significantly reduces the time spent on news reading.  No
    keystrokes are wasted on articles you don't want to read, and only
    the articles selected on the menu will be read.
  
  * Release 6.4 uses standard .newsrc, and can leave individual
    articles unread.
  
  * Digests are automatically split and presented as ordinary articles!
    You can transparently save and respond to individual subarticles.
  
  * Full folder support: read, save, and delete individual articles.
  
  * Online help and manual.
  
  * Built-in unshar and patch functions.
  * Built-in uudecode function which will automatically unpack,
    concatenate, and decode multi-part postings.
  
  * Easy remapping of keys with advanced macro definition features.
  
  * Automatic kill & selection of articles based on subject or author.
  
  * User specified presentation sequence of news groups based on the
    news group hierarchy.
  
  * Whole classes of news groups can easily be unsubscribed
    permanently, e.g. talk.all and all.politics
  
  * Related groups can be merged and presented as a single group, e.g.
    comp.emacs and all gnu.emacs groups.
  
  * Blindingly fast 'search for subject'.  On my Texas S1500 system, nn
    uses less than 20 seconds to find all articles on a specific
    subject among 64000 articles in all groups!
  
  * News collection and presentation is extremely fast, because nn uses
    its own database on top of the standard news system.
  
  * In a distributed environment, the database can be shared among all
    hosts on the network.  Only one daemon is needed on the news server
    for all hosts.  This works in a heterogenous environment as well.
  
  * NNTP is also supported (using a local database for speed).
  
  Because of the database, nn starts almost equally fast (in a few
  seconds), no matter whether you have 100 or 10000 unread articles!
  The database takes up some disk space, but dramatically improves speed
  and functionality.  The amount of disk space consumed is approx. 1Mb
  per 10000 articles.
  
  
Subject: ! Where can I get nn?
From: Intro-2
  
  The current version of nn is 6.4.16.
  
  Note that tar files with the name of nn6.4.tar.Z (ie. not
  nn6.4.16.tar.Z) do *not* include the patches.  Don't even think of
  compiling unless the PATCHLEVEL defined in patchlevel.h is 16.
  
  via anonymous ftp:
    dkuug.dk [129.142.96.41]
      pub/nn6.4/nn64.tarZa[a-f]			~90k each
      pub/nn6.4/nn6.4.patch[1-16].Z		~25k each
    munnari.oz.au [128.250.1.21]
      pub/news/nn
    sirius.ucs.adelaide.edu.au [129.127.40.3]
      pub/news/nn6.4/nn6.4.tar.Z		485k
      pub/news/nn6.4/nn6.4.patch[1-10].Z 	~25k each
    cutmcvax.cs.curtin.edu.au [134.7.1.1]
      pub/nn-patches/patch[01-16].Z		~25k each
    mtecv2.mty.itesm.mx [131.178.1.5]
      pub/nn/nn6.4.16.tar.Z
      pub/nn/nn6.4/nn6.4.patch[1-16].Z
      pub/nn/NN_FAQ_with_Answers
    ghost.dsi.unimi.it [131.175.10.64]
      pub/nn.6.4.16.tar.Z			766k
      pub/nntp.1.15.11.tar.Z			284k
    ftp.uu.net [137.39.1.9]
      news/readers/nn/nn6.4.tar.Z		485k
      news/readers/nn/nn6.4.patch[1-16].Z	<30k each
    uk.ac.soton.ecs (NIFTP)
      login ID "guest", password of your mail ID (must include an "@"):
      <PUB>/nn6.4.16.tar.Z			621637
      <PUB>/nn6.4.patch[1-16].Z			~25000
      <PUB>/nntp-1.5.11.tar.Z			210319
  
  via anonymous uucp:
    Anyone in the U.S. can get nn source and patches by anonymous
    uucp from uunet by using their 900 number which costs 40
    cents/minute (you don't have to be a uunet subscriber).  The
    number is 1-900-468-7727, login: uucp, no password.  See
    uunet!~/help (~5k) for more info or get uunet!~/index/README (~4k)
    for a current full directory listing.  --Gary Morris
  
	uunet!~/news/nn/nn6.4.tar.Z       (~485k)
	uunet!~/news/nn/nn6.4.patch1.Z    (~15k)
		  ...
	uunet!~/news/nn/nn6.4.patch16.Z   (~24k)
  
  via mail:
    Send a note to ftpmail@decwrl.dec.com whose body contains "help"
    on a line by itself get information on getting ftp sources by
    mail.
  
    Please let me know if you know of any mail servers worldwide that
    have nn.
  
  
Subject: What references exist for nn?
From: Intro-3 
  
  Usenet:
    news.software.nn
  
  Mailing list:
  
  NN mailing list archives:
  
  Papers:
    "Intro to nn"
    ux1.cso.uiuc.edu [128.174.5.59]:doc/net/nn.<format>
    where <format> is one from doc, ps, tex, jpn, and hqx.
  
    "A Short Guide to nn"
    unlinfo.unl.edu:pub/crc.docs/NN.doc/nn.manual.ascii
  
  This document:
    via anonymous ftp:
      pit-manager.mit.edu	[18.172.1.27]	/pub/usenet/news.answers/nn-faq
      ftp.uu.net		[137.39.1.9]	/usenet/???
      cnam.cnam.fr		[192.33.159.6]	/pub/FAQ/???
      grasp1.univ-lyon1.fr	[134.214.100.25] /pub/faq/???
      archive.cs.ruu.nl		[131.211.80.5]	/pub/NEWS.ANSWERS/???
  
    via mail:
      Each of the following addresses is following by commands which
      should be included as the body of the message.
      
      mail-server@pit-manager.mit.edu
        send usenet/news.answers/nn-faq
      mail-server@cs.ruu.nl
      listserv@grasp1.univ-lyon1.fr
  
  
Subject: How should I report bugs?
From: Intro-4
  
  Either mail them to nn-bugs@dkuug.dk and be sure to include the
  version number as well as what hardware and operating system you are
  using, or better yet, use the :bug command within nn.
  
  
Subject: How can I convert from rn to nn?
From: Intro-5
  
  Why bother?  On our system some people use nn and some people use
  rn.  In fact, since they both use the same .newsrc format, it is
  perfectly possible to use both.  --Ian Taylor
  
  
Subject: How can I make life simpler when starting nn for the first time?
From: Intro-6
  
  I think a nice way is to use the catch-up facility.  Start nn -a0
  and let nn catch up automatically.  After some hours restart nn and
  unsubscribe to uninteresting groups having news articles.  Restart
  nn the following day and continue unsubscribing.
  
  After one week, you have a nice .newsrc.  --Joerg Napp
  
  
Subject: Is there an X interface to nn?
From: Intro-7 
  
  No.
  
  
Subject: Is Kim male or female?
From: Intro-8
  
  This remains one of life's little mysteries!  [but if you really want
  to know, see below.]
  
  
Subject: ! What is the status of nn?
From: Intro-9
  
  From: storm@texas.dk (Kim F. Storm)
  Subject: What will happen with nn ?
  Date: 9 Jan 92 12:12:30 GMT
  
  Hello nn-fans!
  
  I have been silent for a long time, and I know many of you have wondered
  what happened - and consequently what the future of nn would be.
  
  The simple answer is that I had no time left over to work on nn
  and with no time to work seriously on it my interest in it degraded.
  
  Unfortunately, I left nn at patchlevel 6.4.16 which has quite a
  number of fatal or at least irritating bugs in it.  Patches for
  the worst of the bugs have been issued by other nn users on the net
  (I'm very greatful for your support!).
  
  I would like very much to get nn into a cleaner state than it is
  in right now, and maybe I will be able to find some time over the
  next couple of weeks to put together a set of patches for most of
  the bugs.
  
  I also regret to tell you that I do have some (almost) working code
  for the "group menu" mode everybody seems to want, but I haven't
  had time to complete it and get it into a clean state (with
  documentation etc.)
  
  I have also been working on a much more flexible syntax for hte
  init files, and that is also working 98%.
  
  All of this I left off in a pretty messy state back in May 91,
  and I don't quite know how to proceed.  If I get the time, I
  may decide to put together a release 6.5 with the new features
  in it, but before I do that, I will require three things:
  
  1) That there are some sites that volounteer to alpha/beta
     test it thoroughly, and
  
  2) One of these sites volounteer to follow up on the alpha/beta
     testing (and bug fixing), and eventually put together the final 6.5
     package (I will not have the time to do that), and
  
  3) there is at least one site/person who is prepared to take on the
     support of release 6.5, i.e. issue regular patches for
     whatever problems arise (but not add any new features to it).
  
  Even with those requirements fulfilled, I cannot promise that I
  will have to time to put together a 6.5 alpha release, but if
  there is enough interest, I will certainly try!
  
  ++Kim
  
  [And now a word from your friendly FAQ maintainer.]
   
  Kim has asked that he be contacted at nn-bugs@dkuug.dk with nn
  matters. 
  
  In the meantime, please continue to mail problems, suggestions and
  fixes to nn-bugs@dkuug.dk, or use nn's :bug command, so that they
  may be addressed at some point in the future.  In particular,
  anything posted to news.software.nn is *not* guaranteed to find its
  way into future releases.
  
  
Subject: What machines does nn run on?
From: Building nn-10
  
  Operating systems:
  
  3b1 (unix-pc) with GCC		SunOS 3
  NeXT 1.0				SunOS 4.0
  AIX 2.2.1				SunOS 4.1 SysV environment
  A/UX 1.1				System V
  4.2 BSD and Ultrix systems		Motorola System V/88 Release 3
  4.3 BSD systems			Texas Instruments System 1500
  dnix 5.2 on DIAB DS90			NCR tower
  dnix 5.3 on DIAB DS90			ULTRIX systems (4.2 based)
  Dynix 3.0 on Symmetry			Mips running riscos 4.0 or greater
  Fortune 32:16				Riscos 4.5 and later
  HPUX (series 300)			Microport UNIX V.2
  HPUX 2.1 (series 800)			Amdahl UTS 2.0
  HPUX 3.0 (series 800)			SCO Xenix 2.2.1 (286) -- terminfo
  HPUX 6.5 or newer (series 300)	SCO Xenix 286 -- termcap
  HPUX 7.0				Xenix386 [termcap version]
  Interactive UNIX on 386		Xenix386 2.3.2 w/development system
  Dynix/PTX on symmetry			Tandy 68000/Xenix 3.2
  Pyramid (and Targon 35)
  SCO UNIX V on 386
  IRIX 3.1/3.2
  Siemens SINIX
  
  Hardware platforms:
  
  3b1 with GCC [no networking]		MIPS processors
  Amdahl 5890 (big iron)		Siemens MX300
  AT&T 3b2				Pyramid (and Targon 35)
  Convex				IBM 6150
  DECstation 3100			Silicon Graphics 4D series
  Gould PN6000				SPARC processors
  HP9000 series 320 and 800 (at least)	80386 based SUNs [have network support]
  Intel 80286 [no networking]		Sequent Symmetry
  Intel 80386 [no networking]		VAX family
  Motorola 68000 family
  Motorola 88000 risc
  
  
Subject: Is it possible to restrict the groups that users have access to?
From: Building nn-11
  
  Create a new group for the people who can read the special groups.
  Call it "privnews", for example. (In /etc/group put the userid of
  each person who's in that group on that group's line.)  Then change
  the group of the spool directory which contains the restricted
  newsgroup to "privnews" (leaving the owner as news), and set the
  mode to 750. --Alexis Rosen
  
  
Subject: Unofficial patches for various bugs
From: Building nn-12 
  
  Several bugs have been reported and fixed and the patches are
  available here for those not patient enough to wait until the next
  release.  Remember, these are *unofficial* patches so back them out
  before patching in the next release of nn.
  
  Why does nn crash when I select an article 1 past the last
  displayed?  
  
  The answer is an off by one bug in menu.c:
  
  *** menu.c	Sun Jun 28 18:47:30 1992
  --- menu.c.new	Sun Jun 28 18:48:08 1992
  ***************
  *** 725,731 ****
    	article_id = map & ~K_ARTICLE_ID;
    	map = K_ARTICLE_ID;
    
  ! 	if (article_id < 0 || article_id > menu_articles) {
    	    ding();
    	    goto loop;
    	}
  --- 725,731 ----
    	article_id = map & ~K_ARTICLE_ID;
    	map = K_ARTICLE_ID;
    
  ! 	if (article_id < 0 || article_id >= menu_articles) {
    	    ding();
    	    goto loop;
    	}
  
  --David Wilson <david@cs.uow.edu.au>
  
  The following patches cover the following problems:  
  
	- core dump due to consolidating (closing) last subject in a group
	  under certain circumstances.
	- selecting consolidated articles with = command does not highlight
	  the selected consolidated articles correctly.
	- fixed unconditional CLEAR TO END OF LINE that erases next line.
  
  *** /tmp/,RCSt1004819	Thu Nov 14 16:29:08 1991
  --- menu.c	Thu Nov 14 16:29:16 1991
  ***************
  *** 399,406 ****
	  else {
	      if (collapse_subject > 0)
		  so_printf("%-.*s", collapse_subject, ah->subject);
  ! 	    lsubj -= 2 + collapse_subject;
  ! 	    so_printf("<>%s", ah->subject + ah->subj_length - lsubj);
	  }
	}
  
  --- 399,405 ----
	  else {
	      if (collapse_subject > 0)
		  so_printf("%-.*s", collapse_subject, ah->subject);
  ! 	    so_printf("<>%s", ah->subject + ah->subj_length - lsubj + collapse_subject + 2);
	  }
	}
  
  ***************
  *** 408,414 ****
	  so_printf(ah->lines >= 0 ? " +%d" : " +?", ah->lines);
  
	so_end();
  !     if (ah->flag & A_CLOSED) clrline_noflush();
  
     out:
	ah->disp_attr = last_attr;
  --- 407,414 ----
	  so_printf(ah->lines >= 0 ? " +%d" : " +?", ah->lines);
  
	so_end();
  !     if ((ah->flag & A_CLOSED) && lsubj > ah->subj_length)
  !         clrline_noflush();
  
     out:
	ah->disp_attr = last_attr;
  ***************
  *** 455,461 ****
    {
	register article_number i;
	register article_header *ah, **ahp;
  !     int count = 0, o_cura;
	extern int kill_file_loaded;
  
	if (mode == 1 && re == NULL) 
  --- 455,461 ----
    {
	register article_number i;
	register article_header *ah, **ahp;
  !     int count = 0, o_cura, should_mark;
	extern int kill_file_loaded;
  
	if (mode == 1 && re == NULL) 
  ***************
  *** 462,474 ****
	  if (!kill_file_loaded && !init_kill()) return 0;
  
	o_cura = cura;
  !     cura = -1;
  
	for (i = 0, ahp = articles; i < n_articles; i++, ahp++) {
	  ah = *ahp;
  ! 	if (cura >= 0 && (ah->flag & A_ROOT_ART)) {
  ! 	    mark();
  ! 	    cura = -1;
	  }
	  if (re != NULL) {
	      if (!regexec_cf(re, select_on_sender ? ah->sender : ah->subject)) continue;
  --- 462,481 ----
	  if (!kill_file_loaded && !init_kill()) return 0;
  
	o_cura = cura;
  !     should_mark = 0;
  
  +     /*
  +      * note: this code assumes that a visible article will be found
  +      * before anything is marked
  +      */
	for (i = 0, ahp = articles; i < n_articles; i++, ahp++) {
	  ah = *ahp;
  ! 	if (IS_VISIBLE(ah)) {
  ! 	    if (should_mark) {
  ! 		mark();
  ! 		should_mark = 0;
  ! 	    }
  ! 	    cura = i - firsta;
	  }
	  if (re != NULL) {
	      if (!regexec_cf(re, select_on_sender ? ah->sender : ah->subject)) continue;
  ***************
  *** 478,493 ****
	  count++;
	  if (ah->attr & A_SELECT) continue;
	  ah->attr = A_SELECT;
  ! 	if (firsta <= i && i <= (firsta+numa)) {
  ! 	    cura = i - firsta;
  ! 	    if ((ah->flag & A_CLOSED) == 0) {
  ! 		mark();
  ! 		cura = -1;
  ! 	    }
  ! 	}
	}
  
  !     if (cura >= 0) mark();
  
	if (count)
	  msg("Selected %d article%s", count, plural((long)count));
  --- 485,495 ----
	  count++;
	  if (ah->attr & A_SELECT) continue;
	  ah->attr = A_SELECT;
  ! 	if (firsta <= i && i <= (firsta+numa))
  ! 	    should_mark = 1;
	}
  
  !     if (should_mark) mark();
  
	if (count)
	  msg("Selected %d article%s", count, plural((long)count));
  ***************
  *** 1639,1644 ****
  --- 1641,1647 ----
	   }
	   cura = article_id;
	   next_cura = next_root_article(firsta + cura) - firsta;
  + 	 if (next_cura < 0 || next_cura > numa) next_cura = 0;
	   if (cura >= 0) goto partial_redraw_nc;
	   articles[cura + firsta]->menu_line = articles[firsta]->menu_line;
	   firsta += cura;
  
  --Larry Bouzane <larry@garfield.cs.mun.ca>
  
  These changes are all related to consolidated-menu mode within NN.
  
	- possible core dump/strange behavior when using '=' command
	  to return to the menu from article reading mode.  (Reported
	  by Olaf Schlueter [olaf@oski.toppoint.de])
  
	- articles marked as A_LEAVE_NEXT ('=') are not given any
	  special attention in consolidated menu mode.  I considered
	  this incorrect (I leave stuff around all the time :) and
	  modified nn's behavior to notice them.
  
	- unable to de-select an auto-selected subject when using
	  consolidated-menu mode.
  
  *** /tmp/,RCSt1023579	Sun Dec  1 22:23:33 1991
  --- menu.c	Sun Dec  1 16:42:23 1991
  ***************
  *** 82,87 ****
  --- 82,88 ----
	int mi_total;	/* total number of articles with this subject */
	int mi_unread;	/* no of unread articles with this subject */
	int mi_selected;	/* no of selected articles with this subject */
  +     int mi_left;	/* no of articles marked for later viewing */
	int mi_art_id;	/* article id (for mark()) */
    } menu_info[INTERVAL1+INTERVAL2];
  
  ***************
  *** 138,146 ****
	if (ah->flag & A_ROOT_ART)
	  return root;
  
  -     if (ah->flag & A_CLOSED)	/* only root article is shown on menu */
  - 	return firsta + menu_info[ah->menu_line].mi_cura;
  - 
	while (root > 0) {
	  if (articles[root]->flag & A_ROOT_ART) break;
	  root--;
  --- 139,144 ----
  ***************
  *** 172,187 ****
    {
	register struct menu_info *mi;
	register article_number n;
  !     int total, unread, selected, invisible;
  
	if (!(articles[art]->flag & A_CLOSED)) return art + 1;
  
  !     total = unread = selected = 0;
	n = art = root_article(art);
  
	while (n < n_articles) {
	  if (articles[n]->attr == 0) unread++;
	  else if (articles[n]->attr & A_SELECT) selected++; 
	  total++;
	  if (++n == n_articles) break;
	  if (articles[n]->flag & A_ROOT_ART) break;
  --- 170,186 ----
    {
	register struct menu_info *mi;
	register article_number n;
  !     int total, unread, selected, left, invisible;
  
	if (!(articles[art]->flag & A_CLOSED)) return art + 1;
  
  !     total = unread = selected = left = 0;
	n = art = root_article(art);
  
	while (n < n_articles) {
	  if (articles[n]->attr == 0) unread++;
	  else if (articles[n]->attr & A_SELECT) selected++; 
  + 	else if (articles[n]->attr == A_LEAVE_NEXT) left++;
	  total++;
	  if (++n == n_articles) break;
	  if (articles[n]->flag & A_ROOT_ART) break;
  ***************
  *** 192,197 ****
  --- 191,197 ----
	mi->mi_total = total;
	mi->mi_unread = unread;
	mi->mi_selected = selected;
  +     mi->mi_left = left;
	return n;
    }
  
  ***************
  *** 206,215 ****
    register struct menu_info *mi;
    char *cbuf;
    {
  !     char sel[10], unr[10];
	attr_type cattr;
  
  !     if (mi->mi_unread == 0)
	  cattr = A_READ;
	else if (mi->mi_total == mi->mi_selected)
	  cattr = A_SELECT;
  --- 206,217 ----
    register struct menu_info *mi;
    char *cbuf;
    {
  !     char lft[10], sel[10], unr[10];
	attr_type cattr;
  
  !     if (mi->mi_total == mi->mi_left)
  ! 	cattr = A_LEAVE_NEXT;
  !     else if (mi->mi_unread == 0)
	  cattr = A_READ;
	else if (mi->mi_total == mi->mi_selected)
	  cattr = A_SELECT;
  ***************
  *** 220,231 ****
	else
	  cattr = 0;
  
  !     sel[0] = unr[0] = NUL;
	if (mi->mi_selected && mi->mi_selected < mi->mi_unread)
	  sprintf(sel, "%d/", mi->mi_selected);
	if (mi->mi_unread && mi->mi_unread < mi->mi_total)
	  sprintf(unr, "%d:", mi->mi_unread);
  !     sprintf(cbuf, "%s%s%d", sel, unr, mi->mi_total);
  
	return cattr;
    }
  --- 222,235 ----
	else
	  cattr = 0;
  
  !     lft[0] = sel[0] = unr[0] = NUL;
  !     if (mi->mi_left && mi->mi_left < mi->mi_unread)
  ! 	sprintf(lft, "%d,", mi->mi_left);
	if (mi->mi_selected && mi->mi_selected < mi->mi_unread)
	  sprintf(sel, "%d/", mi->mi_selected);
	if (mi->mi_unread && mi->mi_unread < mi->mi_total)
	  sprintf(unr, "%d:", mi->mi_unread);
  !     sprintf(cbuf, "%s%s%s%d", lft, sel, unr, mi->mi_total);
  
	return cattr;
    }
  ***************
  *** 268,273 ****
  --- 272,278 ----
	  thread_counters(firsta + cura);
	  if (old.mi_total == mi->mi_total &&
	      old.mi_selected == mi->mi_selected &&
  + 	    old.mi_left == mi->mi_left &&
	      old.mi_unread == mi->mi_unread) return;
  
	  cattr = closed_attr(mi, cbuf);
  ***************
  *** 619,626 ****
  
	       case MC_MENU:
		  ah->attr = o_attr;
  ! 		if (nexta - firsta < n_articles)
  ! 		    if ((firsta = cur - 5) < 0) firsta = 0;
		  next_cura = cur - firsta;
  
		  return MC_MENU;
  --- 624,642 ----
  
	       case MC_MENU:
		  ah->attr = o_attr;
  ! 		if (nexta - firsta < n_articles) {
  ! 			/* Keep a little article context by making the */
  ! 			/* current article go on menu line 6 if possible */
  ! 			if (IS_VISIBLE(articles[cur]))
  ! 				firsta = cur;
  ! 			else
  ! 				firsta = root_article(cur);
  ! 			for (next = 0; firsta > 0 && next < 5; next++) {
  ! 				firsta--;
  ! 				if (!IS_VISIBLE(articles[firsta]))
  ! 					firsta = root_article(firsta);
  ! 			}
  ! 		}
		  next_cura = cur - firsta;
  
		  return MC_MENU;
  ***************
  *** 819,826 ****
    attr_type old, new;
    int update;
    {
  !     return repl_attr(root_article(firsta+cura), next_root_article(firsta+cura),
  ! 		     old, new, update);
    }
  
    static repl_attr_all(old, new, update)
  --- 835,847 ----
    attr_type old, new;
    int update;
    {
  !     int	f, l;
  ! 
  !     f = root_article(firsta+cura);
  !     l = next_root_article(firsta+cura);
  !     if (old == A_SELECT)
  ! 	(void) repl_attr(f, l, A_AUTO_SELECT, A_SELECT, update);
  !     return repl_attr(f, l, old, new, update);
    }
  
    static repl_attr_all(old, new, update)
  
  --Larry Bouzane <larry@garfield.cs.mun.ca>
  
  
Subject: Can I set up nn securely?
From: Building-13
  
  Diffs are unfortunately not included, but this is what you can do:
  
  o Set shell-restrictions in the setup file.
  o Set and lock *every* variable which is used to execute commands.
  o Modify the source to avoid display/save/print files above the
    home-directory if shell-restrictions is set (mainly in save.c).
  o Modify the source to avoid changing directories if shell-restrictions
    is set.
  o Modify the source to avoid showing the contents of locked variables.
  
  In particular, the following variables should be locked:
  
  backup-folder-path, backup-suffix, bug-report-address, decode-header-file,
  editor, folder, inews, mail, mail-record, mailer, news-record, newsrc,
  pager, patch-command, printer, record, spell-checker, unshar-header-file  
  
  
Subject: How do I save files that I can read later with MH, elm, Mail, ...?
From: Using nn-20 
  
  MH:
     Save your files to +$F/$N.  For example, if you save message 10
     in news.software.nn in this way, you will create a file called
     ~/News/news/software/nn/10.  If you have a symbolic link from
     ~/Mail/news to ~/News, then you can look at your saved nn
     messages with "scan +news/news/software/nn".  --Bill Wohler
  
  Mail
     Add "set mail-format" to your init file.  
  
  
Subject: How come nn doesn't show the Lines count?
From: Using nn-21 
  
  Karl Kleinpaste writes:
    C News sites can turn on Lines: header creation (we do here), but
    the default has it turned off.  I wish more would turn it on, as
    several newsreaders put it to use, and it's the most easily
    available metric of article size when showing the user a menu of
    available articles.
  
  Henry Spencer replies:
    We're unenthusiastic about Lines:, which is why it's off by default
    and little-documented.  *The* most easily available metric of
    article size is not line count -- which is often slightly wrong, by
    the way -- but byte count, which is available without even parsing
    the headers.
  
    You can tell C News to add Lines: headers to articles *posted*
    locally, but C News has no provision for adding headers to traffic
    coming in from other sites.  [Specifically, search for the string
    "uncomment" in inews, and uncomment those lines. --bw]
  
  But Paul Eggert and Luc Rooijakkers provide a solution:
  
    The following *unofficial* patch to NN 6.4.16 solves the problem
    if your nnmaster accesses the news files directly (i.e. not via
    NNTP).  Rumor has it that a more complete patch is in the works.
    [remember to remove this patch when the official patch for this
    comes out.  --bw]
    
  ===================================================================
  RCS file: news.c,v
  retrieving revision 1.1
  diff -c2 -r1.1 news.c
  *** news.c	1990/10/23 21:37:38	1.1
  --- news.c	1992/06/19 23:17:05
  ***************
  *** 231,235 ****
        char *parse_header();
        struct stat statb;
  !     int retry;
        FILE *f;
    #ifdef NNTP
  --- 231,235 ----
        char *parse_header();
        struct stat statb;
  !     int c, retry;
        FILE *f;
    #ifdef NNTP
  ***************
  *** 300,309 ****
    	body = parse_header(f, art_hdr_field, modes, buffer1);
    
  - 	news.ng_lines = news.ng_xlines ? atoi(news.ng_xlines) : -1;
    	if (news.ng_from == NULL) news.ng_from = news.ng_sender;
    
  ! 	if (modes & FILL_OFFSETS) {
    	    art->fpos = news.ng_fpos = ftell(f);
    
    	    fseek(f, (off_t)0, 2);
    	    news.ng_lpos = ftell(f);
  --- 300,328 ----
    	body = parse_header(f, art_hdr_field, modes, buffer1);
    
    	if (news.ng_from == NULL) news.ng_from = news.ng_sender;
    
  ! 	if (modes & FILL_OFFSETS)
    	    art->fpos = news.ng_fpos = ftell(f);
    
  + 	if (news.ng_xlines)
  + 	    news.ng_lines = atoi(news.ng_xlines);
  + 	else {
  + #ifdef NNTP
  + 	    if (use_nntp && lazy) {
  + 		off_t fpos = ftell(f);
  + 		fclose(f);
  + 		f = nntp_get_article(art->a_number, 2);
  + 		if (f == NULL) return NULL;
  + 		lazy = 0;
  + 		fseek(f, fpos, 0);
  + 	    }
  + #endif
  + 	    news.ng_lines = 0;
  + 	    while ((c = getc(f)) != EOF)
  + 		if (c == '\n')
  + 		    news.ng_lines++;
  + 	}
  + 
  + 	if (modes & FILL_OFFSETS) {
    	    fseek(f, (off_t)0, 2);
    	    news.ng_lpos = ftell(f);
  
Subject: How can I find all articles having to do with a certain topic?
From: Using nn-22
  
  nngrab invokes nn on all articles whose subject or keyword fields
  contain a desired keyword.  This shows one how important it is to
  use descriptive subjects and keywords when posting articles.  For
  more information, read the manual page.
  
  
Subject: How can I set a different Organization name?
From: Using nn-23 
  
  This header (along with the Reply-To:) are user-specified in the
  init file.  An init file may include the lines:
  
  set mail-header Reply-To: steven@Transact.COM;Organization: Transact Software
  set news-header Reply-To: steven@Transact.COM;Organization: Transact Software
  
  You can include any headers that you want in the headers, either in
  mail or news postings, and they may be different.  --Steven M. List
  
  A Reply-To header is useful when your system generates either an
  unwanted or blatantly wrong return address for you.  If this header
  is present, then mailers use it instead of the system generated From
  header.  --Bill Wohler
  
  
Subject: Can all non-selected subjects be automatically placed in my kill file?
From: Using nn-24
  
  This is on the list of things to do.
  
  
Subject: Can I automatically kill articles based on the Newsgroups header?
From: Using nn-25
  
  This is how one can automatically kill crossposted articles, etc.
  
  First, manually either add the following to your .newsrc to mark all
  articles read forever:
  
	alt.flame: 1-2147483647
  
  or add the following to your .nn/kill file to kill all articles in
  the group:
  
	alt.flame:!s/:^
  
  The former method may break down if you ever use nngoback to reset
  numbers in your .newsrc.  The latter method could cause difficulty
  if you ever actually want to read articles in that group.
  
  Near the top of your sequence in your init file put
  
	!alt.flame.
	alt.flame
  
  This makes alt.flame, but not its subgroups, be included as the first
  thing in your sequence; so all articles in it are killed before they
  appear in any other groups.  You might want to put NEW above this so
  you can see if new groups are getting off to a bad start with lots of
  alt.flame crossposting.  Later in the sequence put
  
	% alt %
  
  This allows the rest of the alt hierarchy, including subgroups such
  as alt.flame.spelling (if you subscribe to it), to get included at
  that point in the sequence.
  
  Along with using the default settings of cross-filter-seq=true and
  cross-post=false, this works fine to nuke the crossposted articles.
  --Richard M. Mathews & Dave Shaver
  
  
Subject: How can I select one article in a thread with auto-select-subject set?
From: Using nn-26
  
  Define the following macro to toggle auto-select-subject.  --Steven Grady
  
	map menu A (
		:local auto-select-subject
		:toggle auto-select-subject
		?auto-select-subject=on echo "Auto-select on"
		?auto-select-subject=off echo "Auto-select off"
	)
  
  Use the '.' command.  --Bill Wohler  
  
  
Subject: Is there a library of macros and other nn features?
From: Using nn-27
  
  When complete, it will be a companion posting to this one.  If you
  have not mailed me <wohler@sap-ag.de> your init file, or you have
  made substantial changes since the last time, please send it in.  If
  anyone is handy in perl or awk and would like to write some scripts
  to reduce multiple init files to variable summaries (like the one I
  posted a while ago), macro definitions and presentation sequence
  tricks, I would like to talk to you.
  
  
Subject: Can one search for patterns in the entire article from the menu?
From: Using nn-28
  
  No.
  
  
Subject: How can I remove old articles from folders?
From: Using nn-29
  
  Just open the folder in the usual way and C(ancel) the articles you
  want to remove from the folder.  When you leave the folder, nn will
  rewrite the folder with the "cancel"ed articles removed.  --Kim Storm
  
  
Subject: What's the best way to save multi-part articles?
From: Using nn-30
  
  All you have to do is to save the articles from the menu, e.g.
  
	W(rite) +file.* a b c d... <space>
  
  where a b c d... are the articles on the menu you want to save.  You
  can also save the selected articles on the menu with * (only on
  current page) or + (on all menu pages).  --Kim Storm
  
  
Subject: When saving in +a/b/c keeps you from saving in +a/b.
From: Using nn-31 
  
  This happens when default-save-file is $F.  Try changing
  default-save-file to $F/$N (my favorite) to get, for example,
  +news/software/nn/1022, or $G to put everything in
  +news.software.nn.  Finally, if you really did want the behavior of
  +$F, a compromise would be to use +$F. (Andrew's favorite) instead
  (one can use anything other than '.'). --Bill Wohler & Andrew Swann
  
  Alternatively, use +$F/$L, to place articles for news.software.nn in
  the file +/news/software/nn/nn.  This has two advantages:
  1) You can later read through the folder "nn" and save some of the
    articles under new folder names having to do with the topic.  For
    example, you might save auto-select topics under +$F/auto-sel,
    that is, +/news/software/nn/auto-sel.
  2) If at a later date, a new newsgroup is added below nn, articles
    can still be saved under that subgroup since +/news/software/nn is
    already a directory, not a folder.  --Harry Herman
  
  
Subject: ! Can I use my mailer to send mail?
From: Using nn-32 
  
  Yes.  See the variables mail-alias-expander, mail-script, mailer,
  and mailer-pipe-input.  The following show how you can have nn look
  up mail aliases, and use elm and MH to mail messages.
  
  Richard Reiner shows how one can make the nn mailer look up aliases
  in a .mailrc.
  
  In your init file, put
  
	set mail-alias-expander nn-expand-mail-alias 
  
  where nn-expand-mail-alias is the following short shell script.
  
  #!/bin/sh
  #
  # nn-expand-mail-alias -- expands aliases from ~/.mailrc file for nn.
  #
  # To use, put the following in your ~/.nn/init file:
  #
  #	set mail-alias-expander nn-expand-mail-alias
  #
  # Written by Scott Hannahs, Bitter National Magnet Lab, MIT, August 1991
  # Complaints, comments, ideas to sth@slipknot.mit.edu
  # Tested on Silicon Graphics, IRIX 3.3.1
  #
  # Minor banging by <rreiner@nexus.yorku.ca> to handle alias value fields
  # which contain doublequote characters, e.g.
  #
  #	alias Foo "Foobar the Great <foo@bar.com>"
  #
  # (the doublequotes are stripped in the expansion), and to handle multiple
  # spaces after the token "alias".
  #
  # Also added some error detection and signal traps; tested on SunOS 4.1.1.
  #
  #	Exit codes: 	0 -- normal termination
  #			1 -- parm error
  #			2 -- file does not exist
  #			3 -- trap
  #
  
  if [ z$1 = z ]; then
    myname=`basename $0`
    echo "$myname: usage is  $myname workfile"
    exit 1
  fi
  
  if [ ! -f $1 ]; then
    myname=`basename $0`
    echo "$myname: $1 does not exist or is a directory"
    exit 2
  fi
  
  TMP_DIR=/usr/tmp
  ADDRESS_LIST=""
  
  trap "rm -f ${TMP_DIR}/nn.alias.$$ ; exit 3" 0 1 2 3 15
  
  ALIAS_LIST=`head -1 $1 | sed -e s/To://`
  for ALIAS in $ALIAS_LIST ; do
    ADDRESS=`grep '^[ 	]*alias[ 	]'"$ALIAS"'[ 	]' ${HOME}/.mailrc |\
    sed -e s/'^[ 	]*alias[ 	]'"$ALIAS"'[ 	]*'// |\
    sed -e s/'"'//g`
    if [ "$ADDRESS" ] ; then
      ADDRESS_LIST="$ADDRESS_LIST $ADDRESS"
    else
      ADDRESS_LIST="$ADDRESS_LIST $ALIAS"
    fi
  done
  echo "To:${ADDRESS_LIST}" > ${TMP_DIR}/nn.alias.$$
  tail +2 $1 >> ${TMP_DIR}/nn.alias.$$
  mv -f ${TMP_DIR}/nn.alias.$$ $1
  
  exit 0
  
  The original idea of using MH (namely, comp) to send mail from nn
  came from Jaap Vermeulen, but he wouldn't recognize what I did to
  it.  I also used a suggestion from John Romine and Tom McCain.
  
  Add
  
	set mail-script nn-use-mh
  
  to your init file, where nn-use-mh is the following:
  
  #!/bin/sh
  
  # Obtain value of $WORK and $RECORD
  . ${HOME}/.nn/.param
  
  # Append Fcc: +folder to headers.  The folder is specified in
  # mail-record.
  if [ "$RECORD" != "" ]; then
	awk '
	{
		if ($0 == "" && !done) {
			print "Fcc: +'$RECORD'";
			done = 1;
		}
		print;
	}' $WORK > /tmp/aux.$$ && mv /tmp/aux.$$ $WORK
  fi
  
  # Compose and send the mail
  comp -form $WORK
  
  In addition, you can contact Ray Davis <rdavis@convex.com> for some
  scripts that sort of turn nn into a MH front end by providing macros
  to save, delete and refile articles in MH folders.
  
  Here is an example from Max Heffler for using elm to send the messages.
  
  Add the following to ~/.nn/init:
  
	set   mailer              nn_elm
	unset mailer-pipe-input
  
  Here is nn_elm:
  
  #/bin/sh
  #
  # nn_elm
  #
  # 07 Aug 91             V1.0
  #
  # Massage a mail message from nn into a form that elm can use
  # (c) 1991 Phil Kernick  Wizard Software
  #
  
  eval `awk '
  BEGIN {
    FS = ":";
    dq = sprintf("%c", 34);
  
    headers = 0;
    to = "";
    subject = "";
  }
  
  /^.*: / {
    headers++;
    if($1 == "To")
      to = dq substr($0, 5) dq;
    if($1 == "Subject")
      subject = dq substr($0, 10) dq;
  }
  
  /^$/ {
      printf("tail +%d %s | elm -s %s %s > /dev/null\n", headers+2, mail, subject, to);
      exit;
  }' mail=$1 $1`
  
  exit $?
  
  
Subject: How can I see the original article with the current subject?
From: Using nn-33 
  
  While reading an article, use "G RET RET RET".  --Bill Wohler
  
  
Subject: Can I choose newsgroups as I do articles, ie. with a menu?
From: Using nn-34
  
  No, not yet.  Sorry.
  
  
Subject: How can I post prewritten articles with nn?
From: Using nn-35
  
  nnpost will construct the header for the posted article, so it
  requires several arguments to be specified before the article is
  posted, e.g. a newsgroup name and a subject.  If some arguments are
  missing, nnpost will prompt for the missing arguments.
  
  If your pre-written article includes a full header, then you should
  not use nnpost; instead you should feed the article to "inews -h"
  directly (which is what nnpost does after building the header from
  the arguments).  --Kim Storm
  
  
Subject: How do I eliminate double signatures?
From: Using nn-36
  
  Double signatures occur when both nn and inews append $HOME/.signature.
  
  If you want just inews to append your signature, use:
  
	unset append-signature-post
  
  This is actually the default, but you can unset this variable if
  your nn administrator has mistakenly turned it on.
  
  If you want just nn to append your signature, move your signature to
  some other place than $HOME/.signature.  Then see, "Can the signature
  come from a different file or program?"
  
  
Subject: Can the signature come from a different file or program?
From: Using nn-37
  
  If you want nn to append your .signature file, you can copy nn's aux
  file (ie. /usr/local/lib/nn/aux) to your .nn directory and set the
  mail-script and news-script variables to ~/.nn/aux.  In your copy of
  the aux script, you can either specify a different place for your
  .signature file (like $HOME/.nn/signature) or you can get fancy: you
  can use specific .signatures for certain groups (saved in variable
  "G"), or use the output of a program.  --Bill Wohler
  
  Tired of the same old signature?  Want different signatures for
  different newsgroups?  Here's a program to help you out.
  
  The way it works is to have .signature be a named pipe, so if you
  don't have named points, just say 'n'.
  
  The sigrand program then feeds stuff down the pipe everytime someone
  wants to read it.  That way it works for more than just news, but
  for anything that wants to read your .signature, like a mailer.
  
  You have your choice of three kinds of signatures:
  
      1) random (short) fortune from "fortune -s"; you get these if
	 you don't have a global sig file.
      2) random fortune from ~/News/SIGNATURES [global sig file]
      3) random fortune form ~/News/(newsgroup)/SIGNATURES [local sig files]
  
  Ask Tom Christiansen <tchrist@convex.com> for more details.
  
  
Subject: How can I make mail replies go to a different machine?
From: Using nn-38
  
  See "How can I set a different Organization name?"
  
  
Subject: How come more articles get selected than I expect?  
From: Using nn-39
  
  Check the setting of subject-match-parts. If this is on, then your subjects
  are considered matched if they match up to the first digit. For example
  if subject-match-parts is on, the subjects:
  
	someprogram Part 1/5
	someprogram Part 2/5
  
  are considered matches. So are
  
	v12345: someprogram Part 1/5
	v12346: anotherprogram Part 1/23
  
  as the "v" is identical up to the first digit. If you want to use
  subject-match-parts in a "comp.sources" type group, set
  subject-match-offset (the character position that matches are
  started from) to be beyond any digits that might appear in the first
  part of the subject.  --Dave Hayes
  
  
Subject: Any plans for trn-ish thread following?  
From: Using nn-40
  
  At the moment, no.
  
  
Subject: Setting new-group-action to "ask before adding" doesn't work.
From: Using nn-41
  
  Take NEW out of your sequence--it's redundant.
  
  
Subject: Why does nn crash when a letter one past the highest letter is selected?
From: Using nn-42
  
  Please see "Unofficial patches for various bugs".
  
  Your terminal modes will be screwed up after such an event, so
  you'll have to type ^J (or LINE-FEED) repeatedly until a prompt is
  seen, and then run
  
	stty -sane^J
  
  or
  
	reset
  
  
Subject: Why do articles without a Lines header appear empty?
From: Using nn-43
  
  I discovered that this problem only shows up if you have
  header-lines set to a string that includes "L".  I suspect having
  the line count patch sets something that makes nn think there is a
  Lines header and then the header-string is telling it to display the
  Lines header but there isn't one and things get messed up.  --Gary
  Morris
  
  
Subject: ! Why does nnmaster stop collecting articles at the "junk" group?
From: nnmaster-50
  
  I guess that you access news via NNTP.  Older nntp servers have a
  limitation of 4000 articles in a group, and junk may easily exceed
  this which makes the nntp server crash.
  
  To overcome the problem, edit the GROUPS file to add the X flag on
  the junk group, run nnmaster -G, and then nnmaster will ignore the
  junk group.  --Kim Storm
  
  In nntp_dir/common/conf.h, you can either increase MAX_GROUPS
  (normally 4096) or you can set #define DYNAMIC_ART_ARRAY (normally
  #undefed).  In either case, you obviously have to recompile nntp.
  
  But you can also add new groups on a regular basis, rather than
  letting junk build up to huge proportions.  --Mark Rawling
  
  
Subject: ! How do I cope with "Incomplete MASTER file"?
From: nnmaster-51
  
  See "Why isn't nnmaster working?"  
  
  
Subject: ! Why isn't nnmaster working?
From: nnmaster-52 
  
  After the make, did you remember to:
  
	Run ./inst <options> to install the files?
	Run ./inst INIT to initialize the database?
  
  Nnmaster mails error messages to the user who owns him (typically
  "news").  Check this mailbox for clues.
  
  If nnmaster -r or -D did not work, then neither did nnmaster -I (or
  ./inst INIT from the install directory).  Once you fix the
  permissions (see Paul's answer below), you need to rerun the
  initialization step.  --Stew Ellis
  
  If nnmaster dies and updates the Log file with "Incomplete MASTER
  file", it could be you're not running the latest version.  --David
  R. Hieb
  
  If, when you start your nnmaster, it just exits quietly, it could be
  that your permissions are incorrect.  Ensure that all directories in
  the nn library are owned by news (or the owner that you configured
  nn with).  --Paul Bickerstaff
  
  Another problem could be in the way it is started.  Two related
  solutions are presented.
  
  /etc/rc exits before the child has had the chance to setpgrp().
  Putting "sleep 5" at the end of /etc/rc fixed it. --David B. Thomas
  
  I inserted a "sleep 10" at the beginning of my
  /etc/daemons/nnmaster.init file and this solved the problem!
  --Jeffery Small
  
  It could be you're not running the latest version.  --David R. Hieb
  
  
Subject: Glossary
From: Appendix
  
  NNTP		Network News Transport Protocol (see RFC 977)
  
  
Subject: Acknowledgements
From: Appendix

I'd like to thank the following people for providing ideas on the
layout of this article:

Joe Wells <jbw@bigbird.bu.edu>	      Richard M. Stallman <rms@gnu.ai.mit.edu>
David Elliott <dce@smsc.sony.com>     Tom Christiansen <tchrist@convex.com>
Eugene N. Miya <eugene@nas.nasa.gov>


We are also grateful to the following individuals that have provided
answers or other information to make this a better document.  I regret
that it is possible that some names have been accidently omitted.  I
would also like to thank all the readers of news.software.nn.

Mr. Kim F. Storm <storm@olicom.dk>	    Ian Taylor <ian@airs.com>
Joerg Napp <napp@uni-paderborn.de>	    Steven Grady <grady@fx.com>
Harry Herman <herman@corpane.uucp>	    Max Heffler <max@compaq.com>
Dave Hayes <dave@elxr.jpl.nasa.gov>	    Stew Ellis <ellis@nova.gmi.edu>
Josef Wolf <Sepp@ppcger.ppc.sub.org>	    Dave Shaver <shaver@convex.com>
David B. Thomas <dt@yenta.alb.nm.us>	    Alexis Rosen <alexis@panix.com>
Richard M. Mathews <richard@locus.com>	    Luc Rooijakkers <lwj@cs.kun.nl>
Richard Reiner <rreiner@nexus.yorku.ca>	    Paul Eggert <eggert@twinsun.com>
Tim Pierce <twpierce@amhux1.amherst.edu>    Gary Morris <garym@telesoft.com>
Michael Rawdon <rawdon@rex.cs.tulane.edu>   Jeffery Small <jeff@cjsa.wa.com>
Steven M. List <itkin@mrspoc.transact.com>  Andrew Swann <swann@imada.ou.dk>
F.F. Jacot Guillarmod <ccfj@hippo.ru.ac.za> Jaap Vermeulen <jaap@sequent.com>
Mark Rawling <Mark.Rawling@mel.dit.csiro.au>  
David R. Hieb <David.R.Hieb@magi.rootgroup.com>
Paul Bickerstaff <pbickers@tamaluit.phys.uidaho.edu>
  
  
Subject: Warranty
From: Appendix

[The following statement epitomizes the ridiculous state of affairs in
our country (I'm an American) and can be ignored outside the US...]

No Warranty: Because this article is provided free of charge as a
service to news.software.nn readers, we provide absolutely no
warranty, to the extent permitted by applicable state law.  This
article is provided "as is" without warranty of any kind, either
expressed or implied, including, but not limited to, the implied
warranties of merchantability and fitness for a particular purpose.
Should the information prove defective, you assume the cost of all
necessary servicing, repair or correction.

Local Variables:
mode: outline
outline-regexp: "^Subject:"
fill-prefix: "  "  
eval: (progn (setq buffer-read-only nil) (hide-body))
End: