home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume7 / 2.11news / patch02 < prev    next >
Internet Message Format  |  1986-12-18  |  80KB

  1. Path: mirror!adelie!necntc!husc6!seismo!rick
  2. From: rick@seismo.CSS.GOV (Rick Adams)
  3. Newsgroups: news.software.b
  4. Subject: Patch #2 for 2.11 news src
  5. Message-ID: <43028@beno.seismo.CSS.GOV>
  6. Date: 18 Dec 86 21:01:22 GMT
  7. Organization: Center for Seismic Studies, Arlington, VA
  8. Lines: 2906
  9.  
  10. Description:
  11.     This is patch #2 for the news 2.11 source distribution. It addresses
  12.     the following problems:
  13.  
  14.     Many small changes were made to make lint happy (ok, happier).
  15.     The code for HOMNAME is fixed (but still not documented).
  16.     rmgroup.sh now works correctly under Eunice. It also is more efficient
  17.     when removing lots of groups at a time.
  18.     checkgroups no longer has the toplevel newsgroup names hard
  19.     coded. It takes them from the input.
  20.     More fixes to make the HIDDENNET code work they way it's supposed to.
  21.     The rmgroup control message now works if you don't have MANUALLY
  22.     defined.
  23.     A memory allocation bug in expire was fixed.
  24.     Distributions of "net" are now aliased into "world".
  25.     New commands "l" and "L" were added to readnews/vnews. "l" list the
  26.     from and subject lines of unread articles. "L" does it for all
  27.     articles.
  28.     "l" in vnews nolonger redraws the screen. Use "^L" instead.
  29.     rnews -U no longer runs if the news system is locked.
  30.     The NICENESS code now works as expected.
  31.     Several incorrect uses of vfork were replaced with fork.
  32.     The list of active groups and aliases were updated, so "make update"
  33.     now prints more reasonable comments.
  34.     ndir.c was fixed so it will run on an HP9000/500 if HP9K5 is defined.
  35.     postnews is more rational about default posting distributions. The
  36.     intuited distribution must be in LIBDIR/distributions or it will
  37.     use "world". If the line "default foobar" appears in the distributions
  38.     file, it will use foobar as the default distribution instead of world.
  39.     virtterm now accepts line lengths >127 on machines with signed chars.
  40.     The 's' command in vnews now remembers the last saved filename and
  41.     prompts with it. You can edit the line with your erase/kill chars.
  42. Fix:
  43.     cd to the src directory and run the following through patch
  44.  
  45. Index: batch.c
  46. Prereq: 1.17
  47. *** .d/batch.c    Fri Nov 21 16:04:41 1986
  48. --- batch.c    Tue Dec 16 13:09:52 1986
  49. ***************
  50. *** 32,38 ****
  51.    */
  52.   
  53.   #ifdef SCCSID
  54. ! static char    *SccsId = "@(#)batch.c    1.17    11/21/86";
  55.   #endif /* SCCSID */
  56.   
  57.   #include <stdio.h>
  58. --- 32,38 ----
  59.    */
  60.   
  61.   #ifdef SCCSID
  62. ! static char    *SccsId = "@(#)batch.c    1.18    12/16/86";
  63.   #endif /* SCCSID */
  64.   
  65.   #include <stdio.h>
  66. ***************
  67. *** 184,190 ****
  68.       logtime[16] = 0;
  69.       logtime += 4;
  70.   
  71. ! #ifdef IHCC
  72.       (void) sprintf(lfname, "%s/%s/errlog", logdir(HOME), LIBDIR);
  73.   #else
  74.       (void) sprintf(lfname, "%s/errlog", LIBDIR);
  75. --- 184,190 ----
  76.       logtime[16] = 0;
  77.       logtime += 4;
  78.   
  79. ! #if defined(IHCC) || defined(HOME)
  80.       (void) sprintf(lfname, "%s/%s/errlog", logdir(HOME), LIBDIR);
  81.   #else
  82.       (void) sprintf(lfname, "%s/errlog", LIBDIR);
  83. Index: checkgroups.sh
  84. Prereq: 1.19
  85. *** .d/checkgroups.sh    Fri Nov 21 16:05:11 1986
  86. --- checkgroups.sh    Tue Dec 16 13:09:53 1986
  87. ***************
  88. *** 1,5 ****
  89.   : check active file for missing or extra newsgroups
  90. ! : '@(#)checkgroups    1.19    11/21/86'
  91.   
  92.   if  test  ! -s LIBDIR/newsgroups
  93.   then
  94. --- 1,5 ----
  95.   : check active file for missing or extra newsgroups
  96. ! : '@(#)checkgroups    1.20    12/16/86'
  97.   
  98.   if  test  ! -s LIBDIR/newsgroups
  99.   then
  100. ***************
  101. *** 19,29 ****
  102.       cat /tmp/$$a - > LIBDIR/newsgroups
  103.       ;;
  104.   *)
  105. !     group="^net\\.|^mod\\.|^comp\\.|^sci\\.|^rec\\.|^news\\.|^soc\\.|^misc\\.|^talk\\."
  106.       egrep -v "${group}" LIBDIR/newsgroups > /tmp/$$a
  107.       cat /tmp/$$a > LIBDIR/newsgroups
  108. !     echo "${line}" >> LIBDIR/newsgroups
  109. !     cat >> LIBDIR/newsgroups
  110.       ;;
  111.   esac
  112.   
  113. --- 19,44 ----
  114.       cat /tmp/$$a - > LIBDIR/newsgroups
  115.       ;;
  116.   *)
  117. !     # Get the distributions from the checkgroups message itself
  118. !     # This allows sites to append their local groups to the distributed
  119. !     # checkgroups message and prevents stray checkgroups from other sites
  120. !     # from showing all the local groups as being bad groups.
  121. !     #
  122. !     echo "${line}" > /tmp/$$msg
  123. !     cat >> /tmp/$$msg
  124. !     cp /dev/null /tmp/$$b
  125. !     cat /tmp/$$msg | sed -e "s;[     ].*;;" -e "s;\..*;;" | sort -u |
  126. !         while read dist
  127. !         do
  128. !             group=`cat /tmp/$$b`
  129. !             group="${group}|^$dist\\."
  130. !             echo "${group}" > /tmp/$$b
  131. !         done
  132. !     group=`cat /tmp/$$b`
  133.       egrep -v "${group}" LIBDIR/newsgroups > /tmp/$$a
  134.       cat /tmp/$$a > LIBDIR/newsgroups
  135. !     cat /tmp/$$msg >> LIBDIR/newsgroups
  136. !     rm -f /tmp/$$b /tmp/$$msg
  137.       ;;
  138.   esac
  139.   
  140. Index: checknews.c
  141. Prereq: 2.26
  142. *** .d/checknews.c    Fri Nov 21 16:04:45 1986
  143. --- checknews.c    Tue Dec 16 13:09:54 1986
  144. ***************
  145. *** 16,22 ****
  146.    */
  147.   
  148.   #ifdef SCCSID
  149. ! static char    *SccsId = "@(#)checknews.c    2.26    11/21/86";
  150.   #endif /* SCCSID */
  151.   
  152.   char *Progname = "checknews";        /* used by xerror */
  153. --- 16,22 ----
  154.    */
  155.   
  156.   #ifdef SCCSID
  157. ! static char    *SccsId = "@(#)checknews.c    2.27    12/16/86";
  158.   #endif /* SCCSID */
  159.   
  160.   char *Progname = "checknews";        /* used by xerror */
  161. ***************
  162. *** 25,31 ****
  163.   
  164.   char    bfr[LBUFLEN];            /* general-use scratch area    */
  165.   char    optbuf[BUFLEN];            /* NEWSOPTS buffer        */
  166. ! int    line = -1, y, e, n, q;
  167.   int    verbose;            /* For debugging.        */
  168.   int    nflag;                /* for spec. newsgroup        */
  169.   char    narggrp[BUFLEN];        /* spec newsgroup        */
  170. --- 25,31 ----
  171.   
  172.   char    bfr[LBUFLEN];            /* general-use scratch area    */
  173.   char    optbuf[BUFLEN];            /* NEWSOPTS buffer        */
  174. ! int    y, e, n, q;
  175.   int    verbose;            /* For debugging.        */
  176.   int    nflag;                /* for spec. newsgroup        */
  177.   char    narggrp[BUFLEN];        /* spec newsgroup        */
  178. ***************
  179. *** 32,37 ****
  180. --- 32,38 ----
  181.   FILE    *rcfp, *actfp;
  182.   char    newsrc[BUFLEN],*rcline[LINES],rcbuf[LBUFLEN],*argvrc[LINES];
  183.   int    mode = 1;
  184. + extern int line;
  185.   #ifndef SHELL
  186.   char    *SHELL;
  187.   #endif
  188.  
  189. Index: compress.c
  190. Prereq: 1.12
  191. *** .d/compress.c    Thu Oct 30 16:08:25 1986
  192. --- compress.c    Tue Dec 16 13:09:57 1986
  193. ***************
  194. *** 1,6 ****
  195.   #ifdef SCCSID
  196. ! static char    *SccsId = "@(#)compress.c    1.12    10/29/86";
  197. ! #endif SCCSID
  198.   static char rcs_ident[] = "Based on compress.c,v 4.0 85/07/30 12:50:00 joe Release";
  199.   
  200.   /* 
  201. --- 1,6 ----
  202.   #ifdef SCCSID
  203. ! static char    *SccsId = "@(#)compress.c    1.13    12/16/86";
  204. ! #endif /* SCCSID */
  205.   static char rcs_ident[] = "Based on compress.c,v 4.0 85/07/30 12:50:00 joe Release";
  206.   
  207.   /* 
  208.  
  209. Index: control.c
  210. Prereq: 2.48
  211. *** .d/control.c    Fri Nov 21 16:04:47 1986
  212. --- control.c    Tue Dec 16 13:10:00 1986
  213. ***************
  214. *** 19,25 ****
  215.    */
  216.   
  217.   #ifdef SCCSID
  218. ! static char    *SccsId = "@(#)control.c    2.48    11/21/86";
  219.   #endif /* SCCSID */
  220.   
  221.   #include "iparams.h"
  222. --- 19,25 ----
  223.    */
  224.   
  225.   #ifdef SCCSID
  226. ! static char    *SccsId = "@(#)control.c    2.49    12/16/86";
  227.   #endif /* SCCSID */
  228.   
  229.   #include "iparams.h"
  230. ***************
  231. *** 95,104 ****
  232.   #ifdef NOTIFY
  233.               TELLME = mp->m_who_to;    /* reset whom to tell */
  234.   #endif /* NOTIFY */
  235. !             if(strcmp(mp->m_name, "cancel") == 0) /* special case */
  236. !                 return (*mp->m_func)(cargc, cargv);
  237. !             (*mp->m_func)(cargc, cargv); /* do the function */
  238. !             break;
  239.           }
  240.       }
  241.       if( !mp->m_name ) {
  242. --- 95,101 ----
  243.   #ifdef NOTIFY
  244.               TELLME = mp->m_who_to;    /* reset whom to tell */
  245.   #endif /* NOTIFY */
  246. !             return (*mp->m_func)(cargc, cargv); /* do it */
  247.           }
  248.       }
  249.       if( !mp->m_name ) {
  250. ***************
  251. *** 168,174 ****
  252.       if (argc < 2)
  253.           error("ihave: Too few arguments.");
  254.       if (strncmp(FULLSYSNAME, argv[argc - 1], SNLN) == 0)
  255. !         return;
  256.       list[0] = '\0';
  257.       if (argc > 2) {
  258.           for (i = 1; i < (argc - 1); ++i)
  259. --- 165,171 ----
  260.       if (argc < 2)
  261.           error("ihave: Too few arguments.");
  262.       if (strncmp(FULLSYSNAME, argv[argc - 1], SNLN) == 0)
  263. !         return 0;
  264.       list[0] = '\0';
  265.       if (argc > 2) {
  266.           for (i = 1; i < (argc - 1); ++i)
  267. ***************
  268. *** 177,183 ****
  269.                   (void) strcat(list, argv[i]);
  270.               }
  271.           if (list[0] == '\0')
  272. !             return;
  273.       } else {
  274.           register FILE *    outfp;
  275.           register long    outpos, inpos;
  276. --- 174,180 ----
  277.                   (void) strcat(list, argv[i]);
  278.               }
  279.           if (list[0] == '\0')
  280. !             return 0;
  281.       } else {
  282.           register FILE *    outfp;
  283.           register long    outpos, inpos;
  284. ***************
  285. *** 196,202 ****
  286.           if (outpos == ftell(outfp)) {    /* if nothing is wanted */
  287.               (void) fclose(outfp);
  288.               (void) fseek(infp, inpos, 0);
  289. !             return;
  290.           }
  291.           (void) fclose(outfp);
  292.           /*
  293. --- 193,199 ----
  294.           if (outpos == ftell(outfp)) {    /* if nothing is wanted */
  295.               (void) fclose(outfp);
  296.               (void) fseek(infp, inpos, 0);
  297. !             return 0;
  298.           }
  299.           (void) fclose(outfp);
  300.           /*
  301. ***************
  302. *** 230,235 ****
  303. --- 227,233 ----
  304.       ** Note that we do *not* change the history line
  305.       ** so that if the "ihave" message comes in again it gets rejected.
  306.       */
  307. +     return 0;
  308.   }
  309.   
  310.   /*
  311. ***************
  312. *** 241,247 ****
  313.    * Give it to them with no fuss.
  314.    */
  315.   c_sendme(argc, argv)
  316. ! register char **    argv;
  317.   {
  318.       struct srec    srec;
  319.   
  320. --- 239,245 ----
  321.    * Give it to them with no fuss.
  322.    */
  323.   c_sendme(argc, argv)
  324. ! register char **argv;
  325.   {
  326.       struct srec    srec;
  327.   
  328. ***************
  329. *** 248,254 ****
  330.       if (argc < 2)
  331.           error("sendme: Too few arguments.");
  332.       if (strncmp(FULLSYSNAME, argv[argc - 1], SNLN) == 0)
  333. !         return;
  334.       if (s_find(&srec, argv[argc - 1]) != TRUE)
  335.           error("sendme: Can't find sys record for %s", argv[argc - 1]);
  336.       /* Send the articles. */
  337. --- 246,252 ----
  338.       if (argc < 2)
  339.           error("sendme: Too few arguments.");
  340.       if (strncmp(FULLSYSNAME, argv[argc - 1], SNLN) == 0)
  341. !         return 0;
  342.       if (s_find(&srec, argv[argc - 1]) != TRUE)
  343.           error("sendme: Can't find sys record for %s", argv[argc - 1]);
  344.       /* Send the articles. */
  345. ***************
  346. *** 268,273 ****
  347. --- 266,272 ----
  348.           for (i = 1; i < (argc - 1); ++i)
  349.               sendmefunc(argv[i], &srec);
  350.       }
  351. +     return 0;
  352.   }
  353.   
  354.   static
  355. ***************
  356. *** 331,338 ****
  357.       if (argc < 2)
  358.           error("newgroup: Too few arguments.");
  359.   
  360. !     if (header.approved[0] == '\0')
  361. !         error("newgroup: %s not approved", argv[1]);
  362.   
  363.       /* see if it already exists */
  364.       (void) rewind(actfp); clearerr(actfp);
  365. --- 330,339 ----
  366.       if (argc < 2)
  367.           error("newgroup: Too few arguments.");
  368.   
  369. !     if (header.approved[0] == '\0') {
  370. !         logerr("newgroup: %s not approved", argv[1]);
  371. !         return 1;
  372. !     }
  373.   
  374.       /* see if it already exists */
  375.       (void) rewind(actfp); clearerr(actfp);
  376. ***************
  377. *** 349,355 ****
  378.               p -= 3;
  379.               if (argc > 2 && strcmp(argv[2], "moderated") == 0) {
  380.                   if (*p == 'm')
  381. !                     return;
  382.   # ifdef NONEWGROUPS
  383.                   if(can_change) {
  384.                       *p = 'm';
  385. --- 350,356 ----
  386.               p -= 3;
  387.               if (argc > 2 && strcmp(argv[2], "moderated") == 0) {
  388.                   if (*p == 'm')
  389. !                     return 0;
  390.   # ifdef NONEWGROUPS
  391.                   if(can_change) {
  392.                       *p = 'm';
  393. ***************
  394. *** 361,367 ****
  395.   #endif /* NONEWGROUPS */
  396.               } else {
  397.                   if (*p != 'm')
  398. !                     return;
  399.   # ifdef NONEWGROUPS
  400.                   if(can_change)  {
  401.                       *p = 'y';
  402. --- 362,368 ----
  403.   #endif /* NONEWGROUPS */
  404.               } else {
  405.                   if (*p != 'm')
  406. !                     return 0;
  407.   # ifdef NONEWGROUPS
  408.                   if(can_change)  {
  409.                       *p = 'y';
  410. ***************
  411. *** 413,419 ****
  412.                * No permission to change
  413.                */
  414.               if(!can_change)
  415. !                 return;
  416.   # endif /* NONEWGROUPS */
  417.               /* The active file was wrong about the state of the
  418.                * group. Rewrite the active file
  419. --- 414,420 ----
  420.                * No permission to change
  421.                */
  422.               if(!can_change)
  423. !                 return 0;
  424.   # endif /* NONEWGROUPS */
  425.               /* The active file was wrong about the state of the
  426.                * group. Rewrite the active file
  427. ***************
  428. *** 427,433 ****
  429.               else
  430.                   logerr("Newsgroup %s changed from unmoderated to moderated",
  431.                   argv[1]);
  432. !             return;
  433.           }
  434.       }
  435.   
  436. --- 428,434 ----
  437.               else
  438.                   logerr("Newsgroup %s changed from unmoderated to moderated",
  439.                   argv[1]);
  440. !             return 0;
  441.           }
  442.       }
  443.   
  444. ***************
  445. *** 439,445 ****
  446.           fprintf(actfp, "%s 00000 00001 %c\n", argv[1],
  447.               (argc > 2 && strcmp(argv[2], "moderated") == 0) 
  448.                   ? 'm' : 'y');
  449. ! #ifdef USG
  450.           /*
  451.            * U G L Y   K L U D G E
  452.            * This utter piece of tripe is the only way I know of
  453. --- 440,446 ----
  454.           fprintf(actfp, "%s 00000 00001 %c\n", argv[1],
  455.               (argc > 2 && strcmp(argv[2], "moderated") == 0) 
  456.                   ? 'm' : 'y');
  457. ! #if defined(USG) || defined(MG1)
  458.           /*
  459.            * U G L Y   K L U D G E
  460.            * This utter piece of tripe is the only way I know of
  461. ***************
  462. *** 449,454 ****
  463. --- 450,456 ----
  464.            * on all "real" USG Unix systems, It will probably
  465.            * break on some obscure look alike that doesnt use the
  466.            * real ATT stdio.h
  467. +          * also broken in WCW MG-1 42nix 2.0
  468.            * Don't blame me, blame ATT. stdio should have
  469.            * already done the following line for us, but it didn't
  470.            */
  471. ***************
  472. *** 487,492 ****
  473. --- 489,495 ----
  474.           (void) mclose(fd);
  475.       }
  476.   # endif /* NOTIFY */
  477. +     return 0;
  478.   }
  479.   
  480.   /*
  481. ***************
  482. *** 505,515 ****
  483.       if (argc < 2)
  484.           error("rmgroup: Too few arguments.");
  485.       if (!validng(argv[1]))
  486. !         return;
  487. !     if (header.approved[0] == '\0')
  488. !         error("rmgroup: %s not approved", argv[1]);
  489.   
  490. ! #ifndef MANUALLY
  491.   #ifdef ORGDISTRIB
  492.       /*
  493.        * Allow local as well as organizational removals
  494. --- 508,520 ----
  495.       if (argc < 2)
  496.           error("rmgroup: Too few arguments.");
  497.       if (!validng(argv[1]))
  498. !         return 0;
  499. !     if (header.approved[0] == '\0') {
  500. !         logerr("rmgroup: %s not approved", argv[1]);
  501. !         return 1;
  502. !     }
  503.   
  504. ! #ifdef MANUALLY
  505.   #ifdef ORGDISTRIB
  506.       /*
  507.        * Allow local as well as organizational removals
  508. ***************
  509. *** 519,528 ****
  510.   #else    /* !ORGDISTRIB */        
  511.       if (!strcmp("local", header.distribution))
  512.   #endif    /* !ORGDISTRIB */        
  513.           shouldremove++;
  514. - #endif /* !MANUALLY */
  515.   #ifdef NOTIFY
  516. !     sprintf(subjline, "Recevied rmgroup for %s", argv[1]);
  517.       fd = mailhdr((struct hbuf *)NULL, subjline);
  518.       if (fd != NULL) {
  519.           if (shouldremove) {
  520. --- 524,533 ----
  521.   #else    /* !ORGDISTRIB */        
  522.       if (!strcmp("local", header.distribution))
  523.   #endif    /* !ORGDISTRIB */        
  524. + #endif /* MANUALLY */
  525.           shouldremove++;
  526.   #ifdef NOTIFY
  527. !     sprintf(subjline, "Received rmgroup for %s", argv[1]);
  528.       fd = mailhdr((struct hbuf *)NULL, subjline);
  529.       if (fd != NULL) {
  530.           if (shouldremove) {
  531. ***************
  532. *** 552,557 ****
  533. --- 557,563 ----
  534.           rc = system(bfr);
  535.           log("system(%s) status %d", bfr, rc);
  536.       }
  537. +     return 0;
  538.   }
  539.   
  540.   /*
  541. ***************
  542. *** 685,690 ****
  543. --- 691,697 ----
  544.           (void) fclose(u);
  545.           (void) mclose(f);
  546.       }
  547. +     return 0;
  548.   }
  549.   
  550.   /*
  551. ***************
  552. *** 733,738 ****
  553. --- 740,746 ----
  554.           (void) pclose(u);
  555.           (void) mclose(fd);
  556.       }
  557. +     return 0;
  558.   }
  559.   
  560.   /*
  561. ***************
  562. *** 751,756 ****
  563. --- 759,765 ----
  564.       fprintf(f, "The header of your message follows:\n\n");
  565.       (void) hwrite(&header, f);
  566.       (void) mclose(f);
  567. +     return 0;
  568.   }
  569.   
  570.   /*
  571. ***************
  572. *** 773,778 ****
  573. --- 782,788 ----
  574.   #endif /* !NOTIFY */
  575.       rc = system(bfr);
  576.       log("system(%s) status %d", bfr, rc);
  577. +     return 0;
  578.   }
  579.   
  580.   /*
  581. ***************
  582. *** 794,799 ****
  583. --- 804,810 ----
  584.           (void) mclose(f);
  585.       }
  586.   #endif /* NOTIFY */
  587. +     return 0;
  588.   }
  589.   
  590.   /* ARGSUSED */
  591. ***************
  592. *** 811,816 ****
  593. --- 822,828 ----
  594.           (void) mclose(f);
  595.       }
  596.   #endif /* NOTIFY */
  597. +     return 0;
  598.   }
  599.   
  600.   /*
  601.  
  602. Index: expire.c
  603. Prereq: 2.48
  604. *** .d/expire.c    Fri Nov 21 16:04:48 1986
  605. --- expire.c    Tue Dec 16 13:10:01 1986
  606. ***************
  607. *** 17,23 ****
  608.    */
  609.   
  610.   #ifdef SCCSID
  611. ! static char    *SccsId = "@(#)expire.c    2.48    11/21/86";
  612.   #endif /* SCCSID */
  613.   
  614.   #include "params.h"
  615. --- 17,23 ----
  616.    */
  617.   
  618.   #ifdef SCCSID
  619. ! static char    *SccsId = "@(#)expire.c    2.49    12/16/86";
  620.   #endif /* SCCSID */
  621.   
  622.   #include "params.h"
  623. ***************
  624. *** 491,499 ****
  625.               goto checkdate;
  626.           }
  627.           for(i=0; i<NUNREC; i++)
  628. !             if (h.unrec[i] != NULL)
  629.                   free(h.unrec[i]);
  630. !             else
  631.                   break;
  632.           if (!hread(&h, fp, TRUE)) {
  633.               printf("Garbled article %s.\n", filename);
  634. --- 491,500 ----
  635.               goto checkdate;
  636.           }
  637.           for(i=0; i<NUNREC; i++)
  638. !             if (h.unrec[i] != NULL) {
  639.                   free(h.unrec[i]);
  640. !                 h.unrec[i] = NULL;
  641. !             } else
  642.                   break;
  643.           if (!hread(&h, fp, TRUE)) {
  644.               printf("Garbled article %s.\n", filename);
  645.  
  646. Index: funcs.c
  647. Prereq: 2.34
  648. *** .d/funcs.c    Fri Nov 21 16:04:55 1986
  649. --- funcs.c    Tue Dec 16 13:10:02 1986
  650. ***************
  651. *** 16,22 ****
  652.    */
  653.   
  654.   #ifdef SCCSID
  655. ! static char    *SccsId = "@(#)funcs.c    2.34    11/21/86";
  656.   #endif /* SCCSID */
  657.   
  658.   /*LINTLIBRARY*/
  659. --- 16,22 ----
  660.    */
  661.   
  662.   #ifdef SCCSID
  663. ! static char    *SccsId = "@(#)funcs.c    2.35    12/16/86";
  664.   #endif /* SCCSID */
  665.   
  666.   /*LINTLIBRARY*/
  667. ***************
  668. *** 584,590 ****
  669.        */
  670.   
  671.       (void) strncpy(facgroups, FASCIST, BUFLEN);
  672. !     sprintf(factemp, "%s/%s", LIBDIR, "authorized");
  673.       facfd = fopen(factemp, "r");
  674.   
  675.       if (facfd != NULL) { /* If no such file, we go with the global default */
  676. --- 584,590 ----
  677.        */
  678.   
  679.       (void) strncpy(facgroups, FASCIST, BUFLEN);
  680. !     sprintf(factemp, "%s/%s", LIB, "authorized");
  681.       facfd = fopen(factemp, "r");
  682.   
  683.       if (facfd != NULL) { /* If no such file, we go with the global default */
  684. ***************
  685. *** 599,605 ****
  686.   #ifdef DEBUG
  687.       fprintf(stderr, "facgroups = %s\n", facgroups);
  688.       fprintf(stderr, "newsgroups = %s\n", newsgroups);
  689. ! #endif DEBUG
  690.   
  691.       /* We step through the newsgroups being posted to and check each against
  692.        * the restriction list.  *ALL* posted groups must match the restriction
  693. --- 599,605 ----
  694.   #ifdef DEBUG
  695.       fprintf(stderr, "facgroups = %s\n", facgroups);
  696.       fprintf(stderr, "newsgroups = %s\n", newsgroups);
  697. ! #endif /* DEBUG */
  698.   
  699.       /* We step through the newsgroups being posted to and check each against
  700.        * the restriction list.  *ALL* posted groups must match the restriction
  701. ***************
  702. *** 625,631 ****
  703.       /* must be okay -- return */
  704.   #ifdef DEBUG
  705.       fprintf (stderr, "Newsgroups approved for this poster.\n");
  706. ! #endif DEBUG
  707.       return FALSE;
  708.   }
  709. ! #endif FASCIST
  710. --- 625,631 ----
  711.       /* must be okay -- return */
  712.   #ifdef DEBUG
  713.       fprintf (stderr, "Newsgroups approved for this poster.\n");
  714. ! #endif /* DEBUG */
  715.       return FALSE;
  716.   }
  717. ! #endif /* FASCIST */
  718.  
  719. Index: funcs2.c
  720. Prereq: 1.16
  721. *** .d/funcs2.c    Thu Oct 30 16:10:57 1986
  722. --- funcs2.c    Tue Dec 16 13:10:03 1986
  723. ***************
  724. *** 17,23 ****
  725.    */
  726.   
  727.   #ifdef SCCSID
  728. ! static char    *SccsId = "@(#)funcs2.c    1.16    10/23/86";
  729.   #endif /* SCCSID */
  730.   
  731.   #include "params.h"
  732. --- 17,23 ----
  733.    */
  734.   
  735.   #ifdef SCCSID
  736. ! static char    *SccsId = "@(#)funcs2.c    1.17    12/16/86";
  737.   #endif /* SCCSID */
  738.   
  739.   #include "params.h"
  740. ***************
  741. *** 384,395 ****
  742.       char mbuf[BUFLEN], modadd[BUFLEN];
  743.       FILE *mfd;
  744.       /* Let's find a path to the backbone */
  745. !     sprintf(mbuf, "%s/mailpaths", LIBDIR);
  746.       mfd = xfopen(mbuf, "r");
  747.       do {
  748.           if (fgets(mbuf, sizeof mbuf, mfd) == NULL)
  749.               xerror("Can't find internet in %s/mailpaths",
  750. !                 LIBDIR);
  751.       } while (!prefix(mbuf, "internet"));
  752.       if (sscanf(mbuf, "%*s %s", modadd) != 1)
  753.           xerror("backbone address corrupted");
  754. --- 384,395 ----
  755.       char mbuf[BUFLEN], modadd[BUFLEN];
  756.       FILE *mfd;
  757.       /* Let's find a path to the backbone */
  758. !     sprintf(mbuf, "%s/mailpaths", LIB);
  759.       mfd = xfopen(mbuf, "r");
  760.       do {
  761.           if (fgets(mbuf, sizeof mbuf, mfd) == NULL)
  762.               xerror("Can't find internet in %s/mailpaths",
  763. !                 LIB);
  764.       } while (!prefix(mbuf, "internet"));
  765.       if (sscanf(mbuf, "%*s %s", modadd) != 1)
  766.           xerror("backbone address corrupted");
  767.  
  768. Index: getdate.y
  769. Prereq: 2.14
  770. *** .d/getdate.y    Fri Nov 21 16:05:02 1986
  771. --- getdate.y    Tue Dec 16 13:10:04 1986
  772. ***************
  773. *** 3,9 ****
  774.       /*     Originally from: Steven M. Bellovin (unc!smb)    */ 
  775.       /*    Dept. of Computer Science            */
  776.       /*    University of North Carolina at Chapel Hill    */
  777. !     /*    @(#)getdate.y    2.14    11/21/86    */
  778.   
  779.   #include <sys/types.h>
  780.   #ifdef USG
  781. --- 3,9 ----
  782.       /*     Originally from: Steven M. Bellovin (unc!smb)    */ 
  783.       /*    Dept. of Computer Science            */
  784.       /*    University of North Carolina at Chapel Hill    */
  785. !     /*    @(#)getdate.y    2.15    12/16/86    */
  786.   
  787.   #include <sys/types.h>
  788.   #ifdef USG
  789. ***************
  790. *** 22,30 ****
  791.   #include "defs.h"
  792.   #if defined(BSD4_2) || defined (BSD4_1C)
  793.   #include <sys/time.h>
  794. ! #else sane
  795.   #include <time.h>
  796. ! #endif sane
  797.   
  798.   #define    NULL    0
  799.   #define daysec (24L*60L*60L)
  800. --- 22,30 ----
  801.   #include "defs.h"
  802.   #if defined(BSD4_2) || defined (BSD4_1C)
  803.   #include <sys/time.h>
  804. ! #else /* sane */
  805.   #include <time.h>
  806. ! #endif /* sane */
  807.   
  808.   #define    NULL    0
  809.   #define daysec (24L*60L*60L)
  810.  
  811. Index: help
  812. *** .d/help    Thu Oct 30 16:12:10 1986
  813. --- help    Tue Dec 16 13:10:06 1986
  814. ***************
  815. *** 20,24 ****
  816.   K        Mark the rest of the articles in current group as read.
  817.   x        Exit.  Don't update .newsrc.
  818.   v        Version.  Print current news version number.
  819.   c, f, r, e, h, and s can be followed by -'s to refer to the previous article
  820. --- 20,25 ----
  821.   K        Mark the rest of the articles in current group as read.
  822.   x        Exit.  Don't update .newsrc.
  823.   v        Version.  Print current news version number.
  824. ! l        List unread articles in newsgroup.
  825. ! L        List all articles in newsgroup.
  826.   c, f, r, e, h, and s can be followed by -'s to refer to the previous article
  827.  
  828. Index: ifuncs.c
  829. Prereq: 2.58
  830. *** .d/ifuncs.c    Fri Nov 21 16:04:00 1986
  831. --- ifuncs.c    Tue Dec 16 13:10:07 1986
  832. ***************
  833. *** 16,22 ****
  834.    */
  835.   
  836.   #ifdef SCCSID
  837. ! static char    *SccsId = "@(#)ifuncs.c    2.58    11/21/86";
  838.   #endif /* SCCSID */
  839.   
  840.   #include "iparams.h"
  841. --- 16,22 ----
  842.    */
  843.   
  844.   #ifdef SCCSID
  845. ! static char    *SccsId = "@(#)ifuncs.c    2.59    12/16/86";
  846.   #endif /* SCCSID */
  847.   
  848.   #include "iparams.h"
  849. ***************
  850. *** 62,68 ****
  851.   extern char firstbufname[];
  852.   #endif
  853.   
  854. ! broadcast()
  855.   {
  856.       register char *hptr;
  857.       register char *sptr;
  858. --- 62,69 ----
  859.   extern char firstbufname[];
  860.   #endif
  861.   
  862. ! broadcast(is_rnews)
  863. ! int is_rnews;
  864.   {
  865.       register char *hptr;
  866.       register char *sptr;
  867. ***************
  868. *** 73,78 ****
  869. --- 74,82 ----
  870.       char sentbuf[LBUFLEN];
  871.       int nsent = 0;
  872.       char *sentsys;
  873. + #ifdef HIDDENNET
  874. +     int len;
  875. + #endif /* HIDDENNET */
  876.   
  877.       /* h is a local copy of the header we can scribble on */
  878.   #ifdef VMS
  879. ***************
  880. *** 86,94 ****
  881.   
  882.       (void) strcpy(sentbuf, h.ident);
  883.       (void) strcat(sentbuf, " sent to ");
  884. !     sentsys = index(sentbuf, 0);
  885.       nsent = 0;
  886.       /* break path into list of systems. */
  887.       sptr = hptr = h.path;
  888.       while ((hptr=strpbrk(hptr, NETCHRS)) != NULL) {
  889.           *hptr++ = '\0';
  890. --- 90,105 ----
  891.   
  892.       (void) strcpy(sentbuf, h.ident);
  893.       (void) strcat(sentbuf, " sent to ");
  894. !     sentsys = index(sentbuf, '\0');
  895.       nsent = 0;
  896.       /* break path into list of systems. */
  897. +     hptr = h.path;
  898. + #ifdef HIDDENNET
  899. +     if (!is_rnews && 
  900. +         strncmp(FULLSYSNAME, h.path, (len = strlen(FULLSYSNAME))) == 0
  901. +         && index(NETCHRS, h.path[len]))
  902. +         (void) strcpy(h.path, &(h.path[len+1]));
  903. + #endif HIDDENNET
  904.       sptr = hptr = h.path;
  905.       while ((hptr=strpbrk(hptr, NETCHRS)) != NULL) {
  906.           *hptr++ = '\0';
  907.  
  908. Index: inews.c
  909. Prereq: 2.70
  910. *** .d/inews.c    Fri Nov 21 16:04:44 1986
  911. --- inews.c    Tue Dec 16 13:10:09 1986
  912. ***************
  913. *** 17,23 ****
  914.    */
  915.   
  916.   #ifdef SCCSID
  917. ! static char    *SccsId = "@(#)inews.c    2.70    11/21/86";
  918.   #endif /* SCCSID */
  919.   
  920.   #include "iparams.h"
  921. --- 17,23 ----
  922.    */
  923.   
  924.   #ifdef SCCSID
  925. ! static char    *SccsId = "@(#)inews.c    2.71    12/16/86";
  926.   #endif /* SCCSID */
  927.   
  928.   #include "iparams.h"
  929. ***************
  930. *** 131,137 ****
  931.       if (flock(fileno(actfp), LOCK_SH|LOCK_NB) < 0 && errno == EWOULDBLOCK)
  932.   #else    /* !BSD4_2 */
  933.   #ifdef    LOCKF
  934. !     if (lockf(fileno(actfp), F_TLOCK, 0) < 0 && errno == EAGAIN)
  935.   #else    /* !LOCKF */
  936.       sprintf(bfr, "%s.lock", ACTIVE);
  937.       if (LINK(ACTIVE,bfr) < 0 && errno == EEXIST)
  938. --- 131,138 ----
  939.       if (flock(fileno(actfp), LOCK_SH|LOCK_NB) < 0 && errno == EWOULDBLOCK)
  940.   #else    /* !BSD4_2 */
  941.   #ifdef    LOCKF
  942. !     if (lockf(fileno(actfp), F_TLOCK, 0) < 0 &&
  943. !         (errno == EAGAIN || errno == EACCES))
  944.   #else    /* !LOCKF */
  945.       sprintf(bfr, "%s.lock", ACTIVE);
  946.       if (LINK(ACTIVE,bfr) < 0 && errno == EEXIST)
  947. ***************
  948. *** 152,157 ****
  949. --- 153,160 ----
  950.   #endif    /* !BSD4_2 && !LOCKF */
  951.       }
  952.       if (argc > 1 && !strcmp(*(argv+1), "-U")) {
  953. +         if (spool_news)    /* can't unspool while things are locked */
  954. +             xxit(0);
  955.           dounspool();
  956.           /* NOT REACHED */
  957.       }
  958. ***************
  959. *** 163,169 ****
  960.               /* NOT REACHED */
  961.           }
  962.   #ifdef NICENESS
  963. !         nice(NICENESS);
  964.   #endif /* NICENESS */
  965.       } else
  966.           if (argc < 2)
  967. --- 166,173 ----
  968.               /* NOT REACHED */
  969.           }
  970.   #ifdef NICENESS
  971. !         if (nice(0) < NICENESS)
  972. !             (void) nice(NICENESS);
  973.   #endif /* NICENESS */
  974.       } else
  975.           if (argc < 2)
  976. ***************
  977. *** 504,510 ****
  978.       (void) sprintf(buf, "%s/.rnews/%02d%02d%02d%02d%02d%x",
  979.   #endif /* V7 */
  980.   #endif /* VMS */
  981. !         SPOOLDIR,
  982.           tp->tm_year, tp->tm_mon+1, tp->tm_mday,
  983.           tp->tm_hour, tp->tm_min, getpid());
  984.       sp = xfopen(buf, "w");
  985. --- 508,514 ----
  986.       (void) sprintf(buf, "%s/.rnews/%02d%02d%02d%02d%02d%x",
  987.   #endif /* V7 */
  988.   #endif /* VMS */
  989. !         SPOOL,
  990.           tp->tm_year, tp->tm_mon+1, tp->tm_mday,
  991.           tp->tm_hour, tp->tm_min, getpid());
  992.       sp = xfopen(buf, "w");
  993. ***************
  994. *** 653,659 ****
  995.        * This will overflow with 99999 articles.
  996.        */
  997.       fprintf(actfp, "%s %05ld", ngname, ngsize+1);
  998. ! #ifdef USG
  999.       /*
  1000.        * U G L Y   K L U D G E
  1001.        * This utter piece of tripe is the only way I know of to get
  1002. --- 657,663 ----
  1003.        * This will overflow with 99999 articles.
  1004.        */
  1005.       fprintf(actfp, "%s %05ld", ngname, ngsize+1);
  1006. ! #if defined(USG) || defined(MG1)
  1007.       /*
  1008.        * U G L Y   K L U D G E
  1009.        * This utter piece of tripe is the only way I know of to get
  1010. ***************
  1011. *** 664,669 ****
  1012. --- 668,674 ----
  1013.        * real ATT stdio.h
  1014.        * Don't blame me, blame ATT. stdio should have already done the
  1015.        * following line for us, but it doesn't
  1016. +      * also broken in WCW MG-1 42nix 2.0
  1017.        */
  1018.        actfp->_flag |= _IOWRT;
  1019.   #endif /* USG */
  1020. ***************
  1021. *** 726,732 ****
  1022.       }
  1023.   
  1024.   #ifdef ZAPNOTES
  1025. !     if (strcmp(header.title, "Re: Orphaned Response") == 0) {
  1026.           logerr("Orphaned Response, moved to junk");
  1027.           if (localize("junk"))
  1028.               savehist(histline);
  1029. --- 731,737 ----
  1030.       }
  1031.   
  1032.   #ifdef ZAPNOTES
  1033. !     if (strncmp(header.title, "Re: Orphaned Response", 21) == 0) {
  1034.           logerr("Orphaned Response, moved to junk");
  1035.           if (localize("junk"))
  1036.               savehist(histline);
  1037. ***************
  1038. *** 763,774 ****
  1039.           fprintf(stderr," directly.\nYour article is being mailed to");
  1040.           fprintf(stderr," the moderator who will post it for you.\n");
  1041.           /* Let's find a path to the backbone */
  1042. !         sprintf(bfr, "%s/mailpaths", LIBDIR);
  1043.           mfd = xfopen(bfr, "r");
  1044.           do {
  1045.               if (fscanf(mfd, "%s %s", bfr, modadd) != 2)
  1046.                   xerror("Can't find backbone in %s/mailpaths",
  1047. !                     LIBDIR);
  1048.           } while (strcmp(bfr, "backbone") != 0 && !ngmatch(is_mod, bfr));
  1049.           (void) fclose(mfd);
  1050.           /* fake a header for mailhdr */
  1051. --- 768,779 ----
  1052.           fprintf(stderr," directly.\nYour article is being mailed to");
  1053.           fprintf(stderr," the moderator who will post it for you.\n");
  1054.           /* Let's find a path to the backbone */
  1055. !         sprintf(bfr, "%s/mailpaths", LIB);
  1056.           mfd = xfopen(bfr, "r");
  1057.           do {
  1058.               if (fscanf(mfd, "%s %s", bfr, modadd) != 2)
  1059.                   xerror("Can't find backbone in %s/mailpaths",
  1060. !                     LIB);
  1061.           } while (strcmp(bfr, "backbone") != 0 && !ngmatch(is_mod, bfr));
  1062.           (void) fclose(mfd);
  1063.           /* fake a header for mailhdr */
  1064. ***************
  1065. *** 866,883 ****
  1066.       (void) fclose(tfp);
  1067.       (void) fclose(infp);
  1068.       if(exitcode == 0) {
  1069. -         int pid;
  1070.           /* article has passed all the checks, so work in background */
  1071. !         if (mode != PROC)
  1072. !             if ((pid=vfork()) < 0)
  1073.                   xerror("Can't fork");
  1074.               else if (pid > 0)
  1075.                   exit(0);
  1076.   #ifdef SIGTTOU
  1077.           signal(SIGTTOU, SIG_IGN);
  1078.   #endif /* SIGTTOU */
  1079.           savehist(histline);
  1080. !         broadcast();
  1081.       }
  1082.       xxit(mode == PROC ? 0 : exitcode);
  1083.   }
  1084. --- 871,889 ----
  1085.       (void) fclose(tfp);
  1086.       (void) fclose(infp);
  1087.       if(exitcode == 0) {
  1088.           /* article has passed all the checks, so work in background */
  1089. !         if (mode != PROC) {
  1090. !             int pid;
  1091. !             if ((pid=fork()) < 0)
  1092.                   xerror("Can't fork");
  1093.               else if (pid > 0)
  1094.                   exit(0);
  1095. +         }
  1096.   #ifdef SIGTTOU
  1097.           signal(SIGTTOU, SIG_IGN);
  1098.   #endif /* SIGTTOU */
  1099.           savehist(histline);
  1100. !         broadcast(mode==PROC);
  1101.       }
  1102.       xxit(mode == PROC ? 0 : exitcode);
  1103.   }
  1104. ***************
  1105. *** 1099,1107 ****
  1106.       register struct direct *dir;
  1107.       register int foundsome;
  1108.   #ifdef VMS
  1109. !     sprintf(bfr, "%s/+rnews", SPOOLDIR);
  1110.   #else /* !VMS */
  1111. !     sprintf(bfr, "%s/.rnews", SPOOLDIR);
  1112.   #endif /* !VMS */
  1113.   
  1114.       if (chdir(bfr) < 0)
  1115. --- 1105,1113 ----
  1116.       register struct direct *dir;
  1117.       register int foundsome;
  1118.   #ifdef VMS
  1119. !     sprintf(bfr, "%s/+rnews", SPOOL);
  1120.   #else /* !VMS */
  1121. !     sprintf(bfr, "%s/.rnews", SPOOL);
  1122.   #endif /* !VMS */
  1123.   
  1124.       if (chdir(bfr) < 0)
  1125. ***************
  1126. *** 1117,1123 ****
  1127.               if (dir->d_name[0] == '.')
  1128.                   continue;
  1129.               sprintf(bfr,"%s -S -p %s", RNEWS, dir->d_name);
  1130. !             system(bfr);
  1131.               (void) unlink(dir->d_name);
  1132.               foundsome++;
  1133.           }
  1134. --- 1123,1134 ----
  1135.               if (dir->d_name[0] == '.')
  1136.                   continue;
  1137.               sprintf(bfr,"%s -S -p %s", RNEWS, dir->d_name);
  1138. !             if (system(bfr) != 0) {
  1139. !                 sprintf(bfr, "../%s", dir->d_name);
  1140. !                 (void) LINK(dir->d_name, bfr);
  1141. !                 logerr("rnews failed. Batch saved in %s/%s",
  1142. !                     SPOOLDIR, dir->d_name);
  1143. !             }
  1144.               (void) unlink(dir->d_name);
  1145.               foundsome++;
  1146.           }
  1147.  
  1148. Index: install.sh
  1149. Prereq: 1.16
  1150. *** .d/install.sh    Thu Oct 30 16:16:49 1986
  1151. --- install.sh    Tue Dec 16 13:10:09 1986
  1152. ***************
  1153. *** 1,4 ****
  1154. ! : '@(#)install.sh    1.16    10/29/86'
  1155.   
  1156.   if test "$#" != 6
  1157.   then
  1158. --- 1,4 ----
  1159. ! : '@(#)install.sh    1.17    12/16/86'
  1160.   
  1161.   if test "$#" != 6
  1162.   then
  1163. ***************
  1164. *** 110,128 ****
  1165.   fi
  1166.   
  1167.   cat >$LIBDIR/aliases.new <<EOF
  1168. ! net.chess        net.games.chess
  1169. ! net.trivia        net.games.trivia
  1170. ! net.rec.radio        net.ham-radio
  1171. ! net.term        net.info-terms
  1172. ! net.joke        net.jokes
  1173. ! net.vlsi        net.lsi
  1174. ! net.micro.16k        net.micro.ns32k
  1175. ! net.music.gdea        net.music.gdead
  1176. ! net.notes        net.news.notes
  1177. ! net.periph        net.periphs
  1178. ! net.puzzles        net.puzzle
  1179. ! net.unix.wizards    net.unix-wizards
  1180. ! net.sources.wanted    net.wanted.sources
  1181.   net.consumers        misc.consumers
  1182.   net.consumers.house    misc.consumers.house
  1183.   net.house        misc.consumers.house
  1184. --- 110,258 ----
  1185.   fi
  1186.   
  1187.   cat >$LIBDIR/aliases.new <<EOF
  1188. ! net.audio    rec.audio
  1189. ! net.auto    rec.autos
  1190. ! net.auto.tech    rec.autos.tech
  1191. ! net.aviation    rec.aviation
  1192. ! net.bicycle    rec.bicycles
  1193. ! net.rec.birds    rec.birds
  1194. ! net.rec.boat    rec.boats
  1195. ! net.cooks    rec.food.cooking
  1196. ! net.wines    rec.food.drink
  1197. ! net.veg        rec.food.veg
  1198. ! net.games    rec.games.misc
  1199. ! net.games.board    rec.games.board
  1200. ! net.rec.bridge    rec.games.bridge
  1201. ! net.games.chess    rec.games.chess
  1202. ! net.games.emp    rec.games.empire
  1203. ! net.games.frp    rec.games.frp
  1204. ! net.games.go    rec.games.go
  1205. ! net.games.hack    rec.games.hack
  1206. ! net.games.pbm    rec.games.pbm
  1207. ! net.games.rogue    rec.games.rogue
  1208. ! net.games.trivia    rec.games.trivia
  1209. ! net.games.video    rec.games.video
  1210. ! net.garden    rec.gardens
  1211. ! net.ham-radio     rec.ham-radio
  1212. ! net.ham-radio.packet rec.ham-radio.packet
  1213. ! net.jokes    rec.humor
  1214. ! net.jokes.d    rec.humor.d
  1215. ! mod.mag        rec.mag
  1216. ! net.mag        rec.mag
  1217. ! net.books    rec.arts.books
  1218. ! net.comics    rec.arts.comics
  1219. ! net.tv.drwho    rec.arts.drwho
  1220. ! mod.movies    rec.arts.movies
  1221. ! net.movies    rec.arts.movies
  1222. ! net.sf-lovers    rec.arts.sf-lovers
  1223. ! net.startrek    rec.arts.startrek
  1224. ! net.tv        rec.arts.tv
  1225. ! net.tv.soaps    rec.arts.tv.soaps
  1226. ! net.wobegon    rec.arts.wobegon
  1227. ! net.rec        rec.misc
  1228. ! net.cycle    rec.motorcycles
  1229. ! net.music.classical    rec.music.classical
  1230. ! net.music.folk    rec.music.folk
  1231. ! net.music.gdead    rec.music.gdead
  1232. ! net.music.makers    rec.music.makers
  1233. ! net.music    rec.music.misc
  1234. ! net.music.synth    rec.music.synth
  1235. ! net.rec.nude    rec.nude
  1236. ! net.pets    rec.pets
  1237. ! net.rec.photo    rec.photo
  1238. ! net.poems    rec.arts.poems
  1239. ! net.puzzle    rec.puzzles
  1240. ! net.railroad    rec.railroad
  1241. ! net.rec.scuba    rec.scuba
  1242. ! net.rec.ski    rec.skiing
  1243. ! net.rec.skydive    rec.skydiving
  1244. ! net.sport    rec.sport.misc
  1245. ! net.sport.baseball    rec.sport.baseball
  1246. ! net.sport.hoops    rec.sport.basketball
  1247. ! net.sport.football    rec.sport.football
  1248. ! net.sport.hockey    rec.sport.hockey
  1249. ! net.travel    rec.travel
  1250. ! net.video    rec.video
  1251. ! net.rec.wood    rec.woodworking
  1252. ! net.ai    comp.ai
  1253. ! net.arch    comp.arch
  1254. ! net.bugs.2bsd    comp.bugs.2bsd
  1255. ! net.bugs.4bsd    comp.bugs.4bsd
  1256. ! net.bugs.usg    comp.bugs.sys5
  1257. ! net.bugs.uucp    comp.bugs.misc
  1258. ! net.bugs.v7    comp.bugs.misc
  1259. ! net.bugs    comp.bugs.misc
  1260. ! net.cog-eng    comp.cog-eng
  1261. ! net.cse        comp.edu
  1262. ! net.database    comp.databases
  1263. ! net.dcom    comp.dcom.modems
  1264. ! net.decus    comp.org.decus
  1265. ! net.emacs    comp.emacs
  1266. ! net.eunice    comp.os.eunice
  1267. ! net.graphics    comp.graphics
  1268. ! net.info-terms    comp.terminals
  1269. ! net.internat    comp.std.internat
  1270. ! net.lan        comp.dcom.lans
  1271. ! net.lang    comp.lang.misc
  1272. ! net.lang.ada    comp.lang.ada
  1273. ! net.lang.apl    comp.lang.apl
  1274. ! net.lang.c    comp.lang.c
  1275. ! net.lang.c++    comp.lang.c++
  1276. ! net.lang.f77    comp.lang.fortran
  1277. ! net.lang.forth    comp.lang.forth
  1278. ! net.lang.lisp    comp.lang.lisp
  1279. ! net.lang.mod2    comp.lang.modula2
  1280. ! net.lang.pascal    comp.lang.pascal
  1281. ! net.lang.prolog    comp.lang.prolog
  1282. ! net.lang.st80    comp.lang.smalltalk
  1283. ! net.lsi        comp.lsi
  1284. ! net.mail    comp.mail.uucp
  1285. ! net.mail.headers    comp.mail.headers
  1286. ! net.micro    comp.sys.misc
  1287. ! net.micro.6809    comp.sys.m6809
  1288. ! net.micro.68k    comp.sys.m68k
  1289. ! net.micro.apple    comp.sys.apple
  1290. ! net.micro.amiga    comp.sys.amiga
  1291. ! net.micro.atari16    comp.sys.atari.st
  1292. ! net.micro.atari8    comp.sys.atari.8bit
  1293. ! net.micro.att    comp.sys.att
  1294. ! net.micro.cbm    comp.sys.cbm
  1295. ! net.micro.cpm    comp.os.cpm
  1296. ! net.micro.hp    comp.sys.hp
  1297. ! net.micro.mac    comp.sys.mac
  1298. ! net.micro.ns32k    comp.sys.nsc.32k
  1299. ! net.micro.pc    comp.sys.ibm.pc
  1300. ! net.micro.ti    comp.sys.ti
  1301. ! net.micro.trs-80    comp.sys.tandy
  1302. ! net.news    news.misc
  1303. ! net.news.adm    news.admin
  1304. ! net.news.b    news.software.b
  1305. ! net.news.config    news.config
  1306. ! net.news.group    news.groups
  1307. ! net.news.newsite    news.newsites
  1308. ! net.news.notes    news.software.notes
  1309. ! net.news.sa    news.sysadmin
  1310. ! net.news.stargate    news.stargate
  1311. ! net.periphs    comp.periphs
  1312. ! net.sources.d    comp.sources.d
  1313. ! net.text    comp.text
  1314. ! net.unix    comp.unix.questions
  1315. ! net.unix-wizards    comp.unix.wizards
  1316. ! net.usenix    comp.org.usenix
  1317. ! net.wanted.sources    comp.sources.wanted
  1318. ! net.chess        rec.games.chess
  1319. ! net.trivia        rec.games.trivia
  1320. ! net.rec.radio        rec.ham-radio
  1321. ! net.term        comp.terminals
  1322. ! net.joke        rec.humor
  1323. ! net.vlsi        comp.lsi
  1324. ! net.micro.16k        comp.sys.nsc.32k
  1325. ! net.music.gdea        rec.music.gdead
  1326. ! net.notes        news.software.notes
  1327. ! net.periph        comp.periphs
  1328. ! net.puzzles        rec.puzzles
  1329. ! net.unix.wizards    comp.unix.wizards
  1330. ! net.sources.wanted    comp.sources.wanted
  1331.   net.consumers        misc.consumers
  1332.   net.consumers.house    misc.consumers.house
  1333.   net.house        misc.consumers.house
  1334. ***************
  1335. *** 187,192 ****
  1336. --- 317,327 ----
  1337.   talk.religion        talk.religion.misc
  1338.   net.rumor        talk.rumors
  1339.   talk.rumor        talk.rumors
  1340. + rec.skydive        rec.skydiving
  1341. + comp.sources.games    net.sources.games
  1342. + comp.sources.bugs    net.sources.bugs
  1343. + comp.sources.unix    net.sources
  1344. + comp.sources.mac    net.sources.mac
  1345.   EOF
  1346.   : if no aliases file, make one
  1347.   if test ! -f $LIBDIR/aliases
  1348.  
  1349. Index: ndir.c
  1350. Prereq: 1.8
  1351. *** .d/ndir.c    Thu Oct 30 16:12:02 1986
  1352. --- ndir.c    Tue Dec 16 13:10:10 1986
  1353. ***************
  1354. *** 4,10 ****
  1355.   #include "ndir.h"
  1356.   
  1357.   #ifdef SCCSID
  1358. ! static char    *SccsId = "@(#)ndir.c    1.8    4/26/85";
  1359.   #endif /* SCCSID */
  1360.   
  1361.   /*
  1362. --- 4,10 ----
  1363.   #include "ndir.h"
  1364.   
  1365.   #ifdef SCCSID
  1366. ! static char    *SccsId = "@(#)ndir.c    1.9    12/16/86";
  1367.   #endif /* SCCSID */
  1368.   
  1369.   /*
  1370. ***************
  1371. *** 48,58 ****
  1372. --- 48,68 ----
  1373.   #else /* V7 file system */
  1374.   #define    ODIRSIZ    14
  1375.   
  1376. + #if HP9K5
  1377. + /* HP 9000/500 has a weird directory format */
  1378. + struct olddirect {
  1379. +     char    od_name[DIRSIZ+2];    /* filename */
  1380. +     short    od_object_type;
  1381. +     short    od_file_code;
  1382. +     short    od_ino;         /* inode */
  1383. + };
  1384. + #else /* normal V7 */
  1385.   struct    olddirect {
  1386.       short    od_ino;
  1387.       char    od_name[ODIRSIZ];
  1388.   };
  1389.   #endif /* V7 */
  1390. + #endif /* !pyr */
  1391.   
  1392.   /*
  1393.    * get next entry in a directory.
  1394. Index: pathinit.c
  1395. Prereq: 1.18
  1396. *** .d/pathinit.c    Thu Oct 30 16:09:55 1986
  1397. --- pathinit.c    Tue Dec 16 13:10:11 1986
  1398. ***************
  1399. *** 34,40 ****
  1400.    */
  1401.   
  1402.   #ifdef SCCSID
  1403. ! static char    *SccsId = "@(#)pathinit.c    1.18    10/23/86";
  1404.   #endif /* SCCSID */
  1405.   
  1406.   #if defined(INEW) || defined(EXP)
  1407. --- 34,40 ----
  1408.    */
  1409.   
  1410.   #ifdef SCCSID
  1411. ! static char    *SccsId = "@(#)pathinit.c    1.19    12/16/86";
  1412.   #endif /* SCCSID */
  1413.   
  1414.   #if defined(INEW) || defined(EXP)
  1415. ***************
  1416. *** 116,123 ****
  1417.   pathinit()
  1418.   {
  1419.   #if defined(INEW) && defined(NOTIFY)
  1420. -     FILE *nfd;        /* notify file descriptor */
  1421. -     char *p;
  1422.   #endif /* INEW && NOTIFY */
  1423.   #ifndef ROOTID
  1424.       struct passwd    *pw;    /* struct for pw lookup    */
  1425. --- 116,121 ----
  1426. Index: postnews.c
  1427. Prereq: 1.29
  1428. *** .d/postnews.c    Fri Nov 21 16:05:06 1986
  1429. --- postnews.c    Tue Dec 16 13:10:12 1986
  1430. ***************
  1431. *** 16,24 ****
  1432.    * script, and does more intelligent prompting and filtering than possible
  1433.    * in a shell script.
  1434.    */
  1435.   #ifdef SCCSID
  1436. ! static char    *SccsId = "@(#)postnews.c    1.29    11/21/86";
  1437.   #endif /* SCCSID */
  1438.   
  1439.   #include "params.h"
  1440. --- 16,23 ----
  1441.    * script, and does more intelligent prompting and filtering than possible
  1442.    * in a shell script.
  1443.    */
  1444.   #ifdef SCCSID
  1445. ! static char    *SccsId = "@(#)postnews.c    1.30    12/16/86";
  1446.   #endif /* SCCSID */
  1447.   
  1448.   #include "params.h"
  1449. ***************
  1450. *** 57,62 ****
  1451. --- 56,62 ----
  1452.       char descr[128];
  1453.   } distr[MAXDISTR];
  1454.   
  1455. + char def_distr[24] = "";    /* default distribution */
  1456.   FILE *xfopen();
  1457.   
  1458.   main(argc, argv)
  1459. ***************
  1460. *** 253,258 ****
  1461. --- 253,259 ----
  1462.   #endif /* !PAGE */
  1463.               }
  1464.               printf("These are the currently active groups:\n");
  1465. +             (void) fflush(stdout);
  1466.               sprintf(buf, "exec %s %s/newsgroups", pager, LIB);
  1467.               (void) system(buf);
  1468.               continue;
  1469. ***************
  1470. *** 310,315 ****
  1471. --- 311,322 ----
  1472.           (void) strcpy(def, deflt);
  1473.       if (ngmatch("misc.test", newsgroups))
  1474.           (void) strcpy(def, "local");
  1475. +     for (i=0; distr[i].abbr[0]; i++) {
  1476. +         if (strcmp(distr[i].abbr, def) == 0)
  1477. +             break;
  1478. +     }
  1479. +     if (distr[i].abbr[0] == '\0')
  1480. +         strcpy(def, def_distr);
  1481.       for(;;) {
  1482.           do {
  1483.               (void) sprintf(buf, "Distribution (default='%s', '?' for help) : ", def);
  1484. ***************
  1485. *** 419,424 ****
  1486. --- 426,432 ----
  1487.                   fprintf(tf, "> %s", buf);
  1488.               (void) fclose(of);
  1489.               printf("OK, but please edit it to suppress unnecessary verbiage, signatures, etc.\n");
  1490. +             (void) fflush(stdout);
  1491.           }
  1492.       }
  1493.   
  1494. ***************
  1495. *** 732,739 ****
  1496. --- 740,752 ----
  1497.           if (fscanf(fd, "%s %[^\n]", distr[i].abbr, distr[i].descr)
  1498.               != 2)
  1499.               break;
  1500. +         if (strcmp(distr[i].abbr, "default") == 0)
  1501. +             strcpy(def_distr, distr[i--].descr);
  1502.       }
  1503.       (void) fclose(fd);
  1504. +     distr[i].abbr[0] = '\0';
  1505. +     if (def_distr[0] == '\0')
  1506. +         strcpy(def_distr, "world");    /* maybe "local" is better? */
  1507.   }
  1508.   
  1509.   /*
  1510. ***************
  1511. *** 886,892 ****
  1512.                       *canpost = 'n';
  1513.                       return FALSE;
  1514.                   }
  1515. ! #endif FASCIST
  1516.                   return TRUE;
  1517.               } else
  1518.                   return FALSE;
  1519. --- 899,905 ----
  1520.                       *canpost = 'n';
  1521.                       return FALSE;
  1522.                   }
  1523. ! #endif /* FASCIST */
  1524.                   return TRUE;
  1525.               } else
  1526.                   return FALSE;
  1527. ***************
  1528. *** 1047,1052 ****
  1529. --- 1060,1066 ----
  1530.   
  1531.       (void) sprintf(buf,"exec %s/%s 13 < %s >> %s\n", LIB, "caesar", codedfile, article);
  1532.       printf("Encoding article -- please stand by\n");
  1533. +     (void) fflush(stdout);
  1534.       if (system(buf)) {
  1535.           printf("encoding failed");
  1536.           exit(2);
  1537.  
  1538. Index: process.c
  1539. Prereq: 2.16
  1540. *** .d/process.c    Fri Nov 21 16:04:39 1986
  1541. --- process.c    Tue Dec 16 13:10:13 1986
  1542. ***************
  1543. *** 16,28 ****
  1544.    */
  1545.   
  1546.   #ifdef SCCSID
  1547. ! static char    *SccsId = "@(#)process.c    2.16    11/21/86";
  1548.   #endif /* SCCSID */
  1549.   
  1550.   #include "rparams.h"
  1551.   
  1552.   char    coptbuf[LBUFLEN], datebuf[LBUFLEN];
  1553. - struct hbuf header;
  1554.   
  1555.   #define OPTION    0    /* pick up an option string */
  1556.   #define STRING    1    /* pick up a string of arguments */
  1557. --- 16,27 ----
  1558.    */
  1559.   
  1560.   #ifdef SCCSID
  1561. ! static char    *SccsId = "@(#)process.c    2.17    12/16/86";
  1562.   #endif /* SCCSID */
  1563.   
  1564.   #include "rparams.h"
  1565.   
  1566.   char    coptbuf[LBUFLEN], datebuf[LBUFLEN];
  1567.   
  1568.   #define OPTION    0    /* pick up an option string */
  1569.   #define STRING    1    /* pick up a string of arguments */
  1570.  
  1571. Index: readr.c
  1572. Prereq: 2.59
  1573. *** .d/readr.c    Fri Nov 21 16:04:38 1986
  1574. --- readr.c    Tue Dec 16 13:10:14 1986
  1575. ***************
  1576. *** 16,22 ****
  1577.    */
  1578.   
  1579.   #ifdef SCCSID
  1580. ! static char    *SccsId = "@(#)readr.c    2.59    11/21/86";
  1581.   #endif /* SCCSID */
  1582.   
  1583.   #include "rparams.h"
  1584. --- 16,22 ----
  1585.    */
  1586.   
  1587.   #ifdef SCCSID
  1588. ! static char    *SccsId = "@(#)readr.c    2.60    12/16/86";
  1589.   #endif /* SCCSID */
  1590.   
  1591.   #include "rparams.h"
  1592. ***************
  1593. *** 221,226 ****
  1594. --- 221,233 ----
  1595.   
  1596.       switch (*bptr++) {
  1597.   
  1598. +     /* display list of articles in current group */
  1599. +     case 'l':
  1600. +     case 'L':
  1601. +         list_group(groupdir, atoi(bptr),
  1602. +             (*(bptr - 1) == 'l') ? FALSE : TRUE, pngsize);
  1603. +         break;
  1604. +     
  1605.       /* No.  Go on to next article. */
  1606.       case 'n':
  1607.           EOL();
  1608. ***************
  1609. *** 516,522 ****
  1610.               *ptr2 = '\0';
  1611.           ptr2 = index(ptr3, '/');
  1612.           if (!ptr2) {
  1613. -             *ptr3 = '\0';
  1614.               if (strcmp(ptr3, "cancelled") == 0) {
  1615.                   fprintf(ofp, "Article %s has been cancelled.\n",
  1616.                       bptr);
  1617. --- 523,528 ----
  1618.  
  1619. Index: rfuncs2.c
  1620. Prereq: 1.32
  1621. *** .d/rfuncs2.c    Thu Oct 30 16:10:44 1986
  1622. --- rfuncs2.c    Tue Dec 16 13:10:16 1986
  1623. ***************
  1624. *** 16,22 ****
  1625.    */
  1626.   
  1627.   #ifdef SCCSID
  1628. ! static char    *SccsId = "@(#)rfuncs2.c    1.32    10/23/86";
  1629.   #endif /* SCCSID */
  1630.   
  1631.   /*LINTLIBRARY*/
  1632. --- 16,22 ----
  1633.    */
  1634.   
  1635.   #ifdef SCCSID
  1636. ! static char    *SccsId = "@(#)rfuncs2.c    1.33    12/16/86";
  1637.   #endif /* SCCSID */
  1638.   
  1639.   /*LINTLIBRARY*/
  1640. ***************
  1641. *** 24,29 ****
  1642. --- 24,30 ----
  1643.   #include "rparams.h"
  1644.   
  1645.   static char    lbuf[LBUFLEN];
  1646. + extern char *replyname();
  1647.   
  1648.   FILE *popen();
  1649.   
  1650. Index: uname.c
  1651. Prereq: 2.12
  1652. *** .d/uname.c    Fri Nov 21 16:04:50 1986
  1653. --- uname.c    Tue Dec 16 13:10:17 1986
  1654. ***************
  1655. *** 21,27 ****
  1656.    */
  1657.   
  1658.   #ifdef SCCSID
  1659. ! static char    *SccsId = "@(#)uname.c    2.12    11/21/86";
  1660.   #endif /* SCCSID */
  1661.   
  1662.   #include "params.h"
  1663. --- 21,27 ----
  1664.    */
  1665.   
  1666.   #ifdef SCCSID
  1667. ! static char    *SccsId = "@(#)uname.c    2.13    12/16/86";
  1668.   #endif /* SCCSID */
  1669.   
  1670.   #include "params.h"
  1671. ***************
  1672. *** 36,42 ****
  1673.   {
  1674.       char *cp;
  1675.       gethostname(uptr->nodename, sizeof (uptr->nodename));
  1676. !     if (MYDOMAIN[0] == '\0') /* get domain name from hostname */
  1677.           return;
  1678.       cp = index(uptr->nodename, '.');
  1679.       if (cp)
  1680. --- 36,43 ----
  1681.   {
  1682.       char *cp;
  1683.       gethostname(uptr->nodename, sizeof (uptr->nodename));
  1684. !     cp = MYDOMAIN;    /* Gould compiler can't handle ""[0] */
  1685. !     if (*cp == '\0') /* get domain name from hostname */
  1686.           return;
  1687.       cp = index(uptr->nodename, '.');
  1688.       if (cp)
  1689.  
  1690. Index: unbatch.c
  1691. Prereq: 1.23
  1692. *** .d/unbatch.c    Fri Nov 21 16:04:53 1986
  1693. --- unbatch.c    Tue Dec 16 13:10:17 1986
  1694. ***************
  1695. *** 13,19 ****
  1696.    */
  1697.   
  1698.   #ifdef SCCSID
  1699. ! static char    *SccsId = "@(#)unbatch.c    1.23    11/21/86";
  1700.   #endif /* SCCSID */
  1701.   
  1702.   #define    MAXARGS        32
  1703. --- 13,19 ----
  1704.    */
  1705.   
  1706.   #ifdef SCCSID
  1707. ! static char    *SccsId = "@(#)unbatch.c    1.24    12/16/86";
  1708.   #endif /* SCCSID */
  1709.   
  1710.   #define    MAXARGS        32
  1711. ***************
  1712. *** 161,167 ****
  1713. --- 161,171 ----
  1714.       if (cp++ == NULL)
  1715.           cp = args[0];
  1716.   
  1717. + # ifdef HOME
  1718. +     sprintf(path, "%s/%s/%s", logdir(HOME), LIBDIR, cp);
  1719. + # else /* !HOME */
  1720.       sprintf(path, "%s/%s", LIBDIR, cp);
  1721. + # endif /* HOME */
  1722.   
  1723.       /*
  1724.        * "path" is absolute, no searching is needed,  we use
  1725.  
  1726. Index: virtterm.c
  1727. Prereq: 1.12
  1728. *** .d/virtterm.c    Thu Oct 30 16:08:32 1986
  1729. --- virtterm.c    Tue Dec 16 13:10:19 1986
  1730. ***************
  1731. *** 5,11 ****
  1732.    */
  1733.   
  1734.   #ifdef SCCSID
  1735. ! static char    *SccsId = "@(#)virtterm.c    1.12    10/29/86";
  1736.   #endif /* SCCSID */
  1737.   
  1738.   /*LINTLIBRARY*/
  1739. --- 5,11 ----
  1740.    */
  1741.   
  1742.   #ifdef SCCSID
  1743. ! static char    *SccsId = "@(#)virtterm.c    1.13    12/16/86";
  1744.   #endif /* SCCSID */
  1745.   
  1746.   /*LINTLIBRARY*/
  1747. ***************
  1748. *** 89,95 ****
  1749.   int     COLS;            /* width of screen */
  1750.   
  1751.   struct line {
  1752. !     char    len;
  1753.       char    flags;
  1754.       char    *l;        /* pointer to actual line text, NO NULL @ end */
  1755.   };
  1756. --- 89,95 ----
  1757.   int     COLS;            /* width of screen */
  1758.   
  1759.   struct line {
  1760. !     short    len;        /* should really be u_char */
  1761.       char    flags;
  1762.       char    *l;        /* pointer to actual line text, NO NULL @ end */
  1763.   };
  1764. ***************
  1765. *** 1006,1009 ****
  1766.   
  1767.       winch_upd();
  1768.   }
  1769. ! #endif TIOCGWINSZ
  1770. --- 1006,1009 ----
  1771.   
  1772.       winch_upd();
  1773.   }
  1774. ! #endif /* TIOCGWINSZ */
  1775.  
  1776. Index: visual.c
  1777. Prereq: 1.33
  1778. *** .d/visual.c    Fri Nov 21 16:04:36 1986
  1779. --- visual.c    Tue Dec 16 13:10:21 1986
  1780. ***************
  1781. *** 4,10 ****
  1782.    */
  1783.   
  1784.   #ifdef SCCSID
  1785. ! static char    *SccsId = "@(#)visual.c    1.33    11/21/86";
  1786.   #endif /* SCCSID */
  1787.   
  1788.   #include "rparams.h"
  1789. --- 4,10 ----
  1790.    */
  1791.   
  1792.   #ifdef SCCSID
  1793. ! static char    *SccsId = "@(#)visual.c    1.34    12/16/86";
  1794.   #endif /* SCCSID */
  1795.   
  1796.   #include "rparams.h"
  1797. ***************
  1798. *** 324,330 ****
  1799.       secpr[0] = '\0';
  1800.       if (countset == 0)
  1801.           count = 1;
  1802. !     docmd(c, count);
  1803.       if (c != '?' && c != 'H')        /* UGGH */
  1804.           prflags &=~ HELPMSG;
  1805.       if (dlinno > hdrstart)
  1806. --- 324,330 ----
  1807.       secpr[0] = '\0';
  1808.       if (countset == 0)
  1809.           count = 1;
  1810. !     docmd(c, count, countset);
  1811.       if (c != '?' && c != 'H')        /* UGGH */
  1812.           prflags &=~ HELPMSG;
  1813.       if (dlinno > hdrstart)
  1814. ***************
  1815. *** 335,343 ****
  1816.   /*
  1817.    * Process one command, which has already been typed in.
  1818.    */
  1819. ! docmd(c, count)
  1820.   int c;
  1821.   long count;
  1822.   {
  1823.       int i;
  1824.       long nart, Hoffset;
  1825. --- 335,344 ----
  1826.   /*
  1827.    * Process one command, which has already been typed in.
  1828.    */
  1829. ! docmd(c, count, countset)
  1830.   int c;
  1831.   long count;
  1832. + int countset;
  1833.   {
  1834.       int i;
  1835.       long nart, Hoffset;
  1836. ***************
  1837. *** 345,350 ****
  1838. --- 346,363 ----
  1839.   
  1840.       switch (c) {
  1841.   
  1842. +     /* display list of articles in current group */
  1843. +     case 'l':
  1844. +     case 'L':
  1845. +         botscreen();
  1846. +         ttycooked();
  1847. +         list_group(groupdir, countset ? count : 0,
  1848. +             (c == 'l') ? FALSE : TRUE, pngsize);
  1849. +         ttyraw();
  1850. +         clearok(curscr, 1);
  1851. +         updscr();
  1852. +         break;
  1853.       /* Show more of current article, or advance to next article */
  1854.       case '\n':
  1855.       case ' ':
  1856. ***************
  1857. *** 432,438 ****
  1858.           break;
  1859.   
  1860.       /* Turn displaying of article back on */
  1861. -     case 'l':
  1862.       case 'd':
  1863.           prflags &=~ NOPRT;
  1864.           break;
  1865. --- 445,450 ----
  1866. ***************
  1867. *** 496,528 ****
  1868.   
  1869.           /* write out the article someplace */
  1870.           /* w writes out without the header */
  1871. !     case 's':
  1872. !     case 'w': {
  1873. !         char *grn = groupdir;
  1874.           int wflags;
  1875.   
  1876. !         msg("file: ");
  1877. !         curflag = CURP2;
  1878. !         while ((wflags = vgetc()) == ' ');
  1879. !         if (wflags == cintr) {
  1880. !             secpr[0] = '\0';
  1881. !             break;
  1882.           }
  1883. !         if (wflags == '|') {
  1884. !             linebuf[0] = '|';
  1885. !             if (prget("| ", linebuf+1))
  1886. !                 break;
  1887. !         } else {
  1888. !             pushback(wflags);
  1889. !             if (prget("file: ", linebuf))
  1890. !                 break;
  1891. !         }
  1892.           wflags = 0;
  1893.           if (c == 's')
  1894.               wflags |= SVHEAD;
  1895.           if (count != 1)
  1896.               wflags |= OVWRITE;
  1897. !         bptr = linebuf;
  1898.           while( *bptr == ' ')
  1899.               bptr++;    /* strip leading spaces */
  1900.   
  1901. --- 508,550 ----
  1902.   
  1903.           /* write out the article someplace */
  1904.           /* w writes out without the header */
  1905. !         /* | defaults to pipeing */
  1906. !     {
  1907. !         static char savebuf[BUFLEN];
  1908.           int wflags;
  1909.   
  1910. !     case '|':
  1911. !         if (savebuf[0] != '|') {
  1912. !             savebuf[0] = '|';
  1913. !             savebuf[1] = '\0';
  1914.           }
  1915. !         c = 's';
  1916. !     case 's':
  1917. !     case 'w':
  1918. !         /* We loop back to here each time user types ^U to prompt */
  1919. !         do {
  1920. !             if (savebuf[0] == 0) {
  1921. !                 /* No saved default.  Ask. */
  1922. !                 msg("file: ");
  1923. !                 curflag = CURP2;
  1924. !                 while ((wflags = vgetc()) == ' ');
  1925. !                 if (wflags == cintr) {
  1926. !                     secpr[0] = '\0';
  1927. !                     break;
  1928. !                 }
  1929. !                 savebuf[0] = wflags;
  1930. !                 savebuf[1] = 0;
  1931. !             }
  1932. !             wflags = prget( (savebuf[0] == '|') ? "": "file: ",
  1933. !                     savebuf);
  1934. !         } while (wflags == 2);
  1935. !         if (wflags) break;    /* Interrupted out */
  1936.           wflags = 0;
  1937.           if (c == 's')
  1938.               wflags |= SVHEAD;
  1939.           if (count != 1)
  1940.               wflags |= OVWRITE;
  1941. !         bptr = savebuf;
  1942.           while( *bptr == ' ')
  1943.               bptr++;    /* strip leading spaces */
  1944.   
  1945. ***************
  1946. *** 536,542 ****
  1947.               } else if (boxptr = getenv("NEWSBOX")) {
  1948.                    if (index(boxptr, '%')) {
  1949.                       struct stat stbf;
  1950. !                      sprintf(bptr, boxptr, grn);
  1951.                        if (stat(bptr,&stbf) < 0) {
  1952.                            if (mkdir(bptr, 0777) < 0) {
  1953.                               msg("Cannot create directory %s", bptr);
  1954. --- 558,564 ----
  1955.               } else if (boxptr = getenv("NEWSBOX")) {
  1956.                    if (index(boxptr, '%')) {
  1957.                       struct stat stbf;
  1958. !                      sprintf(bptr, boxptr, groupdir);
  1959.                        if (stat(bptr,&stbf) < 0) {
  1960.                            if (mkdir(bptr, 0777) < 0) {
  1961.                               msg("Cannot create directory %s", bptr);
  1962. ***************
  1963. *** 633,638 ****
  1964. --- 655,661 ----
  1965.           int flags;
  1966.   
  1967.           p = linebuf;
  1968. +         *p = 0;
  1969.           if (prget("!", p))
  1970.               break;
  1971.           flags = CWAIT;
  1972. ***************
  1973. *** 763,770 ****
  1974.       /* specific message ID. */
  1975.       case '<':
  1976.           /* could improve this */
  1977. !         linebuf[0] = '<';
  1978. !         if (prget("<", linebuf+1))
  1979.               break;
  1980.   searchid:    secpr[0] = '\0';
  1981.           if (index(linebuf, '@') == NULL && index(linebuf, '>') == NULL) {
  1982. --- 786,793 ----
  1983.       /* specific message ID. */
  1984.       case '<':
  1985.           /* could improve this */
  1986. !         linebuf[0] = '<'; linebuf[1] = 0;
  1987. !         if (prget("", linebuf))
  1988.               break;
  1989.   searchid:    secpr[0] = '\0';
  1990.           if (index(linebuf, '@') == NULL && index(linebuf, '>') == NULL) {
  1991. ***************
  1992. *** 1033,1038 ****
  1993. --- 1056,1062 ----
  1994.   next_ng_command()
  1995.   {
  1996.       obit = -1;
  1997. +     linebuf[0] = 0;
  1998.       if (prget("group? ", linebuf))
  1999.           return FALSE;
  2000.       bptr = linebuf;
  2001. ***************
  2002. *** 1530,1556 ****
  2003.       maxcol = linebuf;
  2004.   }
  2005.   
  2006.   prget(prompter, buf)
  2007.   char *prompter, *buf;
  2008.   {
  2009. !     char *p, *q, *r;
  2010. !     int c, lastc;
  2011.   
  2012.       curflag = CURP2;
  2013. !     r = buf;
  2014.       lastc = '\0';
  2015.       for (;;) {
  2016. -         *r = '\0';
  2017.           p = secpr;
  2018.           for (q = prompter ; *q ; q++)
  2019.               *p++ = *q;
  2020.           for (q = buf ; *q ; q++) {
  2021. !             if (p < &secpr[SECPRLEN-1] && *q >= ' ' && *p <= '~')
  2022.                   *p++ = *q;
  2023.           }
  2024.           *p = '\0';
  2025.           c = vgetc();
  2026. !         if (c == '\n' || c == cintr) {
  2027.               break;
  2028.           }
  2029.           if (c == cerase || c == '\b' || c == '\177') {
  2030. --- 1554,1595 ----
  2031.       maxcol = linebuf;
  2032.   }
  2033.   
  2034. + /*
  2035. +  * Prompt the user and get a line.
  2036. +  * "prompter" is the prompt.  "buf" contains a string which
  2037. +  * will be used as the initial user response (which may be edited
  2038. +  * by the user with backspace, ^U, etc).  The resulting line is
  2039. +  * returned in "buf".  The result of prget() is:
  2040. +  *     0 if the line was terminated by NL or CR
  2041. +  *     1 if it was terminated by the interrupt character.
  2042. +  *     2 if it was terminated by erasing all the characters, including
  2043. +  *       one or more that were prompted initially in "buf".  (If "buf"
  2044. +  *        was empty, this will never occur.)
  2045. +  */
  2046. + int
  2047.   prget(prompter, buf)
  2048.   char *prompter, *buf;
  2049.   {
  2050. !     register char *p, *q, *r;
  2051. !     register char c;
  2052. !     char lastc;
  2053. !     char hadprompt = buf[0];
  2054.   
  2055.       curflag = CURP2;
  2056. !     r = buf + strlen(buf);
  2057.       lastc = '\0';
  2058.       for (;;) {
  2059.           p = secpr;
  2060.           for (q = prompter ; *q ; q++)
  2061.               *p++ = *q;
  2062.           for (q = buf ; *q ; q++) {
  2063. !             if (p < &secpr[SECPRLEN-1] && *q >= ' ' && *q <= '~')
  2064.                   *p++ = *q;
  2065.           }
  2066.           *p = '\0';
  2067.           c = vgetc();
  2068. !         if (c == '\n' || c == '\r' || c == cintr) {
  2069.               break;
  2070.           }
  2071.           if (c == cerase || c == '\b' || c == '\177') {
  2072. ***************
  2073. *** 1578,1583 ****
  2074. --- 1617,1625 ----
  2075.               *r++ = c;
  2076.           }
  2077.           lastc = c;
  2078. +         *r = '\0';
  2079. +         if ((r == buf) && hadprompt)
  2080. +             return 2;
  2081.       }
  2082.       curflag = CURHOME;
  2083.       secpr[0] = '\0';
  2084. ***************
  2085. *** 1620,1626 ****
  2086.           (void) signal(SIGTTOU, SIG_DFL);
  2087.   #endif
  2088.       }
  2089. ! #ifdef BSD4_2
  2090.       while ((pid = vfork()) == -1)
  2091.   #else /* !BSD4_2 */
  2092.       /* 4.1 BSD (at least) can't handle this vfork with -ljobs */
  2093. --- 1662,1668 ----
  2094.           (void) signal(SIGTTOU, SIG_DFL);
  2095.   #endif
  2096.       }
  2097. ! #if defined(BSD4_2) && !defined(sun)
  2098.       while ((pid = vfork()) == -1)
  2099.   #else /* !BSD4_2 */
  2100.       /* 4.1 BSD (at least) can't handle this vfork with -ljobs */
  2101. ***************
  2102. *** 1811,1817 ****
  2103.       if(UPDATING)    /* concurrency.  wow! */
  2104.           WINCH++;
  2105.       else if((WINCH == 0) && (savelinno >= 0)) {
  2106. !         int saveline = dlinno, saveflag = curflag;
  2107.   
  2108.           /* reread the article */
  2109.           FCLOSE(fp);
  2110. --- 1853,1859 ----
  2111.       if(UPDATING)    /* concurrency.  wow! */
  2112.           WINCH++;
  2113.       else if((WINCH == 0) && (savelinno >= 0)) {
  2114. !         int  saveflag = curflag;
  2115.   
  2116.           /* reread the article */
  2117.           FCLOSE(fp);
  2118. Index: vnews.help
  2119. *** .d/vnews.help    Thu Oct 30 16:12:04 1986
  2120. --- vnews.help    Tue Dec 16 13:10:22 1986
  2121. ***************
  2122. *** 17,22 ****
  2123.   ESC-r  Reply directly using mailer      m   Move on to next item in a digest
  2124.   f   Post a followup article             s   Save article in file
  2125.   N   Go to newsgroup (next is default)   w   Save without header
  2126. ! l   Display article (use after !, r, f, or ?)
  2127.   
  2128. ! [Press l to see article again]
  2129. --- 17,22 ----
  2130.   ESC-r  Reply directly using mailer      m   Move on to next item in a digest
  2131.   f   Post a followup article             s   Save article in file
  2132.   N   Go to newsgroup (next is default)   w   Save without header
  2133. ! l   List unread articles in group    L   List all articles in group
  2134.   
  2135. ! [Press ^L to see article again]
  2136.  
  2137. Index: header.c
  2138. Prereq: 2.44
  2139. *** .d/header.c    Fri Nov 21 16:18:38 1986
  2140. --- header.c    Wed Dec 17 11:36:27 1986
  2141. ***************
  2142. *** 16,22 ****
  2143.    */
  2144.   
  2145.   #ifdef SCCSID
  2146. ! static char    *SccsId = "@(#)header.c    2.44    11/21/86";
  2147.   #endif /* SCCSID */
  2148.   
  2149.   #include <stdio.h>
  2150. --- 16,22 ----
  2151.    */
  2152.   
  2153.   #ifdef SCCSID
  2154. ! static char    *SccsId = "@(#)header.c    2.46    12/17/86";
  2155.   #endif /* SCCSID */
  2156.   
  2157.   #include <stdio.h>
  2158. ***************
  2159. *** 38,44 ****
  2160. --- 38,46 ----
  2161.   FILE *fp;
  2162.   int wholething;
  2163.   {
  2164. + #ifndef HIDDENNET
  2165.       register int    len;
  2166. + #endif /* HIDDENNET */
  2167.       register int    i;
  2168.   #ifdef OLD
  2169.       char *p;
  2170. ***************
  2171. *** 94,102 ****
  2172. --- 96,106 ----
  2173.   #endif /* OLD */
  2174.   
  2175.   strip:    /* strip off sys! from front of path. */
  2176. + #ifndef HIDDENNET
  2177.       if (strncmp(FULLSYSNAME, hp->path, (len = strlen(FULLSYSNAME))) == 0
  2178.           && index(NETCHRS, hp->path[len]))
  2179.           (void) strcpy(hp->path, &(hp->path[len+1]));
  2180. + #endif /* HIDDENNET */
  2181.       lcase(hp->nbuf);
  2182.   
  2183.       /* Intuit the From: line if only a path was given. */
  2184. ***************
  2185. *** 214,219 ****
  2186. --- 218,225 ----
  2187.               break;
  2188.           case DISTRIBUTION:
  2189.               getfield(hp->distribution, sizeof(hp->distribution));
  2190. +             if (strcmp(hp->distribution, "net") == 0)
  2191. +                 hp->distribution[0] = '\0';
  2192.               break;
  2193.           case ORGANIZATION:
  2194.               getfield(hp->organization, sizeof(hp->organization));
  2195. Index: rfuncs.c
  2196. Prereq: 2.31
  2197. *** .d/rfuncs.c    Thu Oct 30 16:10:23 1986
  2198. --- rfuncs.c    Wed Dec 17 00:09:42 1986
  2199. ***************
  2200. *** 16,22 ****
  2201.    */
  2202.   
  2203.   #ifdef SCCSID
  2204. ! static char    *SccsId = "@(#)rfuncs.c    2.31    10/23/86";
  2205.   #endif /* SCCSID */
  2206.   
  2207.   /*LINTLIBRARY*/
  2208. --- 16,22 ----
  2209.    */
  2210.   
  2211.   #ifdef SCCSID
  2212. ! static char    *SccsId = "@(#)rfuncs.c    2.38    12/16/86";
  2213.   #endif /* SCCSID */
  2214.   
  2215.   /*LINTLIBRARY*/
  2216. ***************
  2217. *** 186,193 ****
  2218.    * we write it out.
  2219.    */
  2220.       if ((ngsize-minartno) > BITMAPSIZE) {
  2221. !         /* This should never happen */
  2222. !         (void) xerror("Bitmap not large enough for newsgroup %s", groupdir);
  2223.       }
  2224.   
  2225.       cur = 0;
  2226. --- 186,197 ----
  2227.    * we write it out.
  2228.    */
  2229.       if ((ngsize-minartno) > BITMAPSIZE) {
  2230. !         /* resize the bitmap array */
  2231. !         (void) free (bitmap);
  2232. !         BITMAPSIZE = 8 * (((ngsize - minartno) + 7) / 8);
  2233. !         bitmap = malloc((unsigned)BITMAPSIZE/8);
  2234. !         if (bitmap == NULL)
  2235. !             xerror("Can't malloc bitmap");
  2236.       }
  2237.   
  2238.       cur = 0;
  2239. ***************
  2240. *** 698,701 ****
  2241. --- 702,844 ----
  2242.       }
  2243.       (void) fclose(nfp);
  2244.   #endif /* SORTACTIVE */
  2245. + }
  2246. + #if defined(BSD4_2) || defined(BSD4_1C)
  2247. + #include <sys/dir.h>
  2248. + # else
  2249. + #include "ndir.h"
  2250. + #endif
  2251. + #include <errno.h>
  2252. + /*
  2253. +  * Routine to display header lines for all articles in newsgroup. If the flag
  2254. +  * argument is FALSE then only articles which are not marked as read in the
  2255. +  * bitmap will be displayed. This routine makes no attempt to determine if
  2256. +  * the article is in multiple groups and therefore should not be displayed at
  2257. +  * this time. 
  2258. +  */
  2259. + static int *lg_array = NULL;
  2260. + static int *lg_entry;
  2261. + static int lg_max = 0;
  2262. + static int int_sig;
  2263. + extern int errno;
  2264. + lg_cmp(p1, p2)
  2265. + int *p1, *p2;
  2266. + {
  2267. +     return *p1 > *p2;
  2268. + }
  2269. + list_group(lgroup, displines, flag, pngsize)
  2270. + char *lgroup;
  2271. + int displines, flag;
  2272. + long pngsize;
  2273. + {
  2274. +     char *briefdate();
  2275. +     struct hbuf hh;
  2276. +     register DIR *dirp;
  2277. +     register struct direct *dir;
  2278. +     register FILE *fp_art;
  2279. +     int i;
  2280. +     int entries;
  2281. +     unsigned int alloc_size;
  2282. +     int (*old_sig) ();
  2283. +     extern lg_trap();
  2284. +     char *gets();
  2285. +     /* This should get the numbers from the active file XXX */
  2286. +     if ((dirp = opendir(dirname(lgroup))) == NULL) {
  2287. +         printf("Can't open %s\r\n", dirname(lgroup));
  2288. +         return;
  2289. +     }
  2290. +     entries = 0;
  2291. +     if (lg_array == NULL) {
  2292. +         lg_max = 50;
  2293. +         alloc_size = lg_max * sizeof(int);
  2294. +         lg_array = (int *) malloc(alloc_size);
  2295. +     }
  2296. +     while ((dir = readdir(dirp)) != NULL) {
  2297. +         if (dir->d_ino == 0)
  2298. +             continue;
  2299. +         i = atoi(dir->d_name);
  2300. +         if ((i < 1) || (i > pngsize))
  2301. +             continue;
  2302. +         if (flag == FALSE) {
  2303. +             if (get(i) == 0)
  2304. +                 continue;
  2305. +         }
  2306. +         if (++entries > lg_max) {
  2307. +             lg_max += 50;
  2308. +             alloc_size = lg_max * sizeof(int);
  2309. +             lg_array = (int *) realloc((char *) lg_array, alloc_size);
  2310. +         }
  2311. +         lg_array[entries - 1] = i;
  2312. +     }
  2313. +     if (entries == lg_max) {
  2314. +         lg_max++;
  2315. +         alloc_size = lg_max * sizeof(int);
  2316. +         lg_array = (int *) realloc((char *) lg_array, alloc_size);
  2317. +     }
  2318. +     qsort(lg_array, entries, sizeof *lg_array, lg_cmp);
  2319. +     lg_array[entries] = 0;
  2320. +     int_sig = 0;
  2321. +     old_sig = signal(SIGINT, lg_trap);
  2322. +     hh.unrec[0] = NULL;
  2323. +     for (lg_entry = lg_array; *lg_entry != 0 && int_sig == 0; lg_entry++) {
  2324. +         (void) sprintf(filename, "%s/%d", dirname(lgroup), *lg_entry);
  2325. +         fp_art = fopen(filename, "r");
  2326. +         if (fp_art == NULL)
  2327. +             continue;
  2328. +         if (hread(&hh, fp_art, TRUE) == NULL) {
  2329. +             (void) fclose(fp_art);
  2330. +             continue;
  2331. +         }
  2332. +         printf("%5d %-20.20s %-13s  %s\r\n",
  2333. +                *lg_entry, hh.from,
  2334. +                briefdate(hh.subdate), hh.title);
  2335. +         for (i = 0; i < displines;) {
  2336. +             if (fgets(bfr, LBUFLEN, fp_art) == NULL) {
  2337. +                 break;
  2338. +             }
  2339. +             if ((bfr[0] == '\n') || (bfr[0] == '>')) {
  2340. +                 continue;
  2341. +             }
  2342. +             printf("%s", bfr);
  2343. +             i++;
  2344. +         }
  2345. +         (void) fclose(fp_art);
  2346. +     }
  2347. +     (void) fflush(stdout);
  2348. +     closedir(dirp);
  2349. +     (void) signal(SIGINT, old_sig);    /* restore to old value */
  2350. +     printf("[Press RETURN to continue]");
  2351. +     (void) fflush(stdout);
  2352. +     while (TRUE) {
  2353. +         errno = 0;
  2354. +         i = getchar();
  2355. +         if (errno == EINTR)
  2356. +             continue;
  2357. +         if (i == '\n' || i == '\r')
  2358. +             break;
  2359. +         if (i == EOF)
  2360. +             break;
  2361. +         if (i == '\4')
  2362. +             break;
  2363. +     }
  2364. +     (void) free(lg_array);
  2365. + }
  2366. + lg_trap(code)
  2367. + int code;
  2368. + {
  2369. +     int_sig = 1;
  2370. +     (void) signal(code, lg_trap);    /* reset signal */
  2371.   }
  2372.  
  2373. Index: Makefile.dst
  2374. Prereq: 1.19
  2375. *** .d/Makefile.dst    Fri Nov 21 16:05:09 1986
  2376. --- Makefile.dst    Tue Dec 16 17:47:05 1986
  2377. ***************
  2378. *** 1,4 ****
  2379. ! # '@(#)Makefile.dst    1.19    11/21/86'
  2380.   # Generic Makefile.
  2381.   # This is converted to USG/v7/etc by localize.sh
  2382.   # which should at least be a copy of localize.v7 or localize.usg
  2383. --- 1,4 ----
  2384. ! # '@(#)Makefile.dst    1.21    12/16/86'
  2385.   # Generic Makefile.
  2386.   # This is converted to USG/v7/etc by localize.sh
  2387.   # which should at least be a copy of localize.v7 or localize.usg
  2388. ***************
  2389. *** 57,62 ****
  2390. --- 57,63 ----
  2391.   #BSD4_1 LIBS = -ldbm -ljobs
  2392.   
  2393.   TERMLIB = -ltermlib
  2394. + FIXACTIVE =
  2395.   
  2396.   #VMS TERMLIB = -ltrmlib
  2397.   #VMS LIBS = -ldbm
  2398. ***************
  2399. *** 64,69 ****
  2400. --- 65,71 ----
  2401.   #VMS MISC = uname.o
  2402.   #VMS LINTFLAGS = -chba -DDBM -DVMS ${DEFS}
  2403.   #VMS VFORK=
  2404. + #VMS FIXACTIVE = /etc/vmstounix $(LIBDIR)/active
  2405.   
  2406.   #V7 MISC = uname.o
  2407.   #USG MISC = ftime.o
  2408. ***************
  2409. *** 182,188 ****
  2410.       $(CC) $(CFLAGS) $(HOMENAME) -c ifuncs.c
  2411.   
  2412.   iextern.o:  iextern.c iparams.h defs.h params.h Makefile header.h
  2413. !     $(CC) $(CFLAGS) -c iextern.c
  2414.   
  2415.   postnews: $(POBJECTS)
  2416.       $(CC) $(CFLAGS) $(LFLAGS) $(POBJECTS) -o postnews
  2417. --- 184,190 ----
  2418.       $(CC) $(CFLAGS) $(HOMENAME) -c ifuncs.c
  2419.   
  2420.   iextern.o:  iextern.c iparams.h defs.h params.h Makefile header.h
  2421. !     $(CC) $(CFLAGS) $(HOMENAME) -c iextern.c
  2422.   
  2423.   postnews: $(POBJECTS)
  2424.       $(CC) $(CFLAGS) $(LFLAGS) $(POBJECTS) -o postnews
  2425. ***************
  2426. *** 271,278 ****
  2427.   process.o:  process.c rparams.h defs.h params.h header.h Makefile
  2428.       $(CC) $(CFLAGS) -c process.c
  2429.   
  2430. ! checknews:  checknews.o process.o cpathinit.o
  2431. !     $(CC) $(LFLAGS) checknews.o process.o cpathinit.o -o checknews
  2432.   #VMS     mv checknews.exe checknews
  2433.   
  2434.   sendbatch: sendbatch.sh Makefile
  2435. --- 273,280 ----
  2436.   process.o:  process.c rparams.h defs.h params.h header.h Makefile
  2437.       $(CC) $(CFLAGS) -c process.c
  2438.   
  2439. ! checknews:  checknews.o process.o cpathinit.o rextern.o
  2440. !     $(CC) $(LFLAGS) checknews.o process.o cpathinit.o rextern.o -o checknews
  2441.   #VMS     mv checknews.exe checknews
  2442.   
  2443.   sendbatch: sendbatch.sh Makefile
  2444. ***************
  2445. *** 283,288 ****
  2446. --- 285,291 ----
  2447.   
  2448.   rmgroup: rmgroup.sh Makefile
  2449.       sed -e "s%LIBDIR%$(LIBDIR)%g" \
  2450. +      -e "s%FIXACTIVE%$(FIXACTIVE)%g" \
  2451.        -e "s%SPOOLDIR%$(SPOOLDIR)%g" rmgroup.sh > rmgroup
  2452.   #VMS     /etc/unixtovms rmgroup
  2453.   
  2454. Index: makeactive.sh
  2455. Prereq: 1.22
  2456. *** .d/makeactive.sh    Thu Oct 30 16:10:33 1986
  2457. --- makeactive.sh    Wed Dec 17 00:09:41 1986
  2458. ***************
  2459. *** 1,6 ****
  2460.   : "Create active file and newsgroup hierarchy for new machine"
  2461.   : "Usage: sh makeactive.sh LIBDIR SPOOLDIR NEWSUSR NEWSGRP"
  2462. ! : '@(#)makeactive    1.22    10/29/86'
  2463.   LIBDIR=$1
  2464.   SPOOLDIR=$2
  2465.   NEWSUSR=$3
  2466. --- 1,6 ----
  2467.   : "Create active file and newsgroup hierarchy for new machine"
  2468.   : "Usage: sh makeactive.sh LIBDIR SPOOLDIR NEWSUSR NEWSGRP"
  2469. ! : '@(#)makeactive    1.23    12/16/86'
  2470.   LIBDIR=$1
  2471.   SPOOLDIR=$2
  2472.   NEWSUSR=$3
  2473. ***************
  2474. *** 7,144 ****
  2475.   NEWSGRP=$4
  2476.   cat <<"E_O_F" > /tmp/$$groups
  2477.   general    Articles that should be read by everyone on your local system
  2478. - net.ai            Artificial intelligence discussions.
  2479. - net.announce.arpa-internet    Announcements from the Arpa world
  2480. - net.arch        Computer architecture.
  2481. - net.audio        High fidelity audio.
  2482. - net.auto        Automobiles, automotive products and laws.
  2483. - net.auto.tech        Technical aspects of automobiles, et. al.
  2484. - net.aviation        Aviation rules, means, and methods.
  2485. - net.bicycle        Bicycles, related products and laws.
  2486. - net.books        Books of all genres, shapes, and sizes.
  2487. - net.bugs        General bug reports and fixes.
  2488. - net.bugs.2bsd        Reports of UNIX* version 2BSD related bugs.
  2489. - net.bugs.4bsd        Reports of UNIX version 4BSD related bugs.
  2490. - net.bugs.usg        Reports of USG (System III, V, etc.) bugs.
  2491. - net.bugs.uucp        Reports of UUCP related bugs.
  2492. - net.bugs.v7        Reports of UNIX V7 related bugs.
  2493. - net.cog-eng        Cognitive engineering.
  2494. - net.comics        The funnies, old and new.
  2495. - net.cooks        Food, cooking, cookbooks, and recipes.
  2496. - net.cse            Computer science education.
  2497. - net.cycle        Motorcycles and related products and laws.
  2498. - net.database        Database and data management issues and theory.
  2499. - net.dcom        Data communications hardware and software.
  2500. - net.decus        DEC* Users' Society newsgroup.
  2501. - net.emacs        EMACS editors of different flavors.
  2502. - net.eunice        The SRI Eunice system.
  2503. - net.games        Games and computer games.
  2504. - net.games.board        Discussion and hints on board games.
  2505. - net.games.chess        Chess & computer chess.
  2506. - net.games.emp        Discussion and hints about Empire.
  2507. - net.games.frp        Discussion about Fantasy Role Playing games.
  2508. - net.games.go        Discussion about Go.
  2509. - net.games.hack        Discussion, hints, etc. about the Hack game.
  2510. - net.games.pbm        Discussion about Play by Mail games.
  2511. - net.games.rogue        Discussion and hints about Rogue.
  2512. - net.games.trivia    Discussion about trivia.
  2513. - net.games.video        Discussion about video games.
  2514. - net.garden        Gardening, methods and results.
  2515. - net.graphics        Computer graphics, art, animation, image processing,
  2516. - net.ham-radio        Amateur Radio practices, contests, events, rules, etc.
  2517. - net.ham-radio.packet    Discussion about packet radio setups.
  2518. - net.info-terms        All sorts of terminals.
  2519. - net.internat        Discussion about international standards
  2520. - net.jokes        Jokes and the like.  May be somewhat offensive.
  2521. - net.jokes.d        Discussions on the content of net.jokes articles
  2522. - net.lan            Local area network hardware and software.
  2523. - net.lang        Different computer languages.
  2524. - net.lang.ada        Discussion about Ada*.
  2525. - net.lang.apl        Discussion about APL.
  2526. - net.lang.c        Discussion about C.
  2527. - net.lang.c++        The object-oriented C++ language.
  2528. - net.lang.f77        Discussion about FORTRAN.
  2529. - net.lang.forth        Discussion about Forth.
  2530. - net.lang.lisp        Discussion about LISP.
  2531. - net.lang.mod2        Discussion about Modula-2.
  2532. - net.lang.pascal        Discussion about Pascal.
  2533. - net.lang.prolog        Discussion about PROLOG.
  2534. - net.lang.st80        Discussion about Smalltalk 80.
  2535. - net.lsi            Large scale integrated circuits.
  2536. - net.mag            Magazine summaries, tables of contents, etc.
  2537. - net.mail        Proposed new mail/network standards.
  2538. - net.mail.headers    Gatewayed from the ARPA header-people list.
  2539. - net.micro        Micro computers of all kinds.
  2540. - net.micro.6809        Discussion about 6809's.
  2541. - net.micro.68k        Discussion about 68k's.
  2542. - net.micro.apple        Discussion about Apple micros.
  2543. - net.micro.amiga        Talk about the new Amiga micro.
  2544. - net.micro.atari8    Discussion about 8 bit Atari micros.
  2545. - net.micro.atari16    Discussion about 16 bit Atari micros.
  2546. - net.micro.att        Discussions about AT&T microcomputers 
  2547. - net.micro.cbm        Discussion about Commodore micros.
  2548. - net.micro.cpm        Discussion about the CP/M operating system.
  2549. - net.micro.hp        Discussion about Hewlett/Packard's.
  2550. - net.micro.mac        Material about the Apple Macintosh & Lisa
  2551. - net.micro.ns32k        National Semiconductor 32000 series chips
  2552. - net.micro.pc        Discussion about IBM personal computers.
  2553. - net.micro.ti        Discussion about Texas Instruments.
  2554. - net.micro.trs-80    Discussion about TRS-80's.
  2555. - net.movies        Reviews and discussions of movies.
  2556. - net.music        Music lovers' group.
  2557. - net.music.classical    Discussion about classical music.
  2558. - net.music.folk        Folks discussing folk music of various sorts
  2559. - net.music.gdead        A group for (Grateful) Dead-heads
  2560. - net.music.makers    For performers and their discussions.
  2561. - net.music.synth        Synthesizers and computer music
  2562. - net.news        Discussions of USENET itself.
  2563. - net.news.adm        Comments directed to news administrators.
  2564. - net.news.b        Discussion about B news software.
  2565. - net.news.config        Postings of system down times and interruptions.
  2566. - net.news.group        Discussions and lists of newsgroups
  2567. - net.news.newsite    Postings of new site announcements.
  2568. - net.news.notes        Notesfile software from the Univ. of Illinois.
  2569. - net.news.sa        Comments directed to system administrators.
  2570. - net.news.stargate    Discussion about satellite transmission of news.
  2571. - net.periphs        Peripheral devices.
  2572. - net.pets        Pets, pet care, and household animals in general.
  2573. - net.poems        For the posting of poems.
  2574. - net.puzzle        Puzzles, problems, and quizzes.
  2575. - net.railroad        Real and model train fans' newsgroup.
  2576. - net.rec            Recreational/participant sports.
  2577. - net.rec.birds        Hobbyists interested in bird watching.
  2578. - net.rec.boat        Hobbyists interested in boating.
  2579. - net.rec.bridge        Hobbyists interested in bridge.
  2580. - net.rec.nude        Hobbyists interested in naturist/nudist activities.
  2581. - net.rec.photo        Hobbyists interested in photography.
  2582. - net.rec.scuba        Hobbyists interested in SCUBA diving.
  2583. - net.rec.ski        Hobbyists interested in skiing.
  2584. - net.rec.skydive        Hobbyists interested in skydiving.
  2585. - net.rec.wood        Hobbyists interested in woodworking.
  2586. - net.sf-lovers        Science fiction lovers' newsgroup.
  2587.   net.sources        For the posting of software packages & documentation.
  2588.   net.sources.bugs    For bug fixes and features discussion
  2589. - net.sources.d        For any discussion on net.sources postings.
  2590.   net.sources.games    Postings of recreational software
  2591.   net.sources.mac        Software for the Apple Macintosh
  2592. - net.sport        Spectator sports.
  2593. - net.sport.baseball    Discussion about baseball.
  2594. - net.sport.football    Discussion about football.
  2595. - net.sport.hockey    Discussion about hockey.
  2596. - net.sport.hoops        Discussion about basketball.
  2597. - net.startrek        Star Trek, the TV show and the movies.
  2598. - net.text        Text processing.
  2599. - net.travel        Traveling all over the world.
  2600. - net.tv            The boob tube, its history, and past and current shows.
  2601. - net.tv.drwho        Discussion about Dr. Who.
  2602. - net.tv.soaps        Postings about soap operas.
  2603. - net.unix        UNIX neophytes group.
  2604. - net.unix-wizards    Discussions, bug reports, and fixes on and for UNIX.
  2605. - net.usenix        USENIX Association events and announcements.
  2606. - net.veg            Vegetarians.
  2607. - net.video        Video and video components.
  2608. - net.wines        Wines and spirits.
  2609. - net.wobegon        "A Prairie Home Companion" radio show discussion.
  2610.   mod.announce        General announcements of interest to all. (Moderated)
  2611.   mod.announce.newusers    Explanatory postings for new users. (Moderated)
  2612.   mod.ai            Discussions about Artificial Intelligence (Moderated)
  2613. --- 7,16 ----
  2614. ***************
  2615. *** 162,175 ****
  2616.   mod.comp-soc        Discussion on the impact of technology on society. (Moderated)
  2617.   mod.graphics        Graphics software, hardware, theory, etc. (Moderated)
  2618.   mod.human-nets        Computer aided communications digest. (Moderated)
  2619. - mod.legal        Discussions of computers and the law. (Moderated)
  2620.   mod.mac            Apple Macintosh micros -- info, uses, but no programs. (Moderated)
  2621.   mod.mac.binaries    Encoded public domain programs in binary form. (Moderated)
  2622.   mod.mac.sources        Public domain software in source code format. (Moderated)
  2623. - mod.mag            Discussions on electronicly published "magazines" (Moderated)
  2624.   mod.mag.otherrealms    Edited science fiction and fantasy "magazine". (Moderated)
  2625.   mod.map            Various maps, including UUCP maps (Moderated)
  2626. - mod.movies        Reviews and discussion of movies (Moderated)
  2627.   mod.music        Reviews and discussion of things musical (Moderated)
  2628.   mod.music.gaffa        Progressive music discussions (e.g., Kate Bush). (Moderated)
  2629.   mod.newprod        Announcements of new products of interest to readers (Moderated)
  2630. --- 34,44 ----
  2631. ***************
  2632. *** 201,211 ****
  2633.   mod.std.unix        Discussion for the P1003 committee on UNIX (Moderated)
  2634.   mod.techreports        Announcements and lists of technical reports. (Moderated)
  2635.   mod.telecom        Telecommunications digest. (Moderated)
  2636. ! mod.test        Testing of moderated newsgroups -- no moderator (Moderated)
  2637. ! mod.vlsi        Very large scale integrated circuits. (Moderated)
  2638.   misc.consumers        Consumer interests, product reviews, etc.
  2639.   misc.consumers.house    Discussion about owning and maintaining a house.
  2640. ! misc.forsale        Items for sale.
  2641.   misc.headlines        Current interest: drug testing, terrorism, etc.
  2642.   misc.invest        Investments and the handling of money.
  2643.   misc.jobs        Job announcements, requests, etc.
  2644. --- 70,139 ----
  2645.   mod.std.unix        Discussion for the P1003 committee on UNIX (Moderated)
  2646.   mod.techreports        Announcements and lists of technical reports. (Moderated)
  2647.   mod.telecom        Telecommunications digest. (Moderated)
  2648. ! comp.ai            Artificial intelligence discussions.
  2649. ! comp.arch        Computer architecture.
  2650. ! comp.bugs.2bsd        Reports of UNIX* version 2BSD related bugs.
  2651. ! comp.bugs.4bsd        Reports of UNIX version 4BSD related bugs.
  2652. ! comp.bugs.misc        General bug reports and fixes (includes V7 & uucp).
  2653. ! comp.bugs.sys5        Reports of USG (System III, V, etc.) bugs.
  2654. ! comp.cog-eng        Cognitive engineering.
  2655. ! comp.databases        Database and data management issues and theory.
  2656. ! comp.dcom.lans        Local area network hardware and software.
  2657. ! comp.dcom.modems    Data communications hardware and software.
  2658. ! comp.edu        Computer science education.
  2659. ! comp.emacs        EMACS editors of different flavors.
  2660. ! comp.graphics        Computer graphics, art, animation, image processing,
  2661. ! comp.lang.ada        Discussion about Ada*.
  2662. ! comp.lang.apl        Discussion about APL.
  2663. ! comp.lang.c        Discussion about C.
  2664. ! comp.lang.c++        The object-oriented C++ language.
  2665. ! comp.lang.forth        Discussion about Forth.
  2666. ! comp.lang.fortran    Discussion about FORTRAN.
  2667. ! comp.lang.lisp        Discussion about LISP.
  2668. ! comp.lang.misc        Different computer languages not specifically listed.
  2669. ! comp.lang.modula2    Discussion about Modula-2.
  2670. ! comp.lang.pascal    Discussion about Pascal.
  2671. ! comp.lang.prolog    Discussion about PROLOG.
  2672. ! comp.lang.smalltalk    Discussion about Smalltalk 80.
  2673. ! comp.lsi        Large scale integrated circuits.
  2674. ! comp.mail.headers    Gatewayed from the ARPA header-people list.
  2675. ! comp.mail.misc        General discussions about computer mail.
  2676. ! comp.mail.uucp        Mail in the uucp network environment.
  2677. ! comp.misc        General topics about computers not covered elsewhere.
  2678. ! comp.org.decus        DEC* Users' Society newsgroup.
  2679. ! comp.org.usenix        USENIX Association events and announcements.
  2680. ! comp.os.cpm        Discussion about the CP/M operating system.
  2681. ! comp.os.eunice        The SRI Eunice system.
  2682. ! comp.os.misc        General OS-oriented discussion not carried elsewhere.
  2683. ! comp.periphs        Peripheral devices.
  2684. ! comp.sources.d        For any discussion of source postings.
  2685. ! comp.sources.wanted    Requests for software and fixes.
  2686. ! comp.std.internat    Discussion about international standards
  2687. ! comp.sys.amiga        Discussion about the Amiga micro.
  2688. ! comp.sys.apple        Discussion about Apple micros.
  2689. ! comp.sys.atari.8bit    Discussion about 8 bit Atari micros.
  2690. ! comp.sys.atari.st    Discussion about 16 bit Atari micros.
  2691. ! comp.sys.att        Discussions about AT&T microcomputers 
  2692. ! comp.sys.cbm        Discussion about Commodore micros.
  2693. ! comp.sys.dec        Discussions about DEC computer systems.
  2694. ! comp.sys.hp        Discussion about Hewlett/Packard's.
  2695. ! comp.sys.ibm.pc        Discussion about IBM personal computers.
  2696. ! comp.sys.intel        Disucussions about Intel systems and parts.
  2697. ! comp.sys.m6809        Discussion about 6809's.
  2698. ! comp.sys.m68k        Discussion about 68k's.
  2699. ! comp.sys.mac        Discussions about the Apple Macintosh & Lisa.
  2700. ! comp.sys.misc        Micro computers of all kinds.
  2701. ! comp.sys.nsc.32k    National Semiconductor 32000 series chips
  2702. ! comp.sys.tandy        Discussion about TRS-80's.
  2703. ! comp.sys.ti        Discussion about Texas Instruments.
  2704. ! comp.terminals        All sorts of terminals.
  2705. ! comp.text        Text processing.
  2706. ! comp.unix.questions    UNIX neophytes group.
  2707. ! comp.unix.wizards    Discussions, bug reports, and fixes on and for UNIX.
  2708. ! comp.unix.xenix        Discussion about the Xenix OS.
  2709.   misc.consumers        Consumer interests, product reviews, etc.
  2710.   misc.consumers.house    Discussion about owning and maintaining a house.
  2711. ! misc.forsale        Short, tasteful postings about items for sale.
  2712.   misc.headlines        Current interest: drug testing, terrorism, etc.
  2713.   misc.invest        Investments and the handling of money.
  2714.   misc.jobs        Job announcements, requests, etc.
  2715. ***************
  2716. *** 215,220 ****
  2717. --- 143,220 ----
  2718.   misc.taxes        Tax laws and advice.
  2719.   misc.test        For testing of network software.  Very boring.
  2720.   misc.wanted        Requests for things that are needed (NOT software).
  2721. + news.admin        Comments directed to news administrators.
  2722. + news.config        Postings of system down times and interruptions.
  2723. + news.groups        Discussions and lists of newsgroups
  2724. + news.lists        News-related statistics and lists (Moderated)
  2725. + news.misc        Discussions of USENET itself.
  2726. + news.newsites        Postings of new site announcements.
  2727. + news.software.b        Discussion about B news software.
  2728. + news.software.notes    Notesfile software from the Univ. of Illinois.
  2729. + news.stargate        Discussion about satellite transmission of news.
  2730. + news.sysadmin        Comments directed to system administrators.
  2731. + rec.arts.books        Books of all genres, shapes, and sizes.
  2732. + rec.arts.comics        The funnies, old and new.
  2733. + rec.arts.drwho        Discussion about Dr. Who.
  2734. + rec.arts.movies        Reviews and discussions of movies.
  2735. + rec.arts.poems        For the posting of poems.
  2736. + rec.arts.sf-lovers    Science fiction lovers' newsgroup.
  2737. + rec.arts.startrek    Star Trek, the TV show and the movies.
  2738. + rec.arts.tv        The boob tube, its history, and past and current shows.
  2739. + rec.arts.tv.soaps    Postings about soap operas.
  2740. + rec.arts.wobegon    "A Prairie Home Companion" radio show discussion.
  2741. + rec.audio        High fidelity audio.
  2742. + rec.autos        Automobiles, automotive products and laws.
  2743. + rec.autos.tech        Technical aspects of automobiles, et. al.
  2744. + rec.aviation        Aviation rules, means, and methods.
  2745. + rec.bicycles        Bicycles, related products and laws.
  2746. + rec.birds        Hobbyists interested in bird watching.
  2747. + rec.boats        Hobbyists interested in boating.
  2748. + rec.food.cooking    Food, cooking, cookbooks, and recipes.
  2749. + rec.food.drink        Wines and spirits.
  2750. + rec.food.veg        Vegetarians.
  2751. + rec.games.board        Discussion and hints on board games.
  2752. + rec.games.bridge    Hobbyists interested in bridge.
  2753. + rec.games.chess        Chess & computer chess.
  2754. + rec.games.empire    Discussion and hints about Empire.
  2755. + rec.games.frp        Discussion about Fantasy Role Playing games.
  2756. + rec.games.go        Discussion about Go.
  2757. + rec.games.hack        Discussion, hints, etc. about the Hack game.
  2758. + rec.games.misc        Games and computer games.
  2759. + rec.games.pbm        Discussion about Play by Mail games.
  2760. + rec.games.rogue        Discussion and hints about Rogue.
  2761. + rec.games.trivia    Discussion about trivia.
  2762. + rec.games.video        Discussion about video games.
  2763. + rec.gardens        Gardening, methods and results.
  2764. + rec.ham-radio        Amateur Radio practices, contests, events, rules, etc.
  2765. + rec.ham-radio.packet    Discussion about packet radio setups.
  2766. + rec.humor        Jokes and the like.  May be somewhat offensive.
  2767. + rec.humor.d        Discussions on the content of rec.humor articles
  2768. + rec.mag            Magazine summaries, tables of contents, etc.
  2769. + rec.misc        General topics about recreational/participant sports.
  2770. + rec.motorcycles        Motorcycles and related products and laws.
  2771. + rec.music.classical    Discussion about classical music.
  2772. + rec.music.folk        Folks discussing folk music of various sorts
  2773. + rec.music.gdead        A group for (Grateful) Dead-heads
  2774. + rec.music.makers    For performers and their discussions.
  2775. + rec.music.misc        Music lovers' group.
  2776. + rec.music.synth        Synthesizers and computer music
  2777. + rec.nude        Hobbyists interested in naturist/nudist activities.
  2778. + rec.pets        Pets, pet care, and household animals in general.
  2779. + rec.photo        Hobbyists interested in photography.
  2780. + rec.puzzles        Puzzles, problems, and quizzes.
  2781. + rec.railroad        Real and model train fans' newsgroup.
  2782. + rec.scuba        Hobbyists interested in SCUBA diving.
  2783. + rec.skiing        Hobbyists interested in skiing.
  2784. + rec.skydiving        Hobbyists interested in skydiving.
  2785. + rec.sport.baseball    Discussion about baseball.
  2786. + rec.sport.basketball    Discussion about basketball.
  2787. + rec.sport.football    Discussion about football.
  2788. + rec.sport.hockey    Discussion about hockey.
  2789. + rec.sport.misc        Spectator sports.
  2790. + rec.travel        Traveling all over the world.
  2791. + rec.video        Video and video components.
  2792. + rec.woodworking        Hobbyists interested in woodworking.
  2793.   sci.astro        Astronomy discussions and information.
  2794.   sci.bio            Biology and related sciences.
  2795.   sci.crypt        Different methods of data en/decryption.
  2796. ***************
  2797. *** 234,240 ****
  2798.   soc.culture.celtic    Group about Celtics (*not* basketball!)
  2799.   soc.culture.greek    Group about Greeks.
  2800.   soc.culture.indian    Group for discussion about India & things Indian
  2801. ! soc.culture.jewish    Group for discussion about Jewish culture
  2802.   soc.culture.misc    Group for discussion about other cultures
  2803.   soc.misc        Socially-oriented topics not in other groups.
  2804.   soc.motss        Issues pertaining to homosexuality.
  2805. --- 234,240 ----
  2806.   soc.culture.celtic    Group about Celtics (*not* basketball!)
  2807.   soc.culture.greek    Group about Greeks.
  2808.   soc.culture.indian    Group for discussion about India & things Indian
  2809. ! soc.culture.jewish    Group for discussion about Jewish culture & religion
  2810.   soc.culture.misc    Group for discussion about other cultures
  2811.   soc.misc        Socially-oriented topics not in other groups.
  2812.   soc.motss        Issues pertaining to homosexuality.
  2813. Index: rmgroup.sh
  2814. Prereq: 1.6
  2815. *** .d/rmgroup.sh    Thu Oct 30 16:12:15 1986
  2816. --- rmgroup.sh    Tue Dec 16 17:47:07 1986
  2817. ***************
  2818. *** 1,23 ****
  2819. ! : '@(#)rmgroup.sh    1.6    9/19/86'
  2820.   for group
  2821.   do
  2822. -     echo "Removing newsgroup $group"
  2823.       qgrp="`echo $group | sed 's/\./\\\./g'`"
  2824.       if
  2825.           grep -s "^$qgrp " LIBDIR/active
  2826.       then
  2827. !         cat << E_O_F >/tmp/$$
  2828. ! /^$qgrp[     ]/d
  2829. ! w
  2830. ! q
  2831. ! E_O_F
  2832. !         ed - LIBDIR/active < /tmp/$$
  2833. !         ed - LIBDIR/newsgroups < /tmp/$$
  2834.           dir=SPOOLDIR/"`echo $group | sed 's/\./\//g'`"
  2835. !         if [ -d $dir ]
  2836.           then
  2837. !             rm $dir/*
  2838. !             rmdir $dir
  2839.           else
  2840.               echo "$0: $dir: no spool directory" 2>&1
  2841.           fi
  2842. --- 1,17 ----
  2843. ! : '@(#)rmgroup.sh    1.8    12/16/86'
  2844.   for group
  2845.   do
  2846.       qgrp="`echo $group | sed 's/\./\\\./g'`"
  2847.       if
  2848.           grep -s "^$qgrp " LIBDIR/active
  2849.       then
  2850. !         echo "Removing newsgroup $group"
  2851. !         echo "/^$qgrp[     ]/d" >>/tmp/,edit$$
  2852.           dir=SPOOLDIR/"`echo $group | sed 's/\./\//g'`"
  2853. !         if test  -d $dir
  2854.           then
  2855. !             rm $dir/* >/dev/null 2>&1
  2856. !             echo "rmdir $dir >/dev/null 2>&1" >>/tmp/,rmdir$$
  2857.           else
  2858.               echo "$0: $dir: no spool directory" 2>&1
  2859.           fi
  2860. ***************
  2861. *** 25,29 ****
  2862.           echo "$0: $group: no such newsgroup" 2>&1
  2863.       fi
  2864.   done
  2865. ! rm -f /tmp/$$
  2866.   exit 0
  2867. --- 19,36 ----
  2868.           echo "$0: $group: no such newsgroup" 2>&1
  2869.       fi
  2870.   done
  2871. ! echo w >>/tmp/,edit$$
  2872. ! echo q >>/tmp/,edit$$
  2873. ! echo "Editing LIBDIR/active..."
  2874. ! ed - LIBDIR/active < /tmp/,edit$$
  2875. ! FIXACTIVE
  2876. ! echo "Editing LIBDIR/newsgroups..."
  2877. ! ed - LIBDIR/newsgroups < /tmp/,edit$$
  2878. ! echo "Removing directories..."
  2879. ! if test -s /tmp/,rmdir$$
  2880. ! then
  2881. !     sort +1r -o /tmp/,rmdir$$ /tmp/,rmdir$$
  2882. !     . /tmp/,rmdir$$
  2883. ! fi
  2884. ! rm -f /tmp/,edit$$ /tmp/,rmdir$$
  2885.   exit 0
  2886. Index: patchlevel.h
  2887. Prereq: 1
  2888. *** .d/patchlevel.h    Fri Nov 21 16:06:03 1986
  2889. --- patchlevel.h    Tue Dec 16 17:47:05 1986
  2890. ***************
  2891. *** 1,3 ****
  2892. ! #define    PATCHLEVEL    1
  2893.   
  2894. ! #define NEWS_VERSION   "B 2.11 11/15/86"
  2895. --- 1,3 ----
  2896. ! #define    PATCHLEVEL    2
  2897.   
  2898. ! #define NEWS_VERSION   "B 2.11 12/17/86"
  2899.