*** ./LAST/MANIFEST	Wed Feb  6 19:14:11 1991
--- MANIFEST	Mon Mar 25 13:31:04 1991
***************
*** 34,39 ****
--- 34,41 ----
  conf/m-symmetry.h         22	For Sequent Symmetry.
  conf/m-template.h         21	Template for new machine files.
  conf/m-vax.h              22	For VAX family
+ conf/m-amdahl.h          P14	For Amdahl
+ conf/m-mx300.h           P14	For Siemens MX300
  conf/s-3b1g.h             22	For 3b1 (unix-pc) with GCC.
  conf/s-aix221.h           14	For AIX 2.2.1
  conf/s-apollo.h		6.4.13	For Apollo Domain/OS
***************
*** 62,67 ****
--- 64,83 ----
  conf/s-usg3-1.h           22	For most system V systems (obsolete)
  conf/s-xenix386.h         21	For xenix386 [termcap version].
  conf/s-xenix386ds.h       22	For Xenix386 2.3.2 w/development system.
+ conf/s-NeXT1-0.h         P14	For NeXT 1.0
+ conf/s-hpux7-0.h         P14	For HPUX 7.0
+ conf/s-ix386.h           P14	For Interactive UNIX on 386.
+ conf/s-ptx1-1.h          P14	For Dynix/PTX on symmetry.
+ conf/s-scoV386.h         P14	For SCO UNIX V on 386.
+ conf/s-sinix.h           P14	For Siemens SINIX
+ conf/s-sunos4-v.h        P14	For SunOS 4.1 SysV environment
+ conf/s-sysV88.h          P14	For Motorola System V/88 Release 3.
+ conf/s-ultrix.h          P14	For ULTRIX systems (4.2 based)
+ conf/s-umipsb4-5.h       P14	For Riscos 4.5 and later
+ conf/s-uts2-0.h          P14	For Amdahl UTS 2.0
+ conf/s-xenix286.h        P14	For SCO Xenix 2.2.1 (286) -- terminfo
+ conf/s-xenix286b.h       P14	For SCO Xenix 286 -- termcap
+ conf/s-xenix68k.h        P14	For Tandy 68000/Xenix 3.2
  config.h-dist             17	CONFIGURATION FILE, DISTRIBUTED VERSION
  contrib                    1	Directory for contributed software
  contrib/aspell            20	Ispell front-end written in perl
*** ./LAST/Makefile	Mon Jun 25 15:46:36 1990
--- Makefile	Mon Feb 11 17:01:12 1991
***************
*** 10,15 ****
--- 10,16 ----
  CC =		cc
  CPP =		$(CC) -E
  CFLAGS =	-g
+ LDFLAGS =
  MAKE =		make
  
  #
***************
*** 48,53 ****
--- 49,55 ----
  ymakefile: Makefile xmakefile config.h
  	cp xmakefile MF.c
  	$(CPP) -DCOMPILER="$(CC)" -DPREPROC="$(CPP)" \
+ 	       -DLDEBUG="$(LDFLAGS)" \
  	       -DCDEBUG="$(CFLAGS)" -Iconf MF.c | \
  	sed -e '1,/MAKE WILL CUT HERE/d' \
  	    -e '/^#/d' \
*** ./LAST/admin.c	Wed Nov  7 15:54:20 1990
--- admin.c	Thu Mar 14 21:19:49 1991
***************
*** 275,280 ****
--- 275,281 ----
      if (verbose) { printf("\r%s: ", gh->group_name); clrline(); }
  
      if (init_group(gh) <= 0) {
+       if (verbose)
  	printf("NO DIRECTORY (ok)");
  	return 1; /* no directory/ignored */
      }
***************
*** 545,550 ****
--- 546,566 ----
      }
  }
  
+ static master_run_check()
+ {
+     extern char proto_host[];
+     int running = proto_lock(I_AM_MASTER, PL_CHECK) >= 0;
+     
+     if (!verbose && pre_input != NULL)
+ 	exit(running ? 0 : 1);
+ 
+     if (running)
+ 	printf("Master is running%s%s\n",
+ 	       proto_host[0] ? " on host " : "", proto_host);
+     else
+ 	printf("Master is NOT running");
+ }
+ 
  static master_admin()
  {
      register char c;
***************
*** 556,564 ****
  
      for (;;) {
  	switch (c = get_cmd(
! "\nD)ump F)iles G)roup K)ill O)ptions S)tat T)race",
  "MASTER")) {
  
  	 case 'G':
  	    cur_group = (int)get_entry("Group number",
  				  0L, (long)(master.number_of_groups - 1));
--- 572,584 ----
  
      for (;;) {
  	switch (c = get_cmd(
! "\nC)heck D)ump F)iles G)roup K)ill O)ptions S)tat T)race",
  "MASTER")) {
  
+ 	 case 'C':
+ 	    master_run_check();
+ 	    break;
+ 
  	 case 'G':
  	    cur_group = (int)get_entry("Group number",
  				  0L, (long)(master.number_of_groups - 1));
***************
*** 956,963 ****
  	pre_input = input_string;
      } else {
  	pre_input = NULL;
! 	printf("\nMaster is%s running\n",
! 	       proto_lock(I_AM_MASTER, PL_CHECK) < 0 ? " NOT" : "");
      }
  
      for (;;) {
--- 976,983 ----
  	pre_input = input_string;
      } else {
  	pre_input = NULL;
! 	putchar(NL);
! 	master_run_check();
      }
  
      for (;;) {
*** ./LAST/answer.c	Wed Feb  6 19:14:12 1991
--- answer.c	Tue Mar 26 15:30:05 1991
***************
*** 79,84 ****
--- 79,96 ----
      date[3] = date[7] = date[10] = date[19] = date[24] = NUL;
  #ifdef NNTP_PATH_HOSTNAME
      strncpy(host, NNTP_PATH_HOSTNAME, 64);
+ 
+     if (host[0] == '/') {
+ 	FILE *fph;
+ 	if ((fph = open_file(host, OPEN_READ)) && fgets(host, 64, fph)) {
+ 	    char *cp;
+ 	    if (cp = strchr(host, '\n')) *cp = NUL;
+ 	} else {
+ 	    msg("Can't get outgoing hostname from file, using gethostname");
+ 	    gethostname(host, 64);
+ 	}
+ 	if (fph) fclose(fph);
+     }	
  #else
      gethostname(host, 64);
  #endif
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/m-amdahl.h	Thu Mar 14 21:07:06 1991
***************
*** 0 ****
--- 1,13 ----
+ /************** Machine (and compiler) dependent definitions. **************
+  *
+  *	This is for Amdahl.
+  *	From: neulynne@uts.uni-c.dk (Mogens Lynnerup)
+  */
+ 
+ 
+ /*      MACHINE TYPE	DEFINED TYPE		VALUE RANGE	*/
+ 
+ typedef unsigned char	int8;		/*        0 ..     255 */
+ typedef short		int16;		/*  -10,000 ..  10,000 */
+ typedef long		int32;		/* -100,000 .. 100,000 */
+ typedef unsigned long	uint32;		/* 	  0 ..  2^31-1 */
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/m-mx300.h	Tue Feb 12 13:07:28 1991
***************
*** 0 ****
--- 1,23 ----
+ /************** Machine (and compiler) dependent definitions. **************
+  *
+  *	For Siemens MX300
+  *	From: Bill Wohler <wohler@sap-ag.de>
+  */
+ 
+ /*      MACHINE TYPE	DEFINED TYPE		VALUE RANGE	*/
+ 
+ typedef unsigned char	int8;		/*        0 ..     255 */
+ typedef short		int16;		/*  -10,000 ..  10,000 */
+ typedef long		int32;		/* -100,000 .. 100,000 */
+ typedef unsigned long	uint32;		/* 	  0 ..  2^31-1 */
+ 
+ 
+ /*
+  *	Define NO_SIGINTERRUPT on BSD based systems which don't have
+  *	a siginterrupt() function, but provides an SV_INTERRUPT flag
+  *	in <signal.h>.
+  */
+ 
+ #define NO_SIGINTERRUPT	/* */
+ 
+ #define NETWORK_BYTE_ORDER	/* */
*** ./LAST/conf/s-apollo.h	Wed Feb  6 19:14:13 1991
--- conf/s-apollo.h	Thu Mar 21 11:40:45 1991
***************
*** 1,9 ****
--- 1,16 ----
  /*
   *	This version is for Apollo Domain/OS systems running BSD 4.3.
   *	From: mmitchel@digi.lonestar.org (Mitch Mitchell)
+  *
+  *	Notice: If you use the ANSI compiler and have installed the SR10.3
+  *	ANSI stuff, you will have to #define SIGNAL_HANDLERS_ARE_VOID below.
+  *	(You should really do it in config.h though for portability! ++Kim)
+  *	From: rog@speech.kth.se (Roger Lindell)
   */
  
  #include "s-bsd4-3.h"
+ 
+ /* #define	SIGNAL_HANDLERS_ARE_VOID	/* ANSI compiler */
  
  /*
   *	special sleep function that terminates following
*** ./LAST/conf/s-template.h	Wed Feb  6 19:14:14 1991
--- conf/s-template.h	Mon Feb 11 17:24:02 1991
***************
*** 245,254 ****
  #define COMPILER_FLAGS
  
  /*
   *	If your system requires other libraries when linking nn
   *	specify them here:
-  *
-  *	Standard loader flags can also be specified here!
   */
  
  #define EXTRA_LIB
--- 245,258 ----
  #define COMPILER_FLAGS
  
  /*
+  *	Define standard loader flags here:
+  */
+ 
+ #define LOADER_FLAGS
+ 
+ /*
   *	If your system requires other libraries when linking nn
   *	specify them here:
   */
  
  #define EXTRA_LIB
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-NeXT1-0.h	Mon Jun 25 10:25:42 1990
***************
*** 0 ****
--- 1,12 ----
+ /*
+  *	This version is for NeXT 1.0
+  *	From: eps@cs.SFSU.EDU (Eric P. Scott)
+  */
+ 
+ #define	USE_STRINGS_H
+ 
+ #include "s-bsd4-3.h"
+ 
+ #define HAVE_STRCHR			/* */
+ #define COMPILER_FLAGS -O -bsd
+ #define EXTRA_LIB -lsys_s
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-hpux7-0.h	Thu Jun 14 18:31:49 1990
***************
*** 0 ****
--- 1,17 ----
+ /*
+  *	For HP-UX 7.0  
+  *	From: Rick Low, MEL Defence Systems Ltd, Ottawa, Canada, 11 Jun 90  
+  *
+  *	Uses setsid() instead of setpgrp() as described in 7.0 release
+  *	notes page 5-1.
+  */
+ 
+ #include "s-hpux.h"
+ 
+ #define	SIGNAL_HANDLERS_ARE_VOID	/* */
+ 
+ #define EXTRA_LIB	-lBSD
+ 
+ #undef DETATCH_TERMINAL
+ extern pid_t setsid();
+ #define DETATCH_TERMINAL setsid();
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-ix386.h	Fri Jun  1 19:27:37 1990
***************
*** 0 ****
--- 1,74 ----
+ /*
+  *	For ISC 386/ix 2.0.x (also Dell UNIX 1.x).
+  *	With tweaks for Host Based TCP/IP (1.1, 1.2)
+  *	From: Jeremy Chatfield (jdc@dell.dell.com) May 27, 90.
+  */
+ 
+ /*
+  *	Define if your system has a 4.3BSD like syslog library.
+  *
+  *	Host Based TCP/IP includes syslog (check /etc/syslog.conf for
+  *	message routings). jdc.
+  */
+ 
+ #define HAVE_SYSLOG
+ 
+ /*
+  *	ISC 386/ix is extraordinarily like System 5 :-) jdc.
+  */
+ 
+ #include "s-sys5.h"
+ 
+ /*
+  *	If we have defined RESIZING in config.h, make sure that we
+  *	use the SV resizing (to include ptem.h, etc). jdc.
+  */
+ 
+ #define SYSV_RESIZING
+ 
+ /*
+  *	Define AVOID_SHELL_EXEC if the system gets confused by
+  *		#!/bin/sh
+  *	lines in shell scripts, e.g. only reads #! and thinks it
+  *	is a csh script.
+  *
+  *	I've seen some funnies , but it may be just be me... jdc.
+  */
+ 
+ #define AVOID_SHELL_EXEC
+ 
+ /*
+  *	Uses malloc.h
+  *	Values tuned slightly for ix386
+  */
+ 
+ #define USE_MALLOC_H
+ #define MALLOC_MAXFAST		(4 * sizeof(double))
+ #define MALLOC_FASTBLOCKS	128
+ #define MALLOC_GRAIN		sizeof(double)
+ 
+ /*
+  *	If your system requires other libraries when linking nn
+  *	specify them here:
+  *
+  *	-lmalloc	Adds better malloc
+  *	-linet		Essential for HB TCP/IP use (NNTP requires use)
+  *	-lc_s		Standard C shared library.  (Useful, not essential)
+  */
+ 
+ #if defined(NNTP) || defined (HAVE_SYSLOG)
+ #define EXTRA_LIB	-linet -lmalloc -lc_s
+ #else
+ #define EXTRA_LIB	-lmalloc -lc_s
+ #endif
+ 
+ /*
+  *	There is a rename() function in -linet, but it is broken.
+  *
+  *	If you don't have nn 6.4 patch level 4 or higher, NO_RENAME is not
+  *	recognized.  Instead, you will need to fix nntp.c, around line 722:
+  *	Change "if (rename..." 	to "if (unlink(news_active), rename..."
+  *	But save a copy of the original nntp.c to be able to apply patch 4.
+  */
+ 
+ #define NO_RENAME
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-ptx1-1.h	Mon Mar 25 13:26:18 1991
***************
*** 0 ****
--- 1,21 ----
+ /*
+  *	This is for Dynix/PTX.
+  *	From: Jaap Vermeulen <sequent!jaap>
+  */
+ 
+ #include "s-sys5.h"
+ 
+ #undef TERMLIB
+ #define TERMLIB	-ltermlib
+ 
+ #define HAVE_VARARGS		/* Ignore NO_VARARGS in m-symmetry.h */
+ 
+ #define HAVE_JOBCONTROL
+ 
+ #define USE_MALLOC_H
+ 
+ #define MALLOC_GRAIN            sizeof(double)          /* M_GRAIN */
+ #define MALLOC_MAXFAST  	(MALLOC_GRAIN*4)        /* M_MXFAST */
+ #define MALLOC_FASTBLOCKS       100                     /* M_NLBLKS */
+ 
+ #define EXTRA_LIB -lmalloc
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-scoV386.h	Thu Jun 14 18:34:53 1990
***************
*** 0 ****
--- 1,26 ----
+ /*
+  *	For SCO UNIX System V/386
+  *	From: Curtis Galloway <curtisg@sco.com>
+  *	Uses system V libraries and system calls.
+  * 	This version uses "terminfo".
+  */
+ 
+ #include "s-sys5.h"
+ 
+ #define AVOID_SHELL_EXEC
+ 
+ #undef SIGNAL_HANDLERS_ARE_VOID
+ 
+ /*
+  *	Define standard compiler flags here:
+  */
+ 
+ #define COMPILER_FLAGS
+ 
+ /*
+  *	If your system requires other libraries when linking nn
+  *	specify them here:
+  */
+ 
+ #define EXTRA_LIB	-lmalloc -lx
+ #define NNTP_EXTRA_LIB	-lsocket
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-sinix.h	Tue Feb 12 13:03:11 1991
***************
*** 0 ****
--- 1,61 ----
+ /*
+  *	For Siemens SINIX system on MX300 (use with m-mx300.h)
+  *	From: Bill Wohler <wohler@sap-ag.de>
+  */
+ 
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ 
+ #define TERMLIB	-ltermcap
+ #define HAVE_STRCHR			/* */
+ #define	RESET_SIGNAL_WHEN_CAUGHT	/* */
+ 
+ /*
+  *	Define if your system has BSD like job control (SIGTSTP works)
+  *	SINIX has job control but in our configuration, doesn't define
+  *	it.
+  */
+ #ifndef SIGSTOP
+ #define SIGSTOP		17
+ #endif
+ #ifndef SIGTSTP
+ #define SIGTSTP   	18
+ #endif
+ #define HAVE_JOBCONTROL			/* */
+ 
+ #define	HAVE_DIRECTORY			/* */
+ #include <dir.h>				/* BSD */
+ typedef struct direct Direntry;		/* BSD */
+ 
+ #define	HAVE_MKDIR			/* */
+ 
+ #define HAVE_GETHOSTNAME			/* BSD systems */
+ 
+ #define HAVE_MULTIGROUP	/* BSD */
+ 
+ #define SHELL		"/bin/sh"
+ 
+ #define	MAILX	"/usr/ucb/Mail"		/* BSD */
+ 
+ #define	FILENAME 	1280
+ 
+ /*
+  *	NNTP support requires tcp/ip with socket interface.
+  *
+  *	Define NO_RENAME if the rename() system call is not available.
+  *	Define NO_BZERO if the bzero() function is not available.
+  *	Define EXCELAN if the tcp/ip package is EXCELAN based.
+  *	Define NNTP_EXTRA_LIB to any libraries required only for nntp.
+  */
+ 
+ /* #define NO_RENAME			/* */
+ /* #define NO_BZERO			/* */
+ /* #define EXCELAN			/* */
+ /* #define NNTP_EXTRA_LIB -lsocket	/* */
+ 
+ /*
+  *	Define standard compiler flags here:
+  */
+ 
+ #define COMPILER_FLAGS		-tp -W0
+ 
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-sunos4-v.h	Mon Nov 26 12:13:54 1990
***************
*** 0 ****
--- 1,40 ----
+ /*
+  *	This version is for SUNOS 4.1 SysV environment
+  *	From: "Gary Mills" <mills@ccu.umanitoba.ca>
+  */
+ 
+ #include "s-sys5.h"
+ 
+ /*
+  *      Has a 4.3BSD like syslog library.
+  */
+ 
+ #define HAVE_SYSLOG
+ 
+ /*
+  *      Have gethostname().
+  */
+ 
+ #undef HAVE_UNAME
+ #define HAVE_GETHOSTNAME
+ 
+ /*
+  *      Have multiple group membership.
+  */
+ 
+ #define HAVE_MULTIGROUP
+ 
+ /*
+  *      Default mailer for nnmail.
+  */
+ 
+ #undef MAILX
+ #define MAILX        "/usr/ucb/mail"
+ 
+ /*
+  *      Maximum length of a pathname.
+  */
+ 
+ #undef FILENAME
+ #define FILENAME   1024
+ 
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-sysV88.h	Thu Jun 14 18:31:23 1990
***************
*** 0 ****
--- 1,11 ----
+ /*
+  *	This is for Motorola System V/88 Release 3.
+  *	From: Jeff Johnson <jjohnson@urbana.mcd.mot.com>
+  *	      Motorola Inc -- Urbana Design Center, May 22, 90
+  */
+ 
+ #include "s-sys5.h"
+ 
+ #define HAVE_JOBCONTROL
+ #define HAVE_MULTIGROUP
+ #define OLD_AWK	"oawk"
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-ultrix.h	Mon May 28 18:23:21 1990
***************
*** 0 ****
--- 1,18 ----
+ /*
+  *      This version is for ultrix systems
+  *	From: dietrich@cernvax.cern.ch (dietrich wiegandt)
+  */
+ 
+ #include "s-bsd4-2.h"
+ 
+ /*
+  *      Define HAVE_VARARGS, Ultrix has vprintf, vsprintf as well
+  */
+ 
+ #define HAVE_VARARGS
+ 
+ /*
+  *      Ultrix signal handlers have type void (see signal.h)
+  */
+ 
+ #define	SIGNAL_HANDLERS_ARE_VOID	/* */
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-umipsb4-5.h	Thu Aug 23 14:25:06 1990
***************
*** 0 ****
--- 1,10 ----
+ /*
+  *	This is for Mips Risc/os 4.5 or later.
+  *	Compile in the bsd43 environment.
+  */
+ 
+ #include "s-umipsb.h"
+ 
+ /* 4.5 has vsprintf */
+ #undef NO_VARARGS
+ 
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-uts2-0.h	Thu Mar 14 21:11:20 1991
***************
*** 0 ****
--- 1,18 ----
+ /*
+  *	This version is for Amdahl UTS 2.0
+  *	From: neulynne@uts.uni-c.dk (Mogens Lynnerup)
+  */
+ 
+ #include "s-sys5.h"
+ 
+ /*
+  *	Define HAVE_GETHOSTNAME if your system provides a BSD like
+  *	gethostname routine.
+  *	Otherwise, define HAVE_UNAME if uname() is avaiable.
+  *	As a final resort, define HOSTNAME to the name of your system.
+  */
+ 
+ #undef	HAVE_UNAME			/* System V */
+ #define HAVE_GETHOSTNAME                /* UTS 2.0  */
+ 
+ #define EXTRA_LIB -lsocket              /* To get gethostname routine. */
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-xenix286.h	Thu Jun 14 21:53:44 1990
***************
*** 0 ****
--- 1,32 ----
+ /*
+  *	This version is for SCO Xenix Sys V Release 2.2.1 (286)
+  *	Original from: Paul Shields, shields@nccn.yorku.ca
+  *	Uses terminfo!
+  */
+ 
+ #define NO_DIRENT_H
+ #include "s-sys5.h"
+ 
+ #undef SIGNAL_HANDLERS_ARE_VOID
+ 
+ #define	HAVE_DIRECTORY			/* */
+ #include <sys/ndir.h>			/* Xenix System V */
+ typedef struct direct Direntry;		/* Xenix System V */
+ 
+ #undef HAVE_MKDIR
+ #undef HAVE_UNAME
+ #undef DETATCH_TERMINAL
+ 
+ #define AVOID_SHELL_EXEC
+ 
+ #undef MAILX
+ #define	MAILX		"/usr/bin/mail" 	/* SV */
+ 
+ #undef FILENAME
+ #define	FILENAME 	128
+ 
+ #define COMPILER_FLAGS	-LARGE -Ml2t128 -DM_TERMINFO
+ 
+ /* Default stack space is only 4KB.  Increase is needed but	*/
+ /* must be limited to 20KB (-F 5000) for nn itself to load.	*/
+ #define EXTRA_LIB	-ltinfo -lx -F 5000
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-xenix286b.h	Thu Jun 14 22:07:57 1990
***************
*** 0 ****
--- 1,40 ----
+ /*
+  *	For SCO XENIX 286
+  *	From: Michael K. Brady, michael@jewell.UUCP
+  *	Uses termcap!
+  */
+ 
+ #define NO_DIRENT_H
+ #include "s-sys5.h"
+ 
+ #undef	USE_TERMINFO			/* use TERMCAP */
+ #undef TERMLIB
+ #define TERMLIB	-ltermlib
+ 
+ #undef	SIGNAL_HANDLERS_ARE_VOID	/* */
+ 
+ #define	HAVE_DIRECTORY			/* */
+ #include <sys/ndir.h>			/* XENIX */
+ typedef struct direct Direntry;		/* XENIX */
+ 
+ #undef	HAVE_MKDIR			/* */
+ 
+ /*
+  *	Specify the default mailer to be invoked by nnmail
+  */
+ 
+ #undef MAILX
+ #define	MAILX		"/usr/bin/smail"	/* You may disagree! */
+ 
+ /*
+  *	Define standard compiler flags here:
+  */
+ 
+ #define COMPILER_FLAGS -LARGE -Ox -Ml2t32 -F 8000 -SEG 1000
+ 
+ /*
+  *	If your system requires other libraries when linking nn
+  *	specify them here:
+  */
+ 
+ #define EXTRA_LIB -lx
*** /dev/null	Fri Apr  5 07:30:14 1991
--- conf/s-xenix68k.h	Thu Jul  5 22:37:26 1990
***************
*** 0 ****
--- 1,19 ----
+ /*
+  *	s-xenix68k.h
+  *	for Tandy 6000's running Tandy 68000/Xenix Version 3.2
+  *	(including the 3.2 development system)
+  *	Created by paul@devon.lns.pa.us (Paul Sutcliffe Jr.)
+  *	
+  *	Assumes presense of D.Gwyn's directory(3) routines in -ldirent
+  */
+ 
+ #include "s-sys5-tcap.h"
+ 
+ #undef	SIGNAL_HANDLERS_ARE_VOID	/* */
+ #undef	HAVE_MKDIR			/* */
+ #define AVOID_SHELL_EXEC		/* */
+ 
+ #undef MAILX
+ #define	MAILX		"/usr/bin/mail"
+ 
+ #define EXTRA_LIB	-lx -ldirent
*** ./LAST/config.h-dist	Wed Feb  6 19:14:15 1991
--- config.h-dist	Tue Mar 26 15:30:05 1991
***************
*** 90,95 ****
--- 90,98 ----
   *	Define NNTP_PATH_HOSTNAME to force a specific hostname into the
   *	Path: header generated when NNTP_MINI_INEWS_HEADER is defined.
   *	This is useful for multi-machine sites with one mail/news gateway.
+  *
+  *	If the string starts with a '/' it is taken as the name of a file
+  *	from which the outgoing hostname should be read (at runtime).
   */
  
  /* #define NNTP_PATH_HOSTNAME	"puthostnamehere"	/* */
*** ./LAST/db.c	Wed Feb  6 19:14:15 1991
--- db.c	Thu Mar  7 22:28:04 1991
***************
*** 270,275 ****
--- 270,279 ----
      name = cp;
  
      if (trust_master) {
+ 	if (gh->group_name_length == 0) {
+ 	    gh->group_name = "";
+ 	    return 1;
+ 	}
  	cp = name + gh->group_name_length;
  	if (*cp == NUL || !isspace(*cp))
  	    sys_error("MASTER/GROUPS conflict: %d/%s", gh->group_num, line);
***************
*** 406,411 ****
--- 410,416 ----
      int n;
      
      strcpy(client_path,relative(db_directory, "CLIENT"));
+     unlink(client_path);
      if ((n = copy_file(relative(db_directory, "MASTER"), client_path, 0)) < 0)
  	log_entry('R', "Copy of MASTER to CLIENT failed (err=%d)", n);
  }
*** ./LAST/decode.c	Mon Apr 23 18:26:18 1990
--- decode.c	Tue Mar 26 13:34:31 1991
***************
*** 135,140 ****
--- 135,141 ----
  
      rlen = cdlen[blen];
      if (len < rlen) goto d_err;
+     if (len > (rlen + 2)) goto d_err;	/* line too long */
  
      /*
       * Is it the empty line before the end line ?
*** ./LAST/digest.c	Fri Oct  5 19:07:04 1990
--- digest.c	Tue Apr  2 13:37:47 1991
***************
*** 116,121 ****
--- 116,124 ----
  
      fp = fields;
  
+     if (n > 8 && !isdigit(fp[7][0])) fp[7] = fp[8]; /* ... TZ year */
+     if (n > 9 && !isdigit(fp[7][0])) fp[7] = fp[9]; /* ... TZ DST year */
+ 
      if (namebuf != NULL) {
  	char x = *sender_tail;
  	*sender_tail = NUL;
***************
*** 258,263 ****
--- 261,267 ----
      int	   line_type[BACKUP_LINES];
      register int backup_index, backup_count;
      int    more_header_lines, end_or_asterisks, blanks;
+     int    colon_lines;
      char   line[1024];
      register char *cp;
      char **dg_hdr_field();
***************
*** 274,279 ****
--- 278,284 ----
  
   next_line:
      more_header_lines = 0;
+     colon_lines = 0;
  
   next_possible_header_line:
      digest.dg_lines++;
***************
*** 390,399 ****
--- 395,426 ----
      }
  
      if (blanks)
+ 	goto next_possible_header_line;
+ /* must be able to handle continued lines in sub-digest headers...
  	goto next_line;
+ */
  
      if (!dg_hdr_field(line, 0))
+     {
+ 	char *colon;
+ 	if (colon = strchr(line, ':')) {
+ 	    for (cp = line; cp < colon; cp++)
+ 		if (!isascii(*cp) || isspace(*cp)) break;
+ 	    if (cp == colon) {
+ 		TEST("COLON", 0, 0);
+ 		colon_lines++;
+ 		line_type[backup_index] = LN_HEADER;
+ 		goto next_possible_header_line;
+ 	    }
+ 	}
+ 	if (is_mail_from_line(line, (char *)NULL) == 0) {
+ 	    TEST("FROM_", 0, 0);
+ 	    colon_lines++;
+ 	    line_type[backup_index] = LN_HEADER;
+ 	}
+ 
  	goto next_possible_header_line;
+     }
  
      TEST("HEADER", 0, 0);
  
***************
*** 405,412 ****
--- 432,442 ----
  
      TEST("\nSearch for start of header\n", 0, 0);
  
+     colon_lines += more_header_lines;
      for (;;) {
  	fseek(f, backup_p[backup_index], 0);
+ 	if (line_type[backup_index] == LN_HEADER)
+ 	    if (--colon_lines <= 0) break;
  	--digest.dg_lines;
  	if (--backup_count == 0) break;
  	decrease_index();
*** ./LAST/doc/INSTALLATION	Mon Jul 16 17:38:40 1990
--- doc/INSTALLATION	Mon Mar 25 13:27:06 1991
***************
*** 38,44 ****
--- 38,49 ----
  
  CFLAGS	Flags to the C compiler  (e.g. -O or -g)
  
+ LDFLAGS	Additional flags to the C compiler when linking executeables
  
+ Notice that mandatory system specific CFLAGS and LDFLAGS are usually
+ defined in the s- file (see below).
+ 
+ 
  				STEP 2
  
  		  CREATE CONFIGURATION FILE config.h
***************
*** 90,95 ****
--- 95,101 ----
  system files are delivered with nn:
  
  	s-3b1g.h	For 3b1 (unix-pc) with GCC.
+ 	s-NeXT1-0.h	For NeXT 1.0
  	s-aix221.h	For AIX 2.2.1
  	s-aux1-1.h	For A/UX 1.1
  	s-bsd4-2.h	For 4.2 BSD and Ultrix systems
***************
*** 102,120 ****
  	s-hpux2-1.h	For HPUX 2.1 (series 800)
  	s-hpux3-0.h	For HPUX 3.0 (series 800)
  	s-hpux6-5.h	For HPUX 6.5 or newer (series 300)
  	s-pyramid.h	For Pyramid (and Targon 35).
  	s-sgi4D.h	For IRIX 3.1/3.2 [read comments in the file]
  	s-sunos3.h	For SunOS 3
  	s-sunos4-0.h	For SunOS 4.0
! 	s-sys5.h	For most system V based systems.
  	s-sys5-tcap.h	For system V using termcap rather than terminfo.
  	s-texas1500.h	For Texas Instruments System 1500.
  	s-tower32.h	For NCR tower
  	s-umipsb.h	For Mips running riscos 4.0 or greater
  	s-uport2-2.h	For Microport UNIX V.2
  	s-usg3-1.h	For most system V systems (obsolete)
  	s-xenix386.h	For xenix386 [termcap version].
  	s-xenix386ds.h	For Xenix386 2.3.2 w/development system.
  
  If none of these can be used on your system, create your own based on
  the file conf/s-template.h.
--- 108,139 ----
  	s-hpux2-1.h	For HPUX 2.1 (series 800)
  	s-hpux3-0.h	For HPUX 3.0 (series 800)
  	s-hpux6-5.h	For HPUX 6.5 or newer (series 300)
+ 	s-hpux7-0.h	For HPUX 7.0
+ 	s-ix386.h	For Interactive UNIX on 386.
+ 	s-ptx1-1.h	For Dynix/PTX on symmetry.
  	s-pyramid.h	For Pyramid (and Targon 35).
+ 	s-scoV386.h	For SCO UNIX V on 386.
  	s-sgi4D.h	For IRIX 3.1/3.2 [read comments in the file]
+ 	s-sinix.h	For Siemens SINIX
  	s-sunos3.h	For SunOS 3
  	s-sunos4-0.h	For SunOS 4.0
! 	s-sunos4-v.h	For SunOS 4.1 SysV environment
  	s-sys5-tcap.h	For system V using termcap rather than terminfo.
+ 	s-sys5.h	For most system V based systems.
+ 	s-sysV88.h	For Motorola System V/88 Release 3.
  	s-texas1500.h	For Texas Instruments System 1500.
  	s-tower32.h	For NCR tower
+ 	s-ultrix.h	For ULTRIX systems (4.2 based)
  	s-umipsb.h	For Mips running riscos 4.0 or greater
+ 	s-umipsb4-5.h	For Riscos 4.5 and later
  	s-uport2-2.h	For Microport UNIX V.2
  	s-usg3-1.h	For most system V systems (obsolete)
+ 	s-uts2-0.h	For Amdahl UTS 2.0
+ 	s-xenix286.h	For SCO Xenix 2.2.1 (286) -- terminfo
+ 	s-xenix286b.h	For SCO Xenix 286 -- termcap
  	s-xenix386.h	For xenix386 [termcap version].
  	s-xenix386ds.h	For Xenix386 2.3.2 w/development system.
+ 	s-xenix68k.h	For Tandy 68000/Xenix 3.2
  
  If none of these can be used on your system, create your own based on
  the file conf/s-template.h.
***************
*** 126,131 ****
--- 145,151 ----
  The following machine description files are delivered with nn:
  
  	m-3b1g.h	For 3b1 (unix-pc) with GCC [no networking].
+ 	m-amdahl.h	For Amdahl 5890 (big iron)
  	m-att3b.h	For AT&T 3b2 (with s-usg3-1.h)
  	m-convex.h	For Convex.
  	m-dec3100.h	For DECstation 3100 (with s-bsd4-2.h)
***************
*** 136,141 ****
--- 156,162 ----
  	m-m680x0.h	For Motorola 68000 family processors
  	m-m88000.h	For Motorola 88000 risc processors
  	m-mips.h	For MIPS processors
+ 	m-mx300.h	For Siemens MX300
  	m-pyramid.h	For Pyramid (and Targon 35).
  	m-rt6150.h	For IBM 6150
  	m-sgi4D.h	For Silicon Graphics 4D series.
***************
*** 236,242 ****
  	for temporary cache files when nn is used with NNTP.  Using a
  	common directory for cache files allows you to clean these out
  	on reboot with a single "rm" command in the rc file:
! 	 	(cd CLIENT_DIRECTORY; rm -f *)
  
  
  TMP_DIRECTORY		(optional, default = /usr/tmp)
--- 257,265 ----
  	for temporary cache files when nn is used with NNTP.  Using a
  	common directory for cache files allows you to clean these out
  	on reboot with a single "rm" command in the rc file:
! 	 	(cd CACHE_DIRECTORY; rm -f *)
! 	But of course this requires that you use a separate directory
! 	for the cache!
  
  
  TMP_DIRECTORY		(optional, default = /usr/tmp)
***************
*** 402,408 ****
  	kill the running master, initialize the database etc. if they
  	have access to execute the master.  So either restrict the
  	permissions to execute nnmaster or the access to the directory
! 	containing it.  The default installation puts modes -rwsr-x---
  	on nnmaster and leaves the directory "open" which may not be
  	adequate for you.
  
--- 425,431 ----
  	kill the running master, initialize the database etc. if they
  	have access to execute the master.  So either restrict the
  	permissions to execute nnmaster or the access to the directory
! 	containing it.  The default installation puts modes -rwsr-s---
  	on nnmaster and leaves the directory "open" which may not be
  	adequate for you.
  
*** ./LAST/doc/NNTP	Tue Jun 12 11:46:30 1990
--- doc/NNTP	Mon Mar 11 10:40:09 1991
***************
*** 270,275 ****
--- 270,307 ----
    patches to fix it,   ++Kim ]
  
  
+ 		      SPONTANEOUS NNTP ERROR 502
+ 		      --------------------------
+ 
+ Sometimes nn or nnmaster may stop with the following message:
+ 
+ 	NNTP 502 You only have permission to transfer, sorry. 
+ 
+ This particular case is probably the result of the NNTP server trying to
+ turn your IP address into a fully qualified domain name (FQDN) so it can
+ look you up in its access file.
+ 
+ The NNTP server probably uses the domain name server (DNS) to map IP
+ addresses into FQDNs.  If the local DNS doesn't already know the answer, it
+ has to go out over the network to find it.  This can take a few seconds, and
+ the library routine that does all this for the NNTP server might time out
+ before the answer gets back to it.  If this happens, the NNTP server doesn't
+ know your FQDN, so it gives you the default access specified in the server's
+ nntp_access file, which is usually "xfer" (article transfer only).
+ 
+ In the time it takes for you to run nn again the DNS usuallu has its answer
+ back, so things usually work the second time.  
+ 
+ One way to work around this problem is to specify the IP address of the
+ client in the nntp server's access file; then it is not necessary to lookup
+ the FQDN.
+ 
+ Thanks to Tim Ramsey and Nick Sayer for this information.
+ 
+ 
+ 		      DEBUGGING NNTP CONNECTIONS
+ 		      --------------------------
+ 
  If you want to debug the nntp connection, you can run the nnmaster
  with the option -D2 (or -D3 which also turns on the normal -D verbose
  output).  In the nn client, you can turn on the nntp-debug variable in
*** ./LAST/doc/PROBLEMS	Mon Jul  9 17:59:52 1990
--- doc/PROBLEMS	Wed Jan 30 18:32:11 1991
***************
*** 356,361 ****
--- 356,375 ----
  than 650 groups in the database directory (d+x file).  Leaving
  DB_DIRECTORY undefined should fix this.
  
+ Patch #13 contains some patches which should allow nn to run under
+ Domain OS (with included s-apollo.h).
+ 
+ 
+ 		     RUNNING nn VIA SUNLINK X.25
+ 		     ---------------------------
+ 
+ For logins via Sunlink X.25, the article selection display may be all
+ messed up.  This is because, on entry to cooked mode, Sunlink X.25
+ sends the screen width parameter to the PAD, and the PAD dumbly
+ inserts CR/LF after every 80 characters of output.  Not all PADs are
+ this dumb.  To fix it, insert `set noflow-control' in the global init
+ file.  Thanks to mills@ccu.umanitoba.ca (Gary Mills) for the info.
+ 
  
  			    OTHER PROBLEMS
  			    --------------
*** ./LAST/doc/RELEASE_NOTES	Wed Feb  6 19:14:17 1991
--- doc/RELEASE_NOTES	Tue Mar 26 15:29:57 1991
***************
*** 1439,1445 ****
--- 1439,1540 ----
  From:	barrett@daisy.ee.und.ac.za (Alan P Barrett) + fix
  Fixed:	Patch #13 [aux.sh]
  
+ Prog:	nnmaster, nn
+ Title:	"@" lines in GROUPS file gives a fatal error (bug in patch 13)
+ From:	eggert@twinsun.com (Paul Eggert) + fix
+ 	david@wyvern.cs.uow.edu.au (David E A Wilson)
+ Fixed:	Patch #14 [db.c]
  
+ Prog:	inst
+ Title:	Fix for format.awk to work with nawk.
+ From:	tale@cs.rpi.edu (David C Lawrence) + fix
+ Fixed:	Patch #14 [format.awk]
+ 
+ Prog:	nn
+ Title:	Canceled articles are reported to be "expired".
+ From:	bill@twg.bc.ca (Bill Irwin)
+ 	richard@locus.com (Richard M. Mathews)
+ Fixed:	Patch #14 [more.c]
+ 
+ Prog:	nnusage
+ Title:	The POLICY header was missing if AUTHORIZE is defined.
+ From:	mmitchel@digi.lonestar.org (Mitch Mitchell) + fix
+ Fixed:	Patch #14 [nnusage.sh prefix.c]
+ 
+ Prog:	mkprefix
+ Title:	The generated shell prefix includes unused *MAN_* vars.
+ From:	KFS
+ Fixed:	Patch #14 [prefix.c]
+ 
+ Prog:	nn
+ Title:	Search for "empty string" (e.g. /^/) in reading mode will loop.
+ From:	Sjoerd Mullender <sjoerd@cwi.nl>
+ Fixed:	Patch #14 [more.c]
+ 
+ Prog:	nn
+ Title:	"From " lines with a time zone in the date were not recognized
+ From:	rhoward@msd.gatech.edu
+ Fixed:	Patch #14 [digest.c]
+ 
+ Prog:	nn
+ Title:	Apollos makes numerous "R" entries in the log (cannot copy to CLIENT)
+ From:	ianh@bhpmrl.oz.au (Ian Hoyle)
+ 	dennis@rats.nosc.mil (Dennis Cottel)
+ 	rog@speech.kth.se (Roger Lindell)
+ Fixed:	Patch #14 [db.c]
+ 
+ Prog:	nnmaster
+ Title:	ANU/NEWS doesn't like NNTP the command "XHDR message-id 0-0"
+ From:	news@tfl.dk (Klaus Elmquist Nielsen)
+ Fixed:	Patch #14 [expire.c]
+ 
+ Prog:	Installation docs
+ Title:	Various typos (CACHE_DIRECTORY and nnmaster modes).
+ From:	news@tfl.dk (Klaus Elmquist Nielsen)
+ Fixed:	Patch #14 [INSTALLATION]
+ 
+ Prog:	nn
+ Title:	Cannot enter // in Subject: field of :post command
+ From:	david@wraith.cs.uow.edu.au (David E A Wilson)
+ Fixed:	Patch #14 [term.c]
+ 
+ Prog:	nnadmin Z
+ Title:	The "NO DIRECTORY (ok)" message is printed also when non-verbose
+ From:	Tom Dawes-Gamble <tmdg@ti.co.uk>
+ 	dave@jato.Jpl.Nasa.Gov (Dave Hayes)
+ Fixed:	Patch #14 [admin.c]
+ 
+ Prog:	nnmaster
+ Title:	rec.humor.funny digests are not split correctly
+ From:	Michael Rawdon <rawdon@rex.cs.tulane.edu>
+ Fixed:	Patch #14 [digest.c]
+ 
+ 	Actually, the rec.humor.funny digests doesn't follow basic
+ 	rules for putting a digest together, but since the moderator
+ 	isn't going to change his habits, nn has to deal with them...
+ 
+ Prog:	nn
+ Title:	Cannot split folders without a blank line before the header
+ From:	gunnar@beppe.ericsson.se (Gunnar Forsgren)
+ Fixed:	Patch #14 [digest.c] (same fix as for the r.h.f digests)
+ 
+ Prog:	nn, nnmaster
+ Title:	After nnmaster -G, nn reports that database is not updated in 21 years
+ From:	khaw@parcplace.com (Mike Khaw)
+ Fixed:	Patch #14 [master.c]
+ 
+ Prog:	nn
+ Title:	:decode fails on some multi-part postings with BEGIN/END lines
+ From:	Robert A. Ertel <robert@sequent.com> + fix (unused)
+ 	Scott Hankin <hankin@sauron.osf.org> + fix
+ Fixed:	Patch #14 [decode.c]
+ 
+ Prog:	nn
+ Title:	If file system is full, .newsrc would be truncated
+ From:	Michael Schwager <schwager@cs.uiuc.edu>
+ Fixed:	Patch #14 [newsrc.c]
+ 
+ 
  New features since initial 6.4.0 release
  ----------------------------------------
  
***************
*** 1933,1935 ****
--- 2028,2066 ----
  From:	rdavis@convex.com (Ray Davis)
  Added:	Patch #13 [answer.c config.h-dist]
  	
+ Prog:	compilation
+ Title:	LDFLAGS can now be set in Makefile and LOADER_FLAGS in s- file.
+ From:	KFS on request from tale@cs.rpi.edu (David C Lawrence)
+ Added:	Patch #14 [Makefile xmakefile s-template.h]
+ 
+ Prog:	nnusage
+ Title:	Now reads from Log.old too, and prints "Usage since" header.
+ From:	marcel@duteca.bitnet (Marcel J.E. Mol)
+ Added:	Patch #14 [nnusage.sh]
+ 
+ Prog:	nn
+ Title:	Words can now be delimited by \<...\> in regular expressions
+ From:	KFS on request from Mark M Mehl <mehl@iastate.edu>
+ Added:	Patch #14 [regexp.c]
+ 
+ Prog:	nn
+ Title:	Can now kill on base subjects *without* Re: prefix (s< in kill file)
+ From:	KFS on request from Mike Newton <newton@gumby.cs.caltech.edu>
+ Added:	Patch #14 [kill.c nn.1]
+ 
+ Prog:	nnadmin
+ Title:	New C)heck option in M)aster menu: check whether master is running.
+ From:	KFS
+ Added:	Patch #14 [admin.c nnadmin.1m]
+ 
+ Prog:	nn
+ Title:	5 x speed-up for nn -m on slow terminals (one update per second).
+ From:	eggert@twinsun.com (Paul Eggert)
+ Added:	Patch #14 [group.c]
+ 
+ Prog:	nn
+ Title:	The hostname in the Path: may now be read from a file.
+ From:	Ray Davis <rdavis@connie.convex.com>
+ Added:	Patch #14 [answer.c config.h-dist]
+ 
+ 	Simply define NNTP_PATH_HOSTNAME as the path of the file.
*** ./LAST/expire.c	Tue Sep 18 12:44:56 1990
--- expire.c	Fri Mar  8 18:34:57 1991
***************
*** 94,99 ****
--- 94,101 ----
  
      if (gh->first_db_article > gh->last_db_article) return 0;
  
+     if (gh->last_db_article == 0) return 0;
+ 
      if (!init_group(gh)) return 0;
  
      if (debug_mode == 1) {
*** ./LAST/format.awk	Mon Apr 23 18:33:10 1990
--- format.awk	Mon Feb 11 16:44:00 1991
***************
*** 32,38 ****
  	next
  }
  
! /^\.br/ || /^\.sp/ {
  	if (linebuf != indent) {
  		printf("%s\n", linebuf)
  	}
--- 32,38 ----
  	next
  }
  
! /^\.(br|sp)/ {
  	if (linebuf != indent) {
  		printf("%s\n", linebuf)
  	}
*** ./LAST/group.c	Wed Nov  7 15:54:31 1990
--- group.c	Wed Mar 20 10:15:13 1991
***************
*** 20,25 ****
--- 20,26 ----
  export int  also_cross_postings = 0;
  export int  also_unsub_groups = 0;
  export int  entry_message_limit = 400;
+ export int  merge_report_rate = 1;
  
  import int  article_limit, also_read_articles;
  import int  no_update, novice, case_fold_search;
***************
*** 890,895 ****
--- 891,897 ----
      register group_header *gh;
      group_header dummy_group;
      time_t t1, t2;
+     time_t trefr = 0;
      long kb = 0, kbleft = 0;
  
      time(&t1); t2 = 0;
***************
*** 934,949 ****
  
  	if (init_group(gh) <= 0) continue;
  
! 	if (t2 > 2 && kb > 50000) {
! 	    printf("\r%4lds\t%lds\t%s", kbleft/(kb/t2), (long)t2, gh->group_name);
! 	} else
! #ifdef KBYTE_PER_SECOND
! 	    printf("\r%4lds\t%lds\t%s", kbleft/(KBYTE_PER_SECOND*1024)),
! 	    (long)t2, gh->group_name);
! #else
! 	    printf("\r\t%lds\t%s", (long)t2, gh->group_name);
! #endif
! 	clrline();
  
  	access_group(gh, (article_number)(-1), gh->last_db_article,
  		     access_mode, mask);
--- 936,952 ----
  
  	if (init_group(gh) <= 0) continue;
  
! 	if (t2 >= trefr) {
! 	    trefr = t2 + merge_report_rate;
! 
! 	    if (t2 > 2 && kb > 50000 && kb >= t2)
! 		printf("\r%4lds\t%lds\t%s", kbleft/(kb/t2),
! 		       (long)t2, gh->group_name);
! 	    else
! 		printf("\r\t%lds\t%s", (long)t2, gh->group_name);
! 
! 	    clrline();
! 	}
  
  	access_group(gh, (article_number)(-1), gh->last_db_article,
  		     access_mode, mask);
*** ./LAST/kill.c	Wed Feb  6 19:14:18 1991
--- kill.c	Wed Feb 13 16:59:07 1991
***************
*** 41,46 ****
--- 41,47 ----
  #define	ON_SENDER		0x00000008
  #define ON_FOLLOW_UP		0x00000010
  #define ON_ANY_REFERENCES	0x00000020
+ #define ON_NOT_FOLLOW_UP	0x00000040
  
  /*
   * external flag representation
***************
*** 50,55 ****
--- 51,57 ----
  #define EXT_AUTO_SELECT		'+'
  #define EXT_KILL_UNLESS_MATCH	'~'
  #define EXT_ON_FOLLOW_UP	'>'
+ #define EXT_ON_NOT_FOLLOW_UP	'<'
  #define EXT_ON_ANY_REFERENCES	'a'
  #define EXT_ON_SUBJECT		's'
  #define	EXT_ON_SENDER		'n'
***************
*** 154,159 ****
--- 156,164 ----
  	    if (flag & ON_FOLLOW_UP) {
  		if ((ah->replies & 0x80) == 0) goto failed;
  	    }
+ 	    else if (flag & ON_NOT_FOLLOW_UP) {
+ 		if (ah->replies & 0x80) goto failed;
+ 	    }
  	    string = ah->subject;
  	} else
  	    string = ah->sender;
***************
*** 358,363 ****
--- 363,369 ----
      if (flag & AUTO_KILL) fputc(EXT_AUTO_KILL, killf);
      if (flag & AUTO_SELECT) fputc(EXT_AUTO_SELECT, killf);
      if (flag & ON_FOLLOW_UP) fputc(EXT_ON_FOLLOW_UP, killf);
+     if (flag & ON_NOT_FOLLOW_UP) fputc(EXT_ON_NOT_FOLLOW_UP, killf);
      if (flag & ON_ANY_REFERENCES) fputc(EXT_ON_ANY_REFERENCES, killf);
      if (flag & ON_SENDER) fputc(EXT_ON_SENDER, killf);
      if (flag & ON_SUBJECT) fputc(EXT_ON_SUBJECT, killf);
***************
*** 655,660 ****
--- 661,669 ----
  	     case EXT_ON_FOLLOW_UP:
  		flag |= ON_FOLLOW_UP;
  		continue;
+ 	     case EXT_ON_NOT_FOLLOW_UP:
+ 		flag |= ON_NOT_FOLLOW_UP;
+ 		continue;
  	     case EXT_ON_ANY_REFERENCES:
  		flag |= ON_ANY_REFERENCES;
  		continue;
***************
*** 966,971 ****
--- 975,981 ----
  	   flag & ON_SENDER ? "NAME" :
  	   flag & ON_ANY_REFERENCES ? "ANY REF" : "????",
  
+ 	   flag & ON_NOT_FOLLOW_UP ? "!Re: " :
  	   flag & ON_FOLLOW_UP ? "Re: " : "",
  	   kl->kill_pattern,
  
*** ./LAST/man/nn.1.B	Wed Feb  6 19:14:19 1991
--- man/nn.1.B	Fri Apr  5 17:44:43 1991
***************
*** 604,609 ****
--- 604,617 ----
  Re:).  For example, to kill all "Re:"'s in rec.humor use the following
  kill entry: rec.humor:!>s/:.
  .TP
+ \fB<\fP (optional)
+ When used with a subject (flag \fBs\fP), the kill entry only matches
+ base articles with that subject (i.e. where the Subject: line does not
+ start with Re:).  For example, to kill all articles asking for help
+ (but not follow-ups) in the tex group, add this to your kill file:
+ .br
+ 	comp.text.tex:!s</:^HELP
+ .TP
  \fBn\fP or \fBs\fP or \fBa\fP (mandatory)
  .br
  Specify whether the corresponding string applies to the name \fBn\fP
*** ./LAST/man/nn.1.C	Wed Feb  6 19:14:20 1991
--- man/nn.1.C	Fri Apr  5 17:44:43 1991
***************
*** 279,284 ****
--- 279,290 ----
  subjects, except in connection with auto-kill and auto-select where
  the individual kill file entries specifies this property.
  .TP
+ \fBcheck-db-update-time\fP \fIH\fP	(integer, default 12)
+ When non-zero, \fInn\fP will issue a warning if the database has not
+ been updated in the last \fIH\fP hours.  The warning will tell you
+ whether no news has arrived (feed broken?), or whether it is just
+ \fInnmaster\fP which has not updated the database (dead?).
+ .TP
  \fBcheck-group-access\fP	(boolean, default false)
  When set, \fInn\fP will perform a check on the readability of a
  group's readability before showing the menu for that group.  Normally,
*** ./LAST/man/nn.1.D	Wed Nov  7 15:54:44 1990
--- man/nn.1.D	Fri Apr  5 17:44:43 1991
***************
*** 1174,1179 ****
--- 1174,1184 ----
  with either of `/' `~' or `+') which will specify the default save file
  for that group (and its subgroups).  A single `+' following the group
  name is an abbreviation for the last save file name used.
+ For example, the following two sequences are equivalent:
+ .br
+ 	group1 +file group2 +file group3 +file
+ .br
+ 	group1 +file group2 + group3 +
  .LP
  When an article is saved, the default save name will be used as the
  initial contents of the file name prompt for further editing.  It
*** ./LAST/man/nnadmin.1m	Mon Apr 23 18:32:13 1990
--- man/nnadmin.1m	Thu Feb 14 11:04:56 1991
***************
*** 134,139 ****
--- 134,146 ----
  prompt) provides access to overall database information, and to send
  control messages to the \fInnmaster\fP daemon.
  .TP
+ .B C)heck
+ In interactive mode and in verbose batch mode (\fInnadmin\fP MC),
+ print a message telling whether \fInnmaster\fP is running or not.
+ In silent batch mode (\fInnadmin\fP =MC) exit with a status code of 0
+ if \fInnmaster\fP is running and 1 otherwise; this may be useful is
+ administrative scripts.
+ .TP
  .B D)ump
  Enter the DUMP submenu.
  .TP
*** ./LAST/master.c	Wed Feb  6 19:14:20 1991
--- master.c	Fri Mar 22 16:00:36 1991
***************
*** 541,547 ****
  	    clean_group(gh);
  	} else
  	    db_write_group(gh);
!     master.last_scan = 0;
      db_write_master();
      close_master();
      log_entry('M', "Reread GROUPS file");
--- 541,547 ----
  	    clean_group(gh);
  	} else
  	    db_write_group(gh);
!     master.last_scan--;	/* force update */
      db_write_master();
      close_master();
      log_entry('M', "Reread GROUPS file");
*** ./LAST/more.c	Wed Nov  7 15:54:48 1990
--- more.c	Fri Mar 15 15:13:09 1991
***************
*** 153,161 ****
  	break;
  
       case 'i':
! 	sprintf(special, "#%ld fl=%lx re=%d li=%d hp=%ld fp=%ld lp=%ld",
  		(long)ah->a_number, (long)ah->flag, ah->replies, ah->lines,
! 		(long)ah->hpos, (long)ah->fpos, (long)ah->lpos);
  	lp = special;
  	break;
      }
--- 153,162 ----
  	break;
  
       case 'i':
! 	sprintf(special, "#%ld fl=%lx re=%d li=%d hp=%ld fp=%ld lp=%ld ts=%ld",
  		(long)ah->a_number, (long)ah->flag, ah->replies, ah->lines,
! 		(long)ah->hpos, (long)ah->fpos, (long)ah->lpos,
! 		(long)ah->t_stamp);
  	lp = special;
  	break;
      }
***************
*** 360,366 ****
  
      if (art == NULL) {
  	if (expired_msg_delay >= 0) {
! 	    msg("Expired: \"%s: %-.50s\"", ah->sender, ah->subject);
  	    if ((mode & MM_PREVIEW) == 0 && expired_msg_delay > 0)
  		user_delay(expired_msg_delay);
  	}
--- 361,367 ----
  
      if (art == NULL) {
  	if (expired_msg_delay >= 0) {
! 	    msg("Canceled or expired: \"%s: %-.35s\"", ah->sender, ah->subject);
  	    if ((mode & MM_PREVIEW) == 0 && expired_msg_delay > 0)
  		user_delay(expired_msg_delay);
  	}
***************
*** 488,494 ****
--- 489,502 ----
  	}
  
  	if (linenum == 1)
+ 	{
  	    hdrline = screen_offset == 0 ? header_lines : "";
+ 	    if (hdrline && hdrline[0] == '@') {
+ 		topline = linenum = 0;
+ 		fseek(art, linepos[0], 0);
+ 		hdrline = NULL;
+ 	    }
+ 	}
  
        print_header:
  	if (hdrline == NULL || *hdrline == '*') {
***************
*** 835,840 ****
--- 843,852 ----
  	regexec_cf(regular_expr, linebuf)) {
  	match_start = regular_expr->startp[0];
  	match_end = regular_expr->endp[0];
+ 	if (match_start == match_end) {
+ 	    match_start = NULL; /* null string */
+ 	    if (match_redraw) goto no_print;
+ 	}
      } else {
  	if (match_redraw) goto no_print;
  	match_start = NULL;
*** ./LAST/newsrc.c	Wed Nov  7 15:54:51 1990
--- newsrc.c	Tue Mar 26 14:06:38 1991
***************
*** 132,138 ****
  	    f = open_file(path, OPEN_CREATE|MUST_EXIST);
  	fputs(line, f);
      }
!     if (f != NULL) fclose(f);
  }
  
  
--- 132,140 ----
  	    f = open_file(path, OPEN_CREATE|MUST_EXIST);
  	fputs(line, f);
      }
!     if (f != NULL) 
! 	if (fclose(f) == EOF) return -1;
!     return 0;
  }
  
  
***************
*** 146,157 ****
  
      if (first && keep_rc_backup) {
  	sprintf(bak, "%s%s", newsrc_file, bak_suffix);
! 	dump_file(bak, DM_ORIG_NEWSRC);
  	first = 0;
      }
  
!     dump_file(newsrc_file, DM_NEWSRC);
! 
      newsrc_update_count = 0;
  }
  
--- 148,168 ----
  
      if (first && keep_rc_backup) {
  	sprintf(bak, "%s%s", newsrc_file, bak_suffix);
! 	if (dump_file(bak, DM_ORIG_NEWSRC))
! 	    user_error("Cannot backup %s", newsrc_file);
  	first = 0;
      }
  
!     if (dump_file(newsrc_file, DM_NEWSRC)) {
! 	extern char *tmp_directory;
! 	char temp[FILENAME];
! 	sprintf(temp, "%s/newsrc-%d", tmp_directory, process_id);
! 	if (dump_file(temp, DM_NEWSRC))
! 	    user_error("Cannot update %s -- restore %s file!!!",
! 		       newsrc_file, bak_suffix);
! 	else
! 	    user_error("Cannot update %s -- saved in %s", newsrc_file, temp);
!     }
      newsrc_update_count = 0;
  }
  
***************
*** 986,992 ****
      prompt("Are you sure? ");
      if (!yes(1)) return 0;
  
!     dump_file(newsrc_file, DM_ORIG_NEWSRC);
  
      prompt("Restore selections? ");
      if (yes(1)) dump_file(sel_path, DM_ORIG_SELECT);
--- 997,1005 ----
      prompt("Are you sure? ");
      if (!yes(1)) return 0;
  
!     if (dump_file(newsrc_file, DM_ORIG_NEWSRC))
! 	user_error("Could not restore %s -- restore %s file manually",
! 		   newsrc_file, bak_suffix);
  
      prompt("Restore selections? ");
      if (yes(1)) dump_file(sel_path, DM_ORIG_SELECT);
*** ./LAST/nnusage.sh	Tue Sep 18 12:45:10 1990
--- nnusage.sh	Tue Nov 20 10:55:13 1990
***************
*** 26,41 ****
  done
  
  if [ -f $DB/acct -a -f $BIN/nnacct ] ; then
  	echo "USER        USAGE  QUOTA  LAST_ACTIVE   COST/PERIOD"
  	$BIN/nnacct -r $OPT $@ | sed -e 1d | sort $SORTMODE
  	exit
  fi
  
  if $ALL
  then
! 	grep '^U:' $LOG
  else
! 	grep "^U:.*(${LOGNAME-$USER})" $LOG
  fi |
  
  ${AWK} '
--- 26,52 ----
  done
  
  if [ -f $DB/acct -a -f $BIN/nnacct ] ; then
+ 	if $AUTH ; then
+ 	echo "USER        USAGE  QUOTA  LAST_ACTIVE   COST/PERIOD   POLICY"
+ 	else
  	echo "USER        USAGE  QUOTA  LAST_ACTIVE   COST/PERIOD"
+ 	fi
  	$BIN/nnacct -r $OPT $@ | sed -e 1d | sort $SORTMODE
  	exit
  fi
  
+ OLDLOG=${LOG}.old
+ if [ ! -s ${OLDLOG} ]
+ then
+   OLDLOG=""
+ fi
+ 
+ cat $OLDLOG $LOG |
  if $ALL
  then
! 	grep '^U:'
  else
! 	grep "^U:.*(${LOGNAME-$USER})"
  fi |
  
  ${AWK} '
***************
*** 45,50 ****
--- 56,62 ----
  NF == 7 {
  	if (split($7, t, ".") == 2) {
  		u[$5] += t[1] * 60 + t[2]
+ 		if (any == 0) printf("Usage since %s %d, %s\n", $2, $3, $4)
  		any=1
  	}
  }
*** ./LAST/patchlevel.h	Wed Feb  6 19:14:21 1991
--- patchlevel.h	Mon Mar 25 13:30:55 1991
***************
*** 24,30 ****
   *	1990-10-05: Patch #11 (6.4.11) - HIGH
   *	1990-11-07: Patch #12 (6.4.12) - LOW
   *	1991-02-06: Patch #13 (6.4.13) - MEDIUM
   */
  
! #define PATCHLEVEL 13
  
--- 24,31 ----
   *	1990-10-05: Patch #11 (6.4.11) - HIGH
   *	1990-11-07: Patch #12 (6.4.12) - LOW
   *	1991-02-06: Patch #13 (6.4.13) - MEDIUM
+  *	1991-03-22: Patch #14 (6.4.14) - MEDIUM
   */
  
! #define PATCHLEVEL 14
  
*** ./LAST/prefix.c	Tue Sep 18 12:45:13 1990
--- prefix.c	Fri Nov 16 18:49:10 1990
***************
*** 83,89 ****
  	fprintf(f, "GROUP=%s\n", GROUP);
      }
  
!     if (FULL_PREFIX) {
  	fprintf(f, "UMAN_DIR=\"%s\"\n", USER_MAN_DIR);
  	fprintf(f, "UMAN_SECT=\"%s\"\n", USER_MAN_SECTION);
  
--- 83,95 ----
  	fprintf(f, "GROUP=%s\n", GROUP);
      }
  
! #ifdef AUTHORIZE
!     fprintf(f, "AUTH=true\n");
! #else
!     fprintf(f, "AUTH=false\n");
! #endif
! 
!     if (flag & FULL_PREFIX) {
  	fprintf(f, "UMAN_DIR=\"%s\"\n", USER_MAN_DIR);
  	fprintf(f, "UMAN_SECT=\"%s\"\n", USER_MAN_SECTION);
  
*** ./LAST/regexp.c	Mon Apr 23 18:25:55 1990
--- regexp.c	Wed Feb 13 10:45:36 1991
***************
*** 56,61 ****
--- 56,62 ----
  #ifdef NN
  #include "config.h"
  #include "regexp.h"
+ #include <ctype.h>
  #else
  #include "pax.h"
  
***************
*** 115,120 ****
--- 116,125 ----
  #define	NOTHING	9		/* no	Match empty string. */
  #define	STAR	10		/* node	Match this (simple) thing 0 or more
  				 * times. */
+ #ifdef NN
+ #define W_START	11		/* no	Match beginning of word */
+ #define W_END	12		/* no	Match end of word */
+ #endif
  #define	OPEN	20		/* no	Mark this point in input as start of
  				 * #n. */
   /* OPEN+1 is number 1, etc. */
***************
*** 529,534 ****
--- 534,557 ----
  	FAIL("* follows nothing");
  	break;
      case '\\':
+ #ifdef NN
+ 	switch (*regparse++) {
+ 	 case '\0':
+ 	    FAIL("trailing \\");
+ 	 case '<':
+ 	    ret = regnode(W_START);
+ 	    break;
+ 	 case '>':
+ 	    ret = regnode(W_END);
+ 	    break;
+ 	 default:
+ 	    ret = regnode(EXACTLY);
+ 	    regc(*(regparse - 1));
+ 	    regc('\0');
+ 	    *flagp |= HASWIDTH | SIMPLE;
+ 	    break;
+ 	}
+ #else
  	if (*regparse == '\0')
  	    FAIL("trailing \\");
  	ret = regnode(EXACTLY);
***************
*** 535,540 ****
--- 558,564 ----
  	regc(*regparse++);
  	regc('\0');
  	*flagp |= HASWIDTH | SIMPLE;
+ #endif	
  	break;
      default:{
  	    register int    len;
***************
*** 835,840 ****
--- 859,878 ----
  	    if (*reginput != '\0')
  		return (0);
  	    break;
+ #ifdef NN
+ 	case W_START:
+ 	    if (*reginput == '\0' || isspace(*reginput))
+ 		return (0);
+ 	    if (reginput != regbol && !isspace(*(reginput - 1))) 
+ 		return (0);
+ 	    break;
+ 	case W_END:
+ 	    if (*reginput != '\0' && !isspace(*reginput))
+ 		return (0);
+ 	    if (reginput == regbol || isspace(*(reginput - 1)))
+ 		return (0);
+ 	    break;
+ #endif
  	case ANY:
  	    if (*reginput == '\0')
  		return (0);
***************
*** 1152,1157 ****
--- 1190,1203 ----
      case EOL:
  	p = "EOL";
  	break;
+ #ifdef NN
+      case W_START:
+ 	p = "WSTART";
+ 	break;
+      case W_END:
+ 	p = "WEND";
+ 	break;
+ #endif	
      case ANY:
  	p = "ANY";
  	break;
*** ./LAST/term.c	Wed Feb  6 19:14:22 1991
--- term.c	Fri Mar 22 16:12:28 1991
***************
*** 831,838 ****
  
  #endif /* CBREAK */
  
- #ifndef USE_OLD_GET_C_CODE
- 
  #ifndef KEY_BURST
  #define KEY_BURST 32
  #endif
--- 831,836 ----
***************
*** 844,850 ****
  static jmp_buf fake_alarm_sig;
  #endif
  
! static rd_timeout()
  {
      rd_alarm = 1;
  #ifdef FAKE_INTERRUPT
--- 842,848 ----
  static jmp_buf fake_alarm_sig;
  #endif
  
! static sig_type rd_timeout()
  {
      rd_alarm = 1;
  #ifdef FAKE_INTERRUPT
***************
*** 1035,1247 ****
      return GETC_COMMAND | K_REDRAW;
  }
  
- #else /* original code */
- 
- static int do_flush_input = 0;
- 
- flush_input()
- {
-     BATCH_CHECK;
- 
- #ifdef HAVE_TERMIO
-     ioctl(0, TCFLSH, 0);
-     do_flush_input = 1;
- #else
- #ifdef FREAD
-   {
-     int arg = FREAD;
-     ioctl(0, TIOCFLUSH, &arg);
-   }
- #else
-     ioctl(0, TIOCFLUSH, 0);
- #endif
- #endif
- }
- 
- int enable_stop = 1;
- 
- #ifndef KEY_BURST
- 
- static int alarm_on = 0;
- 
- static mk_timeout(n)
- {
-     alarm_on = 0;
- 
- #ifdef FAKE_INTERRUPT
-     if (fake_keyb_siglist[n] && arm_fake_keyb_sig)
- 	longjmp(fake_keyb_sig, 1);
- #endif
- }
- 
- #endif
- 
- static int do_macro_processing = 1;
- 
- get_c()
- {
-     key_type c;
-     int any_multi, key_cnt, mc;
-     register struct multi_key *mk;
-     register int i;
- #ifdef KEY_BURST
-     static char cbuf[KEY_BURST], *cp;
-     static int n = 0;
- 
-     if (do_flush_input) {
- 	do_flush_input = 0;
- 	n = 0;
-     }
- #else
-     int n;
-     key_type first_key;
- #endif
- 
-  next_key:
-     if (s_hangup)
- 	return K_interrupt;
- 
- #ifdef RESIZING
-     if (s_resized) {
- 	s_resized = 0;
- 	return GETC_COMMAND | K_REDRAW;
-     }
- #endif
- 
-     if (do_macro_processing)
- 	switch (m_getc(&mc)) {
- 	 case 0:
- 	    break;
- 	 case 1:
- 	    return mc;
- 	 case 2:
- 	    return K_interrupt;
- 	}
- 
-     if (batch_mode)
- 	user_error("Attempt to read keyboard input in batch mode");
- 
-     for (i = multi_keys, mk = multi_key_list; --i >= 0; mk++)
- 	mk->cur_key = mk->keys;
-     key_cnt = 0;
- 
- #ifdef KEY_BURST
-     if (n <= 0) {
- 	n = read(0, cbuf, KEY_BURST);
- 	if (n < 0 && errno != EINTR) s_hangup++;
- 	if (n <= 0) return K_interrupt;
- 	cp = cbuf;
-     }
- 
-     while (--n >= 0) {
- 	c = (key_type)*cp++;
- #else
- #ifdef FAKE_INTERRUPT
-     if (setjmp(fake_keyb_sig)) {
- 	arm_fake_keyb_sig = 0;
- 	return K_interrupt;
-     }
-     arm_fake_keyb_sig = 1;
- #endif
-     while ((n = read(0, (char *)&c, 1)) > 0) {
- #endif
- 
- 	if (data_bits < 8) c &= 0x7f;
- 
- 	if (ignore_xon_xoff && (c == CONTROL_('Q') || c == CONTROL_('S')))
- 	    continue;
- 
- 	any_multi = 0;
- 	for (i = multi_keys, mk = multi_key_list; --i >= 0; mk++)
- 	    if (mk->cur_key) {
- 		if (*(mk->cur_key)++ == c) {
- 		    if (*(mk->cur_key) == NUL) {
- 			c = mk->code;
- 			goto got_char;
- 		    }
- 		    any_multi++;
- 		} else
- 		    mk->cur_key = NUL;
- 	    }
- 
- 	if (any_multi) {
- #ifndef KEY_BURST
- 	    if (key_cnt == 0) {
- 		first_key = c;
- 		alarm_on = 1;
- 		signal(SIGALRM, mk_timeout);
- 		micro_alarm(1);
- 	    }
- #endif
- 	    key_cnt++;
- 	    continue;
- 	}
- 	if (key_cnt == 0)
- 	    goto got_char;
- 
- 	ding();
- 	flush_input();
- 	goto next_key;
-     }
- 
- #ifdef FAKE_INTERRUPT
-     arm_fake_keyb_sig = 0;
- #endif
- #ifdef CBREAK
-     if (s_redraw) {
- 	s_redraw = 0;
- 	return GETC_COMMAND | K_REDRAW;
-     }
- #endif
- 
- #ifndef KEY_BURST
-     if (n < 0) {
- 	if (errno != EINTR) s_hangup++;
- 	return K_interrupt;
-     }
- #endif
- 
- #ifdef RESIZING
-     if (s_resized) {
- 	s_resized = 0;
- 	return GETC_COMMAND | K_REDRAW;
-     }
- #endif
- 
- #ifndef KEY_BURST
-     if (n < 0 && key_cnt)
- 	c = first_key;
- #endif
- 
- got_char:
- #ifdef FAKE_INTERRUPT
-     arm_fake_keyb_sig = 0;
- #endif
- 
- #ifndef KEY_BURST
-     if (alarm_on) {
- 	alarm(0);
- 	alarm_on = 0;
-     }
- #endif
- 
-     c = global_key_map[c];
- 
- #ifndef CBREAK
-     if (c == SuspC) {
- 	if (!enable_stop) goto next_key;
- 	if (suspend_nn())
- 	    return GETC_COMMAND | K_REDRAW;
- 	else
- 	    goto next_key;
-     }
- 
-     if (c == IntrC) c = K_interrupt;
- #endif
-     return (int)c;
- }
- 
- #endif
  
  /*
   * read string with completion, pre-filling, and break on first char
--- 1033,1038 ----
***************
*** 1464,1471 ****
--- 1255,1265 ----
  	if (i == max) continue;
  
  	if (i > 0 && buf[i-1] == '/' && (c == '/' || c == '+')) {
+ 	  extern int file_completion();
+ 	  if (completion == file_completion) {
  	    while (i > 0) { putchar(BS); i--; }
  	    clrline();
+ 	  }
  	}
  
  	putchar(c);
*** ./LAST/xmakefile	Wed Feb  6 19:14:23 1991
--- xmakefile	Mon Feb 11 17:09:12 1991
***************
*** 16,21 ****
--- 16,25 ----
  #define EXTRA_LIB
  #endif
  
+ #ifndef LOADER_FLAGS
+ #define LOADER_FLAGS
+ #endif
+ 
  #ifndef NNTP
  #undef NNTP_EXTRA_LIB
  #endif
***************
*** 56,61 ****
--- 60,66 ----
  CC =	 COMPILER
  CPP =	 PREPROC
  CFLAGS = -Iconf COMPILER_FLAGS CDEBUG
+ LDFLAGS = LDEBUG LOADER_FLAGS EXTRA_LIB
  
  *
  * Resulting programs
***************
*** 96,110 ****
  
  nn:	PARALLEL $(NN)
  	@echo linking nn
! 	@$(CC) $(CFLAGS) $(NN) -o nn TERMLIB EXTRA_LIB NNTP_EXTRA_LIB
  
  nnmaster: PARALLEL $(MASTER)
  	@echo linking nnmaster
! 	@$(CC) $(CFLAGS) $(MASTER) -o nnmaster EXTRA_LIB NNTP_EXTRA_LIB
  
  nnmail:	PARALLEL $(MAIL)
  	@echo linking nnmail
! 	@$(CC) $(CFLAGS) $(MAIL) EXTRA_LIB -o nnmail
  
  nnstats: nnstats.sh prefix
  	cat prefix nnstats.sh > nnstats ; chmod +x nnstats
--- 101,115 ----
  
  nn:	PARALLEL $(NN)
  	@echo linking nn
! 	@$(CC) -o nn $(CFLAGS) $(NN) $(LDFLAGS) TERMLIB NNTP_EXTRA_LIB
  
  nnmaster: PARALLEL $(MASTER)
  	@echo linking nnmaster
! 	@$(CC) -o nnmaster $(CFLAGS) $(MASTER) $(LDFLAGS) NNTP_EXTRA_LIB
  
  nnmail:	PARALLEL $(MAIL)
  	@echo linking nnmail
! 	@$(CC) -o nnmail $(CFLAGS) $(MAIL) $(LDFLAGS)
  
  nnstats: nnstats.sh prefix
  	cat prefix nnstats.sh > nnstats ; chmod +x nnstats
***************
*** 123,129 ****
  
  nnacct: PARALLEL $(ACCT)
  	@echo linking nnacct
! 	@$(CC) $(CFLAGS) $(ACCT) EXTRA_LIB -o nnacct
  
  back_act: back_act.sh prefix
  	cat prefix back_act.sh > back_act ; chmod +x back_act
--- 128,134 ----
  
  nnacct: PARALLEL $(ACCT)
  	@echo linking nnacct
! 	@$(CC) -o nnacct $(CFLAGS) $(ACCT) $(LDFLAGS)
  
  back_act: back_act.sh prefix
  	cat prefix back_act.sh > back_act ; chmod +x back_act
***************
*** 135,141 ****
  	./mkprefix prefix < /dev/null > prefix
  
  mkprefix: PARALLEL prefix.o global.o
! 	$(CC) $(CFLAGS) prefix.o global.o EXTRA_LIB -o mkprefix
  
  *
  * Configuration counter updating
--- 140,146 ----
  	./mkprefix prefix < /dev/null > prefix
  
  mkprefix: PARALLEL prefix.o global.o
! 	$(CC) -o mkprefix $(CFLAGS) prefix.o global.o $(LDFLAGS)
  
  *
  * Configuration counter updating
***************
*** 151,160 ****
  *
  
  cvt-help:	PARALLEL config.h cvt-help.c
! 	$(CC) -o cvt-help cvt-help.c EXTRA_LIB
  
  usercheck:	PARALLEL config.h usercheck.c
! 	$(CC) -o usercheck usercheck.c EXTRA_LIB
  
  inst: config.h xmakefile inst.sh cvt-help usercheck mkprefix man/nn.1
  	@echo building install script: ./inst
--- 156,165 ----
  *
  
  cvt-help:	PARALLEL config.h cvt-help.c
! 	$(CC) -o cvt-help cvt-help.c $(LDFLAGS)
  
  usercheck:	PARALLEL config.h usercheck.c
! 	$(CC) -o usercheck usercheck.c $(LDFLAGS)
  
  inst: config.h xmakefile inst.sh cvt-help usercheck mkprefix man/nn.1
  	@echo building install script: ./inst
***************
*** 246,255 ****
  * link debugging version
  
  nn1:	$(NN)
! 	$(CC) $(CFLAGS) $(NN) TERMLIB EXTRA_LIB -Mnn1 -o nn1
  
  nnmaster1: $(MASTER)
! 	$(CC) $(CFLAGS) $(MASTER) EXTRA_LIB -Mnnmaster1 -o nnmaster1
  
  lint:
  	echo LINTING NN
--- 251,260 ----
  * link debugging version
  
  nn1:	$(NN)
! 	$(CC) -o nn1 -Mnn1 $(CFLAGS) $(NN) $(LDFLAGS) TERMLIB NNTP_EXTRA_LIB
  
  nnmaster1: $(MASTER)
! 	$(CC) -o nnmaster1 -Mnnmaster1 $(CFLAGS) $(MASTER) $(LDFLAGS) NNTP_EXTRA_LIB
  
  lint:
  	echo LINTING NN

