home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / UUCPBB21 / uucpbb21.lzh / UUCPBB21 / subscribe.c < prev    next >
Text File  |  1994-09-25  |  4KB  |  143 lines

  1. /*  subscribe.c   This program lets a user subscribe to one or more newgroups.
  2.     Copyright (C) 1990, 1993  Rick Adams and Bob Billson
  3.  
  4.     This file is part of the OS-9 UUCP package, UUCPbb.
  5.  
  6.     This program is free software; you can redistribute it and/or modify
  7.     it under the terms of the GNU General Public License as published by
  8.     the Free Software Foundation; either version 2 of the License, or
  9.     (at your option) any later version.
  10.  
  11.     This program is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.     GNU General Public License for more details.
  15.  
  16.     You should have received a copy of the GNU General Public License
  17.     along with this program; if not, write to the Free Software
  18.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  
  20.     The author of UUCPbb, Bob Billson, can be contacted at:
  21.     bob@kc2wz.bubble.org  or  uunet!kc2wz!bob  or  by snail mail:
  22.     21 Bates Way, Westfield, NJ 07090
  23. */
  24.  
  25. #define MAIN
  26.  
  27. #include "uucp.h"
  28.  
  29. char line[512];
  30.  
  31.  
  32. main (argc, argv)
  33. int argc;
  34. char *argv[];
  35. {
  36.      register int i;
  37.      char *p;
  38.  
  39.      if (argc < 2
  40.          ||  (argc >= 2  &&  (argv[1][0] == '-'  && argv[1][1] == '?')))
  41.        {
  42.           usage();
  43.        }
  44.  
  45.      if ((homedir = getenv ("HOME")) != NULL)
  46.           homedir = strdup (homedir);
  47.      else
  48.           fatal ("can't get HOME environment");
  49.  
  50.      p = line;
  51. #ifdef _OSK
  52.      sprintf (p, "%s", homedir);
  53. #else
  54.      sprintf (p, "%s/%s", homedir, uudir);
  55. #endif
  56.  
  57.      if (chdir (p) == -1)
  58.        {
  59. #ifdef _OSK
  60.           sprintf (p, "can't change to %s", homedir);
  61. #else
  62.           sprintf (p, "can't change to %s/%s", homedir, uudir);
  63. #endif
  64.           fatal (p);
  65.        }
  66.  
  67.      for (i = 1; i < argc; i++)
  68.           subscribe (argv[i]);
  69.  
  70.      exit (0);
  71. }
  72.  
  73.  
  74.  
  75. int subscribe (newsgroup)
  76. char *newsgroup;
  77. {
  78.      register char *p;
  79.      FILE *infile, *outfile;
  80.      char group[512], flag, articles[512], newnewsrc[15];
  81.      char *newsrc = _NEWSRC;
  82.  
  83.      p = line;
  84.      sprintf (newnewsrc, "new.%s", newsrc);
  85.  
  86.      if ((infile = fopen (newsrc, "r")) == NULL)
  87.        {
  88.           sprintf (p, "can't open %s file", newsrc);
  89.           fatal (p);
  90.        }
  91.  
  92.      if ((outfile = fopen (newnewsrc, "w")) == NULL)
  93.        {
  94.           sprintf (p, "can't create %s", newnewsrc);
  95.           fatal (p);
  96.        }
  97.  
  98.      while (fgets (p, sizeof (line), infile) != NULL)
  99.        {
  100.           *articles = '\0';
  101.           sscanf (p, "%[^!:]%c %[^\n]\n", group, &flag, articles);
  102.  
  103.           if ((strcmp (newsgroup, "all") == 0)
  104.                || (strcmp (newsgroup, group) == 0))
  105.             {
  106.                if (flag == ':')
  107.                     printf ("Newsgroup %s is already subscribed.\n", group);
  108.                else
  109.                  {
  110.                     printf ("Newsgroup %s is now subscribed.\n", group);
  111.                     flag = ':';
  112.                  }
  113.             }
  114.                fprintf (outfile, "%s%c %s\n", group, flag, articles);
  115.        }
  116.  
  117.      fclose (infile);
  118.      fclose (outfile);
  119.      filemove (newnewsrc, newsrc);
  120. }
  121.  
  122.  
  123.  
  124. int fatal (msg)
  125. char *msg;
  126. {
  127.      fprintf (stderr, "subscribe: %s...error %d\n", msg, errno);
  128.      exit (0);
  129. }
  130.  
  131.  
  132.  
  133. int usage()
  134. {
  135.      fputs ("subscribe: subscribe to Usenet newsgroups\n\n", stderr);
  136.      fputs ("usage: subscribe <newsgroup> [newsgroup...]\n", stderr);
  137.      fputs ("       if <newsgroup> is 'all', all newsgroups are subscribed to\n\n", stderr);
  138.      fprintf (stderr, "v%s (%s) This is free software released under the GNU General Public\n",
  139.                       version, VERDATE);
  140.      fputs ("License.  Please send suggestions/bug reports to:  bob@kc2wz.bubble.org\n", stderr);
  141.      exit (0);
  142. }
  143.