usenet@ucbvax.UUCP (07/07/83)
diff -r -c 2.10/README 2.10.1/README *** 2.10/README Wed May 4 14:07:36 1983 --- 2.10.1/README Fri Jun 24 16:43:28 1983 *************** *** 1,3 Notes for 2.10: There are some incompatiblities between 2.9 and 2.10. None of them --- 1,34 ----- + Notes for 2.10.1: + + This distribution is an interim distribution, fixing some serious bugs + found in 2.10, but providing no user enhancements. It is provided since + 2.11 will not be out for a few months. + + The : prompt at the end of a long article has proven to be very unpopular. + It will go away in 2.11 in favor of a mechanism allowing the user to + receive a command prompt after headers, after the body, or both. + If you wish to disable it in the meantime, you can enable NOCOLON in + defs.h. Be warned that NOCOLON will not be present in 2.11. + A fancier method providing a -D option, to let the users disable colon + individually, has been posted, but is beyond the scope of this distribution, + since it would involve changing the documentation and help files, + and is a temporary measure. + + Preview of 2.11: + 2.11 will incorporate + A large number of less serious bug fixes and improvements. + Several enhancements that have been posted to the net, + such as the recursive expire options. + A considerably revamped user interface which sorts newsgroups + to put discussions together (as much as possible, + given the nature of how people follow things up). + The msgs and mail interfaces are more cleanly integrated. + Turning off discussions is a possibility. + Some kind of screen oriented interface will probably be + included as an alternative to readnews. + Possible improved batching software, as it develops. + No significant enhancements to the inews portion are planned for 2.11. + Notes for 2.10: There are some incompatiblities between 2.9 and 2.10. None of them Common subdirectories: 2.10/config and 2.10.1/config Common subdirectories: 2.10/cvt and 2.10.1/cvt Common subdirectories: 2.10/doc and 2.10.1/doc Common subdirectories: 2.10/man and 2.10.1/man Common subdirectories: 2.10/misc and 2.10.1/misc Common subdirectories: 2.10/src and 2.10.1/src Common subdirectories: 2.10/uucp and 2.10.1/uucp Only in 2.10.1/cvt: newactive.sh diff -r -c 2.10/src/Makefile.usg 2.10.1/src/Makefile.usg *** 2.10/src/Makefile.usg Wed Mar 30 15:39:52 1983 --- 2.10.1/src/Makefile.usg Sat Jun 25 00:31:33 1983 *************** *** 55,61 Makefile: Makefile.usg localize.sh sh localize.sh ! install: sh install.usg $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) make cp --- 55,61 ----- Makefile: Makefile.usg localize.sh sh localize.sh ! install active: sh install.usg $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) cd ../cvt ; newactive.sh ../src/active $(LIBDIR) $(SPOOLDIR) mv active oldactive *************** *** 57,62 install: sh install.usg $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) make cp --- 57,64 ----- install active: sh install.usg $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) + cd ../cvt ; newactive.sh ../src/active $(LIBDIR) $(SPOOLDIR) + mv active oldactive make cp diff -r -c 2.10/src/Makefile.v7 2.10.1/src/Makefile.v7 *** 2.10/src/Makefile.v7 Wed Mar 30 15:39:53 1983 --- 2.10.1/src/Makefile.v7 Sat Jun 25 00:31:44 1983 *************** *** 44,51 Makefile: Makefile.v7 localize.sh sh localize.sh ! install: cp ! sh install.v7 $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) clean: rm -f $(COMMANDS) *.o --- 44,53 ----- Makefile: Makefile.v7 localize.sh sh localize.sh ! install: active cp ! sh install.v7 $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) ! cd ../cvt ; newactive.sh ../src/active $(LIBDIR) $(SPOOLDIR) ! mv active oldactive clean: rm -f $(COMMANDS) *.o diff -r -c 2.10/src/control.c 2.10.1/src/control.c *** 2.10/src/control.c Tue May 3 14:48:54 1983 --- 2.10.1/src/control.c Fri Jun 24 16:27:09 1983 *************** *** 5,11 * See defs.h "news_version" for the real version of netnews. */ ! static char *SccsId = "@(#)control.c 2.18 5/3/83 (this is NOT the netnews version!)"; #include "iparams.h" --- 5,11 ----- * See defs.h "news_version" for the real version of netnews. */ ! static char *SccsId = "@(#)control.c 2.20 6/24/83 (this is NOT the netnews version!)"; #include "iparams.h" *************** *** 172,179 /* update ngfile */ fd = fopen(NGFILE, "a"); ! fprintf(fd, "%s 00000\n", argv[1]); ! fclose(NGFILE); #ifdef NOTIFY /* --- 172,179 ----- /* update ngfile */ fd = fopen(NGFILE, "a"); ! fprintf(fd, "%s\n", argv[1]); ! fclose(fd); #ifdef NOTIFY /* *************** *** 296,302 su = 1; poster = senderof(&header); if (!su && strcmp(whatsisname, poster)) { ! sprintf(msgbuf, "Not contributor: %s and %s", header.path, whatsisname); xerror(msgbuf); } --- 296,302 ----- su = 1; poster = senderof(&header); if (!su && strcmp(whatsisname, poster)) { ! sprintf(msgbuf, "Not contributor: posted by %s, and you are %s", poster, whatsisname); xerror(msgbuf); } *************** *** 502,508 { int p[2]; register myside, hisside, pid; ! char *sendto; if (hptr) sendto = replyname(hptr); --- 502,508 ----- { int p[2]; register myside, hisside, pid; ! char *sendto = NULL; if (hptr) sendto = replyname(hptr); *************** *** 506,512 if (hptr) sendto = replyname(hptr); ! else #ifdef NOTIFY sendto = TELLME; #else --- 506,512 ----- if (hptr) sendto = replyname(hptr); ! else { #ifdef NOTIFY if (TELLME && *TELLME) sendto = TELLME; *************** *** 508,516 sendto = replyname(hptr); else #ifdef NOTIFY ! sendto = TELLME; ! #else ! return NULL; #endif NOTIFY verifyname(sendto); if(pipe(p) < 0) --- 508,515 ----- sendto = replyname(hptr); else { #ifdef NOTIFY ! if (TELLME && *TELLME) ! sendto = TELLME; #endif NOTIFY if (sendto == NULL) return NULL; *************** *** 512,517 #else return NULL; #endif NOTIFY verifyname(sendto); if(pipe(p) < 0) return NULL; --- 511,519 ----- if (TELLME && *TELLME) sendto = TELLME; #endif NOTIFY + if (sendto == NULL) + return NULL; + } verifyname(sendto); if(pipe(p) < 0) return NULL; *************** *** 577,583 if (hptr) to = replyname(hptr); #ifdef NOTIFY ! else to = TELLME; #endif NOTIFY if ((fp = mhopen(hptr)) != NULL) { --- 579,585 ----- if (hptr) to = replyname(hptr); #ifdef NOTIFY ! if (TELLME && *TELLME) to = TELLME; #endif NOTIFY if ((fp = mhopen(hptr)) != NULL) { diff -r -c 2.10/src/defs.dist 2.10.1/src/defs.dist *** 2.10/src/defs.dist Tue May 3 14:50:42 1983 --- 2.10.1/src/defs.dist Fri Jun 24 16:35:28 1983 *************** *** 10,17 * to be news_version below. */ ! static char *news_version = "B 2.10 5/3/83"; ! /* SCCS ID @(#)defs.dist 2.23 5/3/83 */ #define DAYS (60L*60L*24L) #define WEEKS (7*DAYS) --- 10,17 ----- * to be news_version below. */ ! static char *news_version = "B 2.10.1 6/24/83"; ! /* SCCS ID @(#)defs.dist 2.23 (hand edited) 5/3/83 */ #define DAYS (60L*60L*24L) #define WEEKS (7*DAYS) *************** *** 47,52 /* #define OLD /* Add extra headers for old neighbors */ /* #define UNAME /* If uname call is available. */ /* #define GHNAME /* If gethostname call is available. */ #define V7MAIL /* Local mail format is V7 ("From ") */ #define MYORG "Frobozz Inc., St. Louis" /* My organization. Please */ /* include your city (and state, and */ --- 47,53 ----- /* #define OLD /* Add extra headers for old neighbors */ /* #define UNAME /* If uname call is available. */ /* #define GHNAME /* If gethostname call is available. */ + /* #define NOCOLON /* Don't do :. Will go away in 2.11. */ #define V7MAIL /* Local mail format is V7 ("From ") */ #define MYORG "Frobozz Inc., St. Louis" /* My organization. Please */ /* include your city (and state, and */ diff -r -c 2.10/src/expire.c 2.10.1/src/expire.c *** 2.10/src/expire.c Wed Mar 30 15:39:57 1983 --- 2.10.1/src/expire.c Fri Jun 24 16:27:07 1983 *************** *** 11,17 * convert this 2.9 style code. */ ! static char *SccsId = "@(#)expire.c 2.15 3/28/83"; #include "params.h" #include "ndir.h" --- 11,17 ----- * convert this 2.9 style code. */ ! static char *SccsId = "@(#)expire.c 2.16 6/24/83"; #include "params.h" #include "ndir.h" *************** *** 427,432 mkparents(buf); sprintf(sysbuf, "mkdir %s", buf); rc = system(sysbuf); if (verbose) printf("mkdir %s, rc %d\n", sysbuf, rc); chmod(sysbuf, 0755); --- 427,433 ----- mkparents(buf); sprintf(sysbuf, "mkdir %s", buf); rc = system(sysbuf); + strcpy(sysbuf, buf); if (verbose) printf("mkdir %s, rc %d\n", sysbuf, rc); chmod(sysbuf, 0755); diff -r -c 2.10/src/funcs.c 2.10.1/src/funcs.c *** 2.10/src/funcs.c Tue May 3 14:48:57 1983 --- 2.10.1/src/funcs.c Fri Jun 24 16:27:09 1983 *************** *** 2,8 * funcs - functions used by both inews and readnews. */ ! static char *SccsId = "@(#)funcs.c 2.9 5/3/83"; #include "params.h" --- 2,8 ----- * funcs - functions used by both inews and readnews. */ ! static char *SccsId = "@(#)funcs.c 2.10 6/24/83"; #include "params.h" *************** *** 544,550 char *q, *tp; if (hp->sender[0]) ! return hp->sender; if (hp->from[0]) return hp->from; --- 544,559 ----- char *q, *tp; if (hp->sender[0]) ! tp = hp->sender; ! else if (hp->from[0]) ! tp = hp->from; ! else ! tp = tailpath(hp); ! ! /* Remove full name */ ! q = index(tp, ' '); ! if (q) ! *q = '\0'; q = malloc(strlen(tp) + 1); strcpy(q, tp); *************** *** 546,555 if (hp->sender[0]) return hp->sender; - if (hp->from[0]) - return hp->from; - - tp = tailpath(hp); q = malloc(strlen(tp) + 1); strcpy(q, tp); return q; --- 555,560 ----- if (q) *q = '\0'; q = malloc(strlen(tp) + 1); strcpy(q, tp); return q; diff -r -c 2.10/src/header.c 2.10.1/src/header.c *** 2.10/src/header.c Sun Apr 3 20:05:00 1983 --- 2.10.1/src/header.c Fri Jun 24 15:32:20 1983 *************** *** 2,8 * header.c - header functions plus some other goodies */ ! static char *SccsId = "@(#)header.c 2.16 4/3/83"; #include <stdio.h> #include <sys/types.h> --- 2,8 ----- * header.c - header functions plus some other goodies */ ! static char *SccsId = "@(#)header.c 2.20 6/24/83"; #include <stdio.h> #include <sys/types.h> *************** *** 14,19 char *hfgets(); /* * Read header from file fp into *hp. If wholething is FALSE, * it's an incremental read, otherwise start from scratch. --- 14,21 ----- char *hfgets(); + static int seenrelay; + /* * Read header from file fp into *hp. If wholething is FALSE, * it's an incremental read, otherwise start from scratch. *************** *** 30,35 if (wholething) bclear((char *) hp, sizeof (*hp)); /* Check that it's a B news style header. */ if (((hfgets(bfr, PATHLEN, fp) != NULL && *bfr >= 'A' && *bfr <= 'Z') && index(bfr, ':'))) --- 32,39 ----- if (wholething) bclear((char *) hp, sizeof (*hp)); + seenrelay = 0; + /* Check that it's a B news style header. */ if (((hfgets(bfr, PATHLEN, fp) != NULL && *bfr >= 'A' && *bfr <= 'Z') && index(bfr, ':'))) *************** *** 102,107 #define ORGANIZATION 18 #define NUMLINES 19 #define KEYWORDS 20 #define OTHER 99 char *malloc(); --- 106,112 ----- #define ORGANIZATION 18 #define NUMLINES 19 #define KEYWORDS 20 + #define APPROVED 21 #define OTHER 99 char *malloc(); *************** *** 182,187 case KEYWORDS: getfield(hp->keywords); break; case RELAYVERSION: /* * Only believe a relay version if it's the first --- 187,195 ----- case KEYWORDS: getfield(hp->keywords); break; + case APPROVED: + getfield(hp->approved); + break; case RELAYVERSION: /* * Only believe a relay version if it's the first *************** *** 188,194 * line, otherwise it probably got passed through * by some old neighbor. */ ! if (hdrlineno == 1) getfield(hp->relayversion); break; case OTHER: --- 196,202 ----- * line, otherwise it probably got passed through * by some old neighbor. */ ! if (hdrlineno == 1) { getfield(hp->relayversion); seenrelay = 1; } *************** *** 190,195 */ if (hdrlineno == 1) getfield(hp->relayversion); break; case OTHER: if (unreccnt < NUNREC) { --- 198,205 ----- */ if (hdrlineno == 1) { getfield(hp->relayversion); + seenrelay = 1; + } break; case OTHER: if (unreccnt < NUNREC) { *************** *** 218,223 char *tp; char *user, *host, *fullname; char *tailpath(), *rindex(); tp = tailpath(hp); user = rindex(tp, '!'); --- 228,234 ----- char *tp; char *user, *host, *fullname; char *tailpath(), *rindex(); + char *at, *dot; tp = tailpath(hp); user = rindex(tp, '!'); *************** *** 225,230 user = tp; else *user++ = '\0'; if (tp[0] == '.') host = index(tp, '!') + 1; else if (user == tp) --- 236,254 ----- user = tp; else *user++ = '\0'; + + /* Check for an existing Internet address on the end. */ + at = index(user, '@'); + if (at) { + dot = index(at, '.'); + if (dot) { + strcpy(hp->from, user); + return; + } + /* @ signs are illegal except for the biggie, so */ + *at = '%'; + } + if (tp[0] == '.') host = index(tp, '!') + 1; else if (user == tp) *************** *** 231,236 host = FULLSYSNAME; else host = tp; tp = index(host, '@'); if (tp != NULL) *tp = 0; --- 255,261 ----- host = FULLSYSNAME; else host = tp; + tp = index(host, '@'); if (tp != NULL) *tp = 0; *************** *** 262,268 return; } *p++ = '\0'; ! sprintf(hp->ident, "<%s@%s%s>", p, lbuf, MYDOMAIN); } #ifdef OLD --- 287,302 ----- return; } *p++ = '\0'; ! /* ! * It may seem strange that we hardwire ".UUCP" in ! * here instead of MYDOMAIN. However, we are trying ! * to guess what the domain was on the posting system, ! * not the local system. Since we don't really know ! * what the posting system does, we just go with the ! * majority - almost everyone will be a .UUCP if they ! * didn't fill in their Message-ID. ! */ ! sprintf(hp->ident, "<%s@%s%s>", p, lbuf, ".UUCP"); } #ifdef OLD *************** *** 275,280 } *p++ = '\0'; q = index(p, '.'); if (q) *q++ = '\0'; sprintf(hp->oident, "%8s.%s", p, lbuf+1); --- 309,316 ----- } *p++ = '\0'; q = index(p, '.'); + if (!q) + q = index(p, '>'); if (q) *q++ = '\0'; p[SNLN] = '\0'; *************** *** 277,283 q = index(p, '.'); if (q) *q++ = '\0'; ! sprintf(hp->oident, "%8s.%s", p, lbuf+1); } #endif } --- 313,320 ----- q = index(p, '>'); if (q) *q++ = '\0'; ! p[SNLN] = '\0'; ! sprintf(hp->oident, "%s.%s", p, lbuf+1); } #endif } *************** *** 317,323 if (!colon || colon + 1 != space) return FALSE; if (its("From: ")) ! if (index(ptr, '@') && !index(ptr, '!')) return FROM; else return PATH; --- 354,360 ----- if (!colon || colon + 1 != space) return FALSE; if (its("From: ")) ! if (index(ptr, '@') && !index(ptr, '!') && seenrelay) return FROM; else return PATH; *************** *** 359,364 return NUMLINES; if (its("Keywords: ")) return KEYWORDS; return OTHER; } --- 396,403 ----- return NUMLINES; if (its("Keywords: ")) return KEYWORDS; + if (its("Approved: ")) + return APPROVED; return OTHER; } *************** *** 466,471 fprintf(fp, "Lines: %s\n", hp->numlines); if (*hp->keywords) fprintf(fp, "Keywords: %s\n", hp->keywords); for (iu = 0; iu < NUNREC; iu++) { if (hp->unrec[iu]) fprintf(fp, "%s", &hp->unrec[iu][0]); --- 505,512 ----- fprintf(fp, "Lines: %s\n", hp->numlines); if (*hp->keywords) fprintf(fp, "Keywords: %s\n", hp->keywords); + if (*hp->approved) + fprintf(fp, "Approved: %s\n", hp->approved); for (iu = 0; iu < NUNREC; iu++) { if (hp->unrec[iu]) fprintf(fp, "%s", &hp->unrec[iu][0]); diff -r -c 2.10/src/inews.c 2.10.1/src/inews.c *** 2.10/src/inews.c Tue May 3 14:49:01 1983 --- 2.10.1/src/inews.c Fri Jun 24 16:27:08 1983 *************** *** 2,8 * inews - insert, receive, and transmit news articles. */ ! static char *SccsId = "@(#)inews.c 2.29 5/3/83"; #include "iparams.h" --- 2,8 ----- * inews - insert, receive, and transmit news articles. */ ! static char *SccsId = "@(#)inews.c 2.30 6/24/83"; #include "iparams.h" *************** *** 308,314 ngcat(header.nbuf); } if (forgedname[0]) { ! gensender(&header, forgedname); sprintf(header.sender, "%s@%s%s", username, SYSNAME, MYDOMAIN); } else { --- 308,314 ----- ngcat(header.nbuf); } if (forgedname[0]) { ! strcpy(header.from, forgedname); sprintf(header.sender, "%s@%s%s", username, SYSNAME, MYDOMAIN); } else { diff -r -c 2.10/src/install.v7 2.10.1/src/install.v7 *** 2.10/src/install.v7 Wed Mar 30 15:40:05 1983 --- 2.10.1/src/install.v7 Fri Jun 24 16:33:40 1983 *************** *** 1,4 ! : '@(#)install.v7 2.6 3/3/83' if test "$#" != 4 then echo "usage: $0 spooldir libdir nuser ngroup" --- 1,4 ----- ! : '%W% %G%' if test "$#" != 4 then echo "usage: $0 spooldir libdir nuser ngroup" *************** *** 38,43 : Ensure certain files in LIBDIR exist touch $LIBDIR/history $LIBDIR/active $LIBDIR/log $LIBDIR/users chmod 666 $LIBDIR/users : If no sys file, make one. --- 38,44 ----- : Ensure certain files in LIBDIR exist touch $LIBDIR/history $LIBDIR/active $LIBDIR/log $LIBDIR/users + touch $LIBDIR/history.dir $LIBDIR/history.pag chmod 666 $LIBDIR/users : If no sys file, make one. diff -r -c 2.10/src/readnews.c 2.10.1/src/readnews.c *** 2.10/src/readnews.c Sun Apr 24 23:58:34 1983 --- 2.10.1/src/readnews.c Fri Jun 24 16:33:19 1983 *************** *** 328,334 first = *searchfor; for (p=index(string, first); p; p = index(p+1, first)) { ! if (p>string && p[-1] != '!' && strncmp(p, searchfor, strlen(searchfor)) == 0) return TRUE; } return FALSE; --- 328,334 ----- first = *searchfor; for (p=index(string, first); p; p = index(p+1, first)) { ! if (p==string || (p>string && p[-1] != '!' && strncmp(p, searchfor, strlen(searchfor)) == 0)) return TRUE; } return FALSE; diff -r -c 2.10/src/readr.c 2.10.1/src/readr.c *** 2.10/src/readr.c Tue May 3 14:49:06 1983 --- 2.10.1/src/readr.c Fri Jun 24 16:33:26 1983 *************** *** 11,17 #define saveart oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hbufcp(&hbuf1, &h);ongsize = pngsize #define NLINES(h, fp) (h.numlines[0] ? h.intnumlines : (h.intnumlines=linecnt(fp),sprintf(h.numlines, "%d", h.intnumlines), h.intnumlines)) ! char *tft = "/usr/tmp/folXXXXXX"; static int hascaught = 0; static catchintr() --- 11,17 ----- #define saveart oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hbufcp(&hbuf1, &h);ongsize = pngsize #define NLINES(h, fp) (h.numlines[0] ? h.intnumlines : (h.intnumlines=linecnt(fp),sprintf(h.numlines, "%d", h.intnumlines), h.intnumlines)) ! char *tft = "/tmp/folXXXXXX"; static int hascaught = 0; static catchintr() *************** *** 77,82 if (pflag && ignoring()) ignorenews = TRUE; if (uflag) time(&timelastsaved); --- 77,84 ----- if (pflag && ignoring()) ignorenews = TRUE; + if (xflag) + uflag = 0; if (uflag) time(&timelastsaved); *************** *** 950,955 } else pout(ofp); holdup = TRUE; fprintf(ofp, ":"); fflush(ofp); --- 952,958 ----- } else pout(ofp); + # ifndef NOCOLON holdup = TRUE; # endif NOCOLON } *************** *** 951,958 else pout(ofp); holdup = TRUE; ! fprintf(ofp, ":"); ! fflush(ofp); } else #endif --- 954,960 ----- pout(ofp); # ifndef NOCOLON holdup = TRUE; ! # endif NOCOLON } else #endif *************** *** 1076,1081 if (rfq) return; /* Wait for user to read previous article. */ if (holdup) { holdup = FALSE; --- 1078,1084 ----- if (rfq) return; + #ifndef NOCOLON /* Wait for user to read previous article. */ if (holdup) { fprintf(ofp, ":"); *************** *** 1078,1083 /* Wait for user to read previous article. */ if (holdup) { holdup = FALSE; gets(bfr); if (bfr[0]) --- 1081,1088 ----- #ifndef NOCOLON /* Wait for user to read previous article. */ if (holdup) { + fprintf(ofp, ":"); + fflush(ofp); holdup = FALSE; bfr[0] = '\0'; gets(bfr); *************** *** 1079,1084 /* Wait for user to read previous article. */ if (holdup) { holdup = FALSE; gets(bfr); if (bfr[0]) explaincolon(); --- 1084,1090 ----- fprintf(ofp, ":"); fflush(ofp); holdup = FALSE; + bfr[0] = '\0'; gets(bfr); if (bfr[0]) explaincolon(); *************** *** 1083,1088 if (bfr[0]) explaincolon(); } if (lflag || eflag) { hprint(&h, ofp, 0); --- 1089,1095 ----- if (bfr[0]) explaincolon(); } + #endif NOCOLON if (lflag || eflag) { hprint(&h, ofp, 0); *************** *** 1103,1108 explaincolon() { fprintf(ofp, "\n'%s' ignored.\n", bfr); fprintf(ofp, "The colon is to give you a chance to finish reading the\n"); fprintf(ofp, "previous article before the next header scrolls it off\n"); --- 1110,1117 ----- explaincolon() { + static int calledbefore = 0; + fprintf(ofp, "\n'%s' ignored.\n", bfr); if (calledbefore++ == 0) { fprintf(ofp, "The colon is to give you a chance to finish reading the\n"); *************** *** 1104,1113 explaincolon() { fprintf(ofp, "\n'%s' ignored.\n", bfr); ! fprintf(ofp, "The colon is to give you a chance to finish reading the\n"); ! fprintf(ofp, "previous article before the next header scrolls it off\n"); ! fprintf(ofp, "the top of the screen. You should hit `return' or `newline'\n"); ! fprintf(ofp, "when you are ready to go on to the next article.\n\n"); fflush(ofp); } --- 1113,1124 ----- static int calledbefore = 0; fprintf(ofp, "\n'%s' ignored.\n", bfr); ! if (calledbefore++ == 0) { ! fprintf(ofp, "The colon is to give you a chance to finish reading the\n"); ! fprintf(ofp, "previous article before the next header scrolls it off\n"); ! fprintf(ofp, "the top of the screen. You should hit `return' or `newline'\n"); ! fprintf(ofp, "when you are ready to go on to the next article.\n\n"); ! } fflush(ofp); } *************** *** 1125,1131 } else { fprintf(ofp, "%s%s, ", tstr, title); if (bit == pngsize) ! fprintf(ofp, "%d\n", pngsize); else fprintf(ofp, "%d-%d\n", bit, pngsize); } --- 1136,1142 ----- } else { fprintf(ofp, "%s%s, ", tstr, title); if (bit == pngsize) ! fprintf(ofp, "%ld\n", pngsize); else fprintf(ofp, "%d-%ld\n", bit, pngsize); } *************** *** 1127,1133 if (bit == pngsize) fprintf(ofp, "%d\n", pngsize); else ! fprintf(ofp, "%d-%d\n", bit, pngsize); } fprintf(ofp, "\n"); } --- 1138,1144 ----- if (bit == pngsize) fprintf(ofp, "%ld\n", pngsize); else ! fprintf(ofp, "%d-%ld\n", bit, pngsize); } fprintf(ofp, "\n"); } Only in 2.10.1/src: rmgrp