[net.news.b] 2.10.1 diff.c output

usenet@ucbvax.UUCP (07/07/83)

diff -r -c 2.10/README 2.10.1/README
*** 2.10/README	Wed May  4 14:07:36 1983
--- 2.10.1/README	Fri Jun 24 16:43:28 1983
***************
*** 1,3
  Notes for 2.10:
  
  There are some incompatiblities between 2.9 and 2.10.  None of them

--- 1,34 -----
+ Notes for 2.10.1:
+ 
+ This distribution is an interim distribution, fixing some serious bugs
+ found in 2.10, but providing no user enhancements.  It is provided since
+ 2.11 will not be out for a few months.
+ 
+ The : prompt at the end of a long article has proven to be very unpopular.
+ It will go away in 2.11 in favor of a mechanism allowing the user to
+ receive a command prompt after headers, after the body, or both.
+ If you wish to disable it in the meantime, you can enable NOCOLON in
+ defs.h.  Be warned that NOCOLON will not be present in 2.11.
+ A fancier method providing a -D option, to let the users disable colon
+ individually, has been posted, but is beyond the scope of this distribution,
+ since it would involve changing the documentation and help files,
+ and is a temporary measure.
+ 
+ Preview of 2.11:
+ 2.11 will incorporate
+ 	A large number of less serious bug fixes and improvements.
+ 	Several enhancements that have been posted to the net,
+ 		such as the recursive expire options.
+ 	A considerably revamped user interface which sorts newsgroups
+ 		to put discussions together (as much as possible,
+ 		given the nature of how people follow things up).
+ 		The msgs and mail interfaces are more cleanly integrated.
+ 		Turning off discussions is a possibility.
+ 	Some kind of screen oriented interface will probably be
+ 		included as an alternative to readnews.
+ 	Possible improved batching software, as it develops.
+ 	No significant enhancements to the inews portion are planned for 2.11.
+ 
  Notes for 2.10:
  
  There are some incompatiblities between 2.9 and 2.10.  None of them
Common subdirectories: 2.10/config and 2.10.1/config
Common subdirectories: 2.10/cvt and 2.10.1/cvt
Common subdirectories: 2.10/doc and 2.10.1/doc
Common subdirectories: 2.10/man and 2.10.1/man
Common subdirectories: 2.10/misc and 2.10.1/misc
Common subdirectories: 2.10/src and 2.10.1/src
Common subdirectories: 2.10/uucp and 2.10.1/uucp
Only in 2.10.1/cvt: newactive.sh
diff -r -c 2.10/src/Makefile.usg 2.10.1/src/Makefile.usg
*** 2.10/src/Makefile.usg	Wed Mar 30 15:39:52 1983
--- 2.10.1/src/Makefile.usg	Sat Jun 25 00:31:33 1983
***************
*** 55,61
  Makefile: Makefile.usg localize.sh
  	sh localize.sh
  
! install:
  	sh install.usg $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP)
  	make cp
  

--- 55,61 -----
  Makefile: Makefile.usg localize.sh
  	sh localize.sh
  
! install active:
  	sh install.usg $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP)
  	cd ../cvt ; newactive.sh ../src/active $(LIBDIR) $(SPOOLDIR)
  	mv active oldactive
***************
*** 57,62
  
  install:
  	sh install.usg $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP)
  	make cp
  
  

--- 57,64 -----
  
  install active:
  	sh install.usg $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP)
+ 	cd ../cvt ; newactive.sh ../src/active $(LIBDIR) $(SPOOLDIR)
+ 	mv active oldactive
  	make cp
  
  
diff -r -c 2.10/src/Makefile.v7 2.10.1/src/Makefile.v7
*** 2.10/src/Makefile.v7	Wed Mar 30 15:39:53 1983
--- 2.10.1/src/Makefile.v7	Sat Jun 25 00:31:44 1983
***************
*** 44,51
  Makefile: Makefile.v7 localize.sh
  	sh localize.sh
  
! install: cp
! 		sh install.v7 $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP)
  
  clean:
  	rm -f $(COMMANDS) *.o

--- 44,53 -----
  Makefile: Makefile.v7 localize.sh
  	sh localize.sh
  
! install: active cp
! 	sh install.v7 $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP)
! 	cd ../cvt ; newactive.sh ../src/active $(LIBDIR) $(SPOOLDIR)
! 	mv active oldactive
  
  clean:
  	rm -f $(COMMANDS) *.o
diff -r -c 2.10/src/control.c 2.10.1/src/control.c
*** 2.10/src/control.c	Tue May  3 14:48:54 1983
--- 2.10.1/src/control.c	Fri Jun 24 16:27:09 1983
***************
*** 5,11
   * See defs.h "news_version" for the real version of netnews.
   */
  
! static char *SccsId = "@(#)control.c	2.18	5/3/83 (this is NOT the netnews version!)";
  
  #include "iparams.h"
  

--- 5,11 -----
   * See defs.h "news_version" for the real version of netnews.
   */
  
! static char *SccsId = "@(#)control.c	2.20	6/24/83 (this is NOT the netnews version!)";
  
  #include "iparams.h"
  
***************
*** 172,179
  
  	/* update ngfile */
  	fd = fopen(NGFILE, "a");
! 	fprintf(fd, "%s 00000\n", argv[1]);
! 	fclose(NGFILE);
  
  #ifdef NOTIFY
  	/*

--- 172,179 -----
  
  	/* update ngfile */
  	fd = fopen(NGFILE, "a");
! 	fprintf(fd, "%s\n", argv[1]);
! 	fclose(fd);
  
  #ifdef NOTIFY
  	/*
***************
*** 296,302
  			su = 1;
  		poster = senderof(&header);
  		if (!su && strcmp(whatsisname, poster)) {
! 			sprintf(msgbuf, "Not contributor: %s and %s", header.path, whatsisname);
  			xerror(msgbuf);
  		}
  

--- 296,302 -----
  			su = 1;
  		poster = senderof(&header);
  		if (!su && strcmp(whatsisname, poster)) {
! 			sprintf(msgbuf, "Not contributor: posted by %s, and you are %s", poster, whatsisname);
  			xerror(msgbuf);
  		}
  
***************
*** 502,508
  {
  	int p[2];
  	register myside, hisside, pid;
! 	char *sendto;
  
  	if (hptr)
  		sendto = replyname(hptr);

--- 502,508 -----
  {
  	int p[2];
  	register myside, hisside, pid;
! 	char *sendto = NULL;
  
  	if (hptr)
  		sendto = replyname(hptr);
***************
*** 506,512
  
  	if (hptr)
  		sendto = replyname(hptr);
! 	else
  #ifdef NOTIFY
  		sendto = TELLME;
  #else

--- 506,512 -----
  
  	if (hptr)
  		sendto = replyname(hptr);
! 	else {
  #ifdef NOTIFY
  		if (TELLME && *TELLME)
  			sendto = TELLME;
***************
*** 508,516
  		sendto = replyname(hptr);
  	else
  #ifdef NOTIFY
! 		sendto = TELLME;
! #else
! 		return NULL;
  #endif NOTIFY
  	verifyname(sendto);
  	if(pipe(p) < 0)

--- 508,515 -----
  		sendto = replyname(hptr);
  	else {
  #ifdef NOTIFY
! 		if (TELLME && *TELLME)
! 			sendto = TELLME;
  #endif NOTIFY
  		if (sendto == NULL)
  			return NULL;
***************
*** 512,517
  #else
  		return NULL;
  #endif NOTIFY
  	verifyname(sendto);
  	if(pipe(p) < 0)
  		return NULL;

--- 511,519 -----
  		if (TELLME && *TELLME)
  			sendto = TELLME;
  #endif NOTIFY
+ 		if (sendto == NULL)
+ 			return NULL;
+ 	}
  	verifyname(sendto);
  	if(pipe(p) < 0)
  		return NULL;
***************
*** 577,583
  	if (hptr)
  		to = replyname(hptr);
  #ifdef NOTIFY
! 	else
  		to = TELLME;
  #endif NOTIFY
  	if ((fp = mhopen(hptr)) != NULL) {

--- 579,585 -----
  	if (hptr)
  		to = replyname(hptr);
  #ifdef NOTIFY
! 	if (TELLME && *TELLME)
  		to = TELLME;
  #endif NOTIFY
  	if ((fp = mhopen(hptr)) != NULL) {
diff -r -c 2.10/src/defs.dist 2.10.1/src/defs.dist
*** 2.10/src/defs.dist	Tue May  3 14:50:42 1983
--- 2.10.1/src/defs.dist	Fri Jun 24 16:35:28 1983
***************
*** 10,17
   * to be news_version below.
   */
  
! static char *news_version = "B 2.10 5/3/83";
! /* SCCS ID @(#)defs.dist	2.23	5/3/83 */
  
  #define DAYS	(60L*60L*24L)
  #define WEEKS	(7*DAYS)

--- 10,17 -----
   * to be news_version below.
   */
  
! static char *news_version = "B 2.10.1 6/24/83";
! /* SCCS ID @(#)defs.dist	2.23 (hand edited)	5/3/83 */
  
  #define DAYS	(60L*60L*24L)
  #define WEEKS	(7*DAYS)
***************
*** 47,52
  /* #define OLD			/* Add extra headers for old neighbors	*/
  /* #define UNAME		/* If uname call is available.		*/
  /* #define GHNAME		/* If gethostname call is available.	*/
  #define V7MAIL			/* Local mail format is V7 ("From ")	*/
  #define MYORG "Frobozz Inc., St. Louis"	/* My organization.  Please	*/
  				/* include your city (and state, and	*/

--- 47,53 -----
  /* #define OLD			/* Add extra headers for old neighbors	*/
  /* #define UNAME		/* If uname call is available.		*/
  /* #define GHNAME		/* If gethostname call is available.	*/
+ /* #define NOCOLON		/* Don't do :.  Will go away in 2.11.	*/
  #define V7MAIL			/* Local mail format is V7 ("From ")	*/
  #define MYORG "Frobozz Inc., St. Louis"	/* My organization.  Please	*/
  				/* include your city (and state, and	*/
diff -r -c 2.10/src/expire.c 2.10.1/src/expire.c
*** 2.10/src/expire.c	Wed Mar 30 15:39:57 1983
--- 2.10.1/src/expire.c	Fri Jun 24 16:27:07 1983
***************
*** 11,17
   * convert this 2.9 style code.
   */
  
! static char	*SccsId = "@(#)expire.c	2.15	3/28/83";
  
  #include "params.h"
  #include "ndir.h"

--- 11,17 -----
   * convert this 2.9 style code.
   */
  
! static char	*SccsId = "@(#)expire.c	2.16	6/24/83";
  
  #include "params.h"
  #include "ndir.h"
***************
*** 427,432
  	mkparents(buf);
  	sprintf(sysbuf, "mkdir %s", buf);
  	rc = system(sysbuf);
  	if (verbose)
  		printf("mkdir %s, rc %d\n", sysbuf, rc);
  	chmod(sysbuf, 0755);

--- 427,433 -----
  	mkparents(buf);
  	sprintf(sysbuf, "mkdir %s", buf);
  	rc = system(sysbuf);
+ 	strcpy(sysbuf, buf);
  	if (verbose)
  		printf("mkdir %s, rc %d\n", sysbuf, rc);
  	chmod(sysbuf, 0755);
diff -r -c 2.10/src/funcs.c 2.10.1/src/funcs.c
*** 2.10/src/funcs.c	Tue May  3 14:48:57 1983
--- 2.10.1/src/funcs.c	Fri Jun 24 16:27:09 1983
***************
*** 2,8
   * funcs - functions used by both inews and readnews.
   */
  
! static char *SccsId = "@(#)funcs.c	2.9	5/3/83";
  
  #include "params.h"
  

--- 2,8 -----
   * funcs - functions used by both inews and readnews.
   */
  
! static char *SccsId = "@(#)funcs.c	2.10	6/24/83";
  
  #include "params.h"
  
***************
*** 544,550
  	char *q, *tp;
  
  	if (hp->sender[0])
! 		return hp->sender;
  
  	if (hp->from[0])
  		return hp->from;

--- 544,559 -----
  	char *q, *tp;
  
  	if (hp->sender[0])
! 		tp = hp->sender;
! 	else if (hp->from[0])
! 		tp = hp->from;
! 	else
! 		tp = tailpath(hp);
! 	
! 	/* Remove full name */
! 	q = index(tp, ' ');
! 	if (q)
! 		*q = '\0';
  
  	q = malloc(strlen(tp) + 1);
  	strcpy(q, tp);
***************
*** 546,555
  	if (hp->sender[0])
  		return hp->sender;
  
- 	if (hp->from[0])
- 		return hp->from;
- 
- 	tp = tailpath(hp);
  	q = malloc(strlen(tp) + 1);
  	strcpy(q, tp);
  	return q;

--- 555,560 -----
  	if (q)
  		*q = '\0';
  
  	q = malloc(strlen(tp) + 1);
  	strcpy(q, tp);
  	return q;
diff -r -c 2.10/src/header.c 2.10.1/src/header.c
*** 2.10/src/header.c	Sun Apr  3 20:05:00 1983
--- 2.10.1/src/header.c	Fri Jun 24 15:32:20 1983
***************
*** 2,8
   * header.c - header functions plus some other goodies
   */
  
! static char	*SccsId = "@(#)header.c	2.16	4/3/83";
  
  #include <stdio.h>
  #include <sys/types.h>

--- 2,8 -----
   * header.c - header functions plus some other goodies
   */
  
! static char	*SccsId = "@(#)header.c	2.20	6/24/83";
  
  #include <stdio.h>
  #include <sys/types.h>
***************
*** 14,19
  
  char *hfgets();
  
  /*
   * Read header from file fp into *hp.  If wholething is FALSE,
   * it's an incremental read, otherwise start from scratch.

--- 14,21 -----
  
  char *hfgets();
  
+ static int seenrelay;
+ 
  /*
   * Read header from file fp into *hp.  If wholething is FALSE,
   * it's an incremental read, otherwise start from scratch.
***************
*** 30,35
  	if (wholething)
  		bclear((char *) hp, sizeof (*hp));
  
  	/* Check that it's a B news style header. */
  	if (((hfgets(bfr, PATHLEN, fp) != NULL && 
  	    *bfr >= 'A' && *bfr <= 'Z') && index(bfr, ':')))

--- 32,39 -----
  	if (wholething)
  		bclear((char *) hp, sizeof (*hp));
  
+ 	seenrelay = 0;
+ 
  	/* Check that it's a B news style header. */
  	if (((hfgets(bfr, PATHLEN, fp) != NULL && 
  	    *bfr >= 'A' && *bfr <= 'Z') && index(bfr, ':')))
***************
*** 102,107
  #define ORGANIZATION	18
  #define NUMLINES	19
  #define KEYWORDS	20
  #define OTHER		99
  
  char *malloc();

--- 106,112 -----
  #define ORGANIZATION	18
  #define NUMLINES	19
  #define KEYWORDS	20
+ #define APPROVED	21
  #define OTHER		99
  
  char *malloc();
***************
*** 182,187
  		case KEYWORDS:
  			getfield(hp->keywords);
  			break;
  		case RELAYVERSION:
  			/*
  			 * Only believe a relay version if it's the first

--- 187,195 -----
  		case KEYWORDS:
  			getfield(hp->keywords);
  			break;
+ 		case APPROVED:
+ 			getfield(hp->approved);
+ 			break;
  		case RELAYVERSION:
  			/*
  			 * Only believe a relay version if it's the first
***************
*** 188,194
  			 * line, otherwise it probably got passed through
  			 * by some old neighbor.
  			 */
! 			if (hdrlineno == 1)
  				getfield(hp->relayversion);
  			break;
  		case OTHER:

--- 196,202 -----
  			 * line, otherwise it probably got passed through
  			 * by some old neighbor.
  			 */
! 			if (hdrlineno == 1) {
  				getfield(hp->relayversion);
  				seenrelay = 1;
  			}
***************
*** 190,195
  			 */
  			if (hdrlineno == 1)
  				getfield(hp->relayversion);
  			break;
  		case OTHER:
  			if (unreccnt < NUNREC) {

--- 198,205 -----
  			 */
  			if (hdrlineno == 1) {
  				getfield(hp->relayversion);
+ 				seenrelay = 1;
+ 			}
  			break;
  		case OTHER:
  			if (unreccnt < NUNREC) {
***************
*** 218,223
  	char *tp;
  	char *user, *host, *fullname;
  	char *tailpath(), *rindex();
  
  	tp = tailpath(hp);
  	user = rindex(tp, '!');

--- 228,234 -----
  	char *tp;
  	char *user, *host, *fullname;
  	char *tailpath(), *rindex();
+ 	char *at, *dot;
  
  	tp = tailpath(hp);
  	user = rindex(tp, '!');
***************
*** 225,230
  		user = tp;
  	else
  		*user++ = '\0';
  	if (tp[0] == '.')
  		host = index(tp, '!') + 1;
  	else if (user == tp)

--- 236,254 -----
  		user = tp;
  	else
  		*user++ = '\0';
+ 	
+ 	/* Check for an existing Internet address on the end. */
+ 	at = index(user, '@');
+ 	if (at) {
+ 		dot = index(at, '.');
+ 		if (dot) {
+ 			strcpy(hp->from, user);
+ 			return;
+ 		}
+ 		/* @ signs are illegal except for the biggie, so */
+ 		*at = '%';
+ 	}
+ 
  	if (tp[0] == '.')
  		host = index(tp, '!') + 1;
  	else if (user == tp)
***************
*** 231,236
  		host = FULLSYSNAME;
  	else
  		host = tp;
  	tp = index(host, '@');
  	if (tp != NULL)
  		*tp = 0;

--- 255,261 -----
  		host = FULLSYSNAME;
  	else
  		host = tp;
+ 
  	tp = index(host, '@');
  	if (tp != NULL)
  		*tp = 0;
***************
*** 262,268
  			return;
  		}
  		*p++ = '\0';
! 		sprintf(hp->ident, "<%s@%s%s>", p, lbuf, MYDOMAIN);
  	}
  
  #ifdef OLD

--- 287,302 -----
  			return;
  		}
  		*p++ = '\0';
! 		/*
! 		 * It may seem strange that we hardwire ".UUCP" in
! 		 * here instead of MYDOMAIN.  However, we are trying
! 		 * to guess what the domain was on the posting system,
! 		 * not the local system.  Since we don't really know
! 		 * what the posting system does, we just go with the
! 		 * majority - almost everyone will be a .UUCP if they
! 		 * didn't fill in their Message-ID.
! 		 */
! 		sprintf(hp->ident, "<%s@%s%s>", p, lbuf, ".UUCP");
  	}
  
  #ifdef OLD
***************
*** 275,280
  		}
  		*p++ = '\0';
  		q = index(p, '.');
  		if (q)
  			*q++ = '\0';
  		sprintf(hp->oident, "%8s.%s", p, lbuf+1);

--- 309,316 -----
  		}
  		*p++ = '\0';
  		q = index(p, '.');
+ 		if (!q)
+ 			q = index(p, '>');
  		if (q)
  			*q++ = '\0';
  		p[SNLN] = '\0';
***************
*** 277,283
  		q = index(p, '.');
  		if (q)
  			*q++ = '\0';
! 		sprintf(hp->oident, "%8s.%s", p, lbuf+1);
  	}
  #endif
  }

--- 313,320 -----
  			q = index(p, '>');
  		if (q)
  			*q++ = '\0';
! 		p[SNLN] = '\0';
! 		sprintf(hp->oident, "%s.%s", p, lbuf+1);
  	}
  #endif
  }
***************
*** 317,323
  	if (!colon || colon + 1 != space)
  		return FALSE;
  	if (its("From: "))
! 		if (index(ptr, '@') && !index(ptr, '!'))
  			return FROM;
  		else
  			return PATH;

--- 354,360 -----
  	if (!colon || colon + 1 != space)
  		return FALSE;
  	if (its("From: "))
! 		if (index(ptr, '@') && !index(ptr, '!') && seenrelay)
  			return FROM;
  		else
  			return PATH;
***************
*** 359,364
  		return NUMLINES;
  	if (its("Keywords: "))
  		return KEYWORDS;
  	return OTHER;
  }
  

--- 396,403 -----
  		return NUMLINES;
  	if (its("Keywords: "))
  		return KEYWORDS;
+ 	if (its("Approved: "))
+ 		return APPROVED;
  	return OTHER;
  }
  
***************
*** 466,471
  		fprintf(fp, "Lines: %s\n", hp->numlines);
  	if (*hp->keywords)
  		fprintf(fp, "Keywords: %s\n", hp->keywords);
  	for (iu = 0; iu < NUNREC; iu++) {
  		if (hp->unrec[iu])
  			fprintf(fp, "%s", &hp->unrec[iu][0]);

--- 505,512 -----
  		fprintf(fp, "Lines: %s\n", hp->numlines);
  	if (*hp->keywords)
  		fprintf(fp, "Keywords: %s\n", hp->keywords);
+ 	if (*hp->approved)
+ 		fprintf(fp, "Approved: %s\n", hp->approved);
  	for (iu = 0; iu < NUNREC; iu++) {
  		if (hp->unrec[iu])
  			fprintf(fp, "%s", &hp->unrec[iu][0]);
diff -r -c 2.10/src/inews.c 2.10.1/src/inews.c
*** 2.10/src/inews.c	Tue May  3 14:49:01 1983
--- 2.10.1/src/inews.c	Fri Jun 24 16:27:08 1983
***************
*** 2,8
   * inews - insert, receive, and transmit news articles.
   */
  
! static char *SccsId = "@(#)inews.c	2.29	5/3/83";
  
  #include "iparams.h"
  

--- 2,8 -----
   * inews - insert, receive, and transmit news articles.
   */
  
! static char *SccsId = "@(#)inews.c	2.30	6/24/83";
  
  #include "iparams.h"
  
***************
*** 308,314
  			ngcat(header.nbuf);
  		}
  		if (forgedname[0]) {
! 			gensender(&header, forgedname);
  			sprintf(header.sender, "%s@%s%s",
  				username, SYSNAME, MYDOMAIN);
  		} else {

--- 308,314 -----
  			ngcat(header.nbuf);
  		}
  		if (forgedname[0]) {
! 			strcpy(header.from, forgedname);
  			sprintf(header.sender, "%s@%s%s",
  				username, SYSNAME, MYDOMAIN);
  		} else {
diff -r -c 2.10/src/install.v7 2.10.1/src/install.v7
*** 2.10/src/install.v7	Wed Mar 30 15:40:05 1983
--- 2.10.1/src/install.v7	Fri Jun 24 16:33:40 1983
***************
*** 1,4
! : '@(#)install.v7	2.6	3/3/83'
  if test "$#" != 4
  then
  	echo "usage: $0 spooldir libdir nuser ngroup"

--- 1,4 -----
! : '%W%	%G%'
  if test "$#" != 4
  then
  	echo "usage: $0 spooldir libdir nuser ngroup"
***************
*** 38,43
  
  : Ensure certain files in LIBDIR exist
  touch $LIBDIR/history $LIBDIR/active $LIBDIR/log $LIBDIR/users
  chmod 666 $LIBDIR/users
  
  : If no sys file, make one.

--- 38,44 -----
  
  : Ensure certain files in LIBDIR exist
  touch $LIBDIR/history $LIBDIR/active $LIBDIR/log $LIBDIR/users
+ touch $LIBDIR/history.dir $LIBDIR/history.pag
  chmod 666 $LIBDIR/users
  
  : If no sys file, make one.
diff -r -c 2.10/src/readnews.c 2.10.1/src/readnews.c
*** 2.10/src/readnews.c	Sun Apr 24 23:58:34 1983
--- 2.10.1/src/readnews.c	Fri Jun 24 16:33:19 1983
***************
*** 328,334
  
  	first = *searchfor;
  	for (p=index(string, first); p; p = index(p+1, first)) {
! 		if (p>string && p[-1] != '!' && strncmp(p, searchfor, strlen(searchfor)) == 0)
  			return TRUE;
  	}
  	return FALSE;

--- 328,334 -----
  
  	first = *searchfor;
  	for (p=index(string, first); p; p = index(p+1, first)) {
! 		if (p==string || (p>string && p[-1] != '!' && strncmp(p, searchfor, strlen(searchfor)) == 0))
  			return TRUE;
  	}
  	return FALSE;
diff -r -c 2.10/src/readr.c 2.10.1/src/readr.c
*** 2.10/src/readr.c	Tue May  3 14:49:06 1983
--- 2.10.1/src/readr.c	Fri Jun 24 16:33:26 1983
***************
*** 11,17
  #define	saveart	oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hbufcp(&hbuf1, &h);ongsize = pngsize
  #define NLINES(h, fp) (h.numlines[0] ? h.intnumlines : (h.intnumlines=linecnt(fp),sprintf(h.numlines, "%d", h.intnumlines), h.intnumlines))
  
! char *tft = "/usr/tmp/folXXXXXX";
  
  static int	hascaught = 0;
  static catchintr()

--- 11,17 -----
  #define	saveart	oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hbufcp(&hbuf1, &h);ongsize = pngsize
  #define NLINES(h, fp) (h.numlines[0] ? h.intnumlines : (h.intnumlines=linecnt(fp),sprintf(h.numlines, "%d", h.intnumlines), h.intnumlines))
  
! char *tft = "/tmp/folXXXXXX";
  
  static int	hascaught = 0;
  static catchintr()
***************
*** 77,82
  	if (pflag && ignoring())
  		ignorenews = TRUE;
  
  	if (uflag)
  		time(&timelastsaved);
  

--- 77,84 -----
  	if (pflag && ignoring())
  		ignorenews = TRUE;
  
+ 	if (xflag)
+ 		uflag = 0;
  	if (uflag)
  		time(&timelastsaved);
  
***************
*** 950,955
  			} 
  			else
  				pout(ofp);
  			holdup = TRUE;
  			fprintf(ofp, ":");
  			fflush(ofp);

--- 952,958 -----
  			} 
  			else
  				pout(ofp);
+ # ifndef NOCOLON
  			holdup = TRUE;
  # endif NOCOLON
  		}
***************
*** 951,958
  			else
  				pout(ofp);
  			holdup = TRUE;
! 			fprintf(ofp, ":");
! 			fflush(ofp);
  		}
  		else
  #endif

--- 954,960 -----
  				pout(ofp);
  # ifndef NOCOLON
  			holdup = TRUE;
! # endif NOCOLON
  		}
  		else
  #endif
***************
*** 1076,1081
  	if (rfq)
  		return;
  
  	/* Wait for user to read previous article. */
  	if (holdup) {
  		holdup = FALSE;

--- 1078,1084 -----
  	if (rfq)
  		return;
  
+ #ifndef NOCOLON
  	/* Wait for user to read previous article. */
  	if (holdup) {
  		fprintf(ofp, ":");
***************
*** 1078,1083
  
  	/* Wait for user to read previous article. */
  	if (holdup) {
  		holdup = FALSE;
  		gets(bfr);
  		if (bfr[0])

--- 1081,1088 -----
  #ifndef NOCOLON
  	/* Wait for user to read previous article. */
  	if (holdup) {
+ 		fprintf(ofp, ":");
+ 		fflush(ofp);
  		holdup = FALSE;
  		bfr[0] = '\0';
  		gets(bfr);
***************
*** 1079,1084
  	/* Wait for user to read previous article. */
  	if (holdup) {
  		holdup = FALSE;
  		gets(bfr);
  		if (bfr[0])
  			explaincolon();

--- 1084,1090 -----
  		fprintf(ofp, ":");
  		fflush(ofp);
  		holdup = FALSE;
+ 		bfr[0] = '\0';
  		gets(bfr);
  		if (bfr[0])
  			explaincolon();
***************
*** 1083,1088
  		if (bfr[0])
  			explaincolon();
  	}
  
  	if (lflag || eflag) {
  		hprint(&h, ofp, 0);

--- 1089,1095 -----
  		if (bfr[0])
  			explaincolon();
  	}
+ #endif NOCOLON
  
  	if (lflag || eflag) {
  		hprint(&h, ofp, 0);
***************
*** 1103,1108
  
  explaincolon()
  {
  	fprintf(ofp, "\n'%s' ignored.\n", bfr);
  	fprintf(ofp, "The colon is to give you a chance to finish reading the\n");
  	fprintf(ofp, "previous article before the next header scrolls it off\n");

--- 1110,1117 -----
  
  explaincolon()
  {
+ 	static int calledbefore = 0;
+ 
  	fprintf(ofp, "\n'%s' ignored.\n", bfr);
  	if (calledbefore++ == 0) {
  		fprintf(ofp, "The colon is to give you a chance to finish reading the\n");
***************
*** 1104,1113
  explaincolon()
  {
  	fprintf(ofp, "\n'%s' ignored.\n", bfr);
! 	fprintf(ofp, "The colon is to give you a chance to finish reading the\n");
! 	fprintf(ofp, "previous article before the next header scrolls it off\n");
! 	fprintf(ofp, "the top of the screen.  You should hit `return' or `newline'\n");
! 	fprintf(ofp, "when you are ready to go on to the next article.\n\n");
  	fflush(ofp);
  }
  

--- 1113,1124 -----
  	static int calledbefore = 0;
  
  	fprintf(ofp, "\n'%s' ignored.\n", bfr);
! 	if (calledbefore++ == 0) {
! 		fprintf(ofp, "The colon is to give you a chance to finish reading the\n");
! 		fprintf(ofp, "previous article before the next header scrolls it off\n");
! 		fprintf(ofp, "the top of the screen.  You should hit `return' or `newline'\n");
! 		fprintf(ofp, "when you are ready to go on to the next article.\n\n");
! 	}
  	fflush(ofp);
  }
  
***************
*** 1125,1131
  	} else {
  		fprintf(ofp, "%s%s, ", tstr, title);
  		if (bit == pngsize)
! 			fprintf(ofp, "%d\n", pngsize);
  		else
  			fprintf(ofp, "%d-%d\n", bit, pngsize);
  	}

--- 1136,1142 -----
  	} else {
  		fprintf(ofp, "%s%s, ", tstr, title);
  		if (bit == pngsize)
! 			fprintf(ofp, "%ld\n", pngsize);
  		else
  			fprintf(ofp, "%d-%ld\n", bit, pngsize);
  	}
***************
*** 1127,1133
  		if (bit == pngsize)
  			fprintf(ofp, "%d\n", pngsize);
  		else
! 			fprintf(ofp, "%d-%d\n", bit, pngsize);
  	}
  	fprintf(ofp, "\n");
  }

--- 1138,1144 -----
  		if (bit == pngsize)
  			fprintf(ofp, "%ld\n", pngsize);
  		else
! 			fprintf(ofp, "%d-%ld\n", bit, pngsize);
  	}
  	fprintf(ofp, "\n");
  }
Only in 2.10.1/src: rmgrp