Path: utzoo!attcan!uunet!cs.utexas.edu!uwm.edu!uakari.primate.wisc.edu!ctrsol!emory!skeeve!arnold From: arnold@skeeve.UUCP (Arnold D. Robbins) Newsgroups: unix-pc.sources Subject: Patch #18 to B News 2.11 Message-ID: <253@skeeve.UUCP> Date: 17 Sep 89 04:08:30 GMT Distribution: unix-pc Organization: The Basement Computer, Atlanta GA Lines: 2254 Well, believe it or not, B News is NOT dead! (Merely on heavy life support.) Despite the release of C News and the imminent release of B News 3.0 (TMN-Netnews), Rick Adams has released the following patch to B News. Skeeve is still at 2.11.14. I haven't decide yet which news I'm going to switch to, or when. At the moment, it ain't broke so I ain't fixing it. ------------------------------- Path: emory!gatech!udel!wuarchive!cs.utexas.edu!uunet!rick From: rick@uunet.UU.NET (Rick Adams) Newsgroups: news.software.b Subject: patch 18 for B news 2.11 Message-ID: <67503@uunet.UU.NET> Date: 12 Sep 89 23:10:59 GMT Organization: UUNET Communications Services, Falls Church, VA Lines: 2232 Description: This is patch 18 for news 2.11. It addresses the following problems: Small changes to work around various compiler bugs. fixed batch to return to BATCHDIR before renaming work file. checkgroups no longer mails you a message if everything's ok Fixed active file to handle a maximum of 9,999,999 messages to avoid wraparound problem at current 99,999 Better mail notifcation of newgroup/rmgroup Fixed problem with control messages not allowing "local" distribution unless ORGDISTRIB was defined. Allow "sendsys sitename" control message, which only returns the part of the sysfile relevant to "sitename" instead of the entire file. checkgroups now requires a Approved line before executing. expire and inews/rnews now read and write a "C news" style history ile. The intent is to allow people to run the C news expire with instead of the B news expire. This is untested. getdate now better handles some "english" dates. inews now changes illegal non-printing or space characters with ? rnews/inews noww support truly private newsgroups. If the last field of the active file is a filename, then posting (including via rnews) is restricted to sites in that list. worked around a standard i/o bug in some old unix ports. NICENESS not attempts to nice to an absolute value instead of relative to the current niceness Specifying both I and F in the sys file will result in both the pathname and the message-id of the file being written out. This is NOT backwards compatible. For the old behavior, specify only "I" and not both "I" and "F" make update now checks to see if you have defined LINES large enough to support your existing active file Fix: cd src and make install;make update YOU MUST "make update" or your active file will be in the wrong format Index: Makefile.dst Prereq: 1.33 diff -c1 onews/Makefile.dst news/Makefile.dst *** onews/Makefile.dst Thu Jan 19 00:04:22 1989 --- news/Makefile.dst Thu Sep 7 17:54:28 1989 *************** *** 1,2 ! # '@(#)Makefile.dst 1.33 1/19/89' # Generic Makefile. --- 1,2 ----- ! # '@(#)Makefile.dst 1.35 9/7/89' # Generic Makefile. *************** *** 202,204 @echo Localize has been run. Restart the make. ! @exit 1 --- 202,204 ----- @echo Localize has been run. Restart the make. ! @exit 1; *************** *** 207,209 @echo Localize has been run. Restart the make. ! @exit 1 --- 207,209 ----- @echo Localize has been run. Restart the make. ! @exit 1; *************** *** 265,267 getdate.o: getdate.y defs.h ! @echo "expect 5 shift/reduce conflicts" yacc getdate.y --- 265,267 ----- getdate.o: getdate.y defs.h ! @echo "expect 8 shift/reduce conflicts" yacc getdate.y Index: batch.c Prereq: 1.23 diff -c1 onews/batch.c news/batch.c *** onews/batch.c Wed Jan 18 14:28:51 1989 --- news/batch.c Tue Sep 5 15:19:39 1989 *************** *** 33,35 #ifdef SCCSID ! static char *SccsId = "@(#)batch.c 1.23 1/18/89"; #endif /* SCCSID */ --- 33,35 ----- #ifdef SCCSID ! static char *SccsId = "@(#)batch.c 1.25 9/5/89"; #endif /* SCCSID */ *************** *** 95,97 if (chdir(SPOOLDIR) < 0) { ! logerror("chdir(%s): %s", workfile, sys_errlist[errno]); exit(1); --- 95,97 ----- if (chdir(SPOOLDIR) < 0) { ! logerror("chdir(%s): %s", SPOOLDIR, sys_errlist[errno]); exit(1); *************** *** 151,152 } } --- 151,156 ----- } + } + if (chdir(BATCHDIR) < 0) { + logerror("chdir(%s): %s", BATCHDIR, sys_errlist[errno]); + exit(1); } Index: checkgroups.sh Prereq: 1.25 diff -c1 onews/checkgroups.sh news/checkgroups.sh *** onews/checkgroups.sh Sun Jan 15 19:48:29 1989 --- news/checkgroups.sh Fri Sep 1 18:23:00 1989 *************** *** 1,3 : check active file for missing or extra newsgroups ! : '@(#)checkgroups 1.25 1/15/89' --- 1,3 ----- : check active file for missing or extra newsgroups ! : '@(#)checkgroups 1.26 9/1/89' *************** *** 7,9 fi ! echo "" >/tmp/$$out # Read first line of stdin. If of the form "-n group", then only check --- 7,9 ----- fi ! cp /dev/null /tmp/$$out # Read first line of stdin. If of the form "-n group", then only check *************** *** 67,69 - echo "" >>/tmp/$$out if test -s /tmp/$$remove --- 67,68 ----- if test -s /tmp/$$remove Index: control.c Prereq: 2.58 diff -c1 onews/control.c news/control.c *** onews/control.c Sun Jan 15 19:48:55 1989 --- news/control.c Tue Sep 5 15:19:40 1989 *************** *** 21,23 #ifdef SCCSID ! static char *SccsId = "@(#)control.c 2.58 1/15/89"; #endif /* SCCSID */ --- 21,23 ----- #ifdef SCCSID ! static char *SccsId = "@(#)control.c 2.60 9/5/89"; #endif /* SCCSID */ *************** *** 355,358 # ifdef NONEWGROUPS ! # ifdef ORGDISTRIB ! /* local or ORGDISTRIB */ int can_change = (STRCMP(header.distribution, "local") == 0) --- 355,357 ----- # ifdef NONEWGROUPS ! /* local allowed */ int can_change = (STRCMP(header.distribution, "local") == 0) *************** *** 358,359 int can_change = (STRCMP(header.distribution, "local") == 0) || (STRCMP(header.distribution, ORGDISTRIB) == 0) --- 357,360 ----- int can_change = (STRCMP(header.distribution, "local") == 0) + # ifdef ORGDISTRIB + /* or ORGDISTRIB */ || (STRCMP(header.distribution, ORGDISTRIB) == 0) *************** *** 359,364 || (STRCMP(header.distribution, ORGDISTRIB) == 0) - || !ngmatch(argv[1], NONEWGROUPS); - # else /* ! ORGDISTRIB */ - /* local only */ - int can_change = STRCMP(header.distribution, "local") == 0; # endif /* ORGDISTRIB */ --- 360,361 ----- || (STRCMP(header.distribution, ORGDISTRIB) == 0) # endif /* ORGDISTRIB */ *************** *** 364,365 # endif /* ORGDISTRIB */ # else /* ! NONEWGROUPS */ --- 361,363 ----- # endif /* ORGDISTRIB */ + || !ngmatch(argv[1], NONEWGROUPS); # else /* ! NONEWGROUPS */ *************** *** 386,390 /* Now check if it's correctly moderated/unmoderated */ ! while (*p++) ! ; ! p -= 3; if (argc > 2 && STRCMP(argv[2], "moderated") == 0) { --- 384,388 ----- /* Now check if it's correctly moderated/unmoderated */ ! /* name 0000000 0000000 X */ ! /* 12345678901234567 */ ! p += 17; if (argc > 2 && STRCMP(argv[2], "moderated") == 0) { *************** *** 403,405 # ifdef NOTIFY ! (void) sprintf(subjline, "Newsgroup %s changed from %smoderated to %smoderated", --- 401,404 ----- # ifdef NOTIFY ! if (can_change) ! (void) sprintf(subjline, "Newsgroup %s changed from %smoderated to %smoderated", *************** *** 407,408 *p=='y' ? "un" : ""); fd = mailhdr((struct hbuf *)NULL, subjline); --- 406,412 ----- *p=='y' ? "un" : ""); + else + (void) sprintf(subjline, + "Change newsgroup %s from %smoderated to %smoderated", + argv[1], *p=='y' ? "" : "un", + *p=='y' ? "un" : ""); fd = mailhdr((struct hbuf *)NULL, subjline); *************** *** 472,474 (void) fseek(actfp, 0L, 2); clearerr(actfp); ! fprintf(actfp, "%s 00000 00001 %c\n", argv[1], (argc > 2 && STRCMP(argv[2], "moderated") == 0) --- 476,478 ----- (void) fseek(actfp, 0L, 2); clearerr(actfp); ! fprintf(actfp, "%s 0000000 0000000 %c\n", argv[1], (argc > 2 && STRCMP(argv[2], "moderated") == 0) *************** *** 495,497 # ifdef NOTIFY ! (void) sprintf(subjline, "Newsgroup %s created", argv[1]); fd = mailhdr((struct hbuf *)NULL, subjline); --- 499,504 ----- # ifdef NOTIFY ! if (didcreate) ! (void) sprintf(subjline, "Newsgroup %s created", argv[1]); ! else ! (void) sprintf(subjline, "Create newsgroup %s", argv[1]); fd = mailhdr((struct hbuf *)NULL, subjline); *************** *** 554,555 #ifdef NORMGROUPS #ifdef ORGDISTRIB --- 561,564 ----- #ifdef NORMGROUPS + /* Allow local removals */ + if (!STRCMP("local", header.distribution) #ifdef ORGDISTRIB *************** *** 555,561 #ifdef ORGDISTRIB ! /* ! * Allow local as well as organizational removals ! */ ! if (!STRCMP(ORGDISTRIB, header.distribution) ! || !STRCMP("local", header.distribution) || !ngmatch(argv[1], NORMGROUPS)) --- 564,568 ----- #ifdef ORGDISTRIB ! /* as well as organizational removals */ ! || !STRCMP(ORGDISTRIB, header.distribution) ! #endif /* ORGDISTRIB */ || !ngmatch(argv[1], NORMGROUPS)) *************** *** 561,565 || !ngmatch(argv[1], NORMGROUPS)) - #else /* !ORGDISTRIB */ - if (!STRCMP("local", header.distribution)) - #endif /* !ORGDISTRIB */ #endif /* NORMGROUPS */ --- 568,569 ----- || !ngmatch(argv[1], NORMGROUPS)) #endif /* NORMGROUPS */ *************** *** 638,640 if (line == NULL) { - struct tm *tm; log("Can't cancel %s: non-existent", argv[1]); --- 642,643 ----- if (line == NULL) { log("Can't cancel %s: non-existent", argv[1]); *************** *** 641,650 (void) time(&t); ! tm = localtime(&t); ! #ifdef USG ! sprintf(bfr,"%s\t%2.2d/%2.2d/%d %2.2d:%2.2d\tcancelled", ! #else /* !USG */ ! sprintf(bfr,"%s\t%02d/%02d/%d %02d:%02d\tcancelled", ! #endif /* !USG */ ! argv[1], tm->tm_mon+1, tm->tm_mday, tm->tm_year, tm->tm_hour, ! tm->tm_min); savehist(bfr); --- 644,646 ----- (void) time(&t); ! sprintf(bfr,"%s\t%ld\tcancelled", argv[1], t); savehist(bfr); *************** *** 737,739 register FILE *f, *u; ! int c; --- 733,736 ----- register FILE *f, *u; ! register int len; ! register char *cp; *************** *** 740,747 #ifdef NOTIFY ! f = mailhdr((struct hbuf *)NULL, "sendsys control message"); ! if (f != NULL) { ! fprintf(f, "%s requested your %s/sys file.\n", header.path, LIB); ! fprintf(f, "It has been sent.\n"); ! fprintf(f, "\n\n%s says:\n", header.path); ! controlmail = f; } --- 737,746 ----- #ifdef NOTIFY ! if (argc < 2) { ! f = mailhdr((struct hbuf *)NULL, "sendsys control message"); ! if (f != NULL) { ! fprintf(f, "%s requested your %s/sys file.\n", header.path, LIB); ! fprintf(f, "It has been sent.\n"); ! fprintf(f, "\n\n%s says:\n", header.path); ! controlmail = f; ! } } *************** *** 750,754 u = fopen(SUBFILE, "r"); ! if (f != NULL && u != NULL) { ! while ((c=getc(u)) != EOF) ! putc(c, f); (void) fclose(u); --- 749,755 ----- u = fopen(SUBFILE, "r"); ! if (f == NULL || u == NULL) ! return 0; ! if (argc < 2) { ! while (len = fread(bfr, 1, sizeof bfr, u)) ! fwrite(bfr, 1, len, f); (void) fclose(u); *************** *** 755,756 (void) mclose(f); } --- 756,758 ----- (void) mclose(f); + return 0; } *************** *** 756,757 } return 0; --- 758,776 ----- } + cp = argv[argc -1]; + len = strlen(cp); + while (fgets(bfr, sizeof bfr, u) != NULL) { + while (STRNCMP(bfr, cp, len) == 0 && (bfr[len] == ':' + || bfr[len] == '/')) { + register char *ch, c; + do { + ch = bfr; + while (c= *ch++) + putc(c, f); + c = ch[-3]; /* looking for trailing \ */ + } while (fgets(bfr, sizeof bfr, u) != NULL + && c == '\\'); + } + } + (void) fclose(u); + (void) mclose(f); return 0; *************** *** 788,789 (void) setuid(geteuid()); --- 807,812 ----- + if (header.approved[0] == '\0') { + logerr("checkgroups: not approved"); + return 1; + } (void) setuid(geteuid()); *************** *** 881,882 (void) close(hisside); (void) setgid(gid); --- 904,906 ----- (void) close(hisside); + unlock(); (void) setgid(gid); Index: expire.c Prereq: 2.61 diff -c1 onews/expire.c news/expire.c *** onews/expire.c Thu Jan 19 00:06:40 1989 --- news/expire.c Fri Sep 1 18:23:21 1989 *************** *** 19,21 #ifdef SCCSID ! static char *SccsId = "@(#)expire.c 2.61 1/19/89"; #endif /* SCCSID */ --- 19,21 ----- #ifdef SCCSID ! static char *SccsId = "@(#)expire.c 2.63 9/1/89"; #endif /* SCCSID */ *************** *** 348,349 (void) close(creat(DIRFILE, 0666)); initdbm(NARTFILE); --- 348,350 ----- (void) close(creat(DIRFILE, 0666)); + (void) close(creat(NARTFILE, 0666)); initdbm(NARTFILE); *************** *** 438,439 printf("article: %s", afline); if (afline[0] != '<') --- 439,441 ----- printf("article: %s", afline); + h.expdate[0] = '\0'; if (afline[0] != '<') *************** *** 446,448 *p1 = '\t'; ! p2 = index(p1 + 1, '\t'); if (!p2) --- 448,450 ----- *p1 = '\t'; ! p2 = rindex(p1 + 1, '\t'); if (!p2) *************** *** 462,464 } ! rectime = cgtdate(recdate); *p2++ = '\t'; --- 464,474 ----- } ! p3 = index(recdate, '~'); ! if (p3) { ! *p3++ = '\0'; ! rectime = cgtdate(recdate); ! exptime = atol(p3); ! } else { ! rectime = cgtdate(recdate); ! exptime = rectime + expincr; ! } *p2++ = '\t'; *************** *** 511,513 if (!ngmatch(nbuf, ngpat) || ! ((rectime+expincr > today) && !dorebuild && !frflag && !usepost && recdate[0] != ' ')) --- 521,523 ----- if (!ngmatch(nbuf, ngpat) || ! (exptime > today && !dorebuild && !frflag && !usepost && recdate[0] != ' ')) *************** *** 515,517 if (!dorebuild && !frflag && !usepost && ! recdate[0] != ' ') { grpsleft[0] = '\0'; --- 525,527 ----- if (!dorebuild && !frflag && !usepost && ! recdate[0] != ' ') { grpsleft[0] = '\0'; *************** *** 615,617 if ((cp = index(h.nbuf, NGDELIM)) == NULL) { - struct tm *tm; saveit: --- 625,626 ----- if ((cp = index(h.nbuf, NGDELIM)) == NULL) { saveit: *************** *** 617,628 saveit: ! tm = gmtime(&rectime); ! fprintf(nhfd, ! #ifdef USG ! "%s\t%s%2.2d/%2.2d/%d %2.2d:%2.2d\t%s\n", ! #else /* !USG */ ! "%s\t%s%02d/%02d/%d %02d:%02d\t%s\n", ! #endif /* !USG */ ! h.ident, h.expdate[0] ? " " : "", ! tm->tm_mon+1, tm->tm_mday, tm->tm_year, ! tm->tm_hour, tm->tm_min, filename); if(ferror(nhfd)) --- 626,634 ----- saveit: ! fprintf(nhfd, "%s\t%ld", ! h.ident, rectime); ! if (h.expdate[0]) ! fprintf(nhfd, "~%ld", ! (long) cgtdate(h.expdate)); ! ! fprintf(nhfd, "\t%s\n", filename); if(ferror(nhfd)) *************** *** 697,698 exptime = newtime; if (frflag ? strcmp(baduser,h.from)==0 : today >= exptime) { --- 703,705 ----- exptime = newtime; + if (frflag ? strcmp(baduser,h.from)==0 : today >= exptime) { *************** *** 732,734 h.ident, recdate); ! fputs(afline, nhfd); if (ferror(nhfd)) --- 739,751 ----- h.ident, recdate); ! if (h.expdate[0] == '\0') ! fputs(afline, nhfd); ! else { ! register char *rcp = rindex(recdate, ' '); ! if (rcp && STRCMP(rcp, " GMT") == 0) ! rcp = '\0'; ! fprintf(nhfd, "%s\t%s~%ld%s\n", h.ident, ! recdate[0] == ' '? recdate+1 : recdate, ! exptime, rindex(afline, '\t')); ! } ! if (ferror(nhfd)) *************** *** 744,746 register struct multhist *mhp; - struct tm *tm; for (mhp = multhist; mhp < multhist+mh_size && mhp->mh_ident != NULL; mhp++) --- 761,762 ----- register struct multhist *mhp; for (mhp = multhist; mhp < multhist+mh_size && mhp->mh_ident != NULL; mhp++) *************** *** 770,781 } ! tm = gmtime(&rectime); ! fprintf(nhfd, ! #ifdef USG ! "%s\t%s%2.2d/%2.2d/%d %2.2d:%2.2d\t%s\n", ! #else /* !USG */ ! "%s\t%s%02d/%02d/%d %02d:%02d\t%s\n", ! #endif /* !USG */ ! h.ident, h.expdate[0] ? " " : "", ! tm->tm_mon+1, tm->tm_mday, tm->tm_year, ! tm->tm_hour, tm->tm_min, mhp->mh_file); if (ferror(nhfd)) --- 786,792 ----- } ! fprintf(nhfd, "%s\t%ld", h.ident, rectime); ! if (h.expdate[0]) ! fprintf(nhfd, "~%ld", ! (long) cgtdate(h.expdate)); ! fprintf(nhfd,"\t%s\n", mhp->mh_file); if (ferror(nhfd)) *************** *** 862,864 int lineno = 0; ! char c, cansub, groupname[BUFLEN]; --- 873,875 ----- int lineno = 0; ! char c, cansub, groupname[BUFLEN], restofline[BUFLEN]; *************** *** 867,870 lineno++; ! if (sscanf(afline,"%s %ld %ld %c", groupname, &maxart, &minart, ! &cansub) < 4) { xerror("Line %d in active file invalid: %s", --- 878,882 ----- lineno++; ! restofline[0] = '\0'; ! if (sscanf(afline,"%s %ld %ld %c%s", groupname, &maxart, ! &minart, &cansub, restofline) < 4) { xerror("Line %d in active file invalid: %s", *************** *** 919,921 if (verbose > 4) ! printf("\tmaxart = %5.5ld, minart = %5.5ld\n", maxart, minart); --- 931,933 ----- if (verbose > 4) ! printf("\tmaxart = %7.7ld, minart = %7.7ld\n", maxart, minart); *************** *** 921,923 maxart, minart); ! fprintf(nhfd,"%s %5.5ld %5.5ld %c\n", groupname, maxart, minart, cansub); --- 933,935 ----- maxart, minart); ! fprintf(nhfd,"%s %7.7ld %7.7ld %c\n", groupname, maxart, minart, cansub); *************** *** 927,929 if (verbose > 4) ! printf("\tmaxart = %05ld, minart = %05ld\n", maxart, minart); --- 939,941 ----- if (verbose > 4) ! printf("\tmaxart = %07ld, minart = %07ld\n", maxart, minart); *************** *** 929,932 maxart, minart); ! fprintf(nhfd,"%s %05ld %05ld %c\n", groupname, maxart, ! minart, cansub); if (ferror(nhfd)) --- 941,945 ----- maxart, minart); ! fprintf(nhfd,"%s %07ld %07ld %c%s%s\n", groupname, maxart, ! minart, cansub, restofline[0] != '\0' ? " " : "", ! restofline); if (ferror(nhfd)) Index: funcs2.c Prereq: 1.25 diff -c1 onews/funcs2.c news/funcs2.c *** onews/funcs2.c Sun Jan 15 19:48:57 1989 --- news/funcs2.c Fri Sep 1 18:23:22 1989 *************** *** 19,21 #ifdef SCCSID ! static char *SccsId = "@(#)funcs2.c 1.25 1/15/89"; #endif /* SCCSID */ --- 19,21 ----- #ifdef SCCSID ! static char *SccsId = "@(#)funcs2.c 1.26 9/1/89"; #endif /* SCCSID */ *************** *** 206,207 char junk[40],month[40],day[30],tod[60],year[50]; static time_t lasttime; --- 206,208 ----- char junk[40],month[40],day[30],tod[60],year[50]; + register char *cp; static time_t lasttime; *************** *** 211,213 return lasttime; ! lasttime = getdate(datestr, &Now); if (lasttime < 0) { --- 212,222 ----- return lasttime; ! strncpy(lastdatestr, datestr, BUFLEN); ! cp = index(lastdatestr, '~'); ! if (cp) ! *cp = '\0'; ! ! lasttime = atol(lastdatestr); ! if (lasttime > 600000000L) ! return lasttime; ! lasttime = getdate(lastdatestr, &Now); if (lasttime < 0) { *************** *** 213,216 if (lasttime < 0) { ! logerr("%s: Unparsable date \"%s\"", filename, datestr); ! if (sscanf(datestr, "%s %s %s %s %s", junk, month, day, tod, year) == 5) { --- 222,225 ----- if (lasttime < 0) { ! logerr("%s: Unparsable date \"%s\"", filename, lastdatestr); ! if (sscanf(lastdatestr, "%s %s %s %s %s", junk, month, day, tod, year) == 5) { *************** *** 221,223 if (lasttime < 0) { ! datestr = "now"; /* better than nothing */ lasttime = Now.time; --- 230,232 ----- if (lasttime < 0) { ! strcpy(lastdatestr, "now"); /* better than nothing */ lasttime = Now.time; *************** *** 225,227 } - strncpy(lastdatestr, datestr, BUFLEN); return lasttime; --- 234,235 ----- } return lasttime; Index: getdate.y Prereq: 2.19 diff -c1 onews/getdate.y news/getdate.y *** onews/getdate.y Tue Jan 17 13:09:29 1989 --- news/getdate.y Fri Sep 1 18:23:23 1989 *************** *** 5,7 /* University of North Carolina at Chapel Hill */ ! /* @(#)getdate.y 2.19 1/17/89 */ --- 5,7 ----- /* University of North Carolina at Chapel Hill */ ! /* @(#)getdate.y 2.20 9/1/89 */ *************** *** 105,107 - rspec: SNUMBER UNIT = --- 105,106 ----- rspec: SNUMBER UNIT = *************** *** 108,109 {relsec += 60L * $1 * $2;} | SNUMBER MUNIT = --- 107,110 ----- {relsec += 60L * $1 * $2;} + | UNUMBER UNIT = + {relsec += 60L * $1 * $2;} | SNUMBER MUNIT = *************** *** 110,111 {relmonth += $1 * $2;} | SNUMBER SUNIT = --- 111,114 ----- {relmonth += $1 * $2;} + | UNUMBER MUNIT = + {relmonth += $1 * $2;} | SNUMBER SUNIT = *************** *** 112,113 {relsec += $1;} | UNIT = --- 115,118 ----- {relsec += $1;} + | UNUMBER SUNIT = + {relsec += $1;} | UNIT = *************** *** 272,274 char *name; ! int type, value; }; --- 277,280 ----- char *name; ! int type; ! long value; }; Index: header.c Prereq: 2.50 diff -c1 onews/header.c news/header.c *** onews/header.c Sun Jan 15 19:48:58 1989 --- news/header.c Fri Sep 1 18:23:24 1989 *************** *** 19,21 #ifdef SCCSID ! static char *SccsId = "@(#)header.c 2.50 1/15/89"; #endif /* SCCSID */ --- 19,21 ----- #ifdef SCCSID ! static char *SccsId = "@(#)header.c 2.51 9/1/89"; #endif /* SCCSID */ *************** *** 205,207 do { ! if (*cp && !isprint(*cp)) *cp = '?'; --- 205,208 ----- do { ! if (*cp && (isspace(*cp) || ! !isprint(*cp))) *cp = '?'; *************** *** 232,233 hp->path[0] != '\0' && strncmp(hp->path, LOCALPATHSYSNAME, --- 233,238 ----- hp->path[0] != '\0' && + #ifdef GENERICPATH + strncmp(hp->path, PATHSYSNAME, + strlen(PATHSYSNAME)) != 0) { + #else /* !GENERICPATH */ strncmp(hp->path, LOCALPATHSYSNAME, *************** *** 234,235 strlen(LOCALPATHSYSNAME)) != 0) { hp->distribution[0] = '\0'; --- 239,241 ----- strlen(LOCALPATHSYSNAME)) != 0) { + #endif /* !GENERICPATH */ hp->distribution[0] = '\0'; Index: header.h Prereq: 2.22 diff -c1 onews/header.h news/header.h *** onews/header.h Sun Jan 15 19:48:58 1989 --- news/header.h Fri Sep 1 18:23:25 1989 *************** *** 4,6 ! /* @(#)header.h 2.22 1/15/89 */ --- 4,6 ----- ! /* @(#)header.h 2.23 9/1/89 */ *************** *** 20,21 char expdate[DATELEN]; /* Expires: */ char ctlmsg[PATHLEN]; /* Control: */ --- 20,22 ----- char expdate[DATELEN]; /* Expires: */ + time_t exptime; /* Expire time in secs */ char ctlmsg[PATHLEN]; /* Control: */ *************** *** 27,29 int intnumlines; /* Integer version */ ! char keywords[BUFLEN]; /* Keywords: */ char summary[BUFLEN]; /* Summary: */ --- 28,30 ----- int intnumlines; /* Integer version */ ! char keywords[MBUFLEN]; /* Keywords: */ char summary[BUFLEN]; /* Summary: */ Index: ifuncs.c Prereq: 2.72 diff -c1 onews/ifuncs.c news/ifuncs.c *** onews/ifuncs.c Wed Jan 18 14:28:50 1989 --- news/ifuncs.c Tue Sep 12 16:58:15 1989 *************** *** 18,20 #ifdef SCCSID ! static char *SccsId = "@(#)ifuncs.c 2.72 1/18/89"; #endif /* SCCSID */ --- 18,20 ----- #ifdef SCCSID ! static char *SccsId = "@(#)ifuncs.c 2.77 9/12/89"; #endif /* SCCSID */ *************** *** 22,23 #include "iparams.h" --- 22,26 ----- #include "iparams.h" + #if defined(BSD4_2) || defined(USG) + #include + #endif /* BSD || USG */ *************** *** 282,284 /* I: append messageid to file. implies F flag */ ! int appmsgid = maynotify && (index(sp->s_flags, 'I') != NULL); --- 285,287 ----- /* I: append messageid to file. implies F flag */ ! int appmsgid = (index(sp->s_flags, 'I') != NULL); *************** *** 284,285 /* allow specification based on size */ --- 287,293 ----- + if (appmsgid && !appfile && !maynotify) { + appmsgid = FALSE; + appfile = TRUE; + } + /* allow specification based on size */ *************** *** 389,391 #endif /* !LOGDIR */ ! BATCHDIR, TRANS, appmsgid ? ".ihave" : ""); } --- 397,400 ----- #endif /* !LOGDIR */ ! BATCHDIR, TRANS, ! (appmsgid && !appfile) ? ".ihave" : ""); } *************** *** 392,393 ofp = fopen(sp->s_xmit, "a"); if (ofp == NULL) --- 401,405 ----- ofp = fopen(sp->s_xmit, "a"); + #ifdef F_SETFL + (void) fcntl(fileno(ofp), F_SETFL, O_APPEND); + #endif /* F_SETFL */ if (ofp == NULL) *************** *** 394,397 xerror("Cannot append to %s", sp->s_xmit); ! fprintf(ofp, "%s", appmsgid ? hh.ident : ! firstbufname); #ifdef MULTICAST --- 406,412 ----- xerror("Cannot append to %s", sp->s_xmit); ! if (appfile && appmsgid) ! fprintf(ofp, "%s\t%s", firstbufname, hh.ident); ! else ! fprintf(ofp, "%s", appmsgid ? hh.ident : ! firstbufname); #ifdef MULTICAST *************** *** 775,777 #else /* O_EXCL */ ! while ((fd=(open(lockname, O_EXCL|O_CREAT, 0) < 0) { #endif /* O_EXCL */ --- 790,792 ----- #else /* O_EXCL */ ! while ((fd=open(lockname, O_EXCL|O_CREAT, 0)) < 0) { #endif /* O_EXCL */ *************** *** 906,910 if (STRCMP(bfr, ngs[i]) == NGUNSEEN) { /* localize? */ ! /* newsgroup 12345 12345 X */ ! /* cp + 01234567890123 */ ! if (!isproc && cp[13] == 'n') uses[i] = NGOK; --- 921,965 ----- if (STRCMP(bfr, ngs[i]) == NGUNSEEN) { /* localize? */ ! /* newsgroup 1234567 1234567 X optional-fname */ ! /* cp + 01234567890123456789 */ ! if (cp[18] == ' ' && cp[19] != '\0') { ! int ok2post = 0; ! char buf2[BUFLEN], pbuf[MBUFLEN]; ! register char *cp2, *cp3; ! /* check for private groups ! * only sites listed in the file ! * specified can post ! */ ! cp2 = index(&cp[19], '\n'); ! if (cp2) ! *cp2 = '\0'; ! cp2 = pbuf; ! cp3 = header.path; ! while (*cp3 &&index(NETCHRS, *cp3) == 0) ! *cp2++ = *cp3++; ! *cp2 = '\0'; ! f = xfopen(&cp[19], "r"); ! while (!ok2post) { ! register int c; ! cp2 = buf2; ! while ((c=getc(f)) != EOF) { ! if (c == '\n') { ! *cp2 = '\0'; ! break; ! } ! *cp2++ = c; ! } ! if (c == EOF) ! break; ! if (STRCMP(pbuf, buf2) == 0) { ! ok2post = 1; ! break; ! } ! } ! (void) fclose(f); ! if (!ok2post) { ! logerr("%s is not authorized to post to %s", pbuf, ngs[i]); ! return TRUE; ! } ! } ! if (!isproc && cp[17] == 'n') { uses[i] = NGOK; *************** *** 910,912 uses[i] = NGOK; ! else { if (uses[i] < NGALIAS) --- 965,967 ----- uses[i] = NGOK; ! } else { if (uses[i] < NGALIAS) *************** *** 913,915 uses[i] = NGALIAS; ! if (cp[13] == 'm') { strcpy(is_mod, bfr); --- 968,970 ----- uses[i] = NGALIAS; ! if (cp[17] == 'm') { strcpy(is_mod, bfr); *************** *** 1150,1156 ! #undef NGUNSEEN 0 ! #undef NGOK 1 ! #undef NGALIAS 2 ! #undef NGBUGS 3 ! #undef NGABUGS 4 --- 1205,1211 ----- ! #undef NGUNSEEN ! #undef NGOK ! #undef NGALIAS ! #undef NGBUGS ! #undef NGABUGS *************** *** 1176,1179 while ((!ret) && fscanf(mfd, "%[^:]:%s\n", mgrp, mlist) != EOF) { - if (feof(mfd)) - break; if (mgrp[0] == '#') --- 1231,1232 ----- while ((!ret) && fscanf(mfd, "%[^:]:%s\n", mgrp, mlist) != EOF) { if (mgrp[0] == '#') *************** *** 1400,1402 freopen(tfilename, "r", infp); ! (void) free(cp); return; /* from checkbatch as if --- 1453,1456 ----- freopen(tfilename, "r", infp); ! setbuf(infp, (char *) NULL); ! (void) free(cp); return; /* from checkbatch as if Index: inews.c Prereq: 2.91 diff -c1 onews/inews.c news/inews.c *** onews/inews.c Tue Jan 24 15:24:00 1989 --- news/inews.c Fri Sep 1 18:23:27 1989 *************** *** 19,21 #ifdef SCCSID ! static char *SccsId = "@(#)inews.c 2.91 1/24/89"; #endif /* SCCSID */ --- 19,21 ----- #ifdef SCCSID ! static char *SccsId = "@(#)inews.c 2.92 9/1/89"; #endif /* SCCSID */ *************** *** 55,56 int spool_news = DONT_SPOOL; --- 55,58 ----- int spool_news = DONT_SPOOL; + static char *artlinks[32]; + static int linkcount; *************** *** 223,226 #ifdef NICENESS ! if (nice(0) < NICENESS) ! (void) nice(NICENESS); #endif /* NICENESS */ --- 225,228 ----- #ifdef NICENESS ! if ((i=nice(0)) < NICENESS) ! (void) nice(NICENESS-i); #endif /* NICENESS */ *************** *** 237,243 if (space()) { /* check disk space */ ! mode = PROC; ! logerr("Out of space in %s. Saving for later processing.", ! SPOOLDIR); ! dospool((char *)NULL, FALSE); ! /* NOT REACHED */ } --- 239,242 ----- if (space()) { /* check disk space */ ! spool_news = DOSPOOL; ! logerr("Out of space in %s.", SPOOLDIR); } *************** *** 306,308 && uid == 0 /* allow root to set name in any case */ ! #endif /* !DOGETUSER */ ) { --- 305,307 ----- && uid == 0 /* allow root to set name in any case */ ! #endif /* DOGETUSER */ ) { *************** *** 809,812 - static char *artlinks[32]; - static int linkcount; /* --- 808,809 ----- /* *************** *** 837,839 if (STRCMP(bfr, ngname) == 0) { ! if (ngsize < 0 || ngsize > 99998) { logerr("found bad ngsize %ld ng %s, setting to 1", ngsize, bfr); --- 834,836 ----- if (STRCMP(bfr, ngname) == 0) { ! if (ngsize < 0 || ngsize > 9999998L) { logerr("found bad ngsize %ld ng %s, setting to 1", ngsize, bfr); *************** *** 906,909 /* ! * Has to be same size as old because of %05d. ! * This will overflow with 99999 articles. */ --- 903,906 ----- /* ! * Has to be same size as old because of %07d. ! * This will overflow with 9,999,999 articles. */ *************** *** 909,911 */ ! fprintf(actfp, "%s %05ld", ngname, ngsize+1); #if defined(USG) || defined(MG1) --- 906,908 ----- */ ! fprintf(actfp, "%s %07ld", ngname, ngsize+1); #if defined(USG) || defined(MG1) *************** *** 946,948 struct srec srec; /* struct for sys file lookup */ - struct tm *tm, *gmtime(); int is_invalid = FALSE; --- 943,944 ----- struct srec srec; /* struct for sys file lookup */ int is_invalid = FALSE; *************** *** 948,949 int is_invalid = FALSE; int exitcode = 0; --- 944,946 ----- int is_invalid = FALSE; + int junked = FALSE; int exitcode = 0; *************** *** 963,974 ! (void) time(&now); ! tm = gmtime(&now); ! if (header.expdate[0]) ! addhist(" "); ! #ifdef USG ! sprintf(bfr,"%2.2d/%2.2d/%d %2.2d:%2.2d\t", ! #else /* !USG */ ! sprintf(bfr,"%02d/%02d/%d %02d:%02d\t", ! #endif /* !USG */ ! tm->tm_mon+1, tm->tm_mday, tm->tm_year,tm->tm_hour, tm->tm_min); addhist(bfr); --- 960,962 ----- ! sprintf(bfr, "%ld", time(&now)); addhist(bfr); *************** *** 974,975 addhist(bfr); log("%s %s ng %s subj '%s' from %s", spool_news != DONT_SPOOL --- 962,968 ----- addhist(bfr); + if (header.expdate[0]) { + sprintf(bfr,"~%ld",(long) cgtdate(header.expdate)); + addhist(bfr); + } + addhist("\t"); log("%s %s ng %s subj '%s' from %s", spool_news != DONT_SPOOL *************** *** 987,989 header.nbuf); ! if (localize("junk")) savehist(histline); --- 980,982 ----- header.nbuf); ! if (localize("junk")) { savehist(histline); *************** *** 989,990 savehist(histline); exitcode = 1; --- 982,985 ----- savehist(histline); + junked = TRUE; + } exitcode = 1; *************** *** 996,998 logerr("Orphaned Response, moved to junk"); ! if (localize("junk")) savehist(histline); --- 991,993 ----- logerr("Orphaned Response, moved to junk"); ! if (localize("junk")) { savehist(histline); *************** *** 998,999 savehist(histline); exitcode = 1; --- 993,998 ----- savehist(histline); + /* + junked = TRUE; + */ + } exitcode = 1; *************** *** 1005,1007 logerr("Article too old, moved to junk"); ! if (localize("junk")) savehist(histline); --- 1004,1006 ----- logerr("Article too old, moved to junk"); ! if (localize("junk")) { savehist(histline); *************** *** 1007,1008 savehist(histline); exitcode = 1; --- 1006,1009 ----- savehist(histline); + junked = TRUE; + } exitcode = 1; *************** *** 1220,1222 xxit((mode == PROC && filename[0] == '\0') ? 0 : ! (exitcode < 0 ? 0 : exitcode)); } --- 1221,1223 ----- xxit((mode == PROC && filename[0] == '\0') ? 0 : ! (exitcode < 0 || junked ? 0 : exitcode)); } Index: makeactive.sh Prereq: 1.27 diff -c1 onews/makeactive.sh news/makeactive.sh *** onews/makeactive.sh Tue Jan 24 17:05:21 1989 --- news/makeactive.sh Thu Sep 7 17:54:30 1989 *************** *** 2,4 : "Usage: sh makeactive.sh LIBDIR SPOOLDIR NEWSUSR NEWSGRP" ! : '@(#)makeactive 1.27 1/24/89' LIBDIR=$1 --- 2,4 ----- : "Usage: sh makeactive.sh LIBDIR SPOOLDIR NEWSUSR NEWSGRP" ! : '@(#)makeactive 1.29 9/7/89' LIBDIR=$1 *************** *** 13,14 comp.ai.nlang-know-rep Natural Language and Knowledge Representation. (Moderated) comp.ai.vision Artificial Intelligence Vision Research. (Moderated) --- 13,15 ----- comp.ai.nlang-know-rep Natural Language and Knowledge Representation. (Moderated) + comp.ai.shells Artificial intelligence applied to shells. (Moderated) comp.ai.vision Artificial Intelligence Vision Research. (Moderated) *************** *** 56,58 comp.lang.icon Topics related to the ICON programming language. ! comp.lang.idl IBL (Interface Description Language) related topics. comp.lang.lisp Discussion about LISP. --- 57,59 ----- comp.lang.icon Topics related to the ICON programming language. ! comp.lang.idl IDL (Interface Description Language) related topics. comp.lang.lisp Discussion about LISP. *************** *** 80,81 comp.mail.multi-media Multimedia Mail. comp.mail.sendmail Configuring and using the BSD sendmail agent. --- 81,83 ----- comp.mail.multi-media Multimedia Mail. + comp.mail.mush The Mail User's Shell (MUSH). comp.mail.sendmail Configuring and using the BSD sendmail agent. *************** *** 94,95 comp.os.eunice The SRI Eunice system. comp.os.minix Discussion of Tanenbaum's MINIX system. --- 96,98 ----- comp.os.eunice The SRI Eunice system. + comp.os.mach The MACH OS from CMU & other places. comp.os.minix Discussion of Tanenbaum's MINIX system. *************** *** 111,112 comp.protocols.iso.x400.gateway X400 mail gateway discussions. (Moderated) comp.protocols.kermit Info about the Kermit package. (Moderated) --- 114,116 ----- comp.protocols.iso.x400.gateway X400 mail gateway discussions. (Moderated) + comp.protocols.kerberos The Kerberos authentification server. comp.protocols.kermit Info about the Kermit package. (Moderated) *************** *** 119,120 comp.protocols.tcp-ip.ibmpc TCP/IP for IBM(-like) personal computers. comp.risks Risks to the public from computers & users. (Moderated) --- 123,125 ----- comp.protocols.tcp-ip.ibmpc TCP/IP for IBM(-like) personal computers. + comp.realtime Issues related to real-time computing. comp.risks Risks to the public from computers & users. (Moderated) *************** *** 124,125 comp.society.women Women's roles and problems in computing (Moderated) comp.software-eng Software Engineering and related topics. --- 129,131 ----- comp.society.women Women's roles and problems in computing (Moderated) + comp.soft-sys.andrew The Andrew system from CMU. comp.software-eng Software Engineering and related topics. *************** *** 133,134 comp.sources.misc Posting of software . (Moderated) comp.sources.unix Postings of complete, UNIX-oriented sources. (Moderated) --- 139,141 ----- comp.sources.misc Posting of software . (Moderated) + comp.sources.sun Software for Sun workstations. (Moderated) comp.sources.unix Postings of complete, UNIX-oriented sources. (Moderated) *************** *** 141,142 comp.std.unix Discussion for the P1003 committee on UNIX. (Moderated) comp.sys.amiga Commodore Amiga: info&uses, but no programs. --- 148,150 ----- comp.std.unix Discussion for the P1003 committee on UNIX. (Moderated) + comp.sw.components Software components and related technology. comp.sys.amiga Commodore Amiga: info&uses, but no programs. *************** *** 161,162 comp.sys.intel.ipsc310 Anything related to Xenix on an Intel 310. comp.sys.m6809 Discussion about 6809's. --- 169,171 ----- comp.sys.intel.ipsc310 Anything related to Xenix on an Intel 310. + comp.sys.isis The ISIS distributed system from Cornell. comp.sys.m6809 Discussion about 6809's. *************** *** 169,170 comp.sys.masscomp The Masscomp line of computers. (Moderated) comp.sys.misc Discussion about computers of all kinds. --- 178,180 ----- comp.sys.masscomp The Masscomp line of computers. (Moderated) + comp.sys.mips Systems based on MIPS chips. comp.sys.misc Discussion about computers of all kinds. *************** *** 202,203 comp.unix.cray Cray computers and their operating systems. comp.unix.microport Discussion of Microport's UNIX. --- 212,214 ----- comp.unix.cray Cray computers and their operating systems. + comp.unix.i386 Versions of Unix running on Intel 80386-based boxes. comp.unix.microport Discussion of Microport's UNIX. *************** *** 204,206 comp.unix.questions UNIX neophytes group. ! comp.unix.ultrix Discussions about DEC's Ultrix. (Moderated) comp.unix.wizards Discussions, bug reports, and fixes on and for UNIX. --- 215,217 ----- comp.unix.questions UNIX neophytes group. ! comp.unix.ultrix Discussions about DEC's Ultrix. comp.unix.wizards Discussions, bug reports, and fixes on and for UNIX. *************** *** 207,208 comp.unix.xenix Discussion about the Xenix OS. comp.windows.misc Various issues about windowing systems. --- 218,220 ----- comp.unix.xenix Discussion about the Xenix OS. + comp.virus Computer viruses & security. (Moderated) comp.windows.misc Various issues about windowing systems. *************** *** 209,211 comp.windows.ms Window systems under MS/DOS. ! comp.windows.news Sun Microsystems' NewS window system. comp.windows.x Discussion about the X Window System. --- 221,223 ----- comp.windows.ms Window systems under MS/DOS. ! comp.windows.news Sun Microsystems' NeWS window system. comp.windows.x Discussion about the X Window System. *************** *** 213,214 misc.consumers.house Discussion about owning and maintaining a house. misc.forsale Short, tasteful postings about items for sale. --- 225,227 ----- misc.consumers.house Discussion about owning and maintaining a house. + misc.emerg-services Forum for paramedics & other first responders. misc.forsale Short, tasteful postings about items for sale. *************** *** 216,217 misc.headlines Current interest: drug testing, terrorism, etc. misc.invest Investments and the handling of money. --- 229,231 ----- misc.headlines Current interest: drug testing, terrorism, etc. + misc.headlines.unitex International news from the UN & related. (Moderated) misc.invest Investments and the handling of money. *************** *** 230,231 news.announce.important General announcements of interest to all. (Moderated) news.announce.newusers Explanatory postings for new users. (Moderated) --- 244,246 ----- news.announce.important General announcements of interest to all. (Moderated) + news.announce.newgroups Calls for newgroups & announcements of same. (Moderated) news.announce.newusers Explanatory postings for new users. (Moderated) *************** *** 236,237 news.newsites Postings of new site announcements. news.software.b Discussion about B-news-compatible software. --- 251,254 ----- news.newsites Postings of new site announcements. + news.newusers.questions Q & A for users new to the Usenet. + news.software.anu-news VMS B-news software from Australian National Univ. news.software.b Discussion about B-news-compatible software. *************** *** 253,254 rec.arts.tv.soaps Postings about soap operas. rec.arts.wobegon "A Prairie Home Companion" radio show discussion. --- 270,272 ----- rec.arts.tv.soaps Postings about soap operas. + rec.arts.tv.uk Discussions of telly shows from the UK. rec.arts.wobegon "A Prairie Home Companion" radio show discussion. *************** *** 259,260 rec.aviation Aviation rules, means, and methods. rec.bicycles Bicycles, related products and laws. --- 277,279 ----- rec.aviation Aviation rules, means, and methods. + rec.backcountry Activities in the Great Outdoors. rec.bicycles Bicycles, related products and laws. *************** *** 286,287 rec.ham-radio.packet Discussion about packet radio setups. rec.humor Jokes and the like. May be somewhat offensive. --- 305,307 ----- rec.ham-radio.packet Discussion about packet radio setups. + rec.ham-radio.swap Offers to trade and swap radio equipment. rec.humor Jokes and the like. May be somewhat offensive. *************** *** 299,300 rec.music.classical Discussion about classical music. rec.music.folk Folks discussing folk music of various sorts. --- 319,322 ----- rec.music.classical Discussion about classical music. + rec.music.dementia Discussion of comedy and novelty music. + rec.music.dylan Discussion of Bob's works & music. rec.music.folk Folks discussing folk music of various sorts. *************** *** 304,305 rec.music.misc Music lovers' group. rec.music.synth Synthesizers and computer music. --- 326,328 ----- rec.music.misc Music lovers' group. + rec.music.newage "New Age" music discussions. rec.music.synth Synthesizers and computer music. *************** *** 311,313 rec.scuba Hobbyists interested in SCUBA diving. ! rec.skiing Hobbyists interested in skiing. rec.skydiving Hobbyists interested in skydiving. --- 334,336 ----- rec.scuba Hobbyists interested in SCUBA diving. ! rec.skiing Hobbyists interested in snow skiing. rec.skydiving Hobbyists interested in skydiving. *************** *** 321,322 rec.woodworking Hobbyists interested in woodworking. sci.astro Astronomy discussions and information. --- 344,346 ----- rec.woodworking Hobbyists interested in woodworking. + sci.aeronautics The science of aeronautics & related technology. sci.astro Astronomy discussions and information. *************** *** 324,325 sci.bio.technology Any topic relating to biotechnology. sci.crypt Different methods of data en/decryption. --- 348,350 ----- sci.bio.technology Any topic relating to biotechnology. + sci.chem Chemistry and related sciences. sci.crypt Different methods of data en/decryption. *************** *** 325,326 sci.crypt Different methods of data en/decryption. sci.electronics Circuits, theory, electrons and discussions. --- 350,352 ----- sci.crypt Different methods of data en/decryption. + sci.edu Science education. sci.electronics Circuits, theory, electrons and discussions. *************** *** 326,327 sci.electronics Circuits, theory, electrons and discussions. sci.lang Natural languages, communication, etc. --- 352,355 ----- sci.electronics Circuits, theory, electrons and discussions. + sci.energy Discussions about energy, science & technology. + sci.environment Discussions about the environment and ecology. sci.lang Natural languages, communication, etc. *************** *** 335,336 sci.med.aids AIDS: treatment, pathology/biology of HIV, prevention. (Moderated) sci.military Discussion about science & the military. (Moderated) --- 363,365 ----- sci.med.aids AIDS: treatment, pathology/biology of HIV, prevention. (Moderated) + sci.med.physics Issues of physics in medical testing/care. sci.military Discussion about science & the military. (Moderated) *************** *** 341,342 sci.physics Physical laws, properties, etc. sci.psychology Topics related to psychology. --- 370,372 ----- sci.physics Physical laws, properties, etc. + sci.physics.fusion Info on fusion, esp. "cold" fusion. sci.psychology Topics related to psychology. *************** *** 343,344 sci.research Research methods, funding, ethics, and whatever. sci.space Space, space programs, space related research, etc. --- 373,375 ----- sci.research Research methods, funding, ethics, and whatever. + sci.skeptic Skeptics discussing psuedo-science. sci.space Space, space programs, space related research, etc. *************** *** 346,347 soc.college College, college activities, campus life, etc. soc.culture.african Discussions about Africa & things African. --- 377,379 ----- soc.college College, college activities, campus life, etc. + soc.couples Discussions for couples (cf. soc.singles). soc.culture.african Discussions about Africa & things African. *************** *** 348,349 soc.culture.arabic Technological & cultural issues, *not* politics. soc.culture.celtic Group about Celts (*not* basketball!). --- 380,382 ----- soc.culture.arabic Technological & cultural issues, *not* politics. + soc.culture.asian.american Issues & discussion about Asian-Americans. soc.culture.celtic Group about Celts (*not* basketball!). *************** *** 352,353 soc.culture.greek Group about Greeks. soc.culture.indian Group for discussion about India & things Indian. --- 385,387 ----- soc.culture.greek Group about Greeks. + soc.culture.hongkong Discussions pertaining to Hong Kong. soc.culture.indian Group for discussion about India & things Indian. *************** *** 356,357 soc.culture.misc Group for discussion about other cultures. soc.human-nets Computer aided communications digest. (Moderated) --- 390,395 ----- soc.culture.misc Group for discussion about other cultures. + soc.culture.nordic Discussion about culture up north. + soc.culture.taiwan Discussion about things Taiwanese. + soc.culture.turkish Discussion about things Turkish. + soc.feminism Discussion of feminism & feminist issues. (Moderated) soc.human-nets Computer aided communications digest. (Moderated) *************** *** 364,365 soc.religion.christian Christianity and related topics. (Moderated) soc.roots Genealogical matters. --- 402,404 ----- soc.religion.christian Christianity and related topics. (Moderated) + soc.rights.human Human rights & activism (e.g., Amnesty International). soc.roots Genealogical matters. *************** *** 366,368 soc.singles Newsgroup for single people, their activities, etc. ! soc.women Women's rights, discrimination, etc. talk.abortion All sorts of discussions and arguments on abortion. --- 405,407 ----- soc.singles Newsgroup for single people, their activities, etc. ! soc.women Issues related to women, their problems & relationships. talk.abortion All sorts of discussions and arguments on abortion. *************** *** 371,372 talk.philosophy.misc Philosophical musings on all topics. talk.politics.mideast Discussion & debate over Middle Eastern events. --- 410,412 ----- talk.philosophy.misc Philosophical musings on all topics. + talk.politics.guns The politics of firearm ownership and (mis)use. talk.politics.mideast Discussion & debate over Middle Eastern events. *************** *** 375,376 talk.politics.theory Theory of politics and political systems. talk.religion.misc Religious, ethical, & moral implications. --- 415,417 ----- talk.politics.theory Theory of politics and political systems. + talk.rape Discussions on stopping rape; not to be crossposted. talk.religion.misc Religious, ethical, & moral implications. *************** *** 384,387 cat <<'E_O_F' >>$LIBDIR/active ! control 00000 00001 ! junk 00000 00001 E_O_F --- 425,428 ----- cat <<'E_O_F' >>$LIBDIR/active ! control 0000000 0000000 ! junk 0000000 0000000 E_O_F *************** *** 389,390 else : make sure it is in the new format --- 430,433 ----- else + : increase max article number if necessary + sed 's/ \([0-9][0-9][0-9][0-9][0-9]\) \([0-9][0-9][0-9][0-9][0-9]\) / 00\1 00\2 /' $LIBDIR/active>$LIBDIR/nactive && mv $LIBDIR/nactive $LIBDIR/active : make sure it is in the new format *************** *** 400,402 2) ed - $LIBDIR/active << 'EOF' ! 1,$s/$/ 00001/ w --- 443,445 ----- 2) ed - $LIBDIR/active << 'EOF' ! 1,$s/$/ 0000000/ w *************** *** 431 rm -f /tmp/$$* --- 474,482 ----- rm -f /tmp/$$* + + nlines=`wc -l < $LIBDIR/active` + set - `grep '^#define LINES' defs.h` + if test $nlines -gt $3 + then + echo "WARNING: active file has more than $3 lines" + echo "Increase LINES in defs.h" + fi Index: params.h Prereq: 2.31 diff -c1 onews/params.h news/params.h *** onews/params.h Thu Jan 19 00:06:42 1989 --- news/params.h Fri Sep 1 18:23:28 1989 *************** *** 4,6 ! /* @(#)params.h 2.31 1/19/89 */ --- 4,6 ----- ! /* @(#)params.h 2.32 9/1/89 */ *************** *** 133,137 ! #ifdef M_XENIX ! #define LOCKING ! #endif /* defined M_XENIX */ --- 133,137 ----- ! #if defined(M_XENIX) && !defined(LOCKF) && !defined(LOCKING) ! #define LOCKING ! #endif /* M_XENIX */ *************** *** 191,193 #define STRCMP(a,b) ((*(a) != *(b)) ? (*(a)-*(b)) : strcmp((a)+1, (b)+1)) ! #define STRNCMP(a,b,n) ((*(a) != *(b)) ? (*(a)-*(b)) : strncmp(a, b, n)) extern char charmap[]; --- 191,193 ----- #define STRCMP(a,b) ((*(a) != *(b)) ? (*(a)-*(b)) : strcmp((a)+1, (b)+1)) ! #define STRNCMP(a,b,n) ((*(a) != *(b)) ? (int)(*(a)-*(b)) : strncmp(a, b, n)) extern char charmap[]; Index: patchlevel.h Prereq: 17 diff -c1 onews/patchlevel.h news/patchlevel.h *** onews/patchlevel.h Tue Jan 24 15:49:36 1989 --- news/patchlevel.h Tue Sep 12 17:02:43 1989 *************** *** 1,2 ! #define PATCHLEVEL 17 --- 1,2 ----- ! #define PATCHLEVEL 18 *************** *** 2,3 ! #define NEWS_VERSION "B 2.11 1/24/89" --- 2,3 ----- ! #define NEWS_VERSION "B 2.11 9/12/89" Index: postnews.c Prereq: 1.37 diff -c1 onews/postnews.c news/postnews.c *** onews/postnews.c Sun Jan 15 19:49:03 1989 --- news/postnews.c Fri Sep 1 18:23:31 1989 *************** *** 19,21 #ifdef SCCSID ! static char *SccsId = "@(#)postnews.c 1.37 1/15/89"; #endif /* SCCSID */ --- 19,21 ----- #ifdef SCCSID ! static char *SccsId = "@(#)postnews.c 1.40 9/1/89"; #endif /* SCCSID */ *************** *** 43,45 char newsgroups[BUFLEN]; ! char followupto[BUFLEN]; char isfrom[BUFLEN]; --- 43,45 ----- char newsgroups[BUFLEN]; ! char followto[BUFLEN]; char isfrom[BUFLEN]; *************** *** 46,48 char msgid[BUFLEN]; ! char keywords[BUFLEN]; char summary[BUFLEN]; --- 46,48 ----- char msgid[BUFLEN]; ! char keywords[MBUFLEN]; char summary[BUFLEN]; *************** *** 457,460 ! if (followupto[0] != '\0') ! fprintf(tf, "Followup-To: %s\n", followupto); --- 457,460 ----- ! if (followto[0] != '\0') ! fprintf(tf, "Followup-To: %s\n", followto); *************** *** 652,654 } ! if (index(newsgroups, NGDELIM) != NULL && followupto[0] == '\0') { printf("Your article is being posted to multiple newsgroups.\n"); --- 652,654 ----- } ! if (index(newsgroups, NGDELIM) != NULL && followto[0] == '\0') { printf("Your article is being posted to multiple newsgroups.\n"); *************** *** 657,662 printf("(If responses should be mailed to you, enter \"poster\")\n"); ! getpr("Followup-To: ", followupto); ! if (followupto[0] != '\0') ! modify_article(tempfname, "Followup-To: ", followupto, ! APPEND); } --- 657,662 ----- printf("(If responses should be mailed to you, enter \"poster\")\n"); ! getpr("Followup-To: ", followto); ! if (followto[0] != '\0') ! modify_article(tempfname, "Followup-To: ", followto, ! REPLACE); } *************** *** 974,976 default: ! printf("Active file (%s) corrupted. ", ACTIVE); byebye("Seek help!"); --- 974,976 ----- default: ! printf("Active file corrupt: %s", ng_read); byebye("Seek help!"); Index: readnews.c Prereq: 2.33 diff -c1 onews/readnews.c news/readnews.c *** onews/readnews.c Sun Oct 18 18:04:20 1987 --- news/readnews.c Thu Sep 7 17:54:31 1989 *************** *** 5,7 #ifdef SCCSID ! static char *SccsId = "@(#)readnews.c 2.33 10/15/87"; #endif /* SCCSID */ --- 5,7 ----- #ifdef SCCSID ! static char *SccsId = "@(#)readnews.c 2.34 9/7/89"; #endif /* SCCSID */ *************** *** 126,128 if (++line > LINES) ! xerror("Too many options."); if ((rcline[line] = malloc((unsigned)(strlen(ptr) + 1))) == NULL) --- 126,128 ----- if (++line > LINES) ! xerror("Too many options. Increase LINES in defs.h"); if ((rcline[line] = malloc((unsigned)(strlen(ptr) + 1))) == NULL) *************** *** 170,172 if (++line > LINES) ! xerror("Too many options."); if ((rcline[line] = malloc((unsigned)(strlen(ptr) + 1))) == NULL) --- 170,172 ----- if (++line > LINES) ! xerror("Too many options. Increase LINES in defs.h"); if ((rcline[line] = malloc((unsigned)(strlen(ptr) + 1))) == NULL) Index: recmail.c Prereq: 1.18 diff -c1 onews/recmail.c news/recmail.c *** onews/recmail.c Tue Jan 17 13:09:30 1989 --- news/recmail.c Tue Sep 12 16:58:15 1989 *************** *** 18,20 * It is similar to sendmail -t, but only assumes /bin/mail. ! * To use your own mailer, e. g. nmail, compile with -DMAILER=my_mailer. */ --- 18,20 ----- * It is similar to sendmail -t, but only assumes /bin/mail. ! * To use your own mailer, e. g. nmail, compile with -DMAILPROGRAM=my_mailer. */ *************** *** 22,24 #ifdef SCCSID ! static char *SccsId = "@(#)recmail.c 1.18 1/17/89"; #endif /* SCCSID */ --- 22,24 ----- #ifdef SCCSID ! static char *SccsId = "@(#)recmail.c 1.19 9/12/89"; #endif /* SCCSID */ *************** *** 27,30 ! #ifndef MAILER ! #define MAILER "/bin/mail" #endif --- 27,30 ----- ! #ifndef MAILPROGRAM ! #define MAILPROGRAM "/bin/mail" #endif *************** *** 30,32 #endif ! char mailer[] = MAILER; --- 30,32 ----- #endif ! char mailer[] = MAILPROGRAM; Index: rextern.c Prereq: 2.17 diff -c1 onews/rextern.c news/rextern.c *** onews/rextern.c Fri Nov 21 16:04:49 1986 --- news/rextern.c Tue Sep 12 16:58:15 1989 *************** *** 5,7 #ifdef SCCSID ! static char *SccsId = "@(#)rextern.c 2.17 11/21/86"; #endif /* SCCSID */ --- 5,7 ----- #ifdef SCCSID ! static char *SccsId = "@(#)rextern.c 2.18 9/12/89"; #endif /* SCCSID */ *************** *** 47,49 - #ifndef MAILER char *MAILER; --- 47,48 ----- char *MAILER; *************** *** 49,52 char *MAILER; - #endif - char *PAGER = ""; --- 48,49 ----- char *MAILER; char *PAGER = ""; Index: rfuncs.c Prereq: 2.47 diff -c1 onews/rfuncs.c news/rfuncs.c *** onews/rfuncs.c Thu Jan 19 00:06:44 1989 --- news/rfuncs.c Thu Sep 7 17:54:32 1989 *************** *** 18,20 #ifdef SCCSID ! static char *SccsId = "@(#)rfuncs.c 2.47 1/19/89"; #endif /* SCCSID */ --- 18,20 ----- #ifdef SCCSID ! static char *SccsId = "@(#)rfuncs.c 2.49 9/7/89"; #endif /* SCCSID */ *************** *** 421,423 if (++line > LINES) ! xerror("Too many newsgroups"); ptr[0] = oldptr; --- 421,423 ----- if (++line > LINES) ! xerror("Too many newsgroups. Increase LINES in defs.h"); ptr[0] = oldptr; *************** *** 654,656 &tp->minart, &tp->yn) != 4) ! xerror("Active file corrupt"); delta = tp->maxart - tp->minart; --- 654,656 ----- &tp->minart, &tp->yn) != 4) ! xerror("Active file corrupt: %s", aline); delta = tp->maxart - tp->minart; Index: sendbatch.sh Prereq: 1.20 diff -c1 onews/sendbatch.sh news/sendbatch.sh *** onews/sendbatch.sh Sun Jan 15 23:04:11 1989 --- news/sendbatch.sh Fri Sep 1 18:23:33 1989 *************** *** 1,2 ! : '@(#)sendbatch.sh 1.20 1/15/89' --- 1,2 ----- ! : '@(#)sendbatch.sh 1.21 9/1/89' *************** *** 17,19 ! for rmt in $* do --- 17,19 ----- ! for rmt do *************** *** 61,62 continue;; esac --- 61,64 ----- continue;; + -f*) MINDF=`expr "$rmt" : '-f\(.*\)'` + continue;; esac *************** *** 78,80 ! if test -n "$MAXBATCH" then --- 80,82 ----- ! if test -n "$MAXBATCH" -a -d /usr/spool/uucp/$rmt then *************** *** 106,108 sentbytes=0 ! while test $? -eq 0 -a $sentbytes -le $MAXBATCH -a \ \( \( $sentbytes -eq 0 -a -s $BATCH/$rmt \) -o \ --- 108,110 ----- sentbytes=0 ! while test $? -eq 0 -a $sentbytes -le "$MAXBATCH" -a \ \( \( $sentbytes -eq 0 -a -s $BATCH/$rmt \) -o \ Index: virtterm.c Prereq: 1.15 diff -c1 onews/virtterm.c news/virtterm.c *** onews/virtterm.c Sun Jan 15 19:49:06 1989 --- news/virtterm.c Fri Sep 1 18:23:35 1989 *************** *** 7,9 #ifdef SCCSID ! static char *SccsId = "@(#)virtterm.c 1.15 1/15/89"; #endif /* SCCSID */ --- 7,9 ----- #ifdef SCCSID ! static char *SccsId = "@(#)virtterm.c 1.16 9/1/89"; #endif /* SCCSID */ *************** *** 1003,1004 AM = XN = 1; } --- 1003,1025 ----- AM = XN = 1; + } + free((char *) _virt[0].l); + free((char *) _virt); + { + char *thelines; + int i; + char *malloc(); + + thelines = malloc(2 * ROWS * COLS); + _virt = (struct line *)malloc(2 * ROWS * sizeof (struct line)); + _actual = _virt + ROWS; + for (i = 0; i < ROWS; i++) { + _virt[i].len = 0; + _virt[i].flags = 0; + _actual[i].len = 0; + _actual[i].flags = 0; + _virt[i].l = thelines; + thelines += COLS; + _actual[i].l = thelines; + thelines += COLS; + } } Index: visual.c Prereq: 1.44 diff -c1 onews/visual.c news/visual.c *** onews/visual.c Sun Jan 22 22:18:19 1989 --- news/visual.c Tue Sep 12 16:58:17 1989 *************** *** 6,8 #ifdef SCCSID ! static char *SccsId = "@(#)visual.c 1.44 1/22/89"; #endif /* SCCSID */ --- 6,8 ----- #ifdef SCCSID ! static char *SccsId = "@(#)visual.c 1.46 9/12/89"; #endif /* SCCSID */ *************** *** 170,171 static FILE *fp; /* current article to be printed*/ --- 170,172 ----- static FILE *fp; /* current article to be printed*/ + static char savebuf[BUFLEN]; *************** *** 351,352 int i; long nart, Hoffset; --- 352,354 ----- int i; + int sawlong; long nart, Hoffset; *************** *** 520,522 { - static char savebuf[BUFLEN]; int wflags; --- 522,523 ----- { int wflags; *************** *** 762,763 (void) fseek(fp, 0L, 0); for (i = 0; i < ARTWLEN; i++) { --- 763,765 ----- (void) fseek(fp, 0L, 0); + sawlong = FALSE; for (i = 0; i < ARTWLEN; i++) { *************** *** 765,767 break; ! if (linebuf[0] == '\n') break; --- 767,769 ----- break; ! if (linebuf[0] == '\n' && !sawlong) break; *************** *** 767,768 break; linebuf[COLS] = '\0'; --- 769,771 ----- break; + sawlong = index(linebuf, '\n') == NULL; linebuf[COLS] = '\0'; -- Arnold Robbins -- The Basement Computer | Laundry increases Internet: arnold@skeeve.ATL.GA.US | exponentially in the UUCP: { gatech, gladys, emory }!skeeve!arnold | number of children. Bitnet: Forget it. Get on a real network. | -- Miriam Hartholz