2.3-2.6.e

usenet usenet
Tue Apr 20 19:44:04 AEST 1982


	ed - README << '-*-END-*-'
	80a

	If you want expired articles kept around, create the directory
	/usr/spool/oldnews.  The expire program will create a hierarchy
	under this location, if present, similar to the one under /usr/spool/news.

	The expire program will delete all articles in the history file
	which are past their expiration date.  It will remove both the
	article and the line in history.  This mechanism should keep your
	history file down to a manageable size.  The trimlib script in the
	misc directory can be used to keep you log file down in size.
	Both expire and trimlib should be run once a night from crontab.
	.
	20c
	the net.  Other useful tools contributed by other sites are added to
	this directory for optional use by USENET sites.
	.
	w
	q
	-*-END-*-
	ed - doc/howto.ms << '-*-END-*-'
	7c
	Columbus, Ohio 43213
	.
	w
	q
	-*-END-*-
	ed - doc/install.ms << '-*-END-*-'
	980c
	to see what they subscribe to on the old system, and then create a file in their
	.
	956a
	(Actually, this will prevent the bitfile from being updated,
	so it may not be a good idea.)
	.
	177a
	.NH 3
	MANUALLY
	.PP
	If this is defined, incoming
	.B rmgroup
	messages will not remove the subdirectories, but rather just remove the
	group line from your active file.
	You should have NOTIFY on if you use this.
	Note that on a USG system the subdirectory will not be removed anyway
	unless you have an unsecure (mode 777 directory) system.
	.
	w
	q
	-*-END-*-
	ed - man/checknews.1 << '-*-END-*-'
	14a
	.TP 10
	.B q
	causes checknews to be quiet.
	Instead of printing a message, the exit status indicates news.
	A status of 0 means no news, 1 means there is news.
	.
	5c
	checknews [ynqevv] [readnews options]
	.
	w
	q
	-*-END-*-
	ed - man/expire.8 << '-*-END-*-'
	19a
	.PP
	The
	.B \-v
	option causes expire to be more verbose.
	It can be given a verbosity level (default 1) as in
	.B \-v3
	for even more output.
	This is useful if articles aren't being expired and you want to know why.
	.PP
	The
	.B \-e
	flag gives the number of days to use for a default expiration date.
	If not given, an installation dependent default (often 2 weeks) is used.
	.PP
	The
	.B \-i
	and
	.B \-I
	flags
	tell
	.B expire
	to ignore any expiration date explicitly given on articles.
	This can be used when disk space is really tight.
	The
	.B \-I
	flag will always ignore expiration dates,
	while the
	.B \-i
	flag will only ignore the date if ignoring it would expire the article sooner.
	.I WARNING:
	If you have articles archived by giving them expiration dates far into the
	future, these options might remove these files anyway.
	.
	5c
	/usr/lib/news/expire
	[
	.B \-n
	.I newsgroups
	]
	[
	.B \-i
	]
	[
	.B \-I
	]
	[
	.B \-v
	[
	.I level
	] ]
	[
	.B \-e
	.I days
	]
	.
	w
	q
	-*-END-*-
	ed - man/inews.1 << '-*-END-*-'
	41c
	.B \-f
	.
	32c
	.B \-n 
	.
	w
	q
	-*-END-*-
	ed - man/news.5 << '-*-END-*-'
	124c
	.B "old2:net.all,fa.all:A:/usr/lib/sendnews \-o old2\\:rnews"
	.
	122c
	.B "arpasys:net.all,arpa.all::/usr/lib/news/sendnews \-a rnews at arpasys"
	.
	120c
	.B "berksys:net.all,ucb.all::/usr/lib/news/sendnews \-b berksys\\:rnews"
	.
	118c
	.B "oldsys:net.all,fa.all,to.oldsys:A"
	.
	113c
	.BI "uux \- \-z \-r " sysname !rnews.
	.
	81,82d
	67a
	.TP 15
	.B Reply-To:
	.I Address for mail replies
	.TP 15
	.B References:
	.I Article ID of article this is a follow-up to.
	.TP 15
	.B Control:
	.I Text of a control message
	.
	15c
	.BI A article-ID
	.
	w
	q
	-*-END-*-
	ed - man/newsrc.5 << '-*-END-*-'
	34c
	.B "options \-c \-r"
	.
	32c
	.B "options \-n all !fa.sf-lovers !fa.human-nets \-r"
	.
	9c
	.IR readnews(1) " and " checknews(1).
	.
	3c
	newsrc \- information file for readnews(1) and checknews(1)
	.
	w
	q
	-*-END-*-
	ed - man/postnews.1 << '-*-END-*-'
	47c
	For more sophisticated uses, such as specifying an expiration date,
	.
	45d
	42c
	the user should type the body of the article.
	To end the article, type control D at the beginning of a line.
	If the environment variable EDITOR is set to the pathname of
	an editor, the user will be placed in that editor instead of
	typing in the article by hand.
	Optionally, the article
	.
	w
	q
	-*-END-*-
	ed - man/readnews.1 << '-*-END-*-'
	177a
	If the first character of the file name is `|',
	the rest of the file name is taken as the name of a program,
	which is executed with the text of the article as standard input.
	.
	w
	q
	-*-END-*-
	ed - man/sendnews.8 << '-*-END-*-'
	38c
	.B \-n
	.
	29c
	.B \-b
	.
	20c
	.B \-a
	.
	16c
	.B \-o
	.
	5c
	sendnews
	[
	.B \-o
	]
	[
	.B \-a
	]
	[
	.B \-b
	]
	[
	.B \-n
	newsgroups
	]
	destination
	.
	w
	q
	-*-END-*-
	ed - misc/adm << '-*-END-*-'
	146,159c
	cat <<"blart"
	Please give the network names of the people that you talk to
	on the uucp network.  This information is desired for a database of UUCP
	connections from which UUCP aliasing files can be built through a program
	written by unc!smb.  List each site to which you have a uucp connection
	that you wish to make public.  To list a site, give its UUCP name, followed
	by a value describing how useful the connection is in parentheses. Your
	cost can be given as a standard arithmetic expression.  The lower the number,
	the better the line is.  The following 'manifests' are known to the program
	with the following values: (If you don't give an expression, 3000 is default)
		LOCAL = 10
		ARPA = 31
		DED = 95
		DEDICATED = 95
		DIRECT = 200
		DEMAND = 300
		DIAL = 300
		DIALED = 300
		HOURLY = 500
		POLLED = 5000
		DAILY = 5000
		WEEKLY = 30000
		DEAD = INF/2
		HIGH = -5	/* baud rate bonus */
		LOW = 5		/* baud rate penalty */

	Delimit your entries with commas.  Type as many lines as you like,
	(naturally, don't put a comma after the last entry) and enter a null
	line when you are done.  Here is an example:
	decvax(2*HOURLY), watcgl(DIRECT), watarts(DEMAND),
	hcr(POLLED), cbosg(WEEKLY)
	blart
	while { read uupart; test -n "$uupart"; }
		do echo Partners: $uupart >>$san
	done
	.
	74a
	Eventually, best paths will be pulled out of the UUCP link entries in your
	directory.
	.
	30c
	site.  If you want it to put the entry in a private one file per site
	directory, the change is fairly obvious.
	.
	23a
	One of the things the script asks for is a list of your uucp connections
	in the format required by unc!smb's cheapest path uucp alias generator.
	If all sites provide the public paths they have, this will allow the
	generator to produce the best routings, saving everybody money and phone time.
	.
	4,11c
	Subject: net.adm.site stuff
	Via: cbosgd.uucp (V3.73 [1/5/82]); 2-Mar-82 20:01:48-EST (Tue)
	Mail-From: cbosg received by cbosgd at 2-Mar-82 20:01:45-EST (Tue)
	To: decvax!cbosg!cbosgd!mark decvax!duke!unc!smb decvax!ittvax!swatt
	    decvax!shannon decvax!ucbvax!ARPAVAX:glickman watarts!eric
	:::::::::::::::::::::::::::::::::::::::::::::::::::
	.
	1,2c
	From cbosg!decvax!watmath!bstempleton Tue Mar  2 20:01:49 1982
	Date: Mon Mar  1 19:37:04 1982
	.
	w
	q
	-*-END-*-
	ed - src/Makefile.usg << '-*-END-*-'
	97c
	recnews:  recnews.c defs.h
	.
	94c

	uurec:  uurec.c defs.h
	.
	92a
	control.o:  control.c defs.h
		$(CC) $(CFLAGS) -c control.c
	.
	40c
		rm -f $(COMMANDS) *.o
	.
	18c
	OTHERS = uurec recnews expire sendnews
	.
	1c
	# @(#) Makefile.usg	2.3	4/18/82
	.
	w
	q
	-*-END-*-
	ed - src/Makefile.v7 << '-*-END-*-'
	96c
	recnews:  recnews.c defs.h
	.
	93c
	uname.o:  uname.c defs.h
		$(CC) $(CFLAGS) -c uname.c


	uurec:  uurec.c defs.h
	.
	91a
	control.o:  control.c defs.h
		$(CC) $(CFLAGS) -c control.c
	.
	39c
		rm -f $(COMMANDS) *.o
	.
	1c
	# @(#) Makefile.v7	2.3	4/18/82
	.
	w
	q
	-*-END-*-
	ed - src/checknews.c << '-*-END-*-'
	325c
		if (q)
			exit(1);
		else
			exit(0);
	.
	108c
		if (!n && !e && !y && !q)
	.
	94a
				case 'q':
					q++;
					break;
	.
	92d
	87a
		q = 0;
	.
	63c
	char	newsrc[BUFLEN],*rcline[LINES],rcbuf[LBUFLEN],*argvrc[LINES];
	.
	60c
	int	line = -1, y, e, n, q;
	.
	5c
	static char *SccsId = "@(#) checknews.c	2.7	4/4/82";
	.
	w
	q
	-*-END-*-
	ed - src/control.c << '-*-END-*-'
	384c
		log("UNKNOWN Ctl Msg %s from %s", ctlmsgtext, h->path);
	.
	380a
	char *ctlmsgtext;
	.
	379c
	c_unknown(h, ctlmsgtext)
	.
	323c
		fprintf(f, "Subject: response to your sendsys request\n\n");
	.
	318c
		f = mailhdr(NOTIFY, "sendsys control message");
	.
	282c
			if (!su && strcmp(r, s)) {
	.
	266a
			}
	.
	265c
			if (r == 0) {
	.
	263a
			if((uid==ROOTID||uid==0) && strncmp(msgng,"to.",3) == 0)
				su = 1;
	.
	245a
		strcpy(msgng, header.nbuf);
	.
	243a
		char msgng[64];
		int su = 0;
	.
	229a
	#endif
	.
	222a
	#ifndef MANUALLY
	.
	211a
		if (groupname[0] == '.')
			xerror("Illegal group name in rmgroup");
	.
	51c
			c_unknown(h, ctlmsgtext);
	.
	34c
		argparse(ctlmsgtext);
	.
	23,24c
		if (*h->ctlmsg)
			ctlmsgtext = h->ctlmsg;
		else
			ctlmsgtext = h->title;
		log("Ctl Msg %s from %s: %s", h->nbuf, h->path, ctlmsgtext);
	.
	20a
		register char *ctlmsgtext;
	.
	6c
	static char *SccsId = "@(#) control.c	2.6	4/18/82";
	.
	w
	q
	-*-END-*-
	ed - src/defs.h << '-*-END-*-'
	26a
	/* #define MANUALLY		/* Don't execute rmgroups, just notify.	*/
	/* #define BERKNAME "ARPAVAX"	/* name of local host on Berknet	*/
	.
	10c
	static char *Defs = "@(#) defs.h	2.6	4/18/82";
	.
	7a
	 *
	 * By convention, the version of the software you are running is taken
	 * to be the version of control.c.
	.
	w
	q
	-*-END-*-
	ed - src/expire.c << '-*-END-*-'
	127a
	}

	mkdir(groupdir)
	register char *groupdir;
	{
		char buf[BUFLEN];
		register struct passwd *pw;
		extern char *NEWSU;
		int rc;

		if (access(OLDNEWS, 2) < 0)
			return -1;
		sprintf(buf, "mkdir %s/%s", OLDNEWS, groupdir);
		rc = system(buf);
		sprintf(buf, "%s/%s", OLDNEWS, groupdir);
		if (verbose)
			printf("mkdir %s, rc %d\n", buf, rc);
		chmod(buf, 0755);
		if ((pw = getpwnam(NEWSU)) != NULL)
			chown(buf, pw->pw_uid, pw->pw_gid);
		return rc;
	.
	126d
	124a
		printf("expire: %s.\n", message);
	.
	121a
	ulall(artlist)
	char *artlist;
	{
		char *p;
		int last = 0;
		char newname[BUFLEN];

		while (*artlist == ' ' || *artlist == '\n')
			artlist++;
		if (*artlist == 0)
			return;
		p = index(artlist, ' ');
		if (p == 0) {
			last = 1;
			p = index(artlist, '\n');
		}
		if (p == 0) {
			last = 1;
			unlink(artlist);
			return;
		}
		if (p)
			*p = 0;
		if (access(OLDNEWS, 0) == 0) {
			sprintf(newname, "%s/%s", OLDNEWS, artlist);
			printf("link %s to %s\n", newname, filename);
			if (link(artlist, newname) == -1) {
				if (mkdir(groupdir) == 0)
					link(artlist, newname);
			}
		}

		if (verbose)
			printf("unlink %s\n", artlist);
		unlink(artlist);
		if (!last)
			ulall(p+1);
	}

	.
	118a
		unlink(OARTFILE);
		link(ARTFILE, OARTFILE);
		unlink(ARTFILE);
		link(NARTFILE, ARTFILE);
		unlink(NARTFILE);
	.
	117a
			else {
				fputs(afline, nhfd);
				if (verbose > 2)
					printf("Good article %s\n", rcbuf);
			}
			fclose(fp);
	.
	112,116d
	107,110c
				if (verbose)
					printf("cancel %s\n", filename);
				ulall(p2);
	.
	105c
				printf("cancel %s\n", filename);
	.
	85,103c
			}
			if (hread(&h, fp) == NULL) {
				if (verbose)
					printf("Garbled article %s.\n", filename);
				fclose(fp);
				continue;
			}
			h.exptime = cgtdate(h.expdate);
			if (!h.expdate[0] || ignorexp==2 ||
			    (ignorexp==1 && newtime < h.exptime))
				h.exptime = newtime;
			if (now >= h.exptime) {
	.
	77,83c
			strcpy(filename, p2);
			p1 = index(filename, ' ');
			if (p1 == 0)
				p1 = index(filename, '\n');
			if (p1)
				*p1 = 0;
			if (access(filename, 4) || (fp = fopen(filename, "r")) == NULL) {
				if (verbose > 3)
					printf("Can't open %s.\n", filename);
	.
	75a
			}
	.
	74c
			if (!ngmatch(groupdir, ngpat)) {
				fputs(afline, nhfd);
	.
	66,72c
		newtime = now + expincr;
		if (chdir(SPOOL))
			xerror("Cannot chdir %s", SPOOL);

		sprintf(OARTFILE, "%s/%s", LIB, "ohistory");
		sprintf(ARTFILE, "%s/%s", LIB, "history");
		ohfd = xfopen(ARTFILE, "r");
		sprintf(NARTFILE, "%s/%s", LIB, "nhistory");
		nhfd = xfopen(NARTFILE, "w");

		while (fgets(afline, BUFLEN, ohfd) != NULL) {
			if (verbose > 1)
				printf("article: %s", afline);
			p1 = index(afline, '\t');
			if (p1)
				p2 = index(p1+1, '\t');
			else
				continue;
			if (!p2)
				continue;
			p2++;
			strcpy(groupdir, p2);
			p1 = index(groupdir, '/');
			if (p1)
				*p1 = 0;
			else
				continue;
			if (verbose > 1)
				printf("newsgroup %s\n", groupdir);
	.
	58c
				printf("Usage: expire [ -v [level] ] [-e days ] [-i] [-n newsgroups]\n");
	.
	42a
			case 'e':	/* Use this as default expiration time */
				if (argc > 2 && argv[2][0] != '-') {
					argv++;
					argc--;
					expincr = atol(argv[1]) * DAYS;
				}
				break;
			case 'I':	/* Ignore any existing expiration date */
				ignorexp = 2;
				break;
			case 'i':	/* Ignore any existing expiration date */
				ignorexp = 1;
				break;
	.
	33a
		expincr = DFLTEXP;
	.
	32a
		char afline[BUFLEN];
		char *p1, *p2;
		FILE *ohfd, *nhfd;
	.
	30,31c
		register time_t now, newtime;
	.
	19c
	char	ARTFILE[BUFSIZ], NARTFILE[BUFSIZ], OARTFILE[BUFSIZ];
	char	filename[BUFSIZ];
	char	*OLDNEWS = "/usr/spool/oldnews";
	int	verbose = 0;
	int	ignorexp = 0;
	long	expincr;
	long	atol();
	.
	15c
	extern char	groupdir[BUFSIZ], rcbuf[BUFLEN];
	.
	8,13c
	#include "params.h"
	.
	6c
	static char *SccsId = "@(#) expire.c	2.8	4/20/82";
	.
	w
	q
	-*-END-*-
	ed - src/ftime.c << '-*-END-*-'
	1c
	static char *SccsId = "@(#) ftime.c	2.2	3/14/82";
	.
	w
	q
	-*-END-*-
	ed - src/funcs.c << '-*-END-*-'
	337,338d
	188c
	extern char	**environ;
	.
	5c
	static char *SccsId = "@(#) funcs.c	2.4	4/3/82";
	.
	w
	q
	-*-END-*-
	ed - src/getdate.y << '-*-END-*-'
	6c
		/*	@(#) getdate.y	2.4	4/3/82	*/
	.
	w
	q
	-*-END-*-
	ed - src/header.c << '-*-END-*-'
	232a
		if (*hp->ctlmsg)
			fprintf(fp, "Control: %s\n", hp->ctlmsg);
	.
	230,231c
		if (*hp->followid)
	.
	227,228c
		fprintf(fp, "Posted: %s\n", hp->subdate); 
		if (wr == 1)
			fprintf(fp, "Received: %s\n", hp->recdate);
		if (*hp->expdate)
			fprintf(fp, "Expires: %s\n", hp->expdate);
		if (*hp->replyto)
	.
	225c
		if (wr == 2)
			fprintf(fp, "From: %s\nNewsgroups: %s\n", hp->path, bfr);
		else
			fprintf(fp, "From: %s!%s\nNewsgroups: %s\n", SYSNAME, hp->path, bfr);
	.
	223a
		ihwrite(hp, fp, 1);
	}

	/*
	 * Write header at 'hp' on stream 'fp' in B format.  Include received date
	 * if wr is 1.  Leave off sysname if wr is 2.
	 */
	ihwrite(hp, fp, wr)
	register struct hbuf *hp;
	register FILE *fp;
	int wr;
	{
	.
	219d
	202,212c
		ihwrite(hp, fp, 0);
	.
	191a
		if (!strncmp(ptr, "Control: ", 12))
			return CONTROL;
	.
	126a
					break;
				case CONTROL:
					if (!ctlflag)
						getfield(&ctlflag, hp->ctlmsg);
					break;
	.
	78a
		int ctlflag = FALSE;
	.
	69a
	#define CONTROL		10
	.
	5c
	static char *SccsId = "@(#) header.c	2.6	4/18/82";
	.
	w
	q
	-*-END-*-
	ed - src/header.h << '-*-END-*-'
	20a
		char	ctlmsg[PATHLEN];	/* control message	*/
	.
	5c
	static char *Header = "@(#) header.h	2.4	4/18/82";
	.
	w
	q
	-*-END-*-
	ed - src/help << '-*-END-*-'
	11a
	s |program	Run program with article as standard input.
	.
	w
	q
	-*-END-*-
	ed - src/ifuncs.c << '-*-END-*-'
	117c
		if (noshell) {
			if (pid = fork())
				fwait(pid);
			else {
				close(0);
				open(TRANS, 0);
				ptr = sp->s_xmit;
				for (pid = 0; pid < 19; pid++) {
					while (isspace(*ptr))
						*ptr++ = 0;
					argv[pid] = ptr;
					while (!isspace(*++ptr) && *ptr)
						;
					if (!*ptr)
						break;
				}
				argv[++pid] = 0;
				execv(sp->s_xmit, argv);
				xerror("Can't execv\n");
			}
		} else
			fwait(fsubr(pshell, bfr, (char *)NULL));
	.
	102c
		else 
	.
	99a
	#ifdef BERKNAME
		gobbledygook;
		if (berknet) {
			ptr = index(h.path, '!');
			sprintf(bfr, "%s:%s", BERKNAME, ++ptr);
			strcpy(h.path, bfr);
		}
		if (berknet)
			ihwrite(&h, ofp, 2);
		else
	#endif
	.
	69a
		/* noshell: don't fork a shell to execute the xmit command */
		int noshell = (index(sp->s_flags, 'S') != NULL);
	#ifdef BERKNAME
		/* berknet: change sysname in path to berknet name */
		int berknet = (index(sp->s_flags, 'U') != NULL);
	#endif
	.
	65a
		char *argv[20];
		register int pid, fd;
	.
	63a
		register char *ptr;
	.
	5c
	static char *SccsId = "@(#) ifuncs.c	2.7	4/19/82";
	.
	w
	q
	-*-END-*-
	ed - src/inews.c << '-*-END-*-'
	476c
		if ((pid = fork()) <= 0) {
	.
	289c
			i = fork();
			if (i <= 0)
	.
	235c
		}
		is_ctl = mode != CREATENG &&
			(ngmatch(header.nbuf, "all.all.ctl,") || *header.ctlmsg);
		if (mode == PROC) {
	.
	222d
	5c
	static char *SccsId = "@(#) inews.c	2.8	4/20/82";
	.
	w
	q
	-*-END-*-
	ed - src/newsinstall.sh << '-*-END-*-'
	72c
		chmod 755 $SPOOLDIR/.canned
	.
	70c
	if test -d $SPOOLDIR/.canned
	.
	40c
	touch $LIBDIR/history $LIBDIR/active $LIBDIR/log $LIBDIR/users
	chmod 666 $LIBDIR/users
	.
	w
	q
	-*-END-*-
	ed - src/postnews.usg << '-*-END-*-'
	27,30d
	24c
		inews -t "$title" -n $ng < $1 &
	.
	20,21c
		if [ x$EDITOR = x ]
		then
			echo "Type news, end with control D"
			inews -t "$title" -n $ng
		else
			t=/tmp/pn$$
			trap "rm -f $t; exit" 0 1 2
			$EDITOR $t
			inews -t "$title" -n $ng <$t &
		fi
	.
	13c
	echo "Newsgroups (general): " \\c
	.
	11c
	echo "Title: " \\c
	.
	1,2c
	: '@(#) postnews.usg	2.3	4/18/82'
	.
	w
	q
	-*-END-*-
	ed - src/postnews.v7 << '-*-END-*-'
	26,29d
	23c
		inews -t "$title" -n $ng < $1 &
	.
	19,20c
		if [ x$EDITOR = x ]
		then
			echo "Type news, end with control D"
			inews -t "$title" -n $ng
		else
			t=/tmp/pn$$
			trap "rm -f $t; exit" 0 1 2
			$EDITOR $t
			inews -t "$title" -n $ng <$t &
		fi
	.
	12c
	echo -n "Newsgroups (general): "
	.
	10c
	echo -n "Title: "
	.
	1c
	: '@(#) postnews.v7	2.3	4/18/82'
	.
	w
	q
	-*-END-*-
	ed - src/process.c << '-*-END-*-'
	5c
	static char *SccsId = "@(#) process.c	2.2	3/14/82";
	.
	w
	q
	-*-END-*-
	ed - src/readnews.c << '-*-END-*-'
	216c
		if (xflag || lflag || tflag)
	.
	82a
	#else
		PAGER = "";
	#endif
	.
	80a
	#ifdef PAGE
	.
	5c
	static char *SccsId = "@(#) readnews.c	2.4	4/3/82";
	.
	w
	q
	-*-END-*-
	ed - src/readr.c << '-*-END-*-'
	980,981c
				*dest++ = '"', src++;
			else
				*dest++ = *src++;
	.
	971a
	/*
	 * like strcat but be careful with quotes.  since there appears to be no way
	 * to quote an apostrophe in sh, we change them to double quotes.
	 */
	.
	921,924c
		else
			pclose(inews);
		if (pid == 0)
			exit(0);
		return 0;
	.
	913,919c
		fflush(stdout);
		pid = fork();
		if (pid > 0)
			return 0;
		uname(&me);
		strcpy(distgroup, hp->nbuf);
		p = index(distgroup, '.');
		q = index(p+1, '.');
		if (notauthor)
			sprintf(distgroup, "to.%s.ctl", me.nodename);
		else if (p == 0)
			sprintf(distgroup, "%s.msg.ctl", distgroup);
		else if (q == 0)
			strcat(distgroup, ".ctl");
		else
			strcpy(q, ".ctl");
		sprintf(bfr, "%s -t 'cancel %s' -n %s < /dev/null",
				INEWS, hp->ident, distgroup);
		if ((inews = popen(bfr, "w")) == NULL)
	.
	911c
		struct utsname me;
		char *p, *q;
		char distgroup[64];
		int pid;
	.
	908a
	int notauthor;
	.
	905,906c
	/*
	 * Cancel the article whose header is in hp, by posting a control message
	 * to cancel it.  The scope of the control message depends on who would
	 * really be willing to cancell it.  It is sent as far as it will do any good.
	 * notauthor is true iff the person posting the article is the real author.
	 */
	cancel(ofp, hp, notauthor)
	.
	767c
			fclose(ufp);
		if (isnew && !isprogram)
			printf("%s: %s\n", to, isnew ? "New file": "Appended");
	.
	743a
		ufp = fopen(to, "r");
		if (ufp != NULL) {
			fclose(ufp);
			isnew = 0;
		}
	.
	734a
		int isnew = 1;
	.
	641c
				fprintf(ofp, "Last article is %ld.\n", statbuf.st_size);
	.
	605c
					printf("%s\n", rcbuf);
	.
	596a
					if (access(tf, 4)) {
						fprintf(stderr, "Article not posted: no input file.\n");
						break;
					}
	.
	576c
					if (index("\\", *ptr2))
	.
	560c
					sprintf(bfr, "%s -F %s -n %s -t \'", INEWS, ptr3, ptr2);
	.
	549a
						ptr3 = hbuf1.ident;
	.
	545a
				ptr3 = h.ident;
	.
	369,370c
				} else if (i)
					fprintf(ofp, "Not contributor: cancelling locally only.\n");
				if (!cancel(ofp, hptr, i)) {
	.
	366c
				i = strcmp(username, hptr->path);
				if (i && uid != ROOTID && uid) {
	.
	283,284c
				if(*bptr != '|' && index(bptr,'/') == NULL) {
					char hetyped[BUFLEN];
					char *boxptr;
					strcpy(hetyped,bptr);
					if((boxptr=getenv("NEWSBOX"))!=NULL)
						strcpy(bptr,boxptr);
					else
						sprintf(bptr,"%s",userhome);
					strcat(bptr,"/");
					if(hetyped[0] != '\0')
						strcat(bptr, hetyped);
					else
						strcat(bptr, "Articles");
				}
	.
	250a
				if (hflag)
					fprintf(ofp, "From: %s\n", h.path);
	.
	176c
					}
	.
	32c
		char *ptr1, *ptr2, *ptr3;	/* for reply manipulation	*/
	.
	5c
	static char *SccsId = "@(#) readr.c	2.8	4/18/82";
	.
	w
	q
	-*-END-*-
	ed - src/recnews.c << '-*-END-*-'
	314,315d
	34c
	static char *SccsId = "@(#) recnews.c	2.3	4/3/82";
	.
	w
	q
	-*-END-*-
	ed - src/rfuncs.c << '-*-END-*-'
	306a
	/*
	 * Given an article ID, return TRUE if we have already seen that article ID
	 * in this readnews session.  This should only be called for articles
	 * with commas in the newsgroup name, and prevents the same article, which
	 * was submitted to multiple newsgroups, from being shown to the same
	 * person more than once.  Bug: if the user quits after seeing the first
	 * copy, he'll see it again next time in the other newsgroup.
	 */
	#define NART	100	/* max # articles on multiple newsgroups */
	#define IDSIZE	14	/* max size of an article ID */
	seenbefore(artid)
	char *artid;
	{
		static int nbef = 0;
		static char histbuf[NART][IDSIZE];
		register int i;

		for (i=0; i<nbef; i++)
			if (strcmp(histbuf[i], artid) == 0)
				return TRUE;
		if (strlen(artid) >= IDSIZE) {
			fprintf(stderr, "Article id '%s' too long\n", artid);
			return FALSE;
		}
		if (nbef >= NART-1) {
			fprintf(stderr, "Too many multiple newsgroup articles\n");
			return FALSE;
		}
		strcpy(histbuf[nbef++], artid);
		return FALSE;
	}
	.
	303a
		if (index(hp->nbuf, ',') && seenbefore(hp->ident))
			return FALSE;
	.
	5c
	static char *SccsId = "@(#) rfuncs.c	2.5	4/18/82";
	.
	w
	q
	-*-END-*-
	ed - src/sendnews.c << '-*-END-*-'
	94a
							punct--;
	.
	89a
							punct--;
	.
	5c
	static char *SccsId = "@(#) sendnews.c	2.3	4/3/82";
	.
	w
	q
	-*-END-*-



More information about the Comp.sources.unix mailing list