home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume7 / 2.11news / patch.10 < prev    next >
Internet Message Format  |  1988-03-03  |  65KB

  1. From rick@seismo.CSS.GOV Thu Oct  8 00:13:16 1987
  2. Path: seismo!rick
  3. From: rick@seismo.CSS.GOV (Rick Adams)
  4. Newsgroups: news.software.b
  5. Subject: news 2.11 src patch #10
  6. Keywords: #11 coming soon...
  7. Message-ID: <44104@beno.seismo.CSS.GOV>
  8. Date: 8 Oct 87 04:13:16 GMT
  9. Organization: Center for Seismic Studies, Arlington, VA
  10. Lines: 2546
  11.  
  12. Description:
  13.     This is patch #10 for news 2.11 src.
  14.  
  15.     Remove 4.1C BSD conditionals.
  16.     Lint and minor speedups.
  17.     Batch accepts blanks lines in files.
  18.     The IHCC define was replaced by several defines
  19.     allowing you to select part of the IHCC functionality.
  20.     Fix newgroup messages for moderated groups.
  21.     Minor date conversion fix to expire.
  22.     Lots of changes to run under Xenix (including locking I think).
  23.     strcasecmp() routein used for case independant comparisons.
  24.     strcmp,strncmp, prefix replaced with macros in an attempt
  25.         to squeeze more speed out.
  26.     Support for the "Supersedes:" header line added.
  27.     Sendbatch fixed to work when 'test' is a builtin.
  28.     New defines added to defs.dist:
  29.         READDIR        (has opendir(), etc in libc)
  30.         MKDIR_SUB    (mkdir() is in libc)
  31.         DOGETUSER    (always do a getuser() - was part of IHCC)
  32.         LOGDIR        (read pathnames from file - was part of IHCC)
  33.  
  34. Fix:
  35.     cd to the src directory and apply the following patch.
  36.  
  37. Index: batch.c
  38. Prereq: 1.18
  39. *** .d/batch.c    Wed Oct  7 16:48:13 1987
  40. --- batch.c    Wed Oct  7 18:48:54 1987
  41. ***************
  42. *** 34,36 ****
  43.   #ifdef SCCSID
  44. ! static char    *SccsId = "@(#)batch.c    1.18    12/16/86";
  45.   #endif /* SCCSID */
  46. --- 34,36 ----
  47.   #ifdef SCCSID
  48. ! static char    *SccsId = "@(#)batch.c    1.19    10/7/87";
  49.   #endif /* SCCSID */
  50. ***************
  51. *** 43,45 ****
  52.   
  53. ! #if defined(USG) || defined(BSD4_2) || defined(BSD4_1C)
  54.   #include <fcntl.h>
  55. --- 43,45 ----
  56.   
  57. ! #if defined(USG) || defined(BSD4_2)
  58.   #include <fcntl.h>
  59. ***************
  60. *** 64,65 ****
  61. --- 64,66 ----
  62.       char workfile[512];
  63. +     char cbuf[BUFSIZ];
  64.       char *index(), *fgets();
  65. ***************
  66. *** 102,103 ****
  67. --- 103,106 ----
  68.               *cp = '\0';
  69. +         if (fname[0] == '\0')
  70. +             continue;
  71.           nfd = fopen(fname, "r");
  72. ***************
  73. *** 110,111 ****
  74. --- 113,116 ----
  75.               *cp = '\n';
  76. +         if (sbuf.st_size == 0)
  77. +             continue;
  78.           nbytes += sbuf.st_size;
  79. ***************
  80. *** 117,121 ****
  81.           n = 0;
  82. !         while ((c = getc(nfd)) != EOF) {
  83. !             putchar(c);
  84. !             n++;
  85.           }
  86. --- 122,126 ----
  87.           n = 0;
  88. !         while (c = fread(cbuf, 1, sizeof cbuf, nfd)) {
  89. !             fwrite(cbuf, 1, c, stdout);
  90. !             n += c;
  91.           }
  92. ***************
  93. *** 126,127 ****
  94. --- 131,133 ----
  95.           }
  96. +         (void) fflush(stdout);
  97.           if (n != sbuf.st_size) { /* paranoia */
  98. ***************
  99. *** 186,188 ****
  100.   
  101. ! #if defined(IHCC) || defined(HOME)
  102.       (void) sprintf(lfname, "%s/%s/errlog", logdir(HOME), LIBDIR);
  103. --- 192,194 ----
  104.   
  105. ! #if defined(LOGDIR) || defined(HOME)
  106.       (void) sprintf(lfname, "%s/%s/errlog", logdir(HOME), LIBDIR);
  107. ***************
  108. *** 195,197 ****
  109.       if (access(lfname, 0) == 0 && (logfile = fopen(lfname, "a")) != NULL) {
  110. ! #if defined(USG) || defined(BSD4_2) || defined(BSD4_1C)
  111.           int flags;
  112. --- 201,203 ----
  113.       if (access(lfname, 0) == 0 && (logfile = fopen(lfname, "a")) != NULL) {
  114. ! #if defined(USG) || defined(BSD4_2)
  115.           int flags;
  116. ***************
  117. *** 207,209 ****
  118.   
  119. ! #if !defined(BSD4_2) && !defined(BSD4_1C)
  120.   rename(from, to)
  121. --- 213,215 ----
  122.   
  123. ! #if !defined(BSD4_2)
  124.   rename(from, to)
  125. ***************
  126. *** 218,219 ****
  127.   }
  128. ! #endif /* !BSD4_2 && !BSD4_1C */
  129. --- 224,225 ----
  130.   }
  131. ! #endif /* !BSD4_2 */
  132.  
  133. Index: control.c
  134. Prereq: 2.54
  135. *** .d/control.c    Wed Oct  7 16:49:54 1987
  136. --- control.c    Wed Oct  7 18:48:56 1987
  137. ***************
  138. *** 21,23 ****
  139.   #ifdef SCCSID
  140. ! static char    *SccsId = "@(#)control.c    2.54    4/10/87";
  141.   #endif /* SCCSID */
  142. --- 21,23 ----
  143.   #ifdef SCCSID
  144. ! static char    *SccsId = "@(#)control.c    2.55    10/7/87";
  145.   #endif /* SCCSID */
  146. ***************
  147. *** 306,308 ****
  148.       if (cp == NULL) {
  149. !         logerr("System %s wants unavailable article %s.",
  150.   #ifdef MULTICAST
  151. --- 306,308 ----
  152.       if (cp == NULL) {
  153. !         log("System %s wants unavailable article %s.",
  154.   #ifdef MULTICAST
  155. ***************
  156. *** 375,377 ****
  157.           if (*--q == '\0' && *--p == ' ') {
  158. -             int modified = 0;
  159.               /* Now check if it's correctly moderated/unmoderated */
  160. --- 375,376 ----
  161. ***************
  162. *** 385,395 ****
  163.                   }
  164. - # ifdef NONEWGROUPS
  165. -                 if(can_change) {
  166. -                     *p = 'm';
  167. -                     modified = 1;
  168. -                 }
  169. - # else /* ! NONEWGROUPS */
  170.                   *p = 'm';
  171. -                 modified = 1;
  172. - #endif /* NONEWGROUPS */
  173.               } else {
  174. --- 384,386 ----
  175. ***************
  176. *** 399,409 ****
  177.                   }
  178. - # ifdef NONEWGROUPS
  179. -                 if(can_change)  {
  180. -                     *p = 'y';
  181. -                     modified = 1;
  182. -                 }
  183. - # else /* ! NONEWGROUPS */
  184.                   *p = 'y';
  185. -                 modified = 1;
  186. - # endif /* NONEWGROUPS */
  187.               }
  188. --- 390,392 ----
  189. ***************
  190. *** 411,413 ****
  191.               (void) sprintf(subjline,
  192. !             "Newsgroup %s change from %smoderated to %smoderated",
  193.                   argv[1], *p=='y' ? "" : "un",
  194. --- 394,396 ----
  195.               (void) sprintf(subjline,
  196. !             "Newsgroup %s changed from %smoderated to %smoderated",
  197.                   argv[1], *p=='y' ? "" : "un",
  198. ***************
  199. *** 416,418 ****
  200.               if (fd != NULL) {
  201. !                 if(modified)
  202.                       fprintf(fd,
  203. --- 399,401 ----
  204.               if (fd != NULL) {
  205. !                 if(can_change)
  206.                       fprintf(fd,
  207. ***************
  208. *** 433,436 ****
  209.                       fprintf(fd,
  210. !                 "%s/inews -d %s -C %s moderated\n",
  211. !                         LIB, ORGDISTRIB, argv[1]);
  212.   #else /* !ORGDISTRIB */
  213. --- 416,420 ----
  214.                       fprintf(fd,
  215. !                 "%s/inews -d %s -C %s%s\n",
  216. !                         LIB, ORGDISTRIB, argv[1],
  217. !                         *p=='y' ? "" : " moderated");
  218.   #else /* !ORGDISTRIB */
  219. ***************
  220. *** 438,441 ****
  221.   "You can accomplish this by re-creating the newsgroup by executing the command:\n");
  222. !                     fprintf(fd, "%s/inews -C %s moderated\n",
  223. !                         LIB, argv[1]);
  224.   #endif /* !ORGDISTRIB */
  225. --- 422,426 ----
  226.   "You can accomplish this by re-creating the newsgroup by executing the command:\n");
  227. !                     fprintf(fd, "%s/inews -C %s%s\n",
  228. !                         LIB, argv[1],
  229. !                         *p=='y' ? "" : " moderated");
  230.   #endif /* !ORGDISTRIB */
  231. ***************
  232. *** 504,507 ****
  233.               fprintf(fd, 
  234. !         "A new newsgroup called '%s' has been created by %s.\n",
  235. !                             argv[1], header.path);
  236.           else {
  237. --- 489,493 ----
  238.               fprintf(fd, 
  239. !         "A new %snewsgroup called '%s' has been created by %s.\n",
  240. !                 argc > 2 ? "moderated " : "", argv[1],
  241. !                 header.path);
  242.           else {
  243. ***************
  244. *** 508,511 ****
  245.               fprintf(fd, 
  246. !         "%s requested that a new newsgroup called '%s' be created.\n",
  247. !             header.path, argv[1]);
  248.               fprintf(fd,"It was approved by %s\n\n",header.approved);
  249. --- 494,497 ----
  250.               fprintf(fd, 
  251. !         "%s requested that a new %snewsgroup called '%s' be created.\n",
  252. !             header.path, argc > 2 ? "moderated " : "", argv[1]);
  253.               fprintf(fd,"It was approved by %s\n\n",header.approved);
  254. ***************
  255. *** 597,599 ****
  256.   
  257. !         if (pid = vfork()) {
  258.               status = fwait(pid);
  259. --- 583,585 ----
  260.   
  261. !         if (pid = fork()) {
  262.               status = fwait(pid);
  263. ***************
  264. *** 600,601 ****
  265. --- 586,591 ----
  266.           } else {
  267. +             register int i;
  268. +             for (i =3; i<20; i++)
  269. +                 if (close(i) < 0)
  270. +                     break;
  271.               (void) setuid(duid);
  272. ***************
  273. *** 674,676 ****
  274.               log("Can't cancel %s: %s", line, errmsg(errno));
  275. !             return 1;
  276.           }
  277. --- 664,666 ----
  278.               log("Can't cancel %s: %s", line, errmsg(errno));
  279. !             return -1;
  280.           }
  281. ***************
  282. *** 855,857 ****
  283.   #endif /* NOTIFY */
  284. !         if (sendto == NULL || *sendto == NULL)
  285.               return NULL;
  286. --- 845,847 ----
  287.   #endif /* NOTIFY */
  288. !         if (sendto == NULL || *sendto == '\0')
  289.               return NULL;
  290. ***************
  291. *** 877,879 ****
  292.   #endif /* MMDF */
  293. !         execl("/bin/mail", "mail", sendto, (char *)NULL);
  294.           execl("/usr/bin/mail", "mail", sendto, (char *)NULL);
  295. --- 867,869 ----
  296.   #endif /* MMDF */
  297. !         execl("/usr/bin/mailx", "mail", sendto, (char *)NULL);
  298.           execl("/usr/bin/mail", "mail", sendto, (char *)NULL);
  299. ***************
  300. *** 880,881 ****
  301. --- 870,872 ----
  302.           execl("/usr/ucb/mail", "mail", sendto, (char *)NULL);
  303. +         execl("/bin/mail", "mail", sendto, (char *)NULL);
  304.           _exit(1);
  305. ***************
  306. *** 1015,1017 ****
  307.       } else if (strcmp(msg, "delsub") == 0) {
  308. !         if (!prefix(header.nbuf, "to.")) {
  309.               log("Must be in a 'to.system' newsgroup.");
  310. --- 1006,1008 ----
  311.       } else if (strcmp(msg, "delsub") == 0) {
  312. !         if (!PREFIX(header.nbuf, "to.")) {
  313.               log("Must be in a 'to.system' newsgroup.");
  314.  
  315. Index: expire.c
  316. Prereq: 2.53
  317. *** .d/expire.c    Wed Oct  7 16:50:41 1987
  318. --- expire.c    Wed Oct  7 18:48:58 1987
  319. ***************
  320. *** 19,21 ****
  321.   #ifdef SCCSID
  322. ! static char    *SccsId = "@(#)expire.c    2.53    4/6/87";
  323.   #endif /* SCCSID */
  324. --- 19,21 ----
  325.   #ifdef SCCSID
  326. ! static char    *SccsId = "@(#)expire.c    2.54    10/7/87";
  327.   #endif /* SCCSID */
  328. ***************
  329. *** 24,31 ****
  330.   #include <errno.h>
  331. ! #if defined(BSD4_2) || defined(BSD4_1C)
  332. ! # include <sys/dir.h>
  333.   # include <sys/file.h>
  334. ! #else
  335. ! # include "ndir.h"
  336. ! #endif
  337.   
  338. --- 24,29 ----
  339.   #include <errno.h>
  340. ! #ifdef BSD4_2
  341.   # include <sys/file.h>
  342. ! #endif /* BSD4_2 */
  343.   
  344. ***************
  345. *** 78,81 ****
  346.   unsigned int mh_size;
  347. ! char *calloc();
  348. ! char *realloc();
  349.   struct tm *gmtime();
  350. --- 76,78 ----
  351.   unsigned int mh_size;
  352. ! extern char *calloc(), *realloc();
  353.   struct tm *gmtime();
  354. ***************
  355. *** 82,89 ****
  356.   
  357. ! #ifdef DBM
  358. ! typedef struct {
  359. !     char *dptr;
  360. !     int dsize;
  361. ! } datum;
  362. ! #else
  363.   FILE *nexthistfile();
  364. --- 79,81 ----
  365.   
  366. ! #ifndef DBM
  367.   FILE *nexthistfile();
  368. ***************
  369. *** 105,107 ****
  370.   struct hbuf h;
  371. - int    ExpireLock;
  372.   int    rmlock();
  373. --- 97,98 ----
  374. ***************
  375. *** 317,319 ****
  376.   #endif /* PROFILING */
  377. ! #ifdef IHCC
  378.       /*afline happens to be available - (we're getting out anyway)*/
  379. --- 308,310 ----
  380.   #endif /* PROFILING */
  381. ! #ifdef LOGDIR
  382.       /*afline happens to be available - (we're getting out anyway)*/
  383. ***************
  384. *** 321,325 ****
  385.       execl(afline, "rnews", "-U", (char *)NULL);
  386. ! #else /* ! IHCC */
  387.       execl(RNEWS, "rnews", "-U", (char *)NULL);
  388. ! #endif /* ! IHCC */
  389.       perror(RNEWS);
  390. --- 312,316 ----
  391.       execl(afline, "rnews", "-U", (char *)NULL);
  392. ! #else /* ! LOGDIR */
  393.       execl(RNEWS, "rnews", "-U", (char *)NULL);
  394. ! #endif /* ! LOGDIR */
  395.       perror(RNEWS);
  396. ***************
  397. *** 359,361 ****
  398.   
  399. !             (void) sprintf(afline, "exec sort -t\t +1.6 -2 +1 >%s", NARTFILE);
  400.               if ((nhfd = popen(afline, "w")) == NULL)
  401. --- 350,357 ----
  402.   
  403. !             (void) sprintf(afline, "exec sort -t\t +1.6 -2 +1 >%s",
  404. ! #ifdef DBM
  405. !             NARTFILE);
  406. ! #else /* !DBM */
  407. !             ARTFILE);
  408. ! #endif /* !DBM */
  409.               if ((nhfd = popen(afline, "w")) == NULL)
  410. ***************
  411. *** 393,395 ****
  412.                       if (p1 != NULL)
  413. !                         *p1 = NULL;
  414.                       if (!ngmatch(nbuf, ngpat))
  415. --- 389,391 ----
  416.                       if (p1 != NULL)
  417. !                         *p1 = '\0';
  418.                       if (!ngmatch(nbuf, ngpat))
  419. ***************
  420. *** 441,442 ****
  421. --- 437,439 ----
  422.               (void) strcpy(recdate, p1+1);
  423. +             (void) strcat(recdate, " GMT");
  424.               rectime = cgtdate(recdate);
  425. ***************
  426. *** 770,772 ****
  427.       if (dorebuild || !nohistory) {
  428. ! #ifndef DBM
  429.           (void) rename(ARTFILE, OARTFILE);
  430. --- 767,769 ----
  431.       if (dorebuild || !nohistory) {
  432. ! #ifdef DBM
  433.           (void) rename(ARTFILE, OARTFILE);
  434. ***************
  435. *** 800,802 ****
  436.   # ifdef    LOCKF
  437. !     if (lockf(LockFd, F_LOCK, 0) < 0)
  438.   # else    /* BSD4_2 */
  439. --- 797,799 ----
  440.   # ifdef    LOCKF
  441. !     if (lockf(LockFd, F_LOCK, 0L) < 0)
  442.   # else    /* BSD4_2 */
  443. ***************
  444. *** 809,812 ****
  445.       while (LINK(ACTIVE, afline) < 0 && errno == EEXIST) {
  446. !         if (i++ > 5)
  447. !             xerror("Can't get lock for expire");
  448.           sleep(i*2);
  449. --- 806,811 ----
  450.       while (LINK(ACTIVE, afline) < 0 && errno == EEXIST) {
  451. !         if (i++ > 5) {
  452. !             error("Can't get lock for expire");
  453. !             exit(1);
  454. !         }
  455.           sleep(i*2);
  456. ***************
  457. *** 934,942 ****
  458.               }
  459. -             if (p == NULL) {
  460. -                 last = 1;
  461. -                 fn = dirname(artlist);
  462. -                 if (UNLINK(fn) < 0 && errno != ENOENT)
  463. -                     perror(fn);
  464. -                 return;
  465. -             }
  466.               if (p)
  467. --- 933,934 ----
  468. ***************
  469. *** 1156,1158 ****
  470.   
  471. ! FILE *nexthistfile(ofp)
  472.   FILE *ofp;
  473. --- 1148,1151 ----
  474.   
  475. ! FILE *
  476. ! nexthistfile(ofp)
  477.   FILE *ofp;
  478.  
  479. Index: funcs.c
  480. Prereq: 2.35
  481. *** .d/funcs.c    Wed Oct  7 16:50:58 1987
  482. --- funcs.c    Wed Oct  7 18:49:00 1987
  483. ***************
  484. *** 18,20 ****
  485.   #ifdef SCCSID
  486. ! static char    *SccsId = "@(#)funcs.c    2.35    12/16/86";
  487.   #endif /* SCCSID */
  488. --- 18,20 ----
  489.   #ifdef SCCSID
  490. ! static char    *SccsId = "@(#)funcs.c    2.36    10/7/87";
  491.   #endif /* SCCSID */
  492. ***************
  493. *** 233,235 ****
  494. --- 233,299 ----
  495.   }
  496. + /* From UC Berkeley @(#)strcasecmp.c    1.3 (Berkeley) 8/3/87 */
  497.   
  498. + /*
  499. +  * This array is designed for mapping upper and lower case letter
  500. +  * together for a case independent comparison.  The mappings are
  501. +  * based upon ascii character sequences.
  502. +  */
  503. + char charmap[] = {
  504. +     '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
  505. +     '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
  506. +     '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
  507. +     '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
  508. +     '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
  509. +     '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
  510. +     '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
  511. +     '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
  512. +     '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
  513. +     '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
  514. +     '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
  515. +     '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
  516. +     '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
  517. +     '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
  518. +     '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
  519. +     '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
  520. +     '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
  521. +     '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
  522. +     '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
  523. +     '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
  524. +     '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
  525. +     '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
  526. +     '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
  527. +     '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
  528. +     '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
  529. +     '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
  530. +     '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
  531. +     '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
  532. +     '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
  533. +     '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
  534. +     '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
  535. +     '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
  536. + };
  537. + strcasecmp(s1, s2)
  538. + register char *s1, *s2;
  539. + {
  540. +     register char *cm = charmap;
  541. +     while (cm[*s1] == cm[*s2++])
  542. +         if (*s1++ == '\0')
  543. +             return 0;
  544. +     return cm[*s1] - cm[*--s2];
  545. + }
  546. + strncasecmp(s1, s2, n)
  547. + register char *s1, *s2;
  548. + register int n;
  549. + {
  550. +     register char *cm = charmap;
  551. +     while (--n >= 0 && cm[*s1] == cm[*s2++])
  552. +         if (*s1++ == '\0')
  553. +             return 0;
  554. +     return n < 0 ? 0 : cm[*s1] - cm[*--s2];
  555. + }
  556.   prefix(full, pref)
  557. ***************
  558. *** 237,247 ****
  559.   {
  560. !     register char fc, pc;
  561.   
  562. !     while ((pc = *pref++) != '\0') {
  563. !         fc = *full++;
  564. !         if (isupper(fc))
  565. !             fc = tolower(fc);
  566. !         if (isupper(pc))
  567. !             pc = tolower(pc);
  568. !         if (fc != pc)
  569.               return FALSE;
  570. --- 301,306 ----
  571.   {
  572. !     register char *cm = charmap;
  573.   
  574. !     while (*pref != '\0') {
  575. !         if (cm[*full++] != cm[*pref++])
  576.               return FALSE;
  577. ***************
  578. *** 591,592 ****
  579. --- 650,654 ----
  580.           while (fscanf(facfd, "%[^:]:%s\n", facuser, factemp) != EOF)
  581. +         {
  582. +             if (feof(facfd))
  583. +                 break;
  584.               if (strncmp(facuser, user, BUFLEN) == 0) {
  585. ***************
  586. *** 596,597 ****
  587. --- 658,660 ----
  588.               }
  589. +         }
  590.           fclose (facfd);
  591. Index: funcs2.c
  592. Prereq: 1.20
  593. *** .d/funcs2.c    Wed Oct  7 16:51:19 1987
  594. --- funcs2.c    Wed Oct  7 18:49:01 1987
  595. ***************
  596. *** 19,21 ****
  597.   #ifdef SCCSID
  598. ! static char    *SccsId = "@(#)funcs2.c    1.20    3/20/87";
  599.   #endif /* SCCSID */
  600. --- 19,21 ----
  601.   #ifdef SCCSID
  602. ! static char    *SccsId = "@(#)funcs2.c    1.21    10/7/87";
  603.   #endif /* SCCSID */
  604. ***************
  605. *** 128,130 ****
  606.        */
  607. !     if (strcmp(sp->s_name, "ME") == 0)
  608.           (void) strcpy(sp->s_name, LOCALPATHSYSNAME);
  609. --- 128,130 ----
  610.        */
  611. !     if (STRCMP(sp->s_name, "ME") == 0)
  612.           (void) strcpy(sp->s_name, LOCALPATHSYSNAME);
  613. ***************
  614. *** 170,172 ****
  615.       while (s_read(sp))
  616. !         if (strncmp(system, sp->s_name, SNLN) == 0) {
  617.               s_close();
  618. --- 170,172 ----
  619.       while (s_read(sp))
  620. !         if (STRNCMP(system, sp->s_name, SNLN) == 0) {
  621.               s_close();
  622. ***************
  623. *** 196,198 ****
  624.   
  625. !     if ( lastdatestr[0] && strcmp(datestr, lastdatestr) == 0)
  626.           return lasttime;
  627. --- 196,198 ----
  628.   
  629. !     if ( lastdatestr[0] && STRCMP(datestr, lastdatestr) == 0)
  630.           return lasttime;
  631. ***************
  632. *** 203,204 ****
  633. --- 203,209 ----
  634.           lasttime = getdate(bfr, &Now);
  635. +         if (lasttime < 0) {
  636. +             logerr("Unparsable date \"%s\"", datestr);
  637. +             datestr = "now";    /* better than nothing */
  638. +             lasttime = Now.time;
  639. +         }
  640.       }
  641. ***************
  642. *** 320,322 ****
  643.       ptr = hptr->path;
  644. !     if (prefix(ptr, PATHSYSNAME) &&
  645.           index(NETCHRS, ptr[strlen(PATHSYSNAME)]))
  646. --- 325,327 ----
  647.       ptr = hptr->path;
  648. !     if (PREFIX(ptr, PATHSYSNAME) &&
  649.           index(NETCHRS, ptr[strlen(PATHSYSNAME)]))
  650. ***************
  651. *** 328,329 ****
  652. --- 333,337 ----
  653.           ptr = hptr->replyto;
  654. + #else /* !INTERNET */
  655. +     if (hptr->replyto[0] && !index(hptr->replyto, '@'))
  656. +         ptr = hptr->replyto;
  657.   #endif
  658. ***************
  659. *** 338,340 ****
  660.       if (ptr = rindex(tbuf, '.')) {
  661. !         if (prefix(++ptr, "OZ")) {
  662.               /* some people only allow it in lower case ... */
  663. --- 346,348 ----
  664.       if (ptr = rindex(tbuf, '.')) {
  665. !         if (PREFIX(++ptr, "OZ")) {
  666.               /* some people only allow it in lower case ... */
  667. ***************
  668. *** 343,346 ****
  669.           }
  670. !         if (prefix(ptr, "UUCP") || prefix(ptr, "ARPA") ||
  671. !             prefix(ptr, "DEC") || prefix(ptr, "CSNET")) {
  672.               strcat(tbuf, "@munnari.oz");    /* via sun to munnari */
  673. --- 351,354 ----
  674.           }
  675. !         if (PREFIX(ptr, "UUCP") || PREFIX(ptr, "ARPA") ||
  676. !             PREFIX(ptr, "DEC") || PREFIX(ptr, "CSNET")) {
  677.               strcat(tbuf, "@munnari.oz");    /* via sun to munnari */
  678. ***************
  679. *** 354,356 ****
  680.       for (ptr = tbuf ;; ptr++) {
  681. !         if (prefix(ptr, "munnari!")) {
  682.               strcpy(tbuf, ptr+8);
  683. --- 362,364 ----
  684.       for (ptr = tbuf ;; ptr++) {
  685. !         if (PREFIX(ptr, "munnari!")) {
  686.               strcpy(tbuf, ptr+8);
  687. ***************
  688. *** 392,394 ****
  689.                   LIB);
  690. !     } while (!prefix(mbuf, "internet"));
  691.       if (sscanf(mbuf, "%*s %s", modadd) != 1)
  692. --- 400,402 ----
  693.                   LIB);
  694. !     } while (!PREFIX(mbuf, "internet"));
  695.       if (sscanf(mbuf, "%*s %s", modadd) != 1)
  696. ***************
  697. *** 420,428 ****
  698.   
  699. - #ifdef DBM
  700. - typedef struct {
  701. -     char *dptr;
  702. -     int dsize;
  703. - } datum;
  704. - #endif /* DBM */
  705.   /*
  706. --- 428,429 ----
  707. ***************
  708. *** 478,480 ****
  709.           *p = 0;
  710. !         if (strcmp(lbuf, artid) == 0 || strcmp(lbuf, oidbuf) == 0) {
  711.               (void) fclose(hfp);
  712. --- 479,481 ----
  713.           *p = 0;
  714. !         if (STRCMP(lbuf, artid) == 0 || STRCMP(lbuf, oidbuf) == 0) {
  715.               (void) fclose(hfp);
  716. ***************
  717. *** 573,575 ****
  718.   
  719. ! #if !defined(BSD4_2) && !defined(BSD4_1C)
  720.   rename(from,to)
  721. --- 574,576 ----
  722.   
  723. ! #if !defined(BSD4_2)
  724.   rename(from,to)
  725. ***************
  726. *** 584,586 ****
  727.   }
  728. ! #endif /* !BSD4_2 && ! BSD4_1C */
  729.   
  730. --- 585,587 ----
  731.   }
  732. ! #endif /* !BSD4_2 */
  733.   
  734. ***************
  735. *** 666,668 ****
  736.   {
  737. !     register char *r, *q, *tp;
  738.       char *tailpath();
  739. --- 667,669 ----
  740.   {
  741. !     register char *q, *tp;
  742.       char *tailpath();
  743. Index: header.c
  744. Prereq: 2.48
  745. *** .d/header.c    Wed Oct  7 16:51:57 1987
  746. --- header.c    Wed Oct  7 18:49:03 1987
  747. ***************
  748. *** 16,17 ****
  749. --- 16,18 ----
  750.    */
  751. + /*LINTLIBRARY*/
  752.   
  753. ***************
  754. *** 18,20 ****
  755.   #ifdef SCCSID
  756. ! static char    *SccsId = "@(#)header.c    2.48    3/20/87";
  757.   #endif /* SCCSID */
  758. --- 19,21 ----
  759.   #ifdef SCCSID
  760. ! static char    *SccsId = "@(#)header.c    2.49    10/7/87";
  761.   #endif /* SCCSID */
  762. ***************
  763. *** 149,150 ****
  764. --- 150,152 ----
  765.   #define XPATH        26
  766. + #define SUPERSEDES    27
  767.   #define OTHER        99
  768. ***************
  769. *** 159,161 ****
  770.       register int    i;
  771. -     long    curpos;
  772.   
  773. --- 161,162 ----
  774. ***************
  775. *** 163,165 ****
  776.       do {
  777. -         curpos = ftell(fp);
  778.           switch (i) {
  779. --- 164,165 ----
  780. ***************
  781. *** 220,222 ****
  782.               getfield(hp->distribution, sizeof(hp->distribution));
  783. !             if (strcmp(hp->distribution, "net") == 0)
  784.                   hp->distribution[0] = '\0';
  785. --- 220,223 ----
  786.               getfield(hp->distribution, sizeof(hp->distribution));
  787. !             if (strcmp(hp->distribution, "net") == 0
  788. !                 || strcmp(hp->distribution, "world") == 0)
  789.                   hp->distribution[0] = '\0';
  790. ***************
  791. *** 242,243 ****
  792. --- 243,247 ----
  793.               break;
  794. +         case SUPERSEDES:
  795. +             getfield(hp->supersedes, sizeof(hp->supersedes));
  796. +             break;
  797.           /* discard these lines */
  798. ***************
  799. *** 265,268 ****
  800.   
  801. -     if (*bfr != '\n')
  802. -         fseek(fp, curpos, 0);
  803.       if ((hp->from[0] || hp->path[0]) && hp->subdate[0] && hp->ident[0])
  804. --- 269,270 ----
  805. ***************
  806. *** 536,538 ****
  807.   
  808. ! #define its(type) (prefix(ptr, type))
  809.   type(ptr)
  810. --- 538,540 ----
  811.   
  812. ! #define its(type) (PREFIX(ptr, type))
  813.   type(ptr)
  814. ***************
  815. *** 564,565 ****
  816. --- 566,568 ----
  817.           return SUBMIT;
  818. + #endif /* OLD */
  819.       if (its("Received: "))
  820. ***************
  821. *** 566,568 ****
  822.           return RECEIVE;
  823. - #endif /* OLD */
  824.       if (its("Expires: "))
  825. --- 569,570 ----
  826. ***************
  827. *** 583,588 ****
  828.           return FOLLOWTO;
  829. -     if (its("Posting-Version: "))
  830. -         return POSTVERSION;
  831. -     if (its("Relay-Version: "))
  832. -         return RELAYVERSION;
  833.       if (its("Distribution: "))
  834. --- 585,586 ----
  835. ***************
  836. *** 603,604 ****
  837. --- 601,604 ----
  838.           return NFFROM;
  839. +     if (its("Supersedes: "))
  840. +         return SUPERSEDES;
  841.       if (its("Xref: "))
  842. ***************
  843. *** 607,608 ****
  844. --- 607,612 ----
  845.           return XPATH;
  846. +     if (its("Posting-Version: "))
  847. +         return POSTVERSION;
  848. +     if (its("Relay-Version: "))
  849. +         return RELAYVERSION;
  850.       if (!isalpha(*ptr))
  851. ***************
  852. *** 620,621 ****
  853. --- 624,628 ----
  854.    */
  855. + #ifndef DOXREFS
  856. + /*ARGSUSED*/
  857. + #endif /* !DOXREFS */
  858.   ihwrite(hp, fp, wr)
  859. ***************
  860. *** 635,637 ****
  861.        */
  862. !     if (prefix(hp->path, PATHSYSNAME) &&
  863.           index(NETCHRS, hp->path[strlen(PATHSYSNAME)]))
  864. --- 642,644 ----
  865.        */
  866. !     if (PREFIX(hp->path, PATHSYSNAME) &&
  867.           index(NETCHRS, hp->path[strlen(PATHSYSNAME)]))
  868. ***************
  869. *** 691,692 ****
  870. --- 698,701 ----
  871.           fprintf(fp, "Nf-From: %s\n", hp->nf_from);
  872. +     if (*hp->supersedes)
  873. +         fprintf(fp, "Supersedes: %s\n", hp->supersedes);
  874.   #ifdef DOXREFS
  875. Index: header.h
  876. Prereq: 2.20
  877. *** .d/header.h    Wed Oct  7 16:52:04 1987
  878. --- header.h    Wed Oct  7 18:49:03 1987
  879. ***************
  880. *** 4,6 ****
  881.   
  882. ! /*    @(#)header.h    2.20    2/22/87    */
  883.   
  884. --- 4,6 ----
  885.   
  886. ! /*    @(#)header.h    2.21    10/7/87    */
  887.   
  888. ***************
  889. *** 32,33 ****
  890. --- 32,34 ----
  891.       char    nf_from[BUFLEN];    /* Nf-From:        */
  892. +     char     supersedes[BUFLEN];    /* Supersedes:        */
  893.   #ifdef DOXREFS
  894. Index: ifuncs.c
  895. Prereq: 2.65
  896. *** .d/ifuncs.c    Wed Oct  7 16:52:37 1987
  897. --- ifuncs.c    Wed Oct  7 18:49:07 1987
  898. ***************
  899. *** 18,20 ****
  900.   #ifdef SCCSID
  901. ! static char    *SccsId = "@(#)ifuncs.c    2.65    4/10/87";
  902.   #endif /* SCCSID */
  903. --- 18,20 ----
  904.   #ifdef SCCSID
  905. ! static char    *SccsId = "@(#)ifuncs.c    2.66    10/7/87";
  906.   #endif /* SCCSID */
  907. ***************
  908. *** 23,24 ****
  909. --- 23,26 ----
  910.   
  911. + extern long    localize();
  912.   /*LINTLIBRARY*/
  913. ***************
  914. *** 62,63 ****
  915. --- 64,68 ----
  916.   
  917. + #ifndef GENERICPATH
  918. + /*ARGSUSED*/
  919. + #endif /* !GENERICPATH */
  920.   broadcast(is_rnews)
  921. ***************
  922. *** 96,98 ****
  923.       if (!is_rnews && 
  924. !         strncmp(PATHSYSNAME, h.path, (len = strlen(PATHSYSNAME))) == 0
  925.           && index(NETCHRS, h.path[len]))
  926. --- 101,103 ----
  927.       if (!is_rnews && 
  928. !         STRNCMP(PATHSYSNAME, h.path, (len = strlen(PATHSYSNAME))) == 0
  929.           && index(NETCHRS, h.path[len]))
  930. ***************
  931. *** 115,117 ****
  932.           char *dist = h.distribution;
  933. !         if (strncmp(srec.s_name, LOCALPATHSYSNAME, SNLN) == 0)
  934.               continue;
  935. --- 120,122 ----
  936.           char *dist = h.distribution;
  937. !         if (STRNCMP(srec.s_name, LOCALPATHSYSNAME, SNLN) == 0)
  938.               continue;
  939. ***************
  940. *** 128,130 ****
  941.           while (*hptr != '\0') {
  942. !             if (strncmp(srec.s_name, hptr, SNLN) == 0)
  943.                   goto contin;
  944. --- 133,135 ----
  945.           while (*hptr != '\0') {
  946. !             if (STRNCMP(srec.s_name, hptr, SNLN) == 0)
  947.                   goto contin;
  948. ***************
  949. *** 132,134 ****
  950.                   while (*sptr != '\0') {
  951. !                     if (strncmp(sptr, hptr, SNLN) == 0)
  952.                           goto contin;
  953. --- 137,139 ----
  954.                   while (*sptr != '\0') {
  955. !                     if (STRNCMP(sptr, hptr, SNLN) == 0)
  956.                           goto contin;
  957. ***************
  958. *** 152,154 ****
  959.                   *sptr = '\0';
  960. !                 if (strcmp(hptr, srec.s_name) == 0) {
  961.                       *sptr = ',';
  962. --- 157,159 ----
  963.                   *sptr = '\0';
  964. !                 if (STRCMP(hptr, srec.s_name) == 0) {
  965.                       *sptr = ',';
  966. ***************
  967. *** 160,162 ****
  968.               }
  969. !             if (strcmp(hptr, srec.s_name) == 0)
  970.                   continue;
  971. --- 165,167 ----
  972.               }
  973. !             if (STRCMP(hptr, srec.s_name) == 0)
  974.                   continue;
  975. ***************
  976. *** 173,175 ****
  977.               for (m = mcast; m < &mcast[mccount]; m++)
  978. !                 if (strcmp(srec.s_xmit, m->mc_name) == 0)
  979.                       break;
  980. --- 178,180 ----
  981.               for (m = mcast; m < &mcast[mccount]; m++)
  982. !                 if (STRCMP(srec.s_xmit, m->mc_name) == 0)
  983.                       break;
  984. ***************
  985. *** 193,195 ****
  986.               for (m = mcast; m < &mcast[mccount]; m++)
  987. !                 if (strcmp(m->mc_name, srec.s_name) == 0) {
  988.                       yptr = sysptrs;
  989. --- 198,200 ----
  990.               for (m = mcast; m < &mcast[mccount]; m++)
  991. !                 if (STRCMP(m->mc_name, srec.s_name) == 0) {
  992.                       yptr = sysptrs;
  993. ***************
  994. *** 204,206 ****
  995.   #endif /* !VMS */
  996. !                 (strncmp(h.nbuf, "to.", 3) != 0),
  997.                   sysptrs, mc))
  998. --- 209,211 ----
  999.   #endif /* !VMS */
  1000. !                 (STRNCMP(h.nbuf, "to.", 3) != 0),
  1001.                   sysptrs, mc))
  1002. ***************
  1003. *** 214,216 ****
  1004.   #endif /* !VMS */
  1005. !             (strncmp(h.nbuf, "to.", 3) != 0),
  1006.               (char **) NULL, FALSE))
  1007. --- 219,221 ----
  1008.   #endif /* !VMS */
  1009. !             (STRNCMP(h.nbuf, "to.", 3) != 0),
  1010.               (char **) NULL, FALSE))
  1011. ***************
  1012. *** 297,299 ****
  1013.       */
  1014. !     if (not_here[0] && strcmp(not_here, sp->s_name) == 0) {
  1015.           (void) fclose(ifp);
  1016. --- 302,304 ----
  1017.       */
  1018. !     if (not_here[0] && STRCMP(not_here, sp->s_name) == 0) {
  1019.           (void) fclose(ifp);
  1020. ***************
  1021. *** 356,358 ****
  1022.                   appmsgid ? ".ihave" : "");
  1023. ! #ifdef IHCC
  1024.           (void) sprintf(TRANS, "%s/%s/%s", logdir(HOME), BATCHDIR, sp->s_xmit);
  1025. --- 361,363 ----
  1026.                   appmsgid ? ".ihave" : "");
  1027. ! #ifdef LOGDIR
  1028.           (void) sprintf(TRANS, "%s/%s/%s", logdir(HOME), BATCHDIR, sp->s_xmit);
  1029. ***************
  1030. *** 359,363 ****
  1031.           ofp = fopen(TRANS, "a");
  1032. ! #else /* !IHCC */
  1033.           ofp = fopen(sp->s_xmit, "a");
  1034. ! #endif /* !IHCC */
  1035.           if (ofp == NULL)
  1036. --- 364,368 ----
  1037.           ofp = fopen(TRANS, "a");
  1038. ! #else /* !LOGDIR */
  1039.           ofp = fopen(sp->s_xmit, "a");
  1040. ! #endif /* !LOGDIR */
  1041.           if (ofp == NULL)
  1042. ***************
  1043. *** 516,522 ****
  1044.   
  1045. - typedef struct {
  1046. -     char *dptr;
  1047. -     int dsize;
  1048. - } datum;
  1049.   /*
  1050. --- 521,522 ----
  1051. ***************
  1052. *** 566,568 ****
  1053.   
  1054. !         if (strcmp(bfr, lcident) == 0) {
  1055.               (void) fclose(hfp);
  1056. --- 566,568 ----
  1057.   
  1058. !         if (STRCMP(bfr, lcident) == 0) {
  1059.               (void) fclose(hfp);
  1060. ***************
  1061. *** 604,606 ****
  1062.   #ifndef DBM
  1063. !     if (strcmp((p = histfile(hline)), ARTFILE) != 0) {
  1064.       /* If the history subfile is accessible */
  1065. --- 604,606 ----
  1066.   #ifndef DBM
  1067. !     if (STRCMP((p = histfile(hline)), ARTFILE) != 0) {
  1068.       /* If the history subfile is accessible */
  1069. ***************
  1070. *** 848,850 ****
  1071.           for (i = 0; i < ngcount; ++i)
  1072. !             if (uses[i] >= 1 && strcmp(bfr, ngs[i]) == 0) {
  1073.                   uses[i] = 2;    /* it should be localized too */
  1074. --- 848,850 ----
  1075.           for (i = 0; i < ngcount; ++i)
  1076. !             if (uses[i] >= 1 && STRCMP(bfr, ngs[i]) == 0) {
  1077.                   uses[i] = 2;    /* it should be localized too */
  1078. ***************
  1079. *** 866,868 ****
  1080.           f = xfopen(ALIASES, "r");
  1081. !         while (okcount < ngcount && fscanf(f, "%s %s", abuf, bfr) == 2)
  1082.               for (i = 0; i < ngcount; ++i) {
  1083. --- 866,868 ----
  1084.           f = xfopen(ALIASES, "r");
  1085. !         while (okcount < ngcount && fscanf(f, "%s %s%*[^\n]", abuf, bfr) == 2)
  1086.               for (i = 0; i < ngcount; ++i) {
  1087. ***************
  1088. *** 872,874 ****
  1089.   #endif /* ALWAYSALIAS */
  1090. !                 if (strcmp(ngs[i], abuf) != 0)
  1091.                       continue;
  1092. --- 872,874 ----
  1093.   #endif /* ALWAYSALIAS */
  1094. !                 if (STRCMP(ngs[i], abuf) != 0)
  1095.                       continue;
  1096. ***************
  1097. *** 919,921 ****
  1098.                   continue;
  1099. !             if (strcmp(ngs[i], ngs[j]) != 0)
  1100.                   continue;
  1101. --- 919,921 ----
  1102.                   continue;
  1103. !             if (STRCMP(ngs[i], ngs[j]) != 0)
  1104.                   continue;
  1105. ***************
  1106. *** 1062,1063 ****
  1107. --- 1062,1064 ----
  1108.               input_pipe(cmd, "compress", "-d", (char *) 0);
  1109. +             setbuf(infp, (char *)NULL);
  1110.               continue;    /* look for the #! rnews */
  1111. ***************
  1112. *** 1067,1068 ****
  1113. --- 1068,1070 ----
  1114.               input_pipe("/bin/sh", "news-unpack", "-c", cmd);
  1115. +             setbuf(infp, (char *)NULL);
  1116.               continue;    /* look for the #! rnews */
  1117. ***************
  1118. *** 1074,1076 ****
  1119.               register long size, asize;
  1120. !             char *filename;
  1121.               int pid, wpid, exstat;
  1122. --- 1076,1078 ----
  1123.               register long size, asize;
  1124. !             char *tfilename;
  1125.               int pid, wpid, exstat;
  1126. ***************
  1127. *** 1079,1083 ****
  1128.   
  1129. !             filename = 0;
  1130.               do {
  1131. !                 while (strncmp(cmd, "#! rnews ", 9)) {
  1132.                       fprintf(stderr, "out of sync, skipping %s\n", cmd);
  1133. --- 1081,1088 ----
  1134.   
  1135. !             tfilename = 0;
  1136. !             cp = malloc((unsigned)BUFSIZ);
  1137. !             if (cp != NULL)
  1138. !                 setbuf(infp, cp);
  1139.               do {
  1140. !                 while (STRNCMP(cmd, "#! rnews ", 9)) {
  1141.                       fprintf(stderr, "out of sync, skipping %s\n", cmd);
  1142. ***************
  1143. *** 1102,1108 ****
  1144.                               break;    /* fits in buffer */
  1145. !                         if (!filename)
  1146. !                             filename = mktemp("/tmp/unbnewsXXXXXX");
  1147. !                         if ((fd = creat(filename, 0666)) < 0) {
  1148.                               fprintf(stderr, "rnews: creat of \"%s\" failed",
  1149. !                                 filename);
  1150.                               perror(" ");
  1151. --- 1107,1113 ----
  1152.                               break;    /* fits in buffer */
  1153. !                         if (!tfilename)
  1154. !                             tfilename = mktemp("/tmp/unbnewsXXXXXX");
  1155. !                         if ((fd = creat(tfilename, 0666)) < 0) {
  1156.                               fprintf(stderr, "rnews: creat of \"%s\" failed",
  1157. !                                 tfilename);
  1158.                               perror(" ");
  1159. ***************
  1160. *** 1114,1116 ****
  1161.                           fprintf(stderr, "write of %d to \"%s\" returned %d",
  1162. !                             rc, filename, wc);
  1163.                           perror(" ");
  1164. --- 1119,1121 ----
  1165.                           fprintf(stderr, "write of %d to \"%s\" returned %d",
  1166. !                             rc, tfilename, wc);
  1167.                           perror(" ");
  1168. ***************
  1169. *** 1166,1168 ****
  1170.                            * input */
  1171. !                         freopen(filename, "r", infp);
  1172.                       return;    /* from checkbatch as if
  1173. --- 1171,1173 ----
  1174.                            * input */
  1175. !                         freopen(tfilename, "r", infp);
  1176.                       return;    /* from checkbatch as if
  1177. ***************
  1178. *** 1184,1187 ****
  1179.                   while ((wpid = wait(&exstat)) >= 0 && wpid != pid);
  1180.               } while (fgets(cmd, BUFLEN, infp) != NULL);
  1181. -             (void) unlink(filename);
  1182.               exit(0);/* all done */
  1183. --- 1189,1192 ----
  1184.                   while ((wpid = wait(&exstat)) >= 0 && wpid != pid);
  1185. +                 (void) unlink(tfilename);
  1186.               } while (fgets(cmd, BUFLEN, infp) != NULL);
  1187.               exit(0);/* all done */
  1188. ***************
  1189. *** 1399,1401 ****
  1190.       if (LockFd < 0)
  1191. !         logerr("Can't open(\"%s\",2) to lock", SUBFILE);
  1192.       /* This will sleep until the other program releases the lock */
  1193. --- 1404,1406 ----
  1194.       if (LockFd < 0)
  1195. !         logerr("Can't open(\"%s\", 2) to lock", SUBFILE);
  1196.       /* This will sleep until the other program releases the lock */
  1197. ***************
  1198. *** 1403,1407 ****
  1199.   #ifdef LOCKF
  1200. !     if (lockf(LockFd, F_LOCK, 0) < 0)
  1201.   #else
  1202. !      if (flock(LockFd, LOCK_EX) < 0)
  1203.   #endif
  1204. --- 1408,1412 ----
  1205.   #ifdef LOCKF
  1206. !     if (lockf(LockFd, F_LOCK, 0L) < 0)
  1207.   #else
  1208. !     if (flock(LockFd, LOCK_EX) < 0)
  1209.   #endif
  1210. Index: inews.c
  1211. Prereq: 2.80
  1212. *** .d/inews.c    Wed Oct  7 16:52:59 1987
  1213. --- inews.c    Wed Oct  7 18:49:10 1987
  1214. ***************
  1215. *** 19,21 ****
  1216.   #ifdef SCCSID
  1217. ! static char    *SccsId = "@(#)inews.c    2.80    4/10/87";
  1218.   #endif /* SCCSID */
  1219. --- 19,21 ----
  1220.   #ifdef SCCSID
  1221. ! static char    *SccsId = "@(#)inews.c    2.81    10/7/87";
  1222.   #endif /* SCCSID */
  1223. ***************
  1224. *** 34,36 ****
  1225.   #ifdef BSD4_2
  1226. - # include <sys/dir.h>
  1227.   # include <sys/file.h>
  1228. --- 34,35 ----
  1229. ***************
  1230. *** 37,39 ****
  1231.   #else    /* !BSD4_2 */
  1232. - # include "ndir.h"
  1233.   # if defined(USG) && !defined(LOCKF)
  1234. --- 36,37 ----
  1235. ***************
  1236. *** 127,129 ****
  1237.   
  1238. !     /* uuxqt doesn't close all it's files */
  1239.       for (i = 3; !close(i); i++)
  1240. --- 125,127 ----
  1241.   
  1242. !     /* uuxqt doesn't close all its files */
  1243.       for (i = 3; !close(i); i++)
  1244. ***************
  1245. *** 144,146 ****
  1246.   # else /* !F_RDLCK */
  1247. !     if (lockf(fileno(actfp), F_TLOCK, 0) < 0) {
  1248.   # endif /* !F_RDLCK */
  1249. --- 142,144 ----
  1250.   # else /* !F_RDLCK */
  1251. !     if (lockf(fileno(actfp), F_TLOCK, 0L) < 0) {
  1252.   # endif /* !F_RDLCK */
  1253. ***************
  1254. *** 173,175 ****
  1255.   #ifdef    LOCKF
  1256. !         (void) lockf(fileno(actfp), F_ULOCK, 0);
  1257.   #else    /* !LOCKF */
  1258. --- 171,173 ----
  1259.   #ifdef    LOCKF
  1260. !         (void) lockf(fileno(actfp), F_ULOCK, 0L);
  1261.   #else    /* !LOCKF */
  1262. ***************
  1263. *** 193,195 ****
  1264.   
  1265. !     if (!strncmp(ptr+1, "rnews", 5)) {
  1266.           mode = PROC;
  1267. --- 191,193 ----
  1268.   
  1269. !     if (!STRNCMP(ptr+1, "rnews", 5)) {
  1270.           mode = PROC;
  1271. ***************
  1272. *** 228,229 ****
  1273. --- 226,234 ----
  1274.       }
  1275. +     /*
  1276. +      * Catch "filesize exceeded" signals on 4.2BSD systems
  1277. +      * - the history files may exceed this limit.
  1278. +      */
  1279. + #ifdef  SIGXFSZ
  1280. +     (void) signal(SIGXFSZ, SIG_IGN);
  1281. + #endif /* SIGXFSZ */
  1282.       uid = getuid();
  1283. ***************
  1284. *** 250,253 ****
  1285.   
  1286.       /*
  1287. !      * IHCC forces the use of 'getuser()' to prevent forgery of articles
  1288.        * by just changing $LOGNAME
  1289. --- 255,259 ----
  1290.   
  1291. + #ifndef DOGETUSER
  1292.       /*
  1293. !      * Force the use of 'getuser()' to prevent forgery of articles
  1294.        * by just changing $LOGNAME
  1295. ***************
  1296. *** 254,256 ****
  1297.        */
  1298. - #ifndef IHCC 
  1299.       if (isatty(fileno(stderr))) {
  1300. --- 260,261 ----
  1301. ***************
  1302. *** 261,263 ****
  1303.       }
  1304. ! #endif /* !IHCC */
  1305.       if (user == NULL || home == NULL)
  1306. --- 266,268 ----
  1307.       }
  1308. ! #endif /* !DOGETUSER */
  1309.       if (user == NULL || home == NULL)
  1310. ***************
  1311. *** 265,267 ****
  1312.       else {
  1313. !         if (username == NULL || username[0] == 0) {
  1314.               username = AllocCpy(user);
  1315. --- 270,272 ----
  1316.       else {
  1317. !         if (STRCMP(username, "Unknown") == 0 || username[0] == 0) {
  1318.               username = AllocCpy(user);
  1319. ***************
  1320. *** 367,369 ****
  1321.               if (header.from[0]) {
  1322. !                 (void) fixfrom(header.from);
  1323.                   if (Sflag && !Mflag && !header.approved[0] &
  1324. --- 372,374 ----
  1325.               if (header.from[0]) {
  1326. !                 (void) fixfrom(&header);
  1327.                   if (Sflag && !Mflag && !header.approved[0] &
  1328. ***************
  1329. *** 403,405 ****
  1330.   
  1331. !                 if ((p1 = strpbrk(header.path, "@ (<")) != NULL)
  1332.                       *p1 = '\0';
  1333. --- 408,410 ----
  1334.   
  1335. !                 if ((p1 = strpbrk(header.path, " (<")) != NULL)
  1336.                       *p1 = '\0';
  1337. ***************
  1338. *** 421,423 ****
  1339.               strncpy(header.organization, MYORG, BUFLEN);
  1340. !             if (strncmp(header.organization, "Frobozz", 7) == 0)
  1341.                   header.organization[0] = '\0';
  1342. --- 426,428 ----
  1343.               strncpy(header.organization, MYORG, BUFLEN);
  1344. !             if (STRNCMP(header.organization, "Frobozz", 7) == 0)
  1345.                   header.organization[0] = '\0';
  1346. ***************
  1347. *** 436,438 ****
  1348.                   } else {
  1349. -                     header.organization[0] = '\0';
  1350.                       logerr("Couldn't open %s",
  1351. --- 441,442 ----
  1352. ***************
  1353. *** 439,440 ****
  1354. --- 443,445 ----
  1355.                           header.organization);
  1356. +                     header.organization[0] = '\0';
  1357.                   }
  1358. ***************
  1359. *** 457,459 ****
  1360.               xerror("%s: Inbound news is garbled", filename);
  1361. !         input();
  1362.       }
  1363. --- 462,464 ----
  1364.               xerror("%s: Inbound news is garbled", filename);
  1365. !         input(bfr[0] != '\n');
  1366.       }
  1367. ***************
  1368. *** 468,470 ****
  1369.       /* Easy way to make control messages, since all.all.ctl is unblessed */
  1370. !     if (mode != PROC && prefix(header.title, "cmsg ") && header.ctlmsg[0] == 0)
  1371.           (void) strcpy(header.ctlmsg, &header.title[5]);
  1372. --- 473,475 ----
  1373.       /* Easy way to make control messages, since all.all.ctl is unblessed */
  1374. !     if (mode != PROC && PREFIX(header.title, "cmsg ") && header.ctlmsg[0] == 0)
  1375.           (void) strcpy(header.ctlmsg, &header.title[5]);
  1376. ***************
  1377. *** 486,490 ****
  1378.   #ifdef FASCIST
  1379. !         if (uid && uid != ROOTID && fascist(user, header.nbuf))
  1380.               xerror("User %s is not authorized to post to newsgroup %s",
  1381. !                 user, header.nbuf);
  1382.   #endif /* FASCIST */
  1383. --- 491,495 ----
  1384.   #ifdef FASCIST
  1385. !         if (uid && uid != ROOTID && fascist(username, header.nbuf))
  1386.               xerror("User %s is not authorized to post to newsgroup %s",
  1387. !                 username, header.nbuf);
  1388.   #endif /* FASCIST */
  1389. ***************
  1390. *** 498,500 ****
  1391.       if (mode != PROC)
  1392. !         input();
  1393.       if (header.intnumlines == 0 && !is_ctl)
  1394. --- 503,505 ----
  1395.       if (mode != PROC)
  1396. !         input(FALSE);
  1397.       if (header.intnumlines == 0 && !is_ctl)
  1398. ***************
  1399. *** 647,648 ****
  1400. --- 652,658 ----
  1401.           tp->tm_hour, tp->tm_min, getpid());
  1402. + #ifdef IHCC
  1403. +     log("Spooling %s into %s", header.ident, (rindex(buf,'/') + 1));
  1404. + #endif /* IHCC */
  1405.       if (LINK(sfile, buf) < 0) {
  1406. ***************
  1407. *** 731,735 ****
  1408.           }
  1409. !         if (prefix(afline, ngname)) {
  1410.               (void) sscanf(afline, "%s %ld", bfr, &ngsize);
  1411. !             if (strcmp(bfr, ngname) == 0) {
  1412.                   if (ngsize < 0 || ngsize > 99998) {
  1413. --- 741,745 ----
  1414.           }
  1415. !         if (PREFIX(afline, ngname)) {
  1416.               (void) sscanf(afline, "%s %ld", bfr, &ngsize);
  1417. !             if (STRCMP(bfr, ngname) == 0) {
  1418.                   if (ngsize < 0 || ngsize > 99998) {
  1419. ***************
  1420. *** 873,875 ****
  1421.   #ifdef ZAPNOTES
  1422. !     if (strncmp(header.title, "Re: Orphaned Response", 21) == 0) {
  1423.           logerr("Orphaned Response, moved to junk");
  1424. --- 883,885 ----
  1425.   #ifdef ZAPNOTES
  1426. !     if (STRNCMP(header.title, "Re: Orphaned Response", 21) == 0) {
  1427.           logerr("Orphaned Response, moved to junk");
  1428. ***************
  1429. *** 916,918 ****
  1430.                       LIB);
  1431. !         } while (strcmp(bfr, "backbone") != 0 && !ngmatch(is_mod, bfr));
  1432.           (void) fclose(mfd);
  1433. --- 926,928 ----
  1434.                       LIB);
  1435. !         } while (STRCMP(bfr, "backbone") != 0 && !ngmatch(is_mod, bfr));
  1436.           (void) fclose(mfd);
  1437. ***************
  1438. *** 929,931 ****
  1439.               xerror("Can't send mail to %s", mhdr.path);
  1440. !         fprintf(mfd, "To: %s\n", replyname(mhdr.path));
  1441.           lhwrite(&header, mfd);
  1442. --- 939,941 ----
  1443.               xerror("Can't send mail to %s", mhdr.path);
  1444. !         fprintf(mfd, "To: %s\n", replyname(&mhdr));
  1445.           lhwrite(&header, mfd);
  1446. ***************
  1447. *** 1033,1034 ****
  1448. --- 1043,1051 ----
  1449.           savehist(histline);
  1450. +         if (header.supersedes[0] != '\0') {
  1451. +             char *av[2];
  1452. +             av[0] = "cancel";
  1453. +             av[1] = header.supersedes;
  1454. +             c_cancel(2, av);
  1455. +         }
  1456.           broadcast(mode==PROC);
  1457. ***************
  1458. *** 1039,1041 ****
  1459.   
  1460. ! input()
  1461.   {
  1462. --- 1056,1058 ----
  1463.   
  1464. ! input(usegunk)
  1465.   {
  1466. ***************
  1467. *** 1050,1052 ****
  1468.       tmpfp = xfopen(mktemp(INFILE), "w");
  1469. !     while (!SigTrap && fgets(bfr, BUFLEN, infp) != NULL) {
  1470.            if (mode == PROC) {    /* zap trailing empty lines */
  1471. --- 1067,1075 ----
  1472.       tmpfp = xfopen(mktemp(INFILE), "w");
  1473. !     for ( ; ; ) {
  1474. !         if (SigTrap)
  1475. !             break;
  1476. !         if (usegunk)
  1477. !             usegunk = FALSE;
  1478. !         else if (fgets(bfr, BUFLEN, infp) != bfr)
  1479. !             break;
  1480.            if (mode == PROC) {    /* zap trailing empty lines */
  1481. ***************
  1482. *** 1089,1091 ****
  1483.            }
  1484. !         if (mode != PROC && tty && strcmp(bfr, ".\n") == 0)
  1485.               break;
  1486. --- 1112,1114 ----
  1487.            }
  1488. !         if (mode != PROC && tty && STRCMP(bfr, ".\n") == 0)
  1489.               break;
  1490. ***************
  1491. *** 1202,1203 ****
  1492. --- 1225,1233 ----
  1493.   {
  1494. + #ifdef USG
  1495. +     register char *p;
  1496. +     char parent[200];
  1497. +     char sysbuf[200];
  1498. +     struct stat sbuf;
  1499. + #endif /* USG */
  1500.       if (ngname == NULL || !isalpha(ngname[0]))
  1501. ***************
  1502. *** 1205,1206 ****
  1503. --- 1235,1252 ----
  1504.   
  1505. + #ifdef USG
  1506. +     /*
  1507. +      * If the parent is 755 the setuid(getuid)
  1508. +      * will fail, and since mkdir is suid, and our real uid is random,
  1509. +      * the mkdir will fail.  So we have to temporarily chmod it to 777.
  1510. +      */
  1511. +     (void) strcpy(parent, fulldir);
  1512. +     while (p = rindex(parent, '/')) {
  1513. +         *p = '\0';
  1514. +         if (stat(parent, &sbuf) == 0) {
  1515. +             (void) chmod(parent, 0777);
  1516. +             break;
  1517. +         }
  1518. +     }
  1519. + #endif /* USG */
  1520.       /* Create the directory */
  1521. ***************
  1522. *** 1207,1209 ****
  1523.       mkparents(fulldir);
  1524.       if (mkdir(fulldir, 0777) < 0)
  1525. --- 1253,1254 ----
  1526. ***************
  1527. *** 1211,1212 ****
  1528. --- 1256,1277 ----
  1529.   
  1530. + #ifdef USG
  1531. +     /*
  1532. +      * Give away the directories we just created which were assigned
  1533. +      * our real uid.
  1534. +      */
  1535. +     (void) setuid(uid);
  1536. +     (void) chown(fulldir, duid, dgid);
  1537. +     (void) strcpy(sysbuf, fulldir);
  1538. +     while (p = rindex(sysbuf, '/')) {
  1539. +         *p = '\0';
  1540. +         /* stop when get to last known good parent */
  1541. +         if (strcmp(sysbuf, parent) == 0)
  1542. +             break;
  1543. +         (void) chown(sysbuf, duid, dgid);
  1544. +     }
  1545. +     (void) setuid(duid);
  1546. +     (void) chmod(parent, (int)sbuf.st_mode);    /* put it back */
  1547. + #endif /* USG */
  1548.       log("make newsgroup %s in dir %s", ngname, fulldir);
  1549. ***************
  1550. *** 1234,1251 ****
  1551.   
  1552. - cancel()
  1553. - {
  1554. -     register FILE *fp;
  1555. -     log("cancel article %s", filename);
  1556. -     fp = fopen(filename, "r");
  1557. -     if (fp == NULL) {
  1558. -         log("article %s not found", filename);
  1559. -         return;
  1560. -     }
  1561. -     if (hread(&header, fp, TRUE) == NULL)
  1562. -         error("Article is garbled.");
  1563. -     (void) fclose(fp);
  1564. -     (void) unlink(filename);
  1565. - }
  1566.   dounspool()
  1567. --- 1299,1300 ----
  1568. ***************
  1569. *** 1274,1276 ****
  1570.       LockFd = xfopen(SEQFILE, "r+w");
  1571. !     if (lockf(fileno(LockFd), F_TLOCK, 0) < 0) {
  1572.           if (errno != EAGAIN && errno != EACCES)
  1573. --- 1323,1325 ----
  1574.       LockFd = xfopen(SEQFILE, "r+w");
  1575. !     if (lockf(fileno(LockFd), F_TLOCK, 0L) < 0) {
  1576.           if (errno != EAGAIN && errno != EACCES)
  1577. ***************
  1578. *** 1302,1303 ****
  1579. --- 1351,1357 ----
  1580.                   continue;
  1581. + #ifdef IHCC
  1582. +             log("Unspooling from %s", dir->d_name);
  1583. + #endif /* IHCC */
  1584.               if ((pid=vfork()) == -1)
  1585. ***************
  1586. *** 1305,1307 ****
  1587.               if (pid == 0) {
  1588. ! #ifdef IHCC
  1589.                   char bufr[BUFSIZ];
  1590. --- 1359,1361 ----
  1591.               if (pid == 0) {
  1592. ! #ifdef LOGDIR
  1593.                   char bufr[BUFSIZ];
  1594. ***************
  1595. *** 1310,1312 ****
  1596.                       (char *) NULL);
  1597. ! #else /* !IHCC */
  1598.                   execl(RNEWS, "rnews", "-S", "-p", dir->d_name,
  1599. --- 1364,1366 ----
  1600.                       (char *) NULL);
  1601. ! #else /* !LOGDIR */
  1602.                   execl(RNEWS, "rnews", "-S", "-p", dir->d_name,
  1603. ***************
  1604. *** 1313,1315 ****
  1605.                       (char *) NULL);
  1606. ! #endif /* !IHCC */
  1607.                   _exit(1);
  1608. --- 1367,1369 ----
  1609.                       (char *) NULL);
  1610. ! #endif /* !LOGDIR */
  1611.                   _exit(1);
  1612. ***************
  1613. *** 1328,1331 ****
  1614.                   (void) LINK(dir->d_name, bfr);
  1615. !                 logerr("rnews failed, status %d. Batch saved in %s/%s",
  1616. !                     status, SPOOL, dir->d_name);
  1617.               }
  1618. --- 1382,1385 ----
  1619.                   (void) LINK(dir->d_name, bfr);
  1620. !                 logerr("rnews failed, status %ld. Batch saved in %s/%s",
  1621. !                     (long)status, SPOOL, dir->d_name);
  1622.               }
  1623. ***************
  1624. *** 1336,1338 ****
  1625. --- 1390,1396 ----
  1626.       } while (foundsome); /* keep rereading the directory until it's empty */
  1627. + #ifndef LOCKF
  1628. + #ifndef BSD4_2
  1629.       (void) UNLINK(spbuf);
  1630. + #endif
  1631. + #endif
  1632.   
  1633. Index: ndir.h
  1634. Prereq: 1.6
  1635. *** .d/ndir.h    Wed Oct  7 16:53:38 1987
  1636. --- ndir.h    Wed Oct  7 18:49:10 1987
  1637. ***************
  1638. *** 1,2 ****
  1639. ! /* @(#)ndir.h    1.6    3/9/87    */
  1640.   #if defined(HP9K5)
  1641. --- 1,2 ----
  1642. ! /*    @(#)ndir.h    1.7    10/7/87    */
  1643.   #if defined(HP9K5)
  1644. ***************
  1645. *** 3,5 ****
  1646.   /* He should have included it instead of this, but prevent confusion */
  1647. ! #include <sys/ndir.h>
  1648.   #else /* other */
  1649. --- 3,5 ----
  1650.   /* He should have included it instead of this, but prevent confusion */
  1651. ! #include <ndir.h>
  1652.   #else /* other */
  1653. Index: params.h
  1654. Prereq: 2.23
  1655. *** .d/params.h    Wed Oct  7 16:53:41 1987
  1656. --- params.h    Wed Oct  7 18:49:11 1987
  1657. ***************
  1658. *** 4,6 ****
  1659.   
  1660. ! /*    @(#)params.h    2.23    4/6/87    */
  1661.   
  1662. --- 4,6 ----
  1663.   
  1664. ! /*    @(#)params.h    2.24    10/7/87    */
  1665.   
  1666. ***************
  1667. *** 125 ****
  1668. --- 125,160 ----
  1669.   #endif
  1670. + #ifdef M_XENIX
  1671. + /* fake SVID adivsory locking with xenix routines */
  1672. + #define lockf    locking
  1673. + #define F_ULOCK    0
  1674. + #define F_LOCK    3
  1675. + #define F_TLOCK    4
  1676. + #endif /* M_XENIX */
  1677. + #ifdef IHCC
  1678. + #define DOGETUSERS
  1679. + #define LOGDIR
  1680. + #endif /* IHCC */
  1681. + #ifdef BSD4_2
  1682. + #define MKDIR_SUB
  1683. + #define READDIR
  1684. + #endif /* BSD4_2 */
  1685. + #ifdef READDIR
  1686. + #include <sys/dir.h>
  1687. + #else /* !READDIR */
  1688. + #include "ndir.h"
  1689. + #endif /* !READDIR */
  1690. + #if defined(DBM) && !defined(M_XENIX)
  1691. + typedef struct {
  1692. +     char *dptr;
  1693. +     int dsize;
  1694. + } datum;
  1695. + #endif /* DBM &! XENIX */
  1696. + #define STRCMP(a,b)  ((*(a) != *(b)) ? (*(a)-*(b)) : strcmp((a)+1, (b)+1))
  1697. + #define STRNCMP(a,b,n)  ((*(a) != *(b)) ? (*(a)-*(b)) : strncmp(a, b, n))
  1698. + #define PREFIX(a,b)  ((*(a) != *(b)) ? FALSE : prefix((a)+1, (b)+1))
  1699. Index: pathinit.c
  1700. Prereq: 1.23
  1701. *** .d/pathinit.c    Wed Oct  7 16:53:49 1987
  1702. --- pathinit.c    Wed Oct  7 18:49:13 1987
  1703. ***************
  1704. *** 36,38 ****
  1705.   #ifdef SCCSID
  1706. ! static char    *SccsId = "@(#)pathinit.c    1.23    4/6/87";
  1707.   #endif /* SCCSID */
  1708. --- 36,38 ----
  1709.   #ifdef SCCSID
  1710. ! static char    *SccsId = "@(#)pathinit.c    1.24    10/7/87";
  1711.   #endif /* SCCSID */
  1712. ***************
  1713. *** 54,56 ****
  1714.   char *SPOOL, *LIB, *BIN, *ACTIVE, *SUBFILE, *ARTFILE,
  1715. !     *username, *userhome;
  1716.   
  1717. --- 54,56 ----
  1718.   char *SPOOL, *LIB, *BIN, *ACTIVE, *SUBFILE, *ARTFILE,
  1719. !     *username = "Unknown", *userhome;
  1720.   
  1721. ***************
  1722. *** 128,130 ****
  1723.       /* old compatibility code, remove when HIDDENNET is used no more */
  1724. !     if (strcmp(ubuf.nodename, HIDDENNET) != 0)
  1725.           (void) sprintf(buf, "%s.%s%s", ubuf.nodename, HIDDENNET,
  1726. --- 128,130 ----
  1727.       /* old compatibility code, remove when HIDDENNET is used no more */
  1728. !     if (STRCMP(ubuf.nodename, HIDDENNET) != 0)
  1729.           (void) sprintf(buf, "%s.%s%s", ubuf.nodename, HIDDENNET,
  1730. ***************
  1731. *** 166,168 ****
  1732.   
  1733. ! #ifdef IHCC
  1734.       (void) sprintf(bfr, "%s/%s", logdir(HOME), BINDIR);
  1735. --- 166,168 ----
  1736.   
  1737. ! #ifdef LOGDIR
  1738.       (void) sprintf(bfr, "%s/%s", logdir(HOME), BINDIR);
  1739. ***************
  1740. *** 169,173 ****
  1741.       BIN = AllocCpy(bfr);
  1742. ! #else /* !IHCC */
  1743.       Sprintf(BIN, "%s", BINDIR);
  1744. ! #endif /* !IHCC */
  1745.   
  1746. --- 169,173 ----
  1747.       BIN = AllocCpy(bfr);
  1748. ! #else /* !LOGDIR */
  1749.       Sprintf(BIN, "%s", BINDIR);
  1750. ! #endif /* !LOGDIR */
  1751.   
  1752. ***************
  1753. *** 303,305 ****
  1754.        */
  1755. !     if(strcmp(what, "all") == 0) {
  1756.           for(mp=msgtype; mp->m_name; mp++) {
  1757. --- 303,305 ----
  1758.        */
  1759. !     if(STRCMP(what, "all") == 0) {
  1760.           for(mp=msgtype; mp->m_name; mp++) {
  1761. ***************
  1762. *** 314,316 ****
  1763.       for(mp=msgtype; mp->m_name; mp++)
  1764. !         if(strcmp(mp->m_name, what) == 0) {
  1765.               mp->m_who_to = AllocCpy(to);
  1766. --- 314,316 ----
  1767.       for(mp=msgtype; mp->m_name; mp++)
  1768. !         if(STRCMP(mp->m_name, what) == 0) {
  1769.               mp->m_who_to = AllocCpy(to);
  1770. Index: postnews.c
  1771. Prereq: 1.31
  1772. *** .d/postnews.c    Wed Oct  7 16:54:01 1987
  1773. --- postnews.c    Wed Oct  7 18:49:17 1987
  1774. ***************
  1775. *** 19,21 ****
  1776.   #ifdef SCCSID
  1777. ! static char    *SccsId = "@(#)postnews.c    1.31    3/21/87";
  1778.   #endif /* SCCSID */
  1779. --- 19,21 ----
  1780.   #ifdef SCCSID
  1781. ! static char    *SccsId = "@(#)postnews.c    1.32    10/7/87";
  1782.   #endif /* SCCSID */
  1783. ***************
  1784. *** 24,25 ****
  1785. --- 24,28 ----
  1786.   
  1787. + # ifndef ROOTID
  1788. + extern int ROOTID;
  1789. + # endif
  1790.   #define APPEND 1
  1791. ***************
  1792. *** 69,71 ****
  1793.       if (argc == 2) {
  1794. !         if (!prefix(argv[1], SPOOL))
  1795.               xerror("Can only followup to articles in %s", SPOOL);
  1796. --- 72,74 ----
  1797.       if (argc == 2) {
  1798. !         if (!PREFIX(argv[1], SPOOL))
  1799.               xerror("Can only followup to articles in %s", SPOOL);
  1800. ***************
  1801. *** 171,177 ****
  1802.   #ifdef PAGE
  1803. ! # ifdef IHCC
  1804.                       (void) sprintf(lbuf,"%s/bin/%s", logdir(HOME), PAGE);
  1805. ! # else /* !IHCC */
  1806.                       (void) strcpy(lbuf, PAGE);
  1807. ! # endif /* !IHCC */
  1808.                       pager = lbuf;
  1809. --- 174,180 ----
  1810.   #ifdef PAGE
  1811. ! # ifdef LOGDIR
  1812.                       (void) sprintf(lbuf,"%s/bin/%s", logdir(HOME), PAGE);
  1813. ! # else /* !LOGDIR */
  1814.                       (void) strcpy(lbuf, PAGE);
  1815. ! # endif /* !LOGDIR */
  1816.                       pager = lbuf;
  1817. ***************
  1818. *** 247,253 ****
  1819.   #ifdef PAGE
  1820. ! # ifdef IHCC
  1821.                   (void) sprintf(lbuf,"%s/bin/%s", logdir(HOME), PAGE);
  1822. ! # else /* !IHCC */
  1823.                   (void) strcpy(lbuf, PAGE);
  1824. ! # endif /* !IHCC */
  1825.                   pager = lbuf;
  1826. --- 250,256 ----
  1827.   #ifdef PAGE
  1828. ! # ifdef LOGDIR
  1829.                   (void) sprintf(lbuf,"%s/bin/%s", logdir(HOME), PAGE);
  1830. ! # else /* !LOGDIR */
  1831.                   (void) strcpy(lbuf, PAGE);
  1832. ! # endif /* !LOGDIR */
  1833.                   pager = lbuf;
  1834. ***************
  1835. *** 296,298 ****
  1836.           *r = '\0';
  1837. !         if (strcmp(def, "net") == 0)
  1838.               (void) strcpy(def, "world");
  1839. --- 299,301 ----
  1840.           *r = '\0';
  1841. !         if (STRCMP(def, "net") == 0)
  1842.               (void) strcpy(def, "world");
  1843. ***************
  1844. *** 303,305 ****
  1845.   
  1846. !     if (strcmp(def, "to") == 0) {
  1847.           /*
  1848. --- 306,308 ----
  1849.   
  1850. !     if (STRCMP(def, "to") == 0) {
  1851.           /*
  1852. ***************
  1853. *** 317,319 ****
  1854.       for (i=0; distr[i].abbr[0]; i++) {
  1855. !         if (strcmp(distr[i].abbr, def) == 0)
  1856.               break;
  1857. --- 320,322 ----
  1858.       for (i=0; distr[i].abbr[0]; i++) {
  1859. !         if (STRCMP(distr[i].abbr, def) == 0)
  1860.               break;
  1861. ***************
  1862. *** 327,329 ****
  1863.               if (distribution[0] == '\0') {
  1864. !                 if (strcmp(def, "*None*") == 0)
  1865.                       printf("You must enter a distribution, '?' for help.\n");
  1866. --- 330,332 ----
  1867.               if (distribution[0] == '\0') {
  1868. !                 if (STRCMP(def, "*None*") == 0)
  1869.                       printf("You must enter a distribution, '?' for help.\n");
  1870. ***************
  1871. *** 331,333 ****
  1872.               }
  1873. !         } while (strcmp(distribution, "*None*") == 0);
  1874.   
  1875. --- 334,336 ----
  1876.               }
  1877. !         } while (STRCMP(distribution, "*None*") == 0);
  1878.   
  1879. ***************
  1880. *** 348,350 ****
  1881.           }
  1882. !         if (strcmp(distribution, def) != 0)
  1883.               printf("Type ? for help.\n");
  1884. --- 351,353 ----
  1885.           }
  1886. !         if (STRCMP(distribution, def) != 0)
  1887.               printf("Type ? for help.\n");
  1888. ***************
  1889. *** 356,358 ****
  1890.                   while (r = index(r, NGDELIM))
  1891. !                     if (!prefix(++r, def))
  1892.                           break;
  1893. --- 359,361 ----
  1894.                   while (r = index(r, NGDELIM))
  1895. !                     if (!PREFIX(++r, def))
  1896.                           break;
  1897. ***************
  1898. *** 379,381 ****
  1899.               *r = '\0';
  1900. !             if (strcmp(def, "net") == 0)
  1901.                   strcpy(def, "world");
  1902. --- 382,384 ----
  1903.               *r = '\0';
  1904. !             if (STRCMP(def, "net") == 0)
  1905.                   strcpy(def, "world");
  1906. ***************
  1907. *** 410,412 ****
  1908.       fprintf(tf, "Newsgroups: %s\n", newsgroups);
  1909. !     if (distribution[0] != '\0' && strcmp(distribution, "world"))
  1910.           fprintf(tf, "Distribution: %s\n", distribution);
  1911. --- 413,415 ----
  1912.       fprintf(tf, "Newsgroups: %s\n", newsgroups);
  1913. !     if (distribution[0] != '\0' && STRCMP(distribution, "world"))
  1914.           fprintf(tf, "Distribution: %s\n", distribution);
  1915. ***************
  1916. *** 455,457 ****
  1917.       p = editor + strlen(editor) - 2;
  1918. !     if (strcmp(p, "vi") == 0)
  1919.           endflag = "+";
  1920. --- 458,460 ----
  1921.       p = editor + strlen(editor) - 2;
  1922. !     if (STRCMP(p, "vi") == 0)
  1923.           endflag = "+";
  1924. ***************
  1925. *** 550,552 ****
  1926.   
  1927. !     if (ngmatch(newsgroups, "comp.sources.all,!comp.sources.wanted")) {
  1928.           if (!article_line(tempfname, "Subject: ", group)) {
  1929. --- 553,555 ----
  1930.   
  1931. !     if (ngmatch(newsgroups, "comp.sources.all,!comp.sources.wanted,!comp.sources.d")) {
  1932.           if (!article_line(tempfname, "Subject: ", group)) {
  1933. ***************
  1934. *** 600,602 ****
  1935.   
  1936. !     if (prefix(str, "Re:"))
  1937.           return (FALSE);
  1938. --- 603,605 ----
  1939.   
  1940. !     if (PREFIX(str, "Re:"))
  1941.           return (FALSE);
  1942. ***************
  1943. *** 745,747 ****
  1944.               break;
  1945. !         if (strcmp(distr[i].abbr, "default") == 0)
  1946.               strcpy(def_distr, distr[i--].descr);
  1947. --- 748,750 ----
  1948.               break;
  1949. !         if (STRCMP(distr[i].abbr, "default") == 0)
  1950.               strcpy(def_distr, distr[i--].descr);
  1951. ***************
  1952. *** 839,841 ****
  1953.       while (fgets(lbfr, BUFLEN, fpart) != NULL) {
  1954. !         if (prefix(lbfr, field)) {
  1955.               found = TRUE;
  1956. --- 842,844 ----
  1957.       while (fgets(lbfr, BUFLEN, fpart) != NULL) {
  1958. !         if (PREFIX(lbfr, field)) {
  1959.               found = TRUE;
  1960. ***************
  1961. *** 896,898 ****
  1962.               
  1963. !         if (strcmp(ng_check, ng) == 0) {
  1964.               (void) fclose(fp);
  1965. --- 899,901 ----
  1966.               
  1967. !         if (STRCMP(ng_check, ng) == 0) {
  1968.               (void) fclose(fp);
  1969. ***************
  1970. *** 925,927 ****
  1971.       fp = xfopen(article,"r");
  1972. !     while ((c=fgets(line,BUFLEN,fp)) != NULL && !prefix(line, field))
  1973.           if (line[0] == '\n') {
  1974. --- 928,930 ----
  1975.       fp = xfopen(article,"r");
  1976. !     while ((c=fgets(line,BUFLEN,fp)) != NULL && !PREFIX(line, field))
  1977.           if (line[0] == '\n') {
  1978. ***************
  1979. *** 969,974 ****
  1980.           (void) strcpy(newsgroups, buf+12);
  1981. !     if (ngmatch(newsgroups, "misc.jobs")) {
  1982. !         printf("misc.jobs is for the direct posting of job announcements and requests.\n");
  1983. !         printf("it is not for discussion. You followup has been directed to misc.misc\n");
  1984. !         (void) strcpy(newsgroups,"misc.misc");
  1985.       }
  1986. --- 972,977 ----
  1987.           (void) strcpy(newsgroups, buf+12);
  1988. !     if (ngmatch(newsgroups, "misc.jobs.all,!misc.jobs.misc")) {
  1989. !         printf("Your followup has been directed to misc.jobs.misc\n");
  1990. !         printf("It is the proper place for followup discussions\n");
  1991. !         (void) strcpy(newsgroups,"misc.jobs.misc");
  1992.       }
  1993. ***************
  1994. *** 1005,1007 ****
  1995.           (void) strcpy(newsgroups, buf+13);
  1996. !         if (strcmp(newsgroups, "poster") == 0)
  1997.               byebye("Mail followups directly to poster.");
  1998. --- 1008,1010 ----
  1999.           (void) strcpy(newsgroups, buf+13);
  2000. !         if (STRCMP(newsgroups, "poster") == 0)
  2001.               byebye("Mail followups directly to poster.");
  2002. ***************
  2003. *** 1104,1107 ****
  2004.                   putc(c, stderr);
  2005.               fprintf(stderr, "Do you understand this?  Hit <return> to proceed, <BREAK> to abort: ");
  2006. !             n = read(2, recbuf, 100);
  2007.               c = recbuf[0];
  2008. --- 1107,1112 ----
  2009.                   putc(c, stderr);
  2010. +             fclose(fd);
  2011.               fprintf(stderr, "Do you understand this?  Hit <return> to proceed, <BREAK> to abort: ");
  2012. !             fflush(stderr);
  2013. !             n = read(0, recbuf, 100);
  2014.               c = recbuf[0];
  2015. ***************
  2016. *** 1120,1122 ****
  2017.   
  2018. ! #if !defined(BSD4_2) && !defined(BSD4_1C)
  2019.   rename(from,to)
  2020. --- 1125,1127 ----
  2021.   
  2022. ! #if !defined(BSD4_2)
  2023.   rename(from,to)
  2024. Index: sendbatch.sh
  2025. Prereq: 1.11
  2026. *** .d/sendbatch.sh    Wed Oct  7 16:54:54 1987
  2027. --- sendbatch.sh    Wed Oct  7 18:49:17 1987
  2028. ***************
  2029. *** 1,2 ****
  2030. ! : '@(#)sendbatch.sh    1.11    9/24/87'
  2031.   
  2032. --- 1,2 ----
  2033. ! : '@(#)sendbatch.sh    1.12    10/7/87'
  2034.   
  2035. ***************
  2036. *** 43,46 ****
  2037.       : make sure $? is zero
  2038. !     testit="-s BATCHDIR/$rmt -o "
  2039. !     while test $? -eq 0 -a \( $testit -s /usr/spool/batch/$rmt.work -o  \( -n "$DOIHAVE" -a -s /usr/spool/batch/$rmt.ihave \) \)
  2040.       do
  2041. --- 43,46 ----
  2042.       : make sure $? is zero
  2043. !     testit="yes"
  2044. !     while test $? -eq 0 -a \( \( -n "$testit" -s BATCHDIR/$rmt \) -o -s BATCHDIR/$rmt.work -o  \( -n "$DOIHAVE" -a -s BATCHDIR/$rmt.ihave \) \)
  2045.       do
  2046. Index: rfuncs.c
  2047. Prereq: 2.40
  2048. *** .d/rfuncs.c    Wed Oct  7 16:54:45 1987
  2049. --- rfuncs.c    Wed Oct  7 18:49:19 1987
  2050. ***************
  2051. *** 18,20 ****
  2052.   #ifdef SCCSID
  2053. ! static char    *SccsId = "@(#)rfuncs.c    2.40    2/22/87";
  2054.   #endif /* SCCSID */
  2055. --- 18,20 ----
  2056.   #ifdef SCCSID
  2057. ! static char    *SccsId = "@(#)rfuncs.c    2.41    10/7/87";
  2058.   #endif /* SCCSID */
  2059. ***************
  2060. *** 93,95 ****
  2061.       last = 1;
  2062. !     if (strcmp(name, bfr)) {
  2063.           af = xfopen(ACTIVE, "r");
  2064. --- 93,95 ----
  2065.       last = 1;
  2066. !     if (STRCMP(name, bfr)) {
  2067.           af = xfopen(ACTIVE, "r");
  2068. ***************
  2069. *** 97,99 ****
  2070.               if (sscanf(buf, "%s %ld %ld", n, &s, &sm) == 3 &&
  2071. !                  strcmp(n, name) == 0) {
  2072.                   ngsize = s;
  2073. --- 97,99 ----
  2074.               if (sscanf(buf, "%s %ld %ld", n, &s, &sm) == 3 &&
  2075. !                  STRCMP(n, name) == 0) {
  2076.                   ngsize = s;
  2077. ***************
  2078. *** 247,249 ****
  2079.       register char    *ptr, *fname;
  2080. !     int    news = 0;
  2081.       register int i;
  2082. --- 247,249 ----
  2083.       register char    *ptr, *fname;
  2084. !     int    isnews = FALSE;
  2085.       register int i;
  2086. ***************
  2087. *** 299,301 ****
  2088.               putc('\n', ofp);
  2089. !             news = TRUE;
  2090.               (void) fclose(fp);
  2091. --- 299,301 ----
  2092.               putc('\n', ofp);
  2093. !             isnews = TRUE;
  2094.               (void) fclose(fp);
  2095. ***************
  2096. *** 306,308 ****
  2097.       (void) fclose(ofp);
  2098. !     if (!news) {
  2099.           fprintf(stderr, "No news.\n");
  2100. --- 306,308 ----
  2101.       (void) fclose(ofp);
  2102. !     if (!isnews) {
  2103.           fprintf(stderr, "No news.\n");
  2104. ***************
  2105. *** 333,335 ****
  2106.               *ptr = 0;
  2107. !             if (strcmp(bfr, groupdir))
  2108.                   continue;
  2109. --- 333,335 ----
  2110.               *ptr = 0;
  2111. !             if (STRCMP(bfr, groupdir))
  2112.                   continue;
  2113. ***************
  2114. *** 472,474 ****
  2115.           return FALSE;
  2116. !     if (fflag && (hp->followid[0] || prefix(hp->title, "Re:")))
  2117.           return FALSE;
  2118. --- 472,474 ----
  2119.           return FALSE;
  2120. !     if (fflag && (hp->followid[0] || PREFIX(hp->title, "Re:")))
  2121.           return FALSE;
  2122. ***************
  2123. *** 499,501 ****
  2124.           }
  2125. !         if (strcmp(g, groupdir) == 0)
  2126.               return flag;
  2127. --- 499,501 ----
  2128.           }
  2129. !         if (STRCMP(g, groupdir) == 0)
  2130.               return flag;
  2131. ***************
  2132. *** 569,571 ****
  2133.           if (lentab[i] == len && rcline[i] != NULL &&
  2134. !             strncmp(name, rcline[i], len) == 0)
  2135.               return prev = i;
  2136. --- 569,571 ----
  2137.           if (lentab[i] == len && rcline[i] != NULL &&
  2138. !             STRNCMP(name, rcline[i], len) == 0)
  2139.               return prev = i;
  2140. ***************
  2141. *** 683,685 ****
  2142.           while (++lastline < tp->rcindex) {
  2143. !             if (strncmp(rcline[lastline], "options ", 8) == 0) {
  2144.                   fprintf(nfp, "%s\n", rcline[lastline]);
  2145. --- 683,685 ----
  2146.           while (++lastline < tp->rcindex) {
  2147. !             if (STRNCMP(rcline[lastline], "options ", 8) == 0) {
  2148.                   fprintf(nfp, "%s\n", rcline[lastline]);
  2149. ***************
  2150. *** 706,712 ****
  2151.   
  2152. - #if defined(BSD4_2) || defined(BSD4_1C)
  2153. - #include <sys/dir.h>
  2154. - # else
  2155. - #include "ndir.h"
  2156. - #endif
  2157.   #include <errno.h>
  2158. --- 706,707 ----
  2159. ***************
  2160. *** 713,714 ****
  2161. --- 708,718 ----
  2162.   
  2163. + #ifdef SMALL_ADDRESS_SPACE
  2164. + list_group(lgroup, displines, flag, pngsize)
  2165. + char *lgroup;
  2166. + int displines, flag;
  2167. + long pngsize;
  2168. + {
  2169. +     printf("Not enough memory on your machine to include this function.\n");}
  2170. + #else /* !SMALL_ADDRESS_SPACE */
  2171.   /*
  2172. ***************
  2173. *** 768,770 ****
  2174.           if (flag == FALSE) {
  2175. !             if (get(i) == 0)
  2176.                   continue;
  2177. --- 772,774 ----
  2178.           if (flag == FALSE) {
  2179. !             if (get((long)i) == 0)
  2180.                   continue;
  2181. ***************
  2182. *** 845 ****
  2183. --- 849,850 ----
  2184.   }
  2185. + #endif /* !SMALL_ADDRESS_SPACE */
  2186. Index: readr.c
  2187. Prereq: 2.61
  2188. *** .d/readr.c    Wed Oct  7 16:54:20 1987
  2189. --- readr.c    Wed Oct  7 18:49:22 1987
  2190. ***************
  2191. *** 18,20 ****
  2192.   #ifdef SCCSID
  2193. ! static char    *SccsId = "@(#)readr.c    2.61    3/21/87";
  2194.   #endif /* SCCSID */
  2195. --- 18,20 ----
  2196.   #ifdef SCCSID
  2197. ! static char    *SccsId = "@(#)readr.c    2.62    10/7/87";
  2198.   #endif /* SCCSID */
  2199. ***************
  2200. *** 22,28 ****
  2201.   #include "rparams.h"
  2202. - #if defined(BSD4_2) || defined(BSD4_1C)
  2203. - #include <sys/dir.h>
  2204. - #else
  2205. - #include "ndir.h"
  2206. - #endif /* !BSD4_2 && !BSD4_1C */
  2207.   #include <setjmp.h>
  2208. --- 22,23 ----
  2209. ***************
  2210. *** 394,396 ****
  2211.           obit = bit;
  2212. !         if (strcmp(groupdir, ogroupdir)) {
  2213.               (void) strcpy(bfr, groupdir);
  2214. --- 389,391 ----
  2215.           obit = bit;
  2216. !         if (STRCMP(groupdir, ogroupdir)) {
  2217.               (void) strcpy(bfr, groupdir);
  2218. ***************
  2219. *** 528,530 ****
  2220.           if (!ptr2) {
  2221. !             if (strcmp(ptr3, "cancelled") == 0) {
  2222.                   fprintf(ofp, "Article %s has been cancelled.\n",
  2223. --- 523,525 ----
  2224.           if (!ptr2) {
  2225. !             if (STRCMP(ptr3, "cancelled") == 0) {
  2226.                   fprintf(ofp, "Article %s has been cancelled.\n",
  2227. ***************
  2228. *** 547,549 ****
  2229.           (void) strcpy(ogroupdir, ptr3);
  2230. !         if (strcmp(groupdir, ogroupdir)) {
  2231.               (void) strcpy(bfr, groupdir);
  2232. --- 542,544 ----
  2233.           (void) strcpy(ogroupdir, ptr3);
  2234. !         if (STRCMP(groupdir, ogroupdir)) {
  2235.               (void) strcpy(bfr, groupdir);
  2236. ***************
  2237. *** 560,562 ****
  2238.           (void) getnextart(TRUE);
  2239. !         if (bit != i || strcmp(groupdir, ptr3) != 0) {
  2240.               (void) fprintf(ofp, "Can't read %s/%ld.\n", ptr3, i);
  2241. --- 555,557 ----
  2242.           (void) getnextart(TRUE);
  2243. !         if (bit != i || STRCMP(groupdir, ptr3) != 0) {
  2244.               (void) fprintf(ofp, "Can't read %s/%ld.\n", ptr3, i);
  2245. ***************
  2246. *** 569,571 ****
  2247.       case 'f':
  2248. !         if (strcmp(h->followto, "poster") == 0) {
  2249.               (void) reply_command();
  2250. --- 564,566 ----
  2251.       case 'f':
  2252. !         if (STRCMP(h->followto, "poster") == 0) {
  2253.               (void) reply_command();
  2254. ***************
  2255. *** 585,587 ****
  2256.           if (rfq || *bptr == '-') {
  2257. !             if (strcmp(groupdir, ogroupdir)) {
  2258.                   i = bit;
  2259. --- 580,582 ----
  2260.           if (rfq || *bptr == '-') {
  2261. !             if (STRCMP(groupdir, ogroupdir)) {
  2262.                   i = bit;
  2263. ***************
  2264. *** 658,660 ****
  2265.           *ptr1 = 0;
  2266. !     notauthor = strcmp(username, rcbuf);
  2267.       if (uid != ROOTID && uid && notauthor) {
  2268. --- 653,655 ----
  2269.           *ptr1 = 0;
  2270. !     notauthor = STRCMP(username, rcbuf);
  2271.       if (uid != ROOTID && uid && notauthor) {
  2272. ***************
  2273. *** 751,753 ****
  2274.           (void) strcpy(subj, bptr);
  2275. !     if (!prefix(subj, "Re:")){
  2276.           (void) strcpy(bfr, subj);
  2277. --- 746,748 ----
  2278.           (void) strcpy(subj, bptr);
  2279. !     if (!PREFIX(subj, "Re:")){
  2280.           (void) strcpy(bfr, subj);
  2281. ***************
  2282. *** 840,842 ****
  2283.       }
  2284. !     if (s_find(&srec, bptr) == NULL) {
  2285.           fprintf(ofp, "%s not in SYSFILE\n", bptr);
  2286. --- 835,837 ----
  2287.       }
  2288. !     if (s_find(&srec, bptr) == 0) {
  2289.           fprintf(ofp, "%s not in SYSFILE\n", bptr);
  2290. Index: visual.c
  2291. Prereq: 1.36
  2292. *** .d/visual.c    Wed Oct  7 16:55:47 1987
  2293. --- visual.c    Wed Oct  7 18:49:26 1987
  2294. ***************
  2295. *** 6,8 ****
  2296.   #ifdef SCCSID
  2297. ! static char    *SccsId = "@(#)visual.c    1.36    3/21/87";
  2298.   #endif /* SCCSID */
  2299. --- 6,8 ----
  2300.   #ifdef SCCSID
  2301. ! static char    *SccsId = "@(#)visual.c    1.37    10/7/87";
  2302.   #endif /* SCCSID */
  2303. ***************
  2304. *** 19,25 ****
  2305.   #include <errno.h>
  2306. - #if defined(BSD4_2) || defined(BSD4_1C)
  2307. - #include <sys/dir.h>
  2308. - #else
  2309. - #include "ndir.h"
  2310. - #endif
  2311.   #ifdef BSD4_2
  2312. --- 19,20 ----
  2313. ***************
  2314. *** 29,30 ****
  2315. --- 24,26 ----
  2316.   #endif /* BSD4_2 */
  2317.   #ifdef MYDB
  2318. ***************
  2319. *** 78,80 ****
  2320.   extern int _junked;
  2321. ! #define clearok(xxx, flag) _junked = flag
  2322.   extern int COLS;
  2323. --- 74,76 ----
  2324.   extern int _junked;
  2325. ! #define okclear() (_junked = 1)
  2326.   extern int COLS;
  2327. ***************
  2328. *** 356,358 ****
  2329.           ttycooked();
  2330. !         list_group(groupdir, countset ? count : 0,
  2331.               (c == 'l') ? FALSE : TRUE, pngsize);
  2332. --- 352,354 ----
  2333.           ttycooked();
  2334. !         list_group(groupdir, countset ? (int) count : 0,
  2335.               (c == 'l') ? FALSE : TRUE, pngsize);
  2336. ***************
  2337. *** 359,361 ****
  2338.           ttyraw();
  2339. !         clearok(curscr, 1);
  2340.           updscr();
  2341. --- 355,357 ----
  2342.           ttyraw();
  2343. !         okclear();
  2344.           updscr();
  2345. ***************
  2346. *** 386,388 ****
  2347.                       appfile(fp, lastlin + 1);
  2348. !             } while(strncmp(linebuf, "------------------------", 24)
  2349.                   != 0);
  2350. --- 382,384 ----
  2351.                       appfile(fp, lastlin + 1);
  2352. !             } while(STRNCMP(linebuf, "------------------------", 24)
  2353.                   != 0);
  2354. ***************
  2355. *** 636,638 ****
  2356.           obit = bit;
  2357. !         if (strcmp(groupdir, ogroupdir)) {
  2358.               (void) strcpy(bfr, groupdir);
  2359. --- 632,634 ----
  2360.           obit = bit;
  2361. !         if (STRCMP(groupdir, ogroupdir)) {
  2362.               (void) strcpy(bfr, groupdir);
  2363. ***************
  2364. *** 854,856 ****
  2365.           if (!ptr2) {
  2366. !             if (strcmp(ptr3, "cancelled") == 0)
  2367.                   msg("%s has been cancelled", linebuf);
  2368. --- 850,852 ----
  2369.           if (!ptr2) {
  2370. !             if (STRCMP(ptr3, "cancelled") == 0)
  2371.                   msg("%s has been cancelled", linebuf);
  2372. ***************
  2373. *** 874,876 ****
  2374.           (void) strcpy(ogroupdir, ptr3);
  2375. !         if (strcmp(groupdir, ogroupdir)) {
  2376.               (void) strcpy(bfr, groupdir);
  2377. --- 870,872 ----
  2378.           (void) strcpy(ogroupdir, ptr3);
  2379. !         if (STRCMP(groupdir, ogroupdir)) {
  2380.               (void) strcpy(bfr, groupdir);
  2381. ***************
  2382. *** 886,888 ****
  2383.           getnextart(TRUE);
  2384. !         if (bit != nart || strcmp(groupdir, ptr3) != 0) {
  2385.               msg("can't read %s/%ld", ptr3, nart);
  2386. --- 882,884 ----
  2387.           getnextart(TRUE);
  2388. !         if (bit != nart || STRCMP(groupdir, ptr3) != 0) {
  2389.               msg("can't read %s/%ld", ptr3, nart);
  2390. ***************
  2391. *** 895,897 ****
  2392.       case 'f':
  2393. !         if (strcmp(h->followto, "poster") == 0) {
  2394.               reply(FALSE);
  2395. --- 891,893 ----
  2396.       case 'f':
  2397. !         if (STRCMP(h->followto, "poster") == 0) {
  2398.               reply(FALSE);
  2399. ***************
  2400. *** 949,951 ****
  2401.   
  2402. !     poster = senderof(&h);
  2403.       /* only compare up to '.' or ' ' */
  2404. --- 945,947 ----
  2405.   
  2406. !     poster = senderof(h);
  2407.       /* only compare up to '.' or ' ' */
  2408. ***************
  2409. *** 957,959 ****
  2410.       tfilename = filename;
  2411. !     notauthor = strcmp(username, poster);
  2412.       if (uid != ROOTID && uid && notauthor) {
  2413. --- 953,955 ----
  2414.       tfilename = filename;
  2415. !     notauthor = STRCMP(username, poster);
  2416.       if (uid != ROOTID && uid && notauthor) {
  2417. ***************
  2418. *** 1006,1008 ****
  2419.       (void) strcpy(subj, h->title);
  2420. !     if (!prefix(subj, "Re:")){
  2421.           (void) strcpy(bfr, subj);
  2422. --- 1002,1004 ----
  2423.       (void) strcpy(subj, h->title);
  2424. !     if (!PREFIX(subj, "Re:")){
  2425.           (void) strcpy(bfr, subj);
  2426. ***************
  2427. *** 1283,1285 ****
  2428.                           *p++ = '\0';
  2429. !                     if (strcmp(ibuf, groupdir) == 0) {
  2430.                           register char *q;
  2431. --- 1279,1281 ----
  2432.                           *p++ = '\0';
  2433. !                     if (STRCMP(ibuf, groupdir) == 0) {
  2434.                           register char *q;
  2435. ***************
  2436. *** 1469,1471 ****
  2437.       }
  2438. !     else if (strcmp(hp->nbuf, groupdir) != 0) {
  2439.           (void) sprintf(linebuf, "Newsgroups: %s", hp->nbuf);
  2440. --- 1465,1467 ----
  2441.       }
  2442. !     else if (STRCMP(hp->nbuf, groupdir) != 0) {
  2443.           (void) sprintf(linebuf, "Newsgroups: %s", hp->nbuf);
  2444. ***************
  2445. *** 1588,1590 ****
  2446.       *maxcol = '\0';
  2447. !     if (strncmp(linebuf, ">From ", 6) == 0) {
  2448.           register char *p;
  2449. --- 1584,1586 ----
  2450.       *maxcol = '\0';
  2451. !     if (STRNCMP(linebuf, ">From ", 6) == 0) {
  2452.           register char *p;
  2453. ***************
  2454. *** 1758,1760 ****
  2455.           ttyraw();
  2456. !         clearok(curscr, 1);
  2457.   #ifdef SIGTSTP
  2458. --- 1754,1756 ----
  2459.           ttyraw();
  2460. !         okclear();
  2461.   #ifdef SIGTSTP
  2462. ***************
  2463. *** 1785,1787 ****
  2464.               ;
  2465. !         n = (int)p - (int)linebuf;
  2466.           if ( (n > 23 && n < 33) || (n > 65 && n < 79)) {
  2467. --- 1781,1783 ----
  2468.               ;
  2469. !         n = (int) (p - linebuf);
  2470.           if ( (n > 23 && n < 33) || (n > 65 && n < 79)) {
  2471. ***************
  2472. *** 1909,1911 ****
  2473.           strcpy(prompt,"more? ");
  2474. !         clearok(curscr, 1);
  2475.           updscr();
  2476. --- 1905,1907 ----
  2477.           strcpy(prompt,"more? ");
  2478. !         okclear();
  2479.           updscr();
  2480. ***************
  2481. *** 2166,2168 ****
  2482.       if (c == '\f') {
  2483. !         clearok(curscr, 1);
  2484.           prflags &=~ NOPRT;
  2485. --- 2162,2164 ----
  2486.       if (c == '\f') {
  2487. !         okclear();
  2488.           prflags &=~ NOPRT;
  2489. ***************
  2490. *** 2524,2526 ****
  2491.   #else     /* !TIOCGWINSZ */
  2492. !     clearok(curscr, 1);
  2493.       updscr();
  2494. --- 2520,2522 ----
  2495.   #else     /* !TIOCGWINSZ */
  2496. !     okclear();
  2497.       updscr();
  2498. ***************
  2499. *** 2628,2630 ****
  2500.       if (err) {
  2501. !         clearok(curscr, 1);
  2502.           updscr();
  2503. --- 2624,2626 ----
  2504.       if (err) {
  2505. !         okclear();
  2506.           updscr();
  2507. ***************
  2508. *** 2646,2648 ****
  2509.   #ifdef SORTACTIVE
  2510. !     if (strncmp(ACTIVE,"/tmp/", 5) == 0)
  2511.           (void) unlink(ACTIVE);
  2512. --- 2642,2644 ----
  2513.   #ifdef SORTACTIVE
  2514. !     if (STRNCMP(ACTIVE,"/tmp/", 5) == 0)
  2515.           (void) unlink(ACTIVE);
  2516. Index: patchlevel.h
  2517. Prereq: 9
  2518. *** .d/patchlevel.h    Wed Oct  7 16:53:43 1987
  2519. --- patchlevel.h    Wed Oct  7 18:49:18 1987
  2520. ***************
  2521. *** 1,3 ****
  2522. ! #define    PATCHLEVEL    9
  2523.   
  2524. ! #define NEWS_VERSION   "B 2.11 9/24/87"
  2525. --- 1,3 ----
  2526. ! #define    PATCHLEVEL    10
  2527.   
  2528. ! #define NEWS_VERSION   "B 2.11 10/07/87"
  2529.  
  2530.  
  2531.