[news.software.b] Patch #17 for news 2.11 source

rick@uunet.UU.NET (Rick Adams) (01/25/89)

Description:
	This is the third part of three patches. After applying this
	you should be at patchlevel 17.

Fix:
	apply this in the same manner as patch 15 and 16.
	
	Don't forget the "make update".

Index: readr.c
Prereq: 2.66
*** old/readr.c	Fri Dec  4 02:52:24 1987
--- readr.c	Sun Jan 22 22:18:21 1989
***************
*** 1,3
  /*
!  * This software is Copyright (c) 1986 by Rick Adams.
   *

--- 1,3 -----
  /*
!  * This software is Copyright 1986, 1989 by Rick Adams.
   *
***************
*** 18,20
  #ifdef SCCSID
! static char	*SccsId = "@(#)readr.c	2.66	11/30/87";
  #endif /* SCCSID */

--- 18,20 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)readr.c	2.70	1/22/89";
  #endif /* SCCSID */
***************
*** 32,34
  
! #define	saveart	oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hptr = h;h = hold;hold = hptr;ongsize = pngsize
  #define NLINES(h, fp) (h->numlines[0] ? h->intnumlines : (h->intnumlines=linecnt(fp),sprintf(h->numlines, "%d", h->intnumlines), h->intnumlines))

--- 32,34 -----
  
! #define	saveart	oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hptr = h;h = hold;hold = hptr
  #define NLINES(h, fp) (h->numlines[0] ? h->intnumlines : (h->intnumlines=linecnt(fp),sprintf(h->numlines, "%d", h->intnumlines), h->intnumlines))
***************
*** 53,55
  static int rfq = 0;			/* for last article		*/
- static long ongsize;			/* Previous ngsize		*/
  static long pngsize;			/* Printing ngsize		*/

--- 53,54 -----
  static int rfq = 0;			/* for last article		*/
  static long pngsize;			/* Printing ngsize		*/
***************
*** 56,58
  static char *bptr;			/* temp pointer.		*/
- static struct srec srec;		/* srec for sys file entries	*/
  static char *tfilename;			/* temporary file name 		*/

--- 55,56 -----
  static char *bptr;			/* temp pointer.		*/
  static char *tfilename;			/* temporary file name 		*/
***************
*** 70,72
  static FILE *fp;			/* current article to be printed*/
- static int holdup;			/* 1 iff should stop before hdr */
  static int ignorenews;			/* 1 iff readnews -p > /dev/null*/

--- 68,69 -----
  static FILE *fp;			/* current article to be printed*/
  static int ignorenews;			/* 1 iff readnews -p > /dev/null*/
***************
*** 157,159
  			int nlines;
! 			int (*ointr)();
  #ifdef	SIGCONT

--- 154,156 -----
  			int nlines;
! 			SIGNAL_TYPE ointr;
  #ifdef	SIGCONT
***************
*** 159,161
  #ifdef	SIGCONT
! 			int (*ocont)();
  #endif	/* SIGCONT */

--- 156,158 -----
  #ifdef	SIGCONT
! 			SIGNAL_TYPE ocont;
  #endif	/* SIGCONT */
***************
*** 552,554
  			(void) strcpy(bfr, groupdir);
! 			selectng(ogroupdir, TRUE, PERHAPS);
  			(void) strcpy(groupdir, ogroupdir);

--- 549,551 -----
  			(void) strcpy(bfr, groupdir);
! 			selectng(ogroupdir, FALSE, PERHAPS);
  			(void) strcpy(groupdir, ogroupdir);
***************
*** 647,649
  }
! 
  cancel_command()

--- 644,646 -----
  }
! 
  cancel_command()
***************
*** 650,651
  {
  	int notauthor;

--- 647,649 -----
  {
+ 	register char *poster;
  	int notauthor;
***************
*** 651,652
  	int notauthor;
  	tfilename = filename;

--- 649,652 -----
  	int notauthor;
+ 	char *tailpath();
+ 
  	tfilename = filename;
***************
*** 662,668
  	readmode = SPEC;
! 	(void) strcpy(rcbuf, hptr->path);
! 	ptr1 = index(rcbuf, ' ');
! 	if (ptr1)
! 		*ptr1 = 0;
! 	notauthor = STRCMP(username, rcbuf);
  	if (uid != ROOTID && uid && notauthor) {

--- 662,665 -----
  	readmode = SPEC;
! 	poster = tailpath(hptr);
! 	notauthor = STRCMP(username, poster);
  	if (uid != ROOTID && uid && notauthor) {
***************
*** 668,670
  	if (uid != ROOTID && uid && notauthor) {
! 		fprintf(ofp, "Can't cancel what you didn't write.\n");
  		return FALSE;

--- 665,669 -----
  	if (uid != ROOTID && uid && notauthor) {
! 		fprintf(ofp,
! 			"You (%s) can't cancel someone else's (%s) article.\n",
! 			username,poster);
  		return FALSE;
***************
*** 682,684
  }
! 
  reply_command()

--- 681,683 -----
  }
! 
  reply_command()
***************
*** 829,831
  }
- 
  xmit_command()

--- 828,829 -----
  }
  xmit_command()
***************
*** 832,833
  {
  	tfilename = filename;

--- 830,837 -----
  {
+ #ifdef u370
+ 	static struct srec srec;	
+ #else	/* !u370 */
+ 	struct srec srec;
+ #endif	/* !u370 */
+ 
  	tfilename = filename;
***************
*** 856,858
  }
! 
  next_ng_command()

--- 860,862 -----
  }
! 
  next_ng_command()
***************
*** 891,893
  	back();
! 	selectng(bptr, TRUE, TRUE);
  	return FALSE;

--- 895,897 -----
  	back();
! 	selectng(bptr, FALSE, TRUE);
  	return FALSE;
***************
*** 894,896
  }
! 
  caesar_command()

--- 898,900 -----
  }
! 
  caesar_command()
***************
*** 915,917
  }
! 
  /*

--- 919,921 -----
  }
! 
  /*
***************
*** 964,966
  			pout(ofp);
- 		holdup = TRUE;
  	}

--- 968,969 -----
  			pout(ofp);
  	}
***************
*** 970,972
  }
! 
  /*

--- 973,975 -----
  }
! 
  /*
***************
*** 983,985
   	register DIR *dirp;
!  	register struct direct *dir;
  #endif	/* !SERVER */

--- 986,988 -----
   	register DIR *dirp;
!  	register DIRECTORY_STRUCT *dir;
  #endif	/* !SERVER */
***************
*** 1103,1105
  			(void) get_server(workspace,sizeof(workspace));
! 			if (*workspace != CHAR_OK) {
  				if (rflag)

--- 1106,1108 -----
  			(void) get_server(workspace,sizeof(workspace));
! 			if (*workspace != '2') {
  				if (rflag)
***************
*** 1258,1260
  #ifdef SERVER
! 	(void) unlink(active_name());
  	close_server();	

--- 1261,1266 -----
  #ifdef SERVER
! 	if (active_name() != NULL) 
! 		(void) unlink(active_name());
! 	if (article_name() != NULL) 
! 		(void) unlink(article_name());
  	close_server();	

Index: recmail.c
Prereq: 1.16
*** old/recmail.c	Wed Oct  7 16:54:25 1987
--- recmail.c	Tue Jan 17 13:09:30 1989
***************
*** 1,3
  /*
!  * This software is Copyright (c) 1986 by Rick Adams.
   *

--- 1,3 -----
  /*
!  * This software is Copyright 1986, 1989 by Rick Adams.
   *
***************
*** 22,24
  #ifdef SCCSID
! static char	*SccsId = "@(#)recmail.c	1.16	9/24/87";
  #endif /* SCCSID */

--- 22,24 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)recmail.c	1.18	1/17/89";
  #endif /* SCCSID */
***************
*** 39,41
  	FILE *fd;
! 	char *tmpf;
  	FILE *errfd;

--- 39,41 -----
  	FILE *fd;
! 	static char tmpf[] = "/tmp/rmXXXXXX";
  	FILE *errfd;
***************
*** 41,43
  	FILE *errfd;
! 	char *errf;
  	char linebuf[1024];

--- 41,43 -----
  	FILE *errfd;
! 	static char errf[] = "/tmp/rmXXXXXX";
  	char linebuf[1024];
***************
*** 49,51
  
! 	tmpf = mktemp("/tmp/rmXXXXXX");
  	(void) close(creat(tmpf,0666));

--- 49,51 -----
  
! 	mktemp(tmpf);
  	(void) close(creat(tmpf,0666));
***************
*** 52,54
  	fd = fopen(tmpf, "w");
! 	errf = mktemp("/tmp/rmXXXXXX");
  	(void) close(creat(errf,0666));

--- 52,54 -----
  	fd = fopen(tmpf, "w");
! 	mktemp(errf);
  	(void) close(creat(errf,0666));
***************
*** 67,70
  		    }
! 		else if (fputs(linebuf, fd) == EOF)
! 			goto werror;
  		if (linebuf[0] == '\n')

--- 67,73 -----
  		    }
! 		else {
! 			fputs(linebuf, fd);
! 			if (ferror(fd))
! 				goto werror;
! 		}
  		if (linebuf[0] == '\n')
***************
*** 82,84
  		while (fgets(linebuf, sizeof linebuf, stdin) != NULL) {
! 			if (fputs(linebuf, fd) == EOF) {
  werror:

--- 85,88 -----
  		while (fgets(linebuf, sizeof linebuf, stdin) != NULL) {
! 			fputs(linebuf, fd);
! 			if (ferror(fd)) {
  werror:
***************
*** 162,163
  	exit (0);
  }

--- 166,168 -----
  	exit (0);
+ 	/*NOTREACHED*/
  }

Index: recnews.c
Prereq: 2.18
*** old/recnews.c	Fri Dec  4 02:52:27 1987
--- recnews.c	Tue Jan 17 13:09:30 1989
***************
*** 50,52
  #ifdef SCCSID
! static char	*SccsId = "@(#)recnews.c	2.18	12/4/87";
  #endif /* SCCSID */

--- 50,52 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)recnews.c	2.20	1/17/89";
  #endif /* SCCSID */
***************
*** 253,254
  	exit(0);
  }

--- 253,255 -----
  	exit(0);
+ 	/*NOTREACHED*/
  }
***************
*** 390,392
  					register char *bcp = cmd-1;
! 					while (*cmd && *cmd != '"')
  						*bcp++ = *cmd++;

--- 391,398 -----
  					register char *bcp = cmd-1;
! 					while (*cmd) {
! 						if(*cmd == '\\') {
! 							cmd++;
! 							*bcp++ = *cmd++;
! 						} else if (*cmd == '"')
! 							break;
  						*bcp++ = *cmd++;
***************
*** 392,393
  						*bcp++ = *cmd++;
  					*bcp = '\0';

--- 398,400 -----
  						*bcp++ = *cmd++;
+ 					}
  					*bcp = '\0';
***************
*** 419,421
  {
! 	register f, r, (*hstat)(), (*istat)(), (*qstat)();
  	int status;

--- 426,429 -----
  {
! 	register int f, r;
! 	SIGNAL_TYPE hstat, istat, qstat;
  	int status;

Index: rfuncs.c
Prereq: 2.44
*** old/rfuncs.c	Fri Dec  4 02:52:29 1987
--- rfuncs.c	Thu Jan 19 00:06:44 1989
***************
*** 1,3
  /*
!  * This software is Copyright (c) 1986 by Rick Adams.
   *

--- 1,3 -----
  /*
!  * This software is Copyright 1986, 1989 by Rick Adams.
   *
***************
*** 18,20
  #ifdef SCCSID
! static char	*SccsId = "@(#)rfuncs.c	2.44	11/30/87";
  #endif /* SCCSID */

--- 18,20 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)rfuncs.c	2.47	1/19/89";
  #endif /* SCCSID */
***************
*** 620,622
  
! static char *newactivename = "/tmp/newsaXXXXXX";
  #endif /* SORTACTIVE */

--- 620,622 -----
  
! static char newactivename[] = "/tmp/newsaXXXXXX";
  #endif /* SORTACTIVE */
***************
*** 678,679
  		if (tp->rcindex < 0) {
  			if (++line > LINES)

--- 678,684 -----
  		if (tp->rcindex < 0) {
+ 			/*
+ 			** If there aren't any articles in the group, skip it.
+ 			*/
+ 			if (tp->maxart == 0)
+ 				continue;
  			if (++line > LINES)
***************
*** 709,712
  			} else {
- 				fprintf(stderr, "Duplicate .newsrc line or bad group %s\n",
- 					rcline[lastline]);
  				lentab[lastline] = 0;

--- 714,715 -----
  			} else {
  				lentab[lastline] = 0;
***************
*** 769,771
  	register DIR *dirp;
! 	register struct direct *dir;
  #endif	/* !SERVER */

--- 772,774 -----
  	register DIR *dirp;
! 	register DIRECTORY_STRUCT *dir;
  #endif	/* !SERVER */
***************
*** 775,777
  	unsigned int alloc_size;
! 	int (*old_sig) ();
  	extern lg_trap();

--- 778,780 -----
  	unsigned int alloc_size;
! 	SIGNAL_TYPE old_sig;
  	extern lg_trap();
***************
*** 806,808
  #ifdef SERVER
! 	for(i = lowgp; i < highgp; i++){
  #else	/* !SERVER */

--- 809,811 -----
  #ifdef SERVER
! 	for(i = lowgp; i <= highgp; i++){
  #else	/* !SERVER */
***************
*** 898,900
  }
- #endif /* !SMALL_ADDRESS_SPACE */
  

--- 901,902 -----
  }
  
***************
*** 908
  }

--- 910,911 -----
  }
+ #endif /* !SMALL_ADDRESS_SPACE */

Index: rfuncs2.c
Prereq: 1.36
*** old/rfuncs2.c	Fri Dec  4 02:52:30 1987
--- rfuncs2.c	Tue Jan 17 13:09:31 1989
***************
*** 18,20
  #ifdef SCCSID
! static char	*SccsId = "@(#)rfuncs2.c	1.36	11/30/87";
  #endif /* SCCSID */

--- 18,20 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)rfuncs2.c	1.37	1/17/89";
  #endif /* SCCSID */
***************
*** 302,303
   */
  /* ARGSUSED */

--- 302,304 -----
   */
+ #ifndef fileno
  /* ARGSUSED */
***************
*** 303,304
  /* ARGSUSED */
  qfflush(fp)

--- 304,306 -----
  /* ARGSUSED */
+ #endif /* !defined fileno */
  qfflush(fp)

Index: sendbatch.sh
Prereq: 1.16
*** old/sendbatch.sh	Fri Dec  4 02:52:32 1987
--- sendbatch.sh	Sun Jan 15 23:04:11 1989
***************
*** 1,2
! : '@(#)sendbatch.sh	1.16	12/1/87'
  

--- 1,2 -----
! : '@(#)sendbatch.sh	1.20	1/15/89'
  
***************
*** 2,6
  
! cflags=
! LIM=50000
! MINDF=MINDISKFREE
  MAXBATCH=MAXPERBATCH

--- 2,6 -----
  
! LIB=LIBDIR
! BATCH=BATCHDIR
! LIM=50000
  MAXBATCH=MAXPERBATCH
***************
*** 6,9
  MAXBATCH=MAXPERBATCH
! SPOOLDISK=SPOOL_DISK
! CMD='LIBDIR/batch BATCHDIR/$rmt $BLIM'
  ECHO=

--- 6,10 -----
  MAXBATCH=MAXPERBATCH
! RNEWS=rnews
! UUX_FLAGS="UUXFLAGS"
! CMD='$LIB/batch $BATCH/$rmt $BLIM'
  ECHO=
***************
*** 11,12
  C7=
  DOIHAVE=

--- 12,14 -----
  C7=
+ cflags=
  DOIHAVE=
***************
*** 12,14
  DOIHAVE=
! RNEWS=rnews
  

--- 14,17 -----
  DOIHAVE=
! SPOOLDISK=SPOOL_DISK
! MINDF=MINDISKFREE
  
***************
*** 17,19
  	case $rmt in
- 	-[bBC]*)	cflags="$cflags $rmt"; continue;;
  	-s*)	LIM=`expr "$rmt" : '-s\(.*\)'`

--- 20,21 -----
  	case $rmt in
  	-s*)	LIM=`expr "$rmt" : '-s\(.*\)'`
***************
*** 20,23
  		continue;;
! 	-c7) 	COMP='| LIBDIR/compress $cflags'
! 		C7='| LIBDIR/encode'
  		ECHO='echo "#! c7unbatch"'

--- 22,33 -----
  		continue;;
! 	-m*)	MAXBATCH=`expr "$rmt" : '-m\(.*\)'`
! 		continue;;
! 	+m*)	MAXBATCH=''
! 		continue;;
! 	-r*)	RNEWS=`expr "$rmt" : '-r\(.*\)'`
! 		continue;;
! 	-u*)	UUX_FLAGS=`expr "$rmt" : '-u\(.*\)'`
! 		continue;;
! 	-c7) 	COMP='| $LIB/compress $cflags'
! 		C7='| $LIB/encode'
  		ECHO='echo "#! c7unbatch"'
***************
*** 24,26
  		continue;;
! 	-c)	COMP='| LIBDIR/compress $cflags'
  		ECHO='echo "#! cunbatch"'

--- 34,36 -----
  		continue;;
! 	-c)	COMP='| $LIB/compress $cflags'
  		ECHO='echo "#! cunbatch"'
***************
*** 27,28
  		continue;;
  	-o*)	ECHO=`expr "$rmt" : '-o\(.*\)'`

--- 37,44 -----
  		continue;;
+ 	+c*)	COMP=''
+ 		C7=''
+ 		ECHO=''
+ 		cflags=''
+ 		continue;;
+ 	-[bBC]*)	cflags="$cflags $rmt"; continue;;
  	-o*)	ECHO=`expr "$rmt" : '-o\(.*\)'`
***************
*** 30,31
  		continue;;
  	-i*)	DOIHAVE=`expr "$rmt" : '-i\(.*\)'`

--- 46,50 -----
  		continue;;
+ 	+o*)	ECHO=''
+ 		RNEWS=rnews
+ 		continue;;
  	-i*)	DOIHAVE=`expr "$rmt" : '-i\(.*\)'`
***************
*** 36,38
  		continue;;
! 	-m*)	MAXBATCH=`expr "$rmt" : '-m\(.*\)'`
  		continue;;

--- 55,57 -----
  		continue;;
! 	+i*)	DOIHAVE=''
  		continue;;
***************
*** 38,39
  		continue;;
  	esac

--- 57,62 -----
  		continue;;
+ 	-D*)	SPOOLDISK=`expr "$rmt" : '-D\(.*\)'`
+ 		continue;;
+ 	+D*)	SPOOLDISK=''
+ 		continue;;
  	esac
***************
*** 40,44
  
! 	df=`df $SPOOLDISK | awk "\\$6 == \\"$SPOOLDISK\" {print \\$4}
! 		\\$1 == \\"$SPOOLDISK\\" {print \\$3}"`
! 	if test ! -z "$df" -a \( "$df" -lt $MINDF \)
  	then

--- 63,65 -----
  
! 	if test -n "$SPOOLDISK"
  	then
***************
*** 44,47
  	then
! 		echo not enough space on $SPOOLDISK: $df
! 		continue
  	fi

--- 65,77 -----
  	then
! 		df=`df $SPOOLDISK | awk '
! 			$6 == "'$SPOOLDISK'" {print $4;exit}
! 			$1 == "'$SPOOLDISK'" && NF == 7 {print $4;exit}
! 			$2 == "'$SPOOLDISK'" {print $5;exit}
! 			$1 == "'$SPOOLDISK'" {print $3;exit}
! 			'`
! 		if test ! -z "$df" -a \( "$df" -lt $MINDF \)
! 		then
! 			echo $rmt: not enough space on $SPOOLDISK: $df
! 			continue
! 		fi
  	fi
***************
*** 48,50
  
! 	if test -s /tmp/uuq.output
  	then

--- 78,80 -----
  
! 	if test -n "$MAXBATCH"
  	then
***************
*** 50,54
  	then
! 		q=`echo "$rmt" | sed 's/\(.......\).*/\1/'`
! 		q=`awk "\\$1 == \\"$q:\\" { print \\$4;exit}" </tmp/uuq.output`
! 		if test ! -z "$q" -a \( "$q" -gt $MAXBATCH \)
  		then 

--- 80,83 -----
  	then
! 		du=`du "/usr/spool/uucp/$rmt" | sed 's/	.*/000/'`
! 		if test ! -z "$du" -a \( "$du" -gt $MAXBATCH \)
  		then 
***************
*** 54,56
  		then 
! 			echo $rmt already has $q bytes queued
  			continue

--- 83,85 -----
  		then 
! 			echo $rmt already has $du Kbytes queued
  			continue
***************
*** 66,68
  
! 	: make sure $? is zero
  	sentbytes=0

--- 95,106 -----
  
! 	# only do ihave processing once, not every time through loop
! 	if test -n "$DOIHAVE" -a -s BATCHDIR/$rmt.ihave
! 	then
! 		mv $BATCH/$rmt.ihave $BATCH/$rmt.$$
! 		$LIB/inews -t "cmsg ihave $DOIHAVE" -n to.$rmt.ctl < \
! 			$BATCH/$rmt.$$
! 		rm $BATCH/$rmt.$$
! 	fi
! 
! 	# make sure $? is zero
  	sentbytes=0
***************
*** 69,73
  	while test $? -eq 0 -a $sentbytes -le $MAXBATCH -a \
! 		\( \( $sentbytes -eq 0 -a -s BATCHDIR/$rmt \) -o \
! 		 -s BATCHDIR/$rmt.work -o  \
! 		\( -n "$DOIHAVE" -a -s BATCHDIR/$rmt.ihave \) \)
  	do

--- 107,110 -----
  	while test $? -eq 0 -a $sentbytes -le $MAXBATCH -a \
! 		\( \( $sentbytes -eq 0 -a -s $BATCH/$rmt \) -o \
! 		 -s $BATCH/$rmt.work \)
  	do
***************
*** 73,75
  	do
! 		if test -n "$DOIHAVE" -a -s BATCHDIR/$rmt.ihave
  		then

--- 110,113 -----
  	do
! 		(eval $ECHO; eval $CMD $COMP $C7) |
! 		if test -s $BATCH/$rmt.cmd
  		then
***************
*** 75,81
  		then
! 			mv BATCHDIR/$rmt.ihave BATCHDIR/$rmt.$$
! 			LIBDIR/inews -t "cmsg ihave $DOIHAVE" -n to.$rmt.ctl < \
! 				BATCHDIR/$rmt.$$
! 			rm BATCHDIR/$rmt.$$
! 					
  		else

--- 113,115 -----
  		then
! 			$BATCH/$rmt.cmd
  		else
***************
*** 81,90
  		else
! 			(eval $ECHO; eval $CMD $COMP $C7) |
! 			if test -s BATCHDIR/$rmt.cmd
! 			then
! 				BATCHDIR/$rmt.cmd
! 			else
! 				uux - UUXFLAGS $rmt!$RNEWS
! 			fi
! 			sentbytes=`expr $sentbytes + $LIM`
  		fi

--- 115,117 -----
  		else
! 			uux - $UUX_FLAGS $rmt!$RNEWS
  		fi
***************
*** 90,91
  		fi
  	done

--- 117,119 -----
  		fi
+ 		sentbytes=`expr $sentbytes + $LIM`
  	done

Index: sendnews.c
Prereq: 2.13
*** old/sendnews.c	Wed Oct  7 16:54:57 1987
--- sendnews.c	Tue Jan 17 13:09:31 1989
***************
*** 5,7
  #ifdef SCCSID
! static char	*SccsId = "@(#)sendnews.c	2.13	9/24/87";
  #endif /* SCCSID */

--- 5,7 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)sendnews.c	2.14	1/17/89";
  #endif /* SCCSID */
***************
*** 77,78
  	exit(0);
  }

--- 77,79 -----
  	exit(0);
+ 	/*NOTREACHED*/
  }

Index: uname.c
Prereq: 2.17
*** old/uname.c	Mon Nov 23 19:13:34 1987
--- uname.c	Sun Jan 15 19:49:05 1989
***************
*** 1,3
  /*
!  * This software is Copyright (c) 1986 by Rick Adams.
   *

--- 1,3 -----
  /*
!  * This software is Copyright 1986, 1989 by Rick Adams.
   *
***************
*** 23,25
  #ifdef SCCSID
! static char	*SccsId = "@(#)uname.c	2.17	11/19/87";
  #endif /* SCCSID */

--- 23,25 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)uname.c	2.18	1/15/89";
  #endif /* SCCSID */
***************
*** 27,29
  #ifdef BSD2_10
! #include <shortnames.h>
  #endif /* BSD2_10 */

--- 27,29 -----
  #ifdef BSD2_10
! #include <short_names.h>
  #endif /* BSD2_10 */
***************
*** 43,46
  	gethostname(uptr->nodename, sizeof (uptr->nodename));
! 	for (cp = uptr->nodename; *cp == '\0'; cp++)
! 		if (isupper(*cp)) *cp = tolower(*cp);
  	cp = mydomain();

--- 43,47 -----
  	gethostname(uptr->nodename, sizeof (uptr->nodename));
! 	for (cp = uptr->nodename; *cp != '\0'; cp++)
! 		if (isupper(*cp))
! 			*cp = tolower(*cp);
  	cp = mydomain();

Index: uurec.c
Prereq: 2.11
*** old/uurec.c	Tue Mar 24 13:52:00 1987
--- uurec.c	Tue Jan 17 13:09:31 1989
***************
*** 5,7
  #ifdef SCCSID
! static char	*SccsId = "@(#)uurec.c	2.11	3/21/87";
  #endif /* SCCSID */

--- 5,7 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)uurec.c	2.13	1/17/89";
  #endif /* SCCSID */
***************
*** 32,35
  
! #ifdef debug
! # define RNEWS "cat"
  #endif

--- 32,36 -----
  
! #undef DEBUG
! #ifdef DEBUG
! # define RNEWS "/bin/cat"
  #endif
***************
*** 44,46
  {
! 	char buf[BFSZ], fbuf[BFSZ];
  	char bfr[BFSZ], *pbfr = bfr;

--- 45,47 -----
  {
! 	char buf[BFSZ], fbuf[BFSZ], senderbuf[BFSZ];
  	char bfr[BFSZ], *pbfr = bfr;
***************
*** 53,54
  	frmflg = FALSE;
  	while (fgets(buf, BFSZ, stdin) != NULL) {

--- 54,56 -----
  	frmflg = FALSE;
+ 	senderbuf[0] = '\0';
  	while (fgets(buf, BFSZ, stdin) != NULL) {
***************
*** 54,56
  	while (fgets(buf, BFSZ, stdin) != NULL) {
! #ifdef debug
  		printf("%o\t%s", mode|type(buf), buf);

--- 56,58 -----
  	while (fgets(buf, BFSZ, stdin) != NULL) {
! #ifdef DEBUG
  		printf("%o\t%s", mode|type(buf), buf);
***************
*** 60,61
  		case FROM | SKIPPING:
  			if (frmflg)

--- 62,64 -----
  		case FROM | SKIPPING:
+ 			strcpy(senderbuf, buf);
  			if (frmflg)
***************
*** 64,65
  				p = fbuf;
  			frmflg = TRUE;

--- 67,71 -----
  				p = fbuf;
+ #ifdef DEBUG
+ 			printf("From: %s\n", p);
+ #endif
  			frmflg = TRUE;
***************
*** 81,83
  				format = A;
! #ifdef debug
  			printf("format = %d\n", format);

--- 87,89 -----
  				format = A;
! #ifdef DEBUG
  			printf("format = %d\n", format);
***************
*** 114,116
  					fprintf(pipe, "%s\n", fbuf);
! 				} else
  					fputs(buf+1, pipe);

--- 120,136 -----
  					fprintf(pipe, "%s\n", fbuf);
! 				} else {
! 					if (senderbuf[0] != '\0') {
! 						register char *cp;
! #ifdef DEBUG
! 						printf("senderbuf: %s",
! 							senderbuf);
! #endif
! 						cp = index(senderbuf, ' ');
! 						if (cp != NULL) {
! 							fprintf(pipe,
! 								"Sender: %s",
! 								cp);
! 						}
! 						senderbuf[0] = '\0';
! 					}
  					fputs(buf+1, pipe);
***************
*** 116,117
  					fputs(buf+1, pipe);
  			}

--- 136,138 -----
  					fputs(buf+1, pipe);
+ 				}
  			}
***************
*** 130,131
  	exit(0);
  }

--- 151,153 -----
  	exit(0);
+ 	/*NOTREACHED*/
  }
***************
*** 147,148
  
  	return(OTHER);

--- 169,173 -----
  
+ 	if (strncmp(p, "From: ", 6) == 0)
+ 		return (FROM);
+ 
  	return(OTHER);
***************
*** 189,192
      garbled:
! 	strcat(buf, "???!");
! 	return(buf+4);
  }

--- 214,217 -----
      garbled:
! 	strcat(buf, "GARBLED");
! 	return(buf+7);
  }

Index: virtterm.c
Prereq: 1.14
*** old/virtterm.c	Wed Oct  7 16:55:19 1987
--- virtterm.c	Sun Jan 15 19:49:06 1989
***************
*** 7,9
  #ifdef SCCSID
! static char	*SccsId = "@(#)virtterm.c	1.14	9/24/87";
  #endif /* SCCSID */

--- 7,9 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)virtterm.c	1.15	1/15/89";
  #endif /* SCCSID */
***************
*** 104,107
  int     _dir = 1;
- int	_shifttop, _shiftbot;
- int	_shift;
  int	_scratched;

--- 104,105 -----
  int     _dir = 1;
  int	_scratched;
***************
*** 108,109
  int     vputc();
  

--- 106,108 -----
  int     vputc();
+ static int	_shifttop, _shiftbot, _shift;
  
***************
*** 401,403
  	}
-   	for (; i <= bot; i++)
  	for (; i <= bot; i++)

--- 400,401 -----
  	}
  	for (; i <= bot; i++)
***************
*** 583,585
  {
! 	char direct[20];
  	char rel[MAXPLEN*10 + MAXLLEN*10];    /* longest move is full screen */

--- 581,583 -----
  {
! 	char direct[MAXPLEN*2];
  	char rel[MAXPLEN*10 + MAXLLEN*10];    /* longest move is full screen */

Index: visual.c
Prereq: 1.40
*** old/visual.c	Fri Dec  4 02:52:37 1987
--- visual.c	Sun Jan 22 22:18:19 1989
***************
*** 6,8
  #ifdef SCCSID
! static char	*SccsId = "@(#)visual.c	1.40	11/30/87";
  #endif /* SCCSID */

--- 6,8 -----
  #ifdef SCCSID
! static char	*SccsId = "@(#)visual.c	1.44	1/22/89";
  #endif /* SCCSID */
***************
*** 69,71
  
! #define	saveart	oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hptr = h;h = hold;hold = hptr;ongsize = pngsize
  #define NLINES(h, fp) (h->numlines[0] ? h->intnumlines : (h->intnumlines=linecnt(fp),sprintf(h->numlines, "%d", h->intnumlines), h->intnumlines))

--- 69,71 -----
  
! #define	saveart	oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hptr = h;h = hold;hold = hptr
  #define NLINES(h, fp) (h->numlines[0] ? h->intnumlines : (h->intnumlines=linecnt(fp),sprintf(h->numlines, "%d", h->intnumlines), h->intnumlines))
***************
*** 158,160
  static int rfq = 0;			/* for last article		*/
- static long ongsize;			/* Previous ngsize		*/
  static long pngsize;			/* Printing ngsize		*/

--- 158,159 -----
  static int rfq = 0;			/* for last article		*/
  static long pngsize;			/* Printing ngsize		*/
***************
*** 161,163
  static char *bptr;			/* temp pointer.		*/
- static char *tfilename;			/* temporary file name 		*/
  static char ofilename1[BUFLEN];		/* previous file name		*/

--- 160,161 -----
  static char *bptr;			/* temp pointer.		*/
  static char ofilename1[BUFLEN];		/* previous file name		*/
***************
*** 171,173
  static long oobit;			/* last bit, really		*/
- static int dgest = 0;
  static FILE *fp;			/* current article to be printed*/

--- 169,170 -----
  static long oobit;			/* last bit, really		*/
  static FILE *fp;			/* current article to be printed*/
***************
*** 260,262
  			(void) strcpy(prompt, "more? ");
! 		else
  #ifdef DIGPAGE

--- 257,261 -----
  			(void) strcpy(prompt, "more? ");
! 		else {
! 			int	percent;
! 
  #ifdef DIGPAGE
***************
*** 262,264
  #ifdef DIGPAGE
! 			(void) sprintf(prompt, "more(%d%%)? ",
  				((((endsuba > 0) ?

--- 261,263 -----
  #ifdef DIGPAGE
! 			percent =
  				((((endsuba > 0) ?
***************
*** 265,267
  				endsuba : (dlinno + ARTWLEN)) -
! 				hdrend) * 100) / maxlinno);
  #else /* !DIGPAGE */

--- 264,266 -----
  				endsuba : (dlinno + ARTWLEN)) -
! 				hdrend) * 100) / maxlinno;
  #else /* !DIGPAGE */
***************
*** 267,270
  #else /* !DIGPAGE */
! 			(void) sprintf(prompt, "more(%d%%)? ",
! 				((dlinno + ARTWLEN - hdrend) * 100) / maxlinno);
  #endif /* !DIGPAGE */

--- 266,269 -----
  #else /* !DIGPAGE */
! 			percent =
! 				((dlinno + ARTWLEN - hdrend) * 100) / maxlinno;
  #endif /* !DIGPAGE */
***************
*** 270,271
  #endif /* !DIGPAGE */
  	} else {

--- 269,275 -----
  #endif /* !DIGPAGE */
+ 			if (percent > 100 ||
+ 				(percent == 100 && !feof(fp)))
+ 					(void) sprintf(prompt, "more? ");
+ 			else	(void) sprintf(prompt, "more(%d%%)? ", percent);
+ 		}
  	} else {
***************
*** 686,687
  
  	/* escape to shell */

--- 690,692 -----
  
+ #ifndef NOSHELL
  	/* escape to shell */
***************
*** 717,719
  	}
! 
  	/* mail reply */

--- 722,724 -----
  	}
! #endif 	/* NOSHELL */
  	/* mail reply */
***************
*** 951,953
  {
! 	register char *poster, *r;
  	int notauthor;

--- 956,958 -----
  {
! 	register char *poster;
  	int notauthor;
***************
*** 953,955
  	int notauthor;
! 	char *senderof();
  

--- 958,960 -----
  	int notauthor;
! 	char *tailpath();
  
***************
*** 955,964
  
! 	poster = senderof(h);
! 	/* only compare up to '.' or ' ' */
! 	r = index(poster,'.');
! 	if (r == NULL)
! 		r = index(poster,' ');
! 	if (r != NULL)
! 		*r = '\0';
! 	tfilename = filename;
  	notauthor = STRCMP(username, poster);

--- 960,962 -----
  
! 	poster = tailpath(h);
  	notauthor = STRCMP(username, poster);
***************
*** 965,967
  	if (uid != ROOTID && uid && notauthor) {
! 		msg("Can't cancel what you didn't write.");
  		return;

--- 963,966 -----
  	if (uid != ROOTID && uid && notauthor) {
! 		msg("You (%s) can't cancel someone else's (%s) article.",
! 			username,poster);
  		return;
***************
*** 1149,1151
  	register DIR *dirp;
! 	register struct direct *dir;
  #endif	/* !SERVER */

--- 1148,1150 -----
  	register DIR *dirp;
! 	register DIRECTORY_STRUCT *dir;
  #endif	/* !SERVER */
***************
*** 1166,1168
  	}
- 	dgest = 0;
  

--- 1165,1166 -----
  	}
  
***************
*** 1198,1199
  #ifdef SERVER
  	if (bit == 0  || (fp = getarticle(groupdir, bit, "ARTICLE")) == NULL)

--- 1196,1198 -----
  #ifdef SERVER
+  	if (article_name() != NULL) (void) unlink(article_name());
  	if (bit == 0  || (fp = getarticle(groupdir, bit, "ARTICLE")) == NULL)
***************
*** 1237,1239
  			(void) get_server(workspace,sizeof(workspace));
! 			if (*workspace != CHAR_OK) {
  				if (rflag)

--- 1236,1238 -----
  			(void) get_server(workspace,sizeof(workspace));
! 			if (*workspace != '2') {
  				if (rflag)
***************
*** 1740,1742
  	int i;
! 	int (*savequit)();
  	char *env[100], **envp, **oenvp;

--- 1739,1741 -----
  	int i;
! 	SIGNAL_TYPE savequit;
  	char *env[100], **envp, **oenvp;
***************
*** 2421,2423
  	int getpgrp();
! #if defined(BSD4_2) || defined(BSD4_1C)
  	int tpgrp;

--- 2420,2422 -----
  	int getpgrp();
! #if defined(BSD4_2)
  	int tpgrp;
***************
*** 2699,2701
  #ifdef SERVER
! 	(void) unlink(active_name());
  	close_server();	

--- 2698,2703 -----
  #ifdef SERVER
! 	if (active_name() != NULL)
! 		(void) unlink(active_name());
! 	if (article_name() != NULL)
! 		(void) unlink(article_name());
  	close_server();	

Index: vnews.help
*** old/vnews.help	Tue Mar 24 13:52:05 1987
--- vnews.help	Tue Jan 17 13:45:31 1989
***************
*** 1,2
! Vnews commands:    (each may be preceded by a non-negative count)
  

--- 1,2 -----
! Vnews commands: ( may be preceded by a non-negative count) V 2.2 1/17/89
  
***************
*** 5,7
  e   Mark current article as unread      <   Go to article with given ID
! +   Go forwards count articles          p   Go to parent article
  -   Go to previous article              ug  Unsubscribe to this group

--- 5,7 -----
  e   Mark current article as unread      <   Go to article with given ID
! + or =  Go forwards count articles      p   Go to parent article
  -   Go to previous article              ug  Unsubscribe to this group

Index: patchlevel.h
Prereq: 16
*** .d/patchlevel.h	Fri Dec  4 02:52:37 1987
--- patchlevel.h	Tue Jan 24 14:52:11 1989
***************
*** 1,2
! #define	PATCHLEVEL	16
  

--- 1,2 -----
! #define	PATCHLEVEL	17
  
***************
*** 2,3
  
! #define NEWS_VERSION   "B 2.11 1/23/89"

--- 2,3 -----
  
! #define NEWS_VERSION   "B 2.11 1/24/89"

--- end of patch 17 ---